From 0272e12ea5326fbc6209bb397e19ac5cfb89c196 Mon Sep 17 00:00:00 2001 From: Ted Senft Date: Thu, 8 Aug 2024 08:37:02 -0400 Subject: [PATCH] Multiple bugfixes and configurable void air - Change machine color to be actual MachineColor, and take either hex or int values - Fix? broken particle textures on machine blocks - Add relocation not supported tag to several blocks (walls, bound machines) - Disable test command - Change allow-outside config to not damage players - this is now handled by a new setting for applying damage - Poison effect on void air changed to confusion and movement slowdown - Fix machines not dropping with their [dyed] colors - Reset player tracking when they leave the Compact dimension --- .../api/dimension/CompactDimension.java | 6 +- .../api/item/component/MachineComponents.java | 7 ++- .../machines/api/machine/MachineColor.java | 11 +++- .../machines/api/room/RoomInstance.java | 3 +- .../api/room/registration/IRoomBuilder.java | 6 +- .../StateGenerator.java | 1 + .../tags/BlockTagGenerator.java | 57 +++++++++++-------- neoforge-main/build.gradle.kts | 6 +- .../machines/{config => }/CommonConfig.java | 2 +- .../machines/CompactMachinesCommon.java | 3 +- .../client/machine/MachineColors.java | 5 +- .../machines/command/Commands.java | 30 +++++----- .../subcommand/CMGiveMachineSubcommand.java | 3 +- .../subcommand/CMRebindSubcommand.java | 2 +- .../subcommand/CMTeleportSubcommand.java | 2 +- .../subcommand/CMUnbindSubcommand.java | 2 +- .../command/subcommand/SpawnSubcommand.java | 2 +- .../machines/dimension/VoidAirBlock.java | 41 ++++++++++--- .../machines/machine/MachineColors.java | 9 +++ .../machines/machine/Machines.java | 32 +++++------ .../block/BoundCompactMachineBlock.java | 2 +- .../block/BoundCompactMachineBlockEntity.java | 10 +++- .../machine/block/CompactMachineBlock.java | 10 +++- .../block/UnboundCompactMachineBlock.java | 2 +- .../block/UnboundCompactMachineEntity.java | 7 +++ .../item/UnboundCompactMachineItem.java | 8 ++- .../machine/ClientMachinePacketHandler.java | 3 +- .../machine/MachineColorSyncPacket.java | 7 ++- .../machines/room/NewRoomBuilder.java | 9 ++- .../machines/room/RoomEventHandler.java | 20 +++++++ .../compactmods/machines/room/RoomHelper.java | 1 - .../dev/compactmods/machines/room/Rooms.java | 1 + .../room/graph/node/RoomRegistrationNode.java | 9 +-- .../{config => server}/ServerConfig.java | 14 ++++- .../compactmods/machines/util/PlayerUtil.java | 7 ++- settings.gradle.kts | 8 +-- 36 files changed, 234 insertions(+), 114 deletions(-) rename neoforge-main/src/main/java/dev/compactmods/machines/{config => }/CommonConfig.java (94%) create mode 100644 neoforge-main/src/main/java/dev/compactmods/machines/machine/MachineColors.java rename neoforge-main/src/main/java/dev/compactmods/machines/{config => server}/ServerConfig.java (86%) diff --git a/core-api/src/main/java/dev/compactmods/machines/api/dimension/CompactDimension.java b/core-api/src/main/java/dev/compactmods/machines/api/dimension/CompactDimension.java index dd052598..b7041053 100644 --- a/core-api/src/main/java/dev/compactmods/machines/api/dimension/CompactDimension.java +++ b/core-api/src/main/java/dev/compactmods/machines/api/dimension/CompactDimension.java @@ -50,6 +50,10 @@ public static DimensionDataStorage getDataStorage(@NotNull LevelStorageSource.Le } public static boolean isLevelCompact(Level level) { - return level.dimension().equals(LEVEL_KEY); + return isLevelCompact(level.dimension()); + } + + public static boolean isLevelCompact(ResourceKey level) { + return level.equals(LEVEL_KEY); } } diff --git a/core-api/src/main/java/dev/compactmods/machines/api/item/component/MachineComponents.java b/core-api/src/main/java/dev/compactmods/machines/api/item/component/MachineComponents.java index 053a5164..525b4968 100644 --- a/core-api/src/main/java/dev/compactmods/machines/api/item/component/MachineComponents.java +++ b/core-api/src/main/java/dev/compactmods/machines/api/item/component/MachineComponents.java @@ -1,6 +1,7 @@ package dev.compactmods.machines.api.item.component; import com.mojang.serialization.Codec; +import dev.compactmods.machines.api.machine.MachineColor; import net.minecraft.core.component.DataComponentType; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.resources.ResourceLocation; @@ -23,8 +24,8 @@ public interface MachineComponents { .persistent(ResourceLocation.CODEC) .networkSynchronized(ResourceLocation.STREAM_CODEC); - UnaryOperator> MACHINE_COLOR = (builder) -> builder - .persistent(Codec.INT) - .networkSynchronized(ByteBufCodecs.INT); + UnaryOperator> MACHINE_COLOR = (builder) -> builder + .persistent(MachineColor.CODEC) + .networkSynchronized(MachineColor.STREAM_CODEC); } diff --git a/core-api/src/main/java/dev/compactmods/machines/api/machine/MachineColor.java b/core-api/src/main/java/dev/compactmods/machines/api/machine/MachineColor.java index f0e29360..780b125d 100644 --- a/core-api/src/main/java/dev/compactmods/machines/api/machine/MachineColor.java +++ b/core-api/src/main/java/dev/compactmods/machines/api/machine/MachineColor.java @@ -6,6 +6,7 @@ import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; import net.minecraft.util.FastColor; +import net.minecraft.world.item.DyeColor; import java.util.Locale; @@ -18,7 +19,9 @@ public static MachineColor fromARGB(int argb) { return new MachineColor(red, green, blue); } - public static final Codec CODEC = Codec.STRING.comapFlatMap(str -> { + public static final Codec INT_CODEC = Codec.INT.xmap(MachineColor::fromARGB, MachineColor::rgb); + + public static final Codec HEX_CODEC = Codec.STRING.comapFlatMap(str -> { if (!str.startsWith("#")) { return DataResult.error(() -> "Not a color code: " + str); } else { @@ -35,8 +38,14 @@ public static MachineColor fromARGB(int argb) { } }, MachineColor::formatValue); + public static final Codec CODEC = Codec.withAlternative(HEX_CODEC, INT_CODEC); + public static final StreamCodec STREAM_CODEC = ByteBufCodecs.INT.map(MachineColor::fromARGB, MachineColor::rgb); + public static MachineColor fromDyeColor(DyeColor color) { + return MachineColor.fromARGB(color.getFireworkColor()); + } + public int rgb() { return FastColor.ARGB32.color(red, green, blue); } diff --git a/core-api/src/main/java/dev/compactmods/machines/api/room/RoomInstance.java b/core-api/src/main/java/dev/compactmods/machines/api/room/RoomInstance.java index 92cff9b1..502a38d7 100644 --- a/core-api/src/main/java/dev/compactmods/machines/api/room/RoomInstance.java +++ b/core-api/src/main/java/dev/compactmods/machines/api/room/RoomInstance.java @@ -1,11 +1,12 @@ package dev.compactmods.machines.api.room; +import dev.compactmods.machines.api.machine.MachineColor; import dev.compactmods.machines.api.room.spatial.IRoomBoundaries; import dev.compactmods.machines.api.room.spatial.IRoomChunks; import dev.compactmods.machines.api.room.spawn.IRoomSpawnManager; import java.util.function.Supplier; -public record RoomInstance(String code, int defaultMachineColor, IRoomBoundaries boundaries) { +public record RoomInstance(String code, MachineColor defaultMachineColor, IRoomBoundaries boundaries) { } diff --git a/core-api/src/main/java/dev/compactmods/machines/api/room/registration/IRoomBuilder.java b/core-api/src/main/java/dev/compactmods/machines/api/room/registration/IRoomBuilder.java index 8f81ea2d..553242cf 100644 --- a/core-api/src/main/java/dev/compactmods/machines/api/room/registration/IRoomBuilder.java +++ b/core-api/src/main/java/dev/compactmods/machines/api/room/registration/IRoomBuilder.java @@ -12,11 +12,7 @@ public interface IRoomBuilder { IRoomBuilder owner(UUID owner); - default IRoomBuilder defaultMachineColor(MachineColor color) { - return defaultMachineColor(color.rgb()); - } - - IRoomBuilder defaultMachineColor(int color); + IRoomBuilder defaultMachineColor(MachineColor color); RoomInstance build(); } diff --git a/neoforge-datagen/src/main/java/dev.compactmods.machines.datagen/StateGenerator.java b/neoforge-datagen/src/main/java/dev.compactmods.machines.datagen/StateGenerator.java index fff3c9d0..877571a6 100644 --- a/neoforge-datagen/src/main/java/dev.compactmods.machines.datagen/StateGenerator.java +++ b/neoforge-datagen/src/main/java/dev.compactmods.machines.datagen/StateGenerator.java @@ -26,6 +26,7 @@ protected void registerStatesAndModels() { // New machine block final var m = models .withExistingParent("block/machine/machine", mcLoc("block/block")) + .texture("particle", modLoc("block/machine/tint")) .texture("border", modLoc("block/machine/border")) .texture("tint", modLoc("block/machine/tint")) .texture("overlay", modLoc("block/machine/overlay")) diff --git a/neoforge-datagen/src/main/java/dev.compactmods.machines.datagen/tags/BlockTagGenerator.java b/neoforge-datagen/src/main/java/dev.compactmods.machines.datagen/tags/BlockTagGenerator.java index 66287d36..101a6161 100644 --- a/neoforge-datagen/src/main/java/dev.compactmods.machines.datagen/tags/BlockTagGenerator.java +++ b/neoforge-datagen/src/main/java/dev.compactmods.machines.datagen/tags/BlockTagGenerator.java @@ -2,11 +2,13 @@ import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.machine.MachineConstants; +import dev.compactmods.machines.dimension.Dimension; import dev.compactmods.machines.machine.Machines; import dev.compactmods.machines.room.Rooms; import net.minecraft.core.HolderLookup; import net.minecraft.data.PackOutput; import net.minecraft.tags.BlockTags; +import net.neoforged.neoforge.common.Tags; import net.neoforged.neoforge.common.data.BlockTagsProvider; import net.neoforged.neoforge.common.data.ExistingFileHelper; @@ -14,28 +16,35 @@ public class BlockTagGenerator extends BlockTagsProvider { - public BlockTagGenerator(PackOutput packOut, ExistingFileHelper files, CompletableFuture lookup) { - super(packOut, lookup, CompactMachines.MOD_ID, files); - } - - @Override - protected void addTags(HolderLookup.Provider provider) { - var breakableWall = Rooms.Blocks.BREAKABLE_WALL.get(); - var boundMachine = Machines.Blocks.BOUND_MACHINE.get(); - var unboundMachine = Machines.Blocks.UNBOUND_MACHINE.get(); - - tag(MachineConstants.MACHINE_BLOCK) - .add(boundMachine, unboundMachine); - - tag(MachineConstants.UNBOUND_MACHINE_BLOCK) - .add(unboundMachine); - - tag(BlockTags.MINEABLE_WITH_PICKAXE) - .add(breakableWall) - .add(boundMachine, unboundMachine); - - tag(BlockTags.NEEDS_IRON_TOOL) - .add(breakableWall) - .add(boundMachine, unboundMachine); - } + public BlockTagGenerator(PackOutput packOut, ExistingFileHelper files, CompletableFuture lookup) { + super(packOut, lookup, CompactMachines.MOD_ID, files); + } + + @Override + protected void addTags(HolderLookup.Provider provider) { + final var breakableWall = Rooms.Blocks.BREAKABLE_WALL.get(); + final var solidWall = Rooms.Blocks.SOLID_WALL.get(); + final var boundMachine = Machines.Blocks.BOUND_MACHINE.get(); + final var unboundMachine = Machines.Blocks.UNBOUND_MACHINE.get(); + final var voidAir = Dimension.BLOCK_MACHINE_VOID_AIR.get(); + + tag(MachineConstants.MACHINE_BLOCK) + .add(boundMachine, unboundMachine); + + tag(MachineConstants.UNBOUND_MACHINE_BLOCK) + .add(unboundMachine); + + tag(BlockTags.MINEABLE_WITH_PICKAXE) + .add(breakableWall) + .add(boundMachine, unboundMachine); + + tag(BlockTags.NEEDS_IRON_TOOL) + .add(breakableWall) + .add(boundMachine, unboundMachine); + + tag(Tags.Blocks.RELOCATION_NOT_SUPPORTED) + .add(boundMachine) + .add(solidWall) + .add(voidAir); + } } diff --git a/neoforge-main/build.gradle.kts b/neoforge-main/build.gradle.kts index 0e0eac89..87c6bed9 100644 --- a/neoforge-main/build.gradle.kts +++ b/neoforge-main/build.gradle.kts @@ -121,12 +121,16 @@ repositories { } } - maven("https://maven.pkg.github.com/compactmods/compactmachines-core") { + maven("https://maven.pkg.github.com/compactmods/feather") { name = "Github PKG Core" credentials { username = project.findProperty("gpr.user") as String? ?: System.getenv("GITHUB_ACTOR") password = project.findProperty("gpr.token") as String? ?: System.getenv("GITHUB_TOKEN") } + + content { + includeGroup("dev.compactmods") + } } maven("https://maven.blamejared.com/") { diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/config/CommonConfig.java b/neoforge-main/src/main/java/dev/compactmods/machines/CommonConfig.java similarity index 94% rename from neoforge-main/src/main/java/dev/compactmods/machines/config/CommonConfig.java rename to neoforge-main/src/main/java/dev/compactmods/machines/CommonConfig.java index 994bcad2..b94da2db 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/config/CommonConfig.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/CommonConfig.java @@ -1,4 +1,4 @@ -package dev.compactmods.machines.config; +package dev.compactmods.machines; import net.neoforged.neoforge.common.ModConfigSpec; diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/CompactMachinesCommon.java b/neoforge-main/src/main/java/dev/compactmods/machines/CompactMachinesCommon.java index 8323002c..828f52de 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/CompactMachinesCommon.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/CompactMachinesCommon.java @@ -3,8 +3,7 @@ import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.command.Commands; import dev.compactmods.machines.compat.InterModCompat; -import dev.compactmods.machines.config.CommonConfig; -import dev.compactmods.machines.config.ServerConfig; +import dev.compactmods.machines.server.ServerConfig; import dev.compactmods.machines.dimension.Dimension; import dev.compactmods.machines.dimension.WorldBorderFixer; import dev.compactmods.machines.machine.Machines; diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/client/machine/MachineColors.java b/neoforge-main/src/main/java/dev/compactmods/machines/client/machine/MachineColors.java index 1d34b65b..49e2908f 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/client/machine/MachineColors.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/client/machine/MachineColors.java @@ -11,7 +11,8 @@ public class MachineColors { public static final ItemColor ITEM = (stack, pTintIndex) -> { if (!stack.is(MachineConstants.MACHINE_ITEM)) return DEFAULT; - return pTintIndex == 0 ? stack.getOrDefault(Machines.DataComponents.MACHINE_COLOR, DEFAULT) : DEFAULT; + return pTintIndex == 0 ? stack.getOrDefault(Machines.DataComponents.MACHINE_COLOR, dev.compactmods.machines.machine.MachineColors.WHITE).rgb() + : DEFAULT; }; public static final BlockColor BLOCK = (state, level, pos, tintIndex) -> { @@ -20,7 +21,7 @@ public class MachineColors { var be = level.getBlockEntity(pos); if (be != null) - return tintIndex == 0 ? be.getData(Machines.Attachments.MACHINE_COLOR) : DEFAULT; + return tintIndex == 0 ? be.getData(Machines.Attachments.MACHINE_COLOR).rgb() : DEFAULT; return DEFAULT; }; diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/command/Commands.java b/neoforge-main/src/main/java/dev/compactmods/machines/command/Commands.java index 432751c0..30b6ce61 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/command/Commands.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/command/Commands.java @@ -44,21 +44,21 @@ public static void onCommandsRegister(final RegisterCommandsEvent event) { Commands.CM_COMMAND_ROOT.then(CMGiveMachineSubcommand.make()); Commands.CM_COMMAND_ROOT.then(SpawnSubcommand.make()); - CM_COMMAND_ROOT.then(net.minecraft.commands.Commands.literal("test").executes(ctx -> { - final var player = ctx.getSource().getPlayerOrException(); - - final var diamondAxe = new ItemStack(Items.DIAMOND_AXE); - - final var treecutter = new TreeCutterUpgrade(); - - final var upgrades = new RoomUpgradeList(List.of(treecutter)); - - diamondAxe.set(RoomUpgrades.UPGRADE_LIST_COMPONENT, upgrades); - - player.addItem(diamondAxe); - - return 0; - })); +// CM_COMMAND_ROOT.then(net.minecraft.commands.Commands.literal("test").executes(ctx -> { +// final var player = ctx.getSource().getPlayerOrException(); +// +// final var diamondAxe = new ItemStack(Items.DIAMOND_AXE); +// +// final var treecutter = new TreeCutterUpgrade(); +// +// final var upgrades = new RoomUpgradeList(List.of(treecutter)); +// +// diamondAxe.set(RoomUpgrades.UPGRADE_LIST_COMPONENT, upgrades); +// +// player.addItem(diamondAxe); +// +// return 0; +// })); event.getDispatcher().register(Commands.CM_COMMAND_ROOT); } diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMGiveMachineSubcommand.java b/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMGiveMachineSubcommand.java index 6aa701a0..c9f3b95b 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMGiveMachineSubcommand.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMGiveMachineSubcommand.java @@ -5,13 +5,12 @@ import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.exceptions.CommandSyntaxException; import dev.compactmods.machines.api.CompactMachines; -import dev.compactmods.machines.api.room.template.RoomTemplate; import dev.compactmods.machines.LoggingUtil; import dev.compactmods.machines.api.command.CommandTranslations; import dev.compactmods.machines.api.room.RoomTranslations; import dev.compactmods.machines.api.room.template.RoomTemplateHelper; import dev.compactmods.machines.command.argument.Suggestors; -import dev.compactmods.machines.config.ServerConfig; +import dev.compactmods.machines.server.ServerConfig; import dev.compactmods.machines.machine.Machines; import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.Commands; diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMRebindSubcommand.java b/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMRebindSubcommand.java index 4fe9aa11..aabb274e 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMRebindSubcommand.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMRebindSubcommand.java @@ -7,7 +7,7 @@ import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.machine.MachineTranslations; import dev.compactmods.machines.LoggingUtil; -import dev.compactmods.machines.config.ServerConfig; +import dev.compactmods.machines.server.ServerConfig; import dev.compactmods.machines.machine.block.BoundCompactMachineBlockEntity; import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.Commands; diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMTeleportSubcommand.java b/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMTeleportSubcommand.java index 6ef01a5f..864c8fb8 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMTeleportSubcommand.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMTeleportSubcommand.java @@ -10,7 +10,7 @@ import dev.compactmods.machines.api.room.RoomTranslations; import dev.compactmods.machines.api.room.history.RoomEntryPoint; import dev.compactmods.machines.command.argument.Suggestors; -import dev.compactmods.machines.config.ServerConfig; +import dev.compactmods.machines.server.ServerConfig; import dev.compactmods.machines.room.RoomHelper; import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.Commands; diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMUnbindSubcommand.java b/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMUnbindSubcommand.java index ea198ec6..a60f4dde 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMUnbindSubcommand.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/CMUnbindSubcommand.java @@ -6,7 +6,7 @@ import dev.compactmods.machines.LoggingUtil; import dev.compactmods.machines.api.dimension.CompactDimension; import dev.compactmods.machines.api.machine.MachineTranslations; -import dev.compactmods.machines.config.ServerConfig; +import dev.compactmods.machines.server.ServerConfig; import dev.compactmods.machines.machine.Machines; import dev.compactmods.machines.machine.block.BoundCompactMachineBlockEntity; import net.minecraft.commands.CommandSourceStack; diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/SpawnSubcommand.java b/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/SpawnSubcommand.java index 2ffaff53..6d4422ab 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/SpawnSubcommand.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/command/subcommand/SpawnSubcommand.java @@ -5,7 +5,7 @@ import com.mojang.brigadier.context.CommandContext; import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.command.CommandTranslations; -import dev.compactmods.machines.config.ServerConfig; +import dev.compactmods.machines.server.ServerConfig; import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.Commands; import net.minecraft.network.chat.Component; diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/dimension/VoidAirBlock.java b/neoforge-main/src/main/java/dev/compactmods/machines/dimension/VoidAirBlock.java index 4e580b4d..52fbcb59 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/dimension/VoidAirBlock.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/dimension/VoidAirBlock.java @@ -1,6 +1,8 @@ package dev.compactmods.machines.dimension; -import dev.compactmods.machines.config.ServerConfig; +import dev.compactmods.machines.api.dimension.CompactDimension; +import dev.compactmods.machines.room.Rooms; +import dev.compactmods.machines.server.ServerConfig; import dev.compactmods.machines.util.PlayerUtil; import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerPlayer; @@ -39,21 +41,44 @@ public boolean canHarvestBlock(BlockState state, BlockGetter level, BlockPos pos @Override public void entityInside(BlockState pState, Level pLevel, BlockPos pPos, Entity pEntity) { - if (ServerConfig.isAllowedOutsideOfMachine()) return; if (pLevel.isClientSide) return; + if (!CompactDimension.isLevelCompact(pLevel)) return; - // TODO: Configurable behavior if (pEntity instanceof ServerPlayer player) { - if (player.isCreative()) return; + // If players are allowed outside of machine bounds, early exit -- but damage them if configured + if (ServerConfig.isAllowedOutsideOfMachine()) { + tryDamagingAdventurousPlayer(pLevel, player); + return; + } - player.addEffect(new MobEffectInstance(MobEffects.POISON, 5 * 20)); - player.addEffect(new MobEffectInstance(MobEffects.BLINDNESS, 5 * 20)); - player.hurt(pLevel.damageSources().fellOutOfWorld(), 1); + tryDamagingAdventurousPlayer(pLevel, player); // FIXME - Achievement // PlayerUtil.howDidYouGetThere(player); - // player.getCapability(RoomCapabilities.ROOM_HISTORY).ifPresent(IRoomHistory::clear); PlayerUtil.teleportPlayerToRespawnOrOverworld(player.server, player); } } + + /** + * Attempts to inflict the bad effects on players that are touching a void air block. + * Does nothing to players that are in creative mode. + * + * @param pLevel + * @param player + */ + private static void tryDamagingAdventurousPlayer(Level pLevel, ServerPlayer player) { + if (player.isCreative()) return; + + if (ServerConfig.damagePlayersOutOfBounds()) { + if(!player.hasEffect(MobEffects.CONFUSION)) { + player.addEffect(new MobEffectInstance(MobEffects.CONFUSION, 5 * 20)); + player.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, 5 * 20)); + player.addEffect(new MobEffectInstance(MobEffects.BLINDNESS, 5 * 20)); + } + + if (player.getHealth() > 1) { + player.hurt(pLevel.damageSources().fellOutOfWorld(), player.getHealth() - 1); + } + } + } } diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/machine/MachineColors.java b/neoforge-main/src/main/java/dev/compactmods/machines/machine/MachineColors.java new file mode 100644 index 00000000..e5fa6cef --- /dev/null +++ b/neoforge-main/src/main/java/dev/compactmods/machines/machine/MachineColors.java @@ -0,0 +1,9 @@ +package dev.compactmods.machines.machine; + +import dev.compactmods.machines.api.machine.MachineColor; +import net.minecraft.util.CommonColors; + +public interface MachineColors { + + MachineColor WHITE = MachineColor.fromARGB(CommonColors.WHITE); +} diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/machine/Machines.java b/neoforge-main/src/main/java/dev/compactmods/machines/machine/Machines.java index fa489029..f47ede56 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/machine/Machines.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/machine/Machines.java @@ -1,6 +1,8 @@ package dev.compactmods.machines.machine; +import com.mojang.serialization.Codec; import dev.compactmods.machines.api.item.component.MachineComponents; +import dev.compactmods.machines.api.machine.MachineColor; import dev.compactmods.machines.api.machine.MachineConstants; import dev.compactmods.machines.api.room.template.RoomTemplate; import dev.compactmods.machines.CMRegistries; @@ -15,6 +17,7 @@ import net.minecraft.core.component.DataComponentType; import net.minecraft.nbt.IntTag; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.CommonColors; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.SoundType; @@ -71,7 +74,7 @@ static ItemStack unbound() { static ItemStack unboundColored(int color) { final var stack = UNBOUND_MACHINE.toStack(); - stack.set(Machines.DataComponents.MACHINE_COLOR, color); + stack.set(Machines.DataComponents.MACHINE_COLOR, MachineColor.fromARGB(color)); return stack; } @@ -80,6 +83,10 @@ static ItemStack boundToRoom(String roomCode) { } static ItemStack boundToRoom(String roomCode, int color) { + return boundToRoom(roomCode, MachineColor.fromARGB(color)); + } + + static ItemStack boundToRoom(String roomCode, MachineColor color) { ItemStack stack = BOUND_MACHINE.toStack(); stack.set(Machines.DataComponents.BOUND_ROOM_CODE, roomCode); stack.set(Machines.DataComponents.MACHINE_COLOR, color); @@ -91,7 +98,7 @@ static ItemStack forNewRoom(Holder.Reference templateHolder) { final var stack = UNBOUND_MACHINE.toStack(); stack.set(Machines.DataComponents.ROOM_TEMPLATE_ID, templateHolder.key().location()); - stack.set(Machines.DataComponents.MACHINE_COLOR, template.defaultMachineColor().rgb()); + stack.set(Machines.DataComponents.MACHINE_COLOR, template.defaultMachineColor()); return stack; } } @@ -113,12 +120,13 @@ static void prepare() { interface DataComponents { String KEY_ROOM_TEMPLATE = "room_template"; String KEY_ROOM_CODE = "room_code"; + String KEY_MACHINE_COLOR = "machine_color"; DeferredHolder, DataComponentType> BOUND_ROOM_CODE = CMRegistries.DATA_COMPONENTS .registerComponentType(KEY_ROOM_CODE, MachineComponents.BOUND_ROOM_CODE); - DeferredHolder, DataComponentType> MACHINE_COLOR = CMRegistries.DATA_COMPONENTS - .registerComponentType("machine_color", MachineComponents.MACHINE_COLOR); + DeferredHolder, DataComponentType> MACHINE_COLOR = CMRegistries.DATA_COMPONENTS + .registerComponentType(KEY_MACHINE_COLOR, MachineComponents.MACHINE_COLOR); DeferredHolder, DataComponentType> ROOM_TEMPLATE_ID = CMRegistries.DATA_COMPONENTS .registerComponentType(KEY_ROOM_TEMPLATE, MachineComponents.ROOM_TEMPLATE_ID); @@ -128,19 +136,9 @@ static void prepare() { } interface Attachments { - Supplier> MACHINE_COLOR = CMRegistries.ATTACHMENT_TYPES.register("machine_color", () -> AttachmentType - .builder(() -> 0xFFFFFFFF) - .serialize(new IAttachmentSerializer() { - @Override - public Integer read(IAttachmentHolder holder, IntTag tag, HolderLookup.Provider provider) { - return tag.getAsInt(); - } - - @Override - public @Nullable IntTag write(Integer attachment, HolderLookup.Provider provider) { - return IntTag.valueOf(attachment); - } - }) + Supplier> MACHINE_COLOR = CMRegistries.ATTACHMENT_TYPES.register("machine_color", () -> AttachmentType + .builder(() -> MachineColor.fromARGB(CommonColors.WHITE)) + .serialize(MachineColor.CODEC) .build()); static void prepare() { diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/BoundCompactMachineBlock.java b/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/BoundCompactMachineBlock.java index b37c3ae0..4a11d45a 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/BoundCompactMachineBlock.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/BoundCompactMachineBlock.java @@ -4,7 +4,7 @@ import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.shrinking.PSDTags; import dev.compactmods.machines.machine.config.EnumMachinePlayersBreakHandling; -import dev.compactmods.machines.config.ServerConfig; +import dev.compactmods.machines.server.ServerConfig; import dev.compactmods.machines.machine.Machines; import dev.compactmods.machines.room.RoomHelper; import dev.compactmods.machines.room.Rooms; diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/BoundCompactMachineBlockEntity.java b/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/BoundCompactMachineBlockEntity.java index b5f5d9e9..ff0a72fc 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/BoundCompactMachineBlockEntity.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/BoundCompactMachineBlockEntity.java @@ -4,6 +4,7 @@ import com.mojang.serialization.MapCodec; import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.machine.block.IBoundCompactMachineBlockEntity; +import dev.compactmods.machines.machine.MachineColors; import dev.compactmods.machines.machine.Machines; import net.minecraft.core.BlockPos; import net.minecraft.core.GlobalPos; @@ -38,18 +39,25 @@ public BoundCompactMachineBlockEntity(BlockPos pos, BlockState state) { protected void applyImplicitComponents(DataComponentInput components) { super.applyImplicitComponents(components); this.roomCode = components.get(Machines.DataComponents.BOUND_ROOM_CODE); + + final var desiredColor = components.get(Machines.DataComponents.MACHINE_COLOR); + if (desiredColor != null) { + this.setData(Machines.Attachments.MACHINE_COLOR, desiredColor); + } } @Override protected void collectImplicitComponents(DataComponentMap.Builder builder) { super.collectImplicitComponents(builder); builder.set(Machines.DataComponents.BOUND_ROOM_CODE, this.roomCode); + builder.set(Machines.DataComponents.MACHINE_COLOR, this.getData(Machines.Attachments.MACHINE_COLOR)); } @Override public void removeComponentsFromTag(CompoundTag tag) { super.removeComponentsFromTag(tag); tag.remove(Machines.DataComponents.KEY_ROOM_CODE); + tag.remove(Machines.DataComponents.KEY_MACHINE_COLOR); } @Override @@ -136,7 +144,7 @@ public void setConnectedRoom(String roomCode) { this.setData(Machines.Attachments.MACHINE_COLOR, inst.defaultMachineColor()); }, () -> { - this.setData(Machines.Attachments.MACHINE_COLOR, DyeColor.WHITE.getTextColor()); + this.setData(Machines.Attachments.MACHINE_COLOR, MachineColors.WHITE); }); this.setChanged(); diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/CompactMachineBlock.java b/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/CompactMachineBlock.java index 3bcf1e85..89a3483b 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/CompactMachineBlock.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/CompactMachineBlock.java @@ -1,6 +1,8 @@ package dev.compactmods.machines.machine.block; +import dev.compactmods.machines.api.machine.MachineColor; import dev.compactmods.machines.api.machine.block.ICompactMachineBlockEntity; +import dev.compactmods.machines.machine.MachineColors; import dev.compactmods.machines.machine.Machines; import dev.compactmods.machines.network.machine.MachineColorSyncPacket; import net.minecraft.core.BlockPos; @@ -29,7 +31,7 @@ public CompactMachineBlock(Properties pProperties) { public void setPlacedBy(Level level, BlockPos pPos, BlockState pState, @Nullable LivingEntity pPlacer, ItemStack pStack) { super.setPlacedBy(level, pPos, pState, pPlacer, pStack); - final var color = pStack.getOrDefault(Machines.DataComponents.MACHINE_COLOR, DyeColor.WHITE.getFireworkColor()); + final var color = pStack.getOrDefault(Machines.DataComponents.MACHINE_COLOR, MachineColors.WHITE); final var be = level.getBlockEntity(pPos); if(be != null) be.setData(Machines.Attachments.MACHINE_COLOR, color); @@ -37,13 +39,15 @@ public void setPlacedBy(Level level, BlockPos pPos, BlockState pState, @Nullable @NotNull protected static ItemInteractionResult tryDyingMachine(ServerLevel level, @NotNull BlockPos pos, Player player, DyeItem dye, ItemStack mainItem) { + // TODO Support IColorable once https://github.com/neoforged/NeoForge/pull/1094 is merged var color = dye.getDyeColor(); final var blockEntity = level.getBlockEntity(pos); if (blockEntity instanceof ICompactMachineBlockEntity) { - blockEntity.setData(Machines.Attachments.MACHINE_COLOR, color.getFireworkColor()); + final var newColor = MachineColor.fromDyeColor(color); + blockEntity.setData(Machines.Attachments.MACHINE_COLOR, newColor); PacketDistributor.sendToPlayersTrackingChunk( - level, new ChunkPos(pos), new MachineColorSyncPacket(GlobalPos.of(level.dimension(), pos), color.getFireworkColor())); + level, new ChunkPos(pos), new MachineColorSyncPacket(GlobalPos.of(level.dimension(), pos), newColor)); if (!player.isCreative()) mainItem.shrink(1); diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/UnboundCompactMachineBlock.java b/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/UnboundCompactMachineBlock.java index 71f96f77..4fe3db74 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/UnboundCompactMachineBlock.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/UnboundCompactMachineBlock.java @@ -69,7 +69,7 @@ protected ItemInteractionResult useItemOn(ItemStack stack, BlockState state, Lev RoomTemplate template = RoomTemplateHelper.getTemplate(level, unboundEntity.templateId()); if (!template.equals(RoomTemplate.INVALID_TEMPLATE)) { - int color = unboundEntity.getData(Machines.Attachments.MACHINE_COLOR); + var color = unboundEntity.getData(Machines.Attachments.MACHINE_COLOR); try { // Generate a new machine room diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/UnboundCompactMachineEntity.java b/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/UnboundCompactMachineEntity.java index 8d398d55..3ebd12ab 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/UnboundCompactMachineEntity.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/UnboundCompactMachineEntity.java @@ -28,18 +28,25 @@ public UnboundCompactMachineEntity(BlockPos pos, BlockState state) { protected void applyImplicitComponents(DataComponentInput components) { super.applyImplicitComponents(components); this.templateId = components.get(Machines.DataComponents.ROOM_TEMPLATE_ID); + + final var desiredColor = components.get(Machines.DataComponents.MACHINE_COLOR); + if (desiredColor != null) { + this.setData(Machines.Attachments.MACHINE_COLOR, desiredColor); + } } @Override protected void collectImplicitComponents(DataComponentMap.Builder builder) { super.collectImplicitComponents(builder); builder.set(Machines.DataComponents.ROOM_TEMPLATE_ID, this.templateId); + builder.set(Machines.DataComponents.MACHINE_COLOR, this.getData(Machines.Attachments.MACHINE_COLOR)); } @Override public void removeComponentsFromTag(CompoundTag tag) { super.removeComponentsFromTag(tag); tag.remove(Machines.DataComponents.KEY_ROOM_TEMPLATE); + tag.remove(Machines.DataComponents.KEY_MACHINE_COLOR); } @Override diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/machine/item/UnboundCompactMachineItem.java b/neoforge-main/src/main/java/dev/compactmods/machines/machine/item/UnboundCompactMachineItem.java index 78d93b31..f71480b6 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/machine/item/UnboundCompactMachineItem.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/machine/item/UnboundCompactMachineItem.java @@ -1,8 +1,11 @@ package dev.compactmods.machines.machine.item; import dev.compactmods.machines.api.Translations; +import dev.compactmods.machines.api.machine.MachineColor; import dev.compactmods.machines.api.machine.MachineTranslations; +import dev.compactmods.machines.api.room.RoomTranslations; import dev.compactmods.machines.api.room.template.RoomTemplate; +import dev.compactmods.machines.machine.MachineColors; import dev.compactmods.machines.machine.Machines; import net.minecraft.Util; import net.minecraft.client.gui.screens.Screen; @@ -41,7 +44,7 @@ public String getDescriptionId(ItemStack stack) { public ItemStack getDefaultInstance() { var stack = new ItemStack(this); stack.set(Machines.DataComponents.ROOM_TEMPLATE_ID, RoomTemplate.NO_TEMPLATE); - stack.set(Machines.DataComponents.MACHINE_COLOR, CommonColors.WHITE); + stack.set(Machines.DataComponents.MACHINE_COLOR, MachineColors.WHITE); return stack; } @@ -56,7 +59,8 @@ public void appendHoverText(ItemStack stack, TooltipContext context, List TYPE = new Type<>(CompactMachines.modRL("update_machine_color")); public static final Codec CODEC = RecordCodecBuilder.create(inst -> inst.group( GlobalPos.CODEC.fieldOf("position").forGetter(MachineColorSyncPacket::position), - Codec.INT.fieldOf("color").forGetter(MachineColorSyncPacket::color) + MachineColor.CODEC.fieldOf("color").forGetter(MachineColorSyncPacket::color) ).apply(inst, MachineColorSyncPacket::new)); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( GlobalPos.STREAM_CODEC, MachineColorSyncPacket::position, - ByteBufCodecs.INT, MachineColorSyncPacket::color, + MachineColor.STREAM_CODEC, MachineColorSyncPacket::color, MachineColorSyncPacket::new ); diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/room/NewRoomBuilder.java b/neoforge-main/src/main/java/dev/compactmods/machines/room/NewRoomBuilder.java index 8e851b8c..40bad837 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/room/NewRoomBuilder.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/room/NewRoomBuilder.java @@ -1,8 +1,10 @@ package dev.compactmods.machines.room; +import dev.compactmods.machines.api.machine.MachineColor; import dev.compactmods.machines.api.room.RoomInstance; import dev.compactmods.machines.api.room.registration.IRoomBuilder; import dev.compactmods.machines.api.room.spatial.IRoomBoundaries; +import dev.compactmods.machines.machine.MachineColors; import dev.compactmods.machines.room.graph.node.RoomRegistrationNode; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; @@ -11,7 +13,7 @@ public class NewRoomBuilder implements IRoomBuilder { private final String code; - private int color = 0; + private MachineColor color = MachineColors.WHITE; private AABB boundaries = AABB.ofSize(Vec3.ZERO, 1, 1, 1); UUID owner; @@ -36,6 +38,11 @@ public NewRoomBuilder owner(UUID owner) { } public NewRoomBuilder defaultMachineColor(int color) { + this.color = MachineColor.fromARGB(color); + return this; + } + + public NewRoomBuilder defaultMachineColor(MachineColor color) { this.color = color; return this; } diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/room/RoomEventHandler.java b/neoforge-main/src/main/java/dev/compactmods/machines/room/RoomEventHandler.java index c10ee291..5b4993b4 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/room/RoomEventHandler.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/room/RoomEventHandler.java @@ -1,19 +1,39 @@ package dev.compactmods.machines.room; +import dev.compactmods.machines.LoggingUtil; import dev.compactmods.machines.api.CompactMachines; import dev.compactmods.machines.api.Translations; import dev.compactmods.machines.api.dimension.CompactDimension; +import dev.compactmods.machines.util.PlayerUtil; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.phys.Vec3; import net.neoforged.neoforge.event.entity.EntityJoinLevelEvent; import net.neoforged.neoforge.event.entity.EntityTeleportEvent; +import net.neoforged.neoforge.event.entity.EntityTravelToDimensionEvent; import net.neoforged.neoforge.event.entity.living.FinalizeSpawnEvent; +import org.apache.logging.log4j.Logger; public class RoomEventHandler { + private static final Logger LOGS = LoggingUtil.modLog(); + /** + * Handles an entity that has moved to a non-CM dimension, clearing their history + * @param dimensionEvent + */ + public static void entityChangedDimensions(final EntityTravelToDimensionEvent dimensionEvent) { + final var ent = dimensionEvent.getEntity(); + if(!(ent instanceof Player p)) return; + + if(!CompactDimension.isLevelCompact(dimensionEvent.getDimension())) { + if(p instanceof ServerPlayer sp) { + LOGS.debug("Resetting player {} room history due to dimension change.", sp.getDisplayName()); + PlayerUtil.resetPlayerHistory(sp); + } + } + } public static void entityJoined(final EntityJoinLevelEvent evt) { Entity ent = evt.getEntity(); diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/room/RoomHelper.java b/neoforge-main/src/main/java/dev/compactmods/machines/room/RoomHelper.java index 4c257e09..faf4ccfa 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/room/RoomHelper.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/room/RoomHelper.java @@ -125,7 +125,6 @@ public static void teleportPlayerOutOfRoom(@Nonnull ServerPlayer serverPlayer) { }, () -> { serverPlayer.removeData(Rooms.DataAttachments.LAST_ROOM_ENTRYPOINT); - serverPlayer.removeData(Rooms.DataAttachments.CURRENT_ROOM_CODE); PlayerUtil.teleportPlayerToRespawnOrOverworld(serv, serverPlayer); } ); diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/room/Rooms.java b/neoforge-main/src/main/java/dev/compactmods/machines/room/Rooms.java index 2430c206..a4cd725c 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/room/Rooms.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/room/Rooms.java @@ -118,6 +118,7 @@ static void registerEvents(IEventBus modBus) { }); NeoForge.EVENT_BUS.addListener(RoomEventHandler::checkSpawn); + NeoForge.EVENT_BUS.addListener(RoomEventHandler::entityChangedDimensions); NeoForge.EVENT_BUS.addListener(RoomEventHandler::entityJoined); NeoForge.EVENT_BUS.addListener(RoomEventHandler::entityTeleport); } diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/room/graph/node/RoomRegistrationNode.java b/neoforge-main/src/main/java/dev/compactmods/machines/room/graph/node/RoomRegistrationNode.java index 39a39637..cf12ec67 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/room/graph/node/RoomRegistrationNode.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/room/graph/node/RoomRegistrationNode.java @@ -2,6 +2,7 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; +import dev.compactmods.machines.api.machine.MachineColor; import dev.compactmods.machines.api.room.RoomInstance; import dev.compactmods.machines.api.room.spatial.IRoomBoundaries; import dev.compactmods.feather.node.Node; @@ -22,10 +23,10 @@ public record RoomRegistrationNode(UUID id, Data data) implements Node CODEC = RecordCodecBuilder.create(i -> i.group( Codec.STRING.fieldOf("code").forGetter(Data::code), - Codec.INT.fieldOf("color").forGetter(Data::defaultMachineColor), + MachineColor.CODEC.fieldOf("color").forGetter(Data::defaultMachineColor), Vec3.CODEC.fieldOf("dimensions").forGetter(Data::dimensions), Vec3.CODEC.fieldOf("center").forGetter(x -> x.boundaries.getCenter()) ).apply(i, Data::new)); @@ -38,7 +39,7 @@ private Vec3 dimensions() { return new Vec3(boundaries.getXsize(), boundaries.getYsize(), boundaries.getZsize()); } - private Data(String code, int defaultMachineColor, Vec3 dimensions, Vec3 center) { + private Data(String code, MachineColor defaultMachineColor, Vec3 dimensions, Vec3 center) { this(code, defaultMachineColor, AABB.ofSize(center, dimensions.x(), dimensions.y(), dimensions.z())); } } @@ -49,7 +50,7 @@ public String code() { return data.code; } - public int defaultMachineColor() { + public MachineColor defaultMachineColor() { return data.defaultMachineColor; } diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/config/ServerConfig.java b/neoforge-main/src/main/java/dev/compactmods/machines/server/ServerConfig.java similarity index 86% rename from neoforge-main/src/main/java/dev/compactmods/machines/config/ServerConfig.java rename to neoforge-main/src/main/java/dev/compactmods/machines/server/ServerConfig.java index 2191e291..31a02be4 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/config/ServerConfig.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/server/ServerConfig.java @@ -1,4 +1,4 @@ -package dev.compactmods.machines.config; +package dev.compactmods.machines.server; import com.electronwill.nightconfig.core.EnumGetMethod; import dev.compactmods.machines.machine.config.EnumMachinePlayersBreakHandling; @@ -21,6 +21,7 @@ public class ServerConfig { private static ModConfigSpec.IntValue CHANGE_ROOM_UPGRADES; private static ModConfigSpec.BooleanValue ALLOWED_OUTSIDE_MACHINE; + private static ModConfigSpec.BooleanValue DAMAGE_PLAYERS_OUTSIDE_MACHINE; static { generateConfig(); @@ -48,10 +49,15 @@ private static void generateConfig() { EnumGetMethod.NAME_IGNORECASE); ALLOWED_OUTSIDE_MACHINE = builder - .comment("Specify if we want to damage player's that managed to escape the boundries") + .comment("Specify if we want to allow players outside the room boundaries") .comment("default: false") .define("allowOutside", false); + DAMAGE_PLAYERS_OUTSIDE_MACHINE = builder + .comment("Specify if we want to damage players that are outside the room boundaries") + .comment("default: false") + .define("damagePlayersOutOfBounds", false); + builder.pop(); builder @@ -100,4 +106,8 @@ public static int changeRoomSpawn() { public static Boolean isAllowedOutsideOfMachine() { return ALLOWED_OUTSIDE_MACHINE.get(); } + + public static Boolean damagePlayersOutOfBounds() { + return DAMAGE_PLAYERS_OUTSIDE_MACHINE.get(); + } } diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/util/PlayerUtil.java b/neoforge-main/src/main/java/dev/compactmods/machines/util/PlayerUtil.java index 7e1e5fc7..5d6a3370 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/util/PlayerUtil.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/util/PlayerUtil.java @@ -17,6 +17,10 @@ public abstract class PlayerUtil { + public static void resetPlayerHistory(@NotNull ServerPlayer player) { + player.removeData(Rooms.DataAttachments.LAST_ROOM_ENTRYPOINT); + } + public static void teleportPlayerToRespawnOrOverworld(MinecraftServer serv, @NotNull ServerPlayer player) { ServerLevel level = Optional.ofNullable(serv.getLevel(player.getRespawnDimension())).orElse(serv.overworld()); Vec3 worldPos = Vec3.atCenterOf(level.getSharedSpawnPos()); @@ -25,9 +29,8 @@ public static void teleportPlayerToRespawnOrOverworld(MinecraftServer serv, @Not worldPos = Vec3.atCenterOf(player.getRespawnPosition()); player.changeDimension(CompactDimensionTransitions.to(level, worldPos)); - - player.removeData(Rooms.DataAttachments.LAST_ROOM_ENTRYPOINT); } + public static Optional getProfileByUUID(MinecraftServer server, UUID uuid) { final var player = server.getPlayerList().getPlayer(uuid); if (player == null) { diff --git a/settings.gradle.kts b/settings.gradle.kts index c7b33b56..eef7def0 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,5 +1,3 @@ -rootProject.name = "Compact Machines 21.0" - dependencyResolutionManagement { versionCatalogs.create("neoforged") { version("neoforge", "21.0.143") @@ -66,9 +64,9 @@ pluginManagement { // maven("https://maven.architectury.dev/") -// maven("https://maven.parchmentmc.org") { -// name = "ParchmentMC" -// } + maven("https://maven.parchmentmc.org") { + name = "ParchmentMC" + } maven("https://maven.neoforged.net/releases") { name = "NeoForged"