From 6b120a4b65651437176a9fa78d78125ab8be2c41 Mon Sep 17 00:00:00 2001 From: omerbenda Date: Tue, 24 Jun 2025 19:44:37 +0300 Subject: [PATCH 1/4] feat(ExplorerCompassItem.java): Add single use config value for compass item gui --- .../explorerscompass/ExplorersCompass.java | 1 + .../config/ConfigHandler.java | 4 ++++ .../items/ExplorersCompassItem.java | 24 ++++++++++++------- .../registry/ExplorersCompassRegistry.java | 1 + 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/chaosthedude/explorerscompass/ExplorersCompass.java b/src/main/java/com/chaosthedude/explorerscompass/ExplorersCompass.java index ecd81eb..a64c0cc 100644 --- a/src/main/java/com/chaosthedude/explorerscompass/ExplorersCompass.java +++ b/src/main/java/com/chaosthedude/explorerscompass/ExplorersCompass.java @@ -49,6 +49,7 @@ public class ExplorersCompass { public static final DataComponentType SEARCH_RADIUS_COMPONENT = DataComponentType.builder().persistent(Codec.INT).networkSynchronized(ByteBufCodecs.VAR_INT).build(); public static final DataComponentType SAMPLES_COMPONENT = DataComponentType.builder().persistent(Codec.INT).networkSynchronized(ByteBufCodecs.VAR_INT).build(); public static final DataComponentType DISPLAY_COORDS_COMPONENT = DataComponentType.builder().persistent(Codec.BOOL).networkSynchronized(ByteBufCodecs.BOOL).build(); + public static final DataComponentType LOCKED_COMPONENT = DataComponentType.builder().persistent(Codec.BOOL).networkSynchronized(ByteBufCodecs.BOOL).build(); public static boolean canTeleport; public static List allowedStructureKeys; diff --git a/src/main/java/com/chaosthedude/explorerscompass/config/ConfigHandler.java b/src/main/java/com/chaosthedude/explorerscompass/config/ConfigHandler.java index 95d6adb..f197aaa 100644 --- a/src/main/java/com/chaosthedude/explorerscompass/config/ConfigHandler.java +++ b/src/main/java/com/chaosthedude/explorerscompass/config/ConfigHandler.java @@ -25,6 +25,7 @@ public static class General { public final ForgeConfigSpec.IntValue maxRadius; public final ForgeConfigSpec.ConfigValue> structureBlacklist; public final ForgeConfigSpec.IntValue maxSamples; + public final ForgeConfigSpec.BooleanValue singleUse; General(ForgeConfigSpec.Builder builder) { String desc; @@ -45,6 +46,9 @@ public static class General { desc = "The maximum number of samples to be taken when searching for a structure."; maxSamples = builder.comment(desc).defineInRange("maxSamples", 100000, 0, 100000000); + desc = "Limit the compass to single use per item"; + singleUse = builder.comment(desc).define("singleUse", false); + builder.pop(); } } diff --git a/src/main/java/com/chaosthedude/explorerscompass/items/ExplorersCompassItem.java b/src/main/java/com/chaosthedude/explorerscompass/items/ExplorersCompassItem.java index 7687b28..8f1b658 100644 --- a/src/main/java/com/chaosthedude/explorerscompass/items/ExplorersCompassItem.java +++ b/src/main/java/com/chaosthedude/explorerscompass/items/ExplorersCompassItem.java @@ -44,14 +44,22 @@ public ExplorersCompassItem() { @Override public InteractionResult use(Level level, Player player, InteractionHand hand) { if (!player.isCrouching()) { - if (level.isClientSide()) { - final ItemStack stack = ItemUtils.getHeldItem(player, ExplorersCompass.explorersCompass); - GuiWrapper.openGUI(level, player, stack); - } else { - final ServerLevel serverLevel = (ServerLevel) level; - final ServerPlayer serverPlayer = (ServerPlayer) player; - final boolean canTeleport = ConfigHandler.GENERAL.allowTeleport.get() && PlayerUtils.canTeleport(player.getServer(), player); - ExplorersCompass.network.send(new SyncPacket(canTeleport, StructureUtils.getAllowedStructureKeys(serverLevel), StructureUtils.getGeneratingDimensionsForAllowedStructures(serverLevel), StructureUtils.getStructureKeysToTypeKeys(serverLevel), StructureUtils.getTypeKeysToStructureKeys(serverLevel)), PacketDistributor.PLAYER.with(serverPlayer)); + final ItemStack stack = ItemUtils.getHeldItem(player, ExplorersCompass.explorersCompass); + final boolean singleUse = ConfigHandler.GENERAL.singleUse.get(); + + if (!singleUse || !stack.getOrDefault(ExplorersCompass.LOCKED_COMPONENT, false)) { + if (level.isClientSide()) { + GuiWrapper.openGUI(level, player, stack); + } else { + final ServerLevel serverLevel = (ServerLevel) level; + final ServerPlayer serverPlayer = (ServerPlayer) player; + final boolean canTeleport = ConfigHandler.GENERAL.allowTeleport.get() && PlayerUtils.canTeleport(player.getServer(), player); + ExplorersCompass.network.send(new SyncPacket(canTeleport, StructureUtils.getAllowedStructureKeys(serverLevel), StructureUtils.getGeneratingDimensionsForAllowedStructures(serverLevel), StructureUtils.getStructureKeysToTypeKeys(serverLevel), StructureUtils.getTypeKeysToStructureKeys(serverLevel)), PacketDistributor.PLAYER.with(serverPlayer)); + } + + if (singleUse) { + stack.set(ExplorersCompass.LOCKED_COMPONENT, true); + } } } else { workerManager.stop(); diff --git a/src/main/java/com/chaosthedude/explorerscompass/registry/ExplorersCompassRegistry.java b/src/main/java/com/chaosthedude/explorerscompass/registry/ExplorersCompassRegistry.java index 5947092..dde4ab7 100644 --- a/src/main/java/com/chaosthedude/explorerscompass/registry/ExplorersCompassRegistry.java +++ b/src/main/java/com/chaosthedude/explorerscompass/registry/ExplorersCompassRegistry.java @@ -28,6 +28,7 @@ public static void registerItems(RegisterEvent e) { registry.register(ResourceLocation.fromNamespaceAndPath(ExplorersCompass.MODID, "search_radius"), ExplorersCompass.SEARCH_RADIUS_COMPONENT); registry.register(ResourceLocation.fromNamespaceAndPath(ExplorersCompass.MODID, "samples"), ExplorersCompass.SAMPLES_COMPONENT); registry.register(ResourceLocation.fromNamespaceAndPath(ExplorersCompass.MODID, "display_coords"), ExplorersCompass.DISPLAY_COORDS_COMPONENT); + registry.register(ResourceLocation.fromNamespaceAndPath(ExplorersCompass.MODID, "locked"), ExplorersCompass.LOCKED_COMPONENT); }); } From 4c4d595b4ad57025d011ba6595b01fb7e7631168 Mon Sep 17 00:00:00 2001 From: omerbenda Date: Tue, 24 Jun 2025 19:48:16 +0300 Subject: [PATCH 2/4] feat(ExplorersCompassItem.java): Add foil to locked compass --- .../explorerscompass/items/ExplorersCompassItem.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/com/chaosthedude/explorerscompass/items/ExplorersCompassItem.java b/src/main/java/com/chaosthedude/explorerscompass/items/ExplorersCompassItem.java index 8f1b658..7953692 100644 --- a/src/main/java/com/chaosthedude/explorerscompass/items/ExplorersCompassItem.java +++ b/src/main/java/com/chaosthedude/explorerscompass/items/ExplorersCompassItem.java @@ -250,4 +250,12 @@ public boolean shouldDisplayCoordinates(ItemStack stack) { return true; } + @Override + public boolean isFoil(ItemStack stack) { + if (ConfigHandler.GENERAL.singleUse.get()) { + return stack.getOrDefault(ExplorersCompass.LOCKED_COMPONENT, false); + } + + return super.isFoil(stack); + } } From 79fad2e504aad50b386c061f4ce8ea50a1173124 Mon Sep 17 00:00:00 2001 From: omerbenda Date: Tue, 24 Jun 2025 19:58:06 +0300 Subject: [PATCH 3/4] feat(ExplorersCompassItem.java): Add message when trying to use locked compass --- .../explorerscompass/items/ExplorersCompassItem.java | 3 +++ src/main/resources/assets/explorerscompass/lang/en_us.json | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/chaosthedude/explorerscompass/items/ExplorersCompassItem.java b/src/main/java/com/chaosthedude/explorerscompass/items/ExplorersCompassItem.java index 7953692..beb8e3b 100644 --- a/src/main/java/com/chaosthedude/explorerscompass/items/ExplorersCompassItem.java +++ b/src/main/java/com/chaosthedude/explorerscompass/items/ExplorersCompassItem.java @@ -15,6 +15,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; @@ -60,6 +61,8 @@ public InteractionResult use(Level level, Player player, InteractionHand hand) { if (singleUse) { stack.set(ExplorersCompass.LOCKED_COMPONENT, true); } + } else { + player.displayClientMessage(Component.translatable("string.explorerscompass.locked"), true); } } else { workerManager.stop(); diff --git a/src/main/resources/assets/explorerscompass/lang/en_us.json b/src/main/resources/assets/explorerscompass/lang/en_us.json index ab5e4fa..6ca00a5 100644 --- a/src/main/resources/assets/explorerscompass/lang/en_us.json +++ b/src/main/resources/assets/explorerscompass/lang/en_us.json @@ -75,5 +75,8 @@ "structure.minecraft.village_plains": "Village Plains", "structure.minecraft.village_savanna": "Village Savanna", "structure.minecraft.village_snowy": "Village Snowy", - "structure.minecraft.village_taiga": "Village Taiga" + "structure.minecraft.village_taiga": "Village Taiga", + + "_comment": "STRINGS - MESSAGES", + "string.explorerscompass.locked": "Compass is locked, disable single use mode to enable multiple searches per item." } \ No newline at end of file From d89bd2611fc2ae3df32d2739f919ae3f37eade58 Mon Sep 17 00:00:00 2001 From: omerbenda Date: Tue, 24 Jun 2025 20:04:23 +0300 Subject: [PATCH 4/4] fix(ExplorersCompassItem.java): Remove disabling compass via crouch when in single use mode --- .../explorerscompass/items/ExplorersCompassItem.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/chaosthedude/explorerscompass/items/ExplorersCompassItem.java b/src/main/java/com/chaosthedude/explorerscompass/items/ExplorersCompassItem.java index beb8e3b..bfacdad 100644 --- a/src/main/java/com/chaosthedude/explorerscompass/items/ExplorersCompassItem.java +++ b/src/main/java/com/chaosthedude/explorerscompass/items/ExplorersCompassItem.java @@ -44,9 +44,10 @@ public ExplorersCompassItem() { @Override public InteractionResult use(Level level, Player player, InteractionHand hand) { + final boolean singleUse = ConfigHandler.GENERAL.singleUse.get(); + if (!player.isCrouching()) { final ItemStack stack = ItemUtils.getHeldItem(player, ExplorersCompass.explorersCompass); - final boolean singleUse = ConfigHandler.GENERAL.singleUse.get(); if (!singleUse || !stack.getOrDefault(ExplorersCompass.LOCKED_COMPONENT, false)) { if (level.isClientSide()) { @@ -64,7 +65,7 @@ public InteractionResult use(Level level, Player player, InteractionHand hand) { } else { player.displayClientMessage(Component.translatable("string.explorerscompass.locked"), true); } - } else { + } else if (!singleUse) { workerManager.stop(); workerManager.clear(); setState(player.getItemInHand(hand), null, CompassState.INACTIVE, player);