From ddd5b9bf751ba14970b81bf71fc45d073bfc8e9b Mon Sep 17 00:00:00 2001 From: Hedzer Kuijlman Date: Mon, 7 Apr 2025 10:37:44 +0200 Subject: [PATCH 01/19] Fixed typo --- src/main/resources/fabric.mod.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index b9e6b2f..ce129b9 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -10,7 +10,7 @@ "contact": { "homepage": "https://hak.wtf", "sources": "https://git.hak.wtf/hkuijlman/SurvivalFabric", - "issues": "https://git.hak.wtf/hkuijlman/SurvivalFabric/issues", + "issues": "https://git.hak.wtf/hkuijlman/SurvivalFabric/issues" }, "license": "CC0-1.0", "icon": "assets/survivalfabric/icon.png", From 6b806574acdb4d1b43f6201e55a0edb40c79bd68 Mon Sep 17 00:00:00 2001 From: Hedzer Kuijlman Date: Fri, 11 Apr 2025 13:17:19 +0200 Subject: [PATCH 02/19] Removed Darkness Effect (toggleable) --- README.md | 7 +++++-- .../survivalfabric/SurvivalFabricClient.java | 2 ++ .../config/client/ClientConfig.java | 1 + .../features/RemoveDarknessEffect.java | 19 +++++++++++++++++++ 4 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 src/client/java/wtf/hak/survivalfabric/features/RemoveDarknessEffect.java diff --git a/README.md b/README.md index 22d9690..0c486b2 100644 --- a/README.md +++ b/README.md @@ -42,8 +42,11 @@ As a challenge I'm trying to make it as user-friendly as possible. (It ain't the - [x] Teleportation Angle Viewer for [this machine](https://www.youtube.com/watch?v=FnUE-ZaALLw) ![Teleportation Keybindings](https://i.imgur.com/gjO1H3d.png) - [x] Removed game fog (lava, water, etc.) - - [ ] Made it toggleable -- [ ] Mod Menu integration + - [x] All types individually toggleable +- [x] Mod Menu integration + - [x] Automatic config adaption (currently booleans only) +- [x] Removed darkness effect + - [x] Toggleable # Features to come diff --git a/src/client/java/wtf/hak/survivalfabric/SurvivalFabricClient.java b/src/client/java/wtf/hak/survivalfabric/SurvivalFabricClient.java index 4757a5c..94e7367 100644 --- a/src/client/java/wtf/hak/survivalfabric/SurvivalFabricClient.java +++ b/src/client/java/wtf/hak/survivalfabric/SurvivalFabricClient.java @@ -3,6 +3,7 @@ package wtf.hak.survivalfabric; import net.fabricmc.api.ClientModInitializer; import wtf.hak.survivalfabric.config.client.ClientConfigManager; import wtf.hak.survivalfabric.features.AngleViewer; +import wtf.hak.survivalfabric.features.RemoveDarknessEffect; public class SurvivalFabricClient implements ClientModInitializer { @@ -10,5 +11,6 @@ public class SurvivalFabricClient implements ClientModInitializer { public void onInitializeClient() { ClientConfigManager.getConfig(); AngleViewer.register(); + RemoveDarknessEffect.register(); } } \ No newline at end of file diff --git a/src/client/java/wtf/hak/survivalfabric/config/client/ClientConfig.java b/src/client/java/wtf/hak/survivalfabric/config/client/ClientConfig.java index 86c9799..5c3e8e8 100644 --- a/src/client/java/wtf/hak/survivalfabric/config/client/ClientConfig.java +++ b/src/client/java/wtf/hak/survivalfabric/config/client/ClientConfig.java @@ -9,4 +9,5 @@ public class ClientConfig { public boolean renderLavaFog = false; public boolean renderWaterFog = false; public boolean renderSnowFog = false; + public boolean removeDarknessEffect = true; } diff --git a/src/client/java/wtf/hak/survivalfabric/features/RemoveDarknessEffect.java b/src/client/java/wtf/hak/survivalfabric/features/RemoveDarknessEffect.java new file mode 100644 index 0000000..2744053 --- /dev/null +++ b/src/client/java/wtf/hak/survivalfabric/features/RemoveDarknessEffect.java @@ -0,0 +1,19 @@ +package wtf.hak.survivalfabric.features; + +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; +import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.entity.effect.StatusEffects; +import wtf.hak.survivalfabric.config.client.ClientConfigManager; + +public class RemoveDarknessEffect { + + public static void register() { + ClientTickEvents.END_CLIENT_TICK.register(client -> { + if(client.player != null && ClientConfigManager.getConfig().removeDarknessEffect){ + StatusEffectInstance darknessEffect = client.player.getStatusEffect(StatusEffects.DARKNESS); + if(darknessEffect != null) + client.player.removeStatusEffect(darknessEffect.getEffectType()); + } + }); + } +} From c3a13c80637eba1bd57ab1404b78462a75dd80f1 Mon Sep 17 00:00:00 2001 From: Hedzer Kuijlman Date: Fri, 11 Apr 2025 13:21:46 +0200 Subject: [PATCH 03/19] Optimized fog removal ever so slightly --- .../survivalfabric/mixin/client/BackgroundRendererMixin.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/client/java/wtf/hak/survivalfabric/mixin/client/BackgroundRendererMixin.java b/src/client/java/wtf/hak/survivalfabric/mixin/client/BackgroundRendererMixin.java index bc6fccc..9cb66a0 100644 --- a/src/client/java/wtf/hak/survivalfabric/mixin/client/BackgroundRendererMixin.java +++ b/src/client/java/wtf/hak/survivalfabric/mixin/client/BackgroundRendererMixin.java @@ -17,6 +17,8 @@ import static wtf.hak.survivalfabric.config.client.ClientConfigManager.getConfig @Mixin(value = BackgroundRenderer.class, priority = 910) public abstract class BackgroundRendererMixin { + private static final Fog EMPTY_FOG = new Fog(-8.0f, 1_000_000.0F, FogShape.CYLINDER, 0,0,0,0); + @Inject(method = "applyFog", at = @At("RETURN"), cancellable = true) private static void applyFog(Camera camera, BackgroundRenderer.FogType fogType, Vector4f color, float viewDistance, boolean thickenFog, float tickProgress, CallbackInfoReturnable cir) { boolean renderFog = true; @@ -37,6 +39,6 @@ public abstract class BackgroundRendererMixin { renderFog = false; if(!renderFog) - cir.setReturnValue(new Fog(-8.0f, 1_000_000.0F, FogShape.CYLINDER, 0,0,0,0)); + cir.setReturnValue(EMPTY_FOG); } } From f28159b4422cde116b11bdee4d9165538375f7de Mon Sep 17 00:00:00 2001 From: Hedzer Kuijlman Date: Fri, 11 Apr 2025 14:06:21 +0200 Subject: [PATCH 04/19] Open/close EC block while opening/closing SEC + Play open & close sounds --- README.md | 8 ++++++ .../sharedenderchest/SharedEnderChest.java | 26 +++++++++++++++---- .../sharedenderchest/SharedInventory.java | 12 +++++++++ 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 0c486b2..7a1386c 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,10 @@ As a challenge I'm trying to make it as user-friendly as possible. (It ain't the ## Server Side - [x] Chat Calculator + ## Client Side + +### New Features - [x] Teleportation Angle Viewer for [this machine](https://www.youtube.com/watch?v=FnUE-ZaALLw) ![Teleportation Keybindings](https://i.imgur.com/gjO1H3d.png) - [x] Removed game fog (lava, water, etc.) @@ -48,6 +51,11 @@ As a challenge I'm trying to make it as user-friendly as possible. (It ain't the - [x] Removed darkness effect - [x] Toggleable +### Changes +- Shared Ender Chest + - [x] Open/close EC block while opening/closing SEC + - [x] Play open & close sounds + # Features to come ## Server Side diff --git a/src/main/java/wtf/hak/survivalfabric/sharedenderchest/SharedEnderChest.java b/src/main/java/wtf/hak/survivalfabric/sharedenderchest/SharedEnderChest.java index 0923f02..ae428e7 100644 --- a/src/main/java/wtf/hak/survivalfabric/sharedenderchest/SharedEnderChest.java +++ b/src/main/java/wtf/hak/survivalfabric/sharedenderchest/SharedEnderChest.java @@ -10,6 +10,7 @@ import net.fabricmc.fabric.api.event.player.UseBlockCallback; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; +import net.minecraft.block.Blocks; import net.minecraft.block.EnderChestBlock; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.Inventories; @@ -20,6 +21,7 @@ import net.minecraft.nbt.NbtSizeTracker; import net.minecraft.screen.GenericContainerScreenHandler; import net.minecraft.screen.SimpleNamedScreenHandlerFactory; import net.minecraft.server.MinecraftServer; +import net.minecraft.server.world.ServerWorld; import net.minecraft.sound.SoundCategory; import net.minecraft.sound.SoundEvents; import net.minecraft.text.Text; @@ -88,15 +90,13 @@ public class SharedEnderChest implements ServerLifecycleEvents.ServerStopping, S if (!player.isSpectator()) { if(!getConfig().sharedEnderChestLimitedAccess) { if (world.isClient()) return ActionResult.SUCCESS; - playEnderChestOpenSound(world, hitResult.getBlockPos()); - openSharedEnderChest(player); + openSharedEnderChest(player, world, hitResult.getBlockPos()); return ActionResult.SUCCESS; } else { for(String name : getConfig().sharedEnderChestNames) { if(name.toLowerCase().strip().equalsIgnoreCase(player.getNameForScoreboard().toLowerCase())) { if (world.isClient()) return ActionResult.SUCCESS; - playEnderChestOpenSound(world, hitResult.getBlockPos()); - openSharedEnderChest(player); + openSharedEnderChest(player, world, hitResult.getBlockPos()); return ActionResult.SUCCESS; } } @@ -113,7 +113,10 @@ public class SharedEnderChest implements ServerLifecycleEvents.ServerStopping, S } - public static void openSharedEnderChest(PlayerEntity player) { + public static void openSharedEnderChest(PlayerEntity player, World world, BlockPos pos) { + playEnderChestOpenSound(world, pos); + fakeEnderChestOpen(world, pos, true); + sharedInventory.openedEnderChests.put(player, pos); player.openHandledScreen(new SimpleNamedScreenHandlerFactory((int_1, playerInventory, playerEntity) -> new GenericContainerScreenHandler(getConfig().screenHandlerType(), int_1, playerInventory, sharedInventory, getConfig().sharedEnderChestRows), Text.of(getConfig().sharedEnderChestName))); } @@ -122,6 +125,19 @@ public class SharedEnderChest implements ServerLifecycleEvents.ServerStopping, S world.playSound(null, pos, SoundEvents.BLOCK_ENDER_CHEST_OPEN, SoundCategory.BLOCKS, 0.5F, world.random.nextFloat() * 0.1F + 0.9F); } + public static void playEnderChestCloseSound(World world, BlockPos pos) { + world.playSound(null, pos, SoundEvents.BLOCK_ENDER_CHEST_CLOSE, SoundCategory.BLOCKS, 0.5F, world.random.nextFloat() * 0.1F + 0.9F); + } + + public static void fakeEnderChestOpen(World world, BlockPos pos, boolean open) { + if (!(world.getBlockState(pos).getBlock() instanceof EnderChestBlock)) { + return; + } + + world.addSyncedBlockEvent(pos, Blocks.ENDER_CHEST, 1, open ? 1 : 0); + } + + private static File getFile(MinecraftServer server) { return server.getSavePath(WorldSavePath.ROOT).resolve("sharedenderchest.sav").toFile(); } diff --git a/src/main/java/wtf/hak/survivalfabric/sharedenderchest/SharedInventory.java b/src/main/java/wtf/hak/survivalfabric/sharedenderchest/SharedInventory.java index 20e721b..82af0df 100644 --- a/src/main/java/wtf/hak/survivalfabric/sharedenderchest/SharedInventory.java +++ b/src/main/java/wtf/hak/survivalfabric/sharedenderchest/SharedInventory.java @@ -5,10 +5,15 @@ import net.minecraft.inventory.Inventories; import net.minecraft.inventory.Inventory; import net.minecraft.item.ItemStack; import net.minecraft.util.collection.DefaultedList; +import net.minecraft.util.math.BlockPos; + +import java.util.HashMap; +import java.util.Map; public class SharedInventory implements Inventory { private final DefaultedList stacks; + public final Map openedEnderChests = new HashMap<>(); public SharedInventory(int inventoryRows) { this.stacks = DefaultedList.ofSize(inventoryRows * 9, ItemStack.EMPTY); @@ -80,4 +85,11 @@ public class SharedInventory implements Inventory { public void clear() { stacks.clear(); } + + @Override + public void onClose(PlayerEntity player) { + BlockPos pos = openedEnderChests.remove(player); + SharedEnderChest.fakeEnderChestOpen(player.getWorld(), pos, false); + SharedEnderChest.playEnderChestCloseSound(player.getWorld(), pos); + } } \ No newline at end of file From 168f916baa5d704e50d264f9494bd040415af625 Mon Sep 17 00:00:00 2001 From: Hedzer Kuijlman Date: Fri, 11 Apr 2025 14:07:19 +0200 Subject: [PATCH 05/19] Moved features to "features" package --- src/main/java/wtf/hak/survivalfabric/SurvivalFabric.java | 4 ++-- .../sharedenderchest/SharedEnderChest.java | 3 +-- .../{ => features}/sharedenderchest/SharedInventory.java | 2 +- .../survivalfabric/{ => features}/veinminer/Drill.java | 2 +- .../{ => features}/veinminer/VeinMinerEvents.java | 9 ++++----- .../{ => features}/veinminer/VeinMinerSession.java | 2 +- .../{ => features}/veinminer/drills/DrillBase.java | 6 +++--- .../{ => features}/veinminer/drills/LeavesDrill.java | 4 ++-- .../{ => features}/veinminer/drills/OreDrill.java | 5 ++--- .../{ => features}/veinminer/drills/WoodDrill.java | 4 ++-- 10 files changed, 19 insertions(+), 22 deletions(-) rename src/main/java/wtf/hak/survivalfabric/{ => features}/sharedenderchest/SharedEnderChest.java (98%) rename src/main/java/wtf/hak/survivalfabric/{ => features}/sharedenderchest/SharedInventory.java (97%) rename src/main/java/wtf/hak/survivalfabric/{ => features}/veinminer/Drill.java (81%) rename src/main/java/wtf/hak/survivalfabric/{ => features}/veinminer/VeinMinerEvents.java (87%) rename src/main/java/wtf/hak/survivalfabric/{ => features}/veinminer/VeinMinerSession.java (97%) rename src/main/java/wtf/hak/survivalfabric/{ => features}/veinminer/drills/DrillBase.java (95%) rename src/main/java/wtf/hak/survivalfabric/{ => features}/veinminer/drills/LeavesDrill.java (94%) rename src/main/java/wtf/hak/survivalfabric/{ => features}/veinminer/drills/OreDrill.java (93%) rename src/main/java/wtf/hak/survivalfabric/{ => features}/veinminer/drills/WoodDrill.java (95%) diff --git a/src/main/java/wtf/hak/survivalfabric/SurvivalFabric.java b/src/main/java/wtf/hak/survivalfabric/SurvivalFabric.java index 3122f1d..23043a2 100644 --- a/src/main/java/wtf/hak/survivalfabric/SurvivalFabric.java +++ b/src/main/java/wtf/hak/survivalfabric/SurvivalFabric.java @@ -11,8 +11,8 @@ import org.slf4j.LoggerFactory; import wtf.hak.survivalfabric.commands.ReloadConfigCommand; import wtf.hak.survivalfabric.commands.SlimeChunkCommand; import wtf.hak.survivalfabric.commands.SpectatorCommand; -import wtf.hak.survivalfabric.sharedenderchest.SharedEnderChest; -import wtf.hak.survivalfabric.veinminer.VeinMinerEvents; +import wtf.hak.survivalfabric.features.sharedenderchest.SharedEnderChest; +import wtf.hak.survivalfabric.features.veinminer.VeinMinerEvents; import static wtf.hak.survivalfabric.config.ConfigManager.getConfig; diff --git a/src/main/java/wtf/hak/survivalfabric/sharedenderchest/SharedEnderChest.java b/src/main/java/wtf/hak/survivalfabric/features/sharedenderchest/SharedEnderChest.java similarity index 98% rename from src/main/java/wtf/hak/survivalfabric/sharedenderchest/SharedEnderChest.java rename to src/main/java/wtf/hak/survivalfabric/features/sharedenderchest/SharedEnderChest.java index ae428e7..d14a83a 100644 --- a/src/main/java/wtf/hak/survivalfabric/sharedenderchest/SharedEnderChest.java +++ b/src/main/java/wtf/hak/survivalfabric/features/sharedenderchest/SharedEnderChest.java @@ -1,4 +1,4 @@ -package wtf.hak.survivalfabric.sharedenderchest; +package wtf.hak.survivalfabric.features.sharedenderchest; import java.io.DataInputStream; import java.io.DataOutputStream; @@ -21,7 +21,6 @@ import net.minecraft.nbt.NbtSizeTracker; import net.minecraft.screen.GenericContainerScreenHandler; import net.minecraft.screen.SimpleNamedScreenHandlerFactory; import net.minecraft.server.MinecraftServer; -import net.minecraft.server.world.ServerWorld; import net.minecraft.sound.SoundCategory; import net.minecraft.sound.SoundEvents; import net.minecraft.text.Text; diff --git a/src/main/java/wtf/hak/survivalfabric/sharedenderchest/SharedInventory.java b/src/main/java/wtf/hak/survivalfabric/features/sharedenderchest/SharedInventory.java similarity index 97% rename from src/main/java/wtf/hak/survivalfabric/sharedenderchest/SharedInventory.java rename to src/main/java/wtf/hak/survivalfabric/features/sharedenderchest/SharedInventory.java index 82af0df..0deb00b 100644 --- a/src/main/java/wtf/hak/survivalfabric/sharedenderchest/SharedInventory.java +++ b/src/main/java/wtf/hak/survivalfabric/features/sharedenderchest/SharedInventory.java @@ -1,4 +1,4 @@ -package wtf.hak.survivalfabric.sharedenderchest; +package wtf.hak.survivalfabric.features.sharedenderchest; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.Inventories; diff --git a/src/main/java/wtf/hak/survivalfabric/veinminer/Drill.java b/src/main/java/wtf/hak/survivalfabric/features/veinminer/Drill.java similarity index 81% rename from src/main/java/wtf/hak/survivalfabric/veinminer/Drill.java rename to src/main/java/wtf/hak/survivalfabric/features/veinminer/Drill.java index 7e40255..35e8408 100644 --- a/src/main/java/wtf/hak/survivalfabric/veinminer/Drill.java +++ b/src/main/java/wtf/hak/survivalfabric/features/veinminer/Drill.java @@ -1,4 +1,4 @@ -package wtf.hak.survivalfabric.veinminer; +package wtf.hak.survivalfabric.features.veinminer; import net.minecraft.block.BlockState; import net.minecraft.util.math.BlockPos; diff --git a/src/main/java/wtf/hak/survivalfabric/veinminer/VeinMinerEvents.java b/src/main/java/wtf/hak/survivalfabric/features/veinminer/VeinMinerEvents.java similarity index 87% rename from src/main/java/wtf/hak/survivalfabric/veinminer/VeinMinerEvents.java rename to src/main/java/wtf/hak/survivalfabric/features/veinminer/VeinMinerEvents.java index 320547a..b31537d 100644 --- a/src/main/java/wtf/hak/survivalfabric/veinminer/VeinMinerEvents.java +++ b/src/main/java/wtf/hak/survivalfabric/features/veinminer/VeinMinerEvents.java @@ -1,15 +1,14 @@ -package wtf.hak.survivalfabric.veinminer; +package wtf.hak.survivalfabric.features.veinminer; import net.minecraft.block.BlockState; import net.minecraft.entity.Entity; -import net.minecraft.registry.Registries; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import wtf.hak.survivalfabric.veinminer.drills.LeavesDrill; -import wtf.hak.survivalfabric.veinminer.drills.OreDrill; -import wtf.hak.survivalfabric.veinminer.drills.WoodDrill; +import wtf.hak.survivalfabric.features.veinminer.drills.LeavesDrill; +import wtf.hak.survivalfabric.features.veinminer.drills.OreDrill; +import wtf.hak.survivalfabric.features.veinminer.drills.WoodDrill; public class VeinMinerEvents { diff --git a/src/main/java/wtf/hak/survivalfabric/veinminer/VeinMinerSession.java b/src/main/java/wtf/hak/survivalfabric/features/veinminer/VeinMinerSession.java similarity index 97% rename from src/main/java/wtf/hak/survivalfabric/veinminer/VeinMinerSession.java rename to src/main/java/wtf/hak/survivalfabric/features/veinminer/VeinMinerSession.java index fa7b6f6..08e6eb1 100644 --- a/src/main/java/wtf/hak/survivalfabric/veinminer/VeinMinerSession.java +++ b/src/main/java/wtf/hak/survivalfabric/features/veinminer/VeinMinerSession.java @@ -1,4 +1,4 @@ -package wtf.hak.survivalfabric.veinminer; +package wtf.hak.survivalfabric.features.veinminer; import java.util.ArrayList; import java.util.HashSet; diff --git a/src/main/java/wtf/hak/survivalfabric/veinminer/drills/DrillBase.java b/src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/DrillBase.java similarity index 95% rename from src/main/java/wtf/hak/survivalfabric/veinminer/drills/DrillBase.java rename to src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/DrillBase.java index 8d13d44..977ff12 100644 --- a/src/main/java/wtf/hak/survivalfabric/veinminer/drills/DrillBase.java +++ b/src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/DrillBase.java @@ -1,4 +1,4 @@ -package wtf.hak.survivalfabric.veinminer.drills; +package wtf.hak.survivalfabric.features.veinminer.drills; import net.minecraft.block.BlockState; import java.util.ArrayList; @@ -8,8 +8,8 @@ import net.minecraft.text.MutableText; import net.minecraft.text.PlainTextContent; import net.minecraft.text.Text; import net.minecraft.util.math.BlockPos; -import wtf.hak.survivalfabric.veinminer.Drill; -import wtf.hak.survivalfabric.veinminer.VeinMinerSession; +import wtf.hak.survivalfabric.features.veinminer.Drill; +import wtf.hak.survivalfabric.features.veinminer.VeinMinerSession; import static wtf.hak.survivalfabric.SurvivalFabric.LOGGER; diff --git a/src/main/java/wtf/hak/survivalfabric/veinminer/drills/LeavesDrill.java b/src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/LeavesDrill.java similarity index 94% rename from src/main/java/wtf/hak/survivalfabric/veinminer/drills/LeavesDrill.java rename to src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/LeavesDrill.java index 6718108..4e1effd 100644 --- a/src/main/java/wtf/hak/survivalfabric/veinminer/drills/LeavesDrill.java +++ b/src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/LeavesDrill.java @@ -1,4 +1,4 @@ -package wtf.hak.survivalfabric.veinminer.drills; +package wtf.hak.survivalfabric.features.veinminer.drills; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -7,7 +7,7 @@ import net.minecraft.registry.tag.TagKey; import net.minecraft.server.world.ServerWorld; import net.minecraft.util.Identifier; import net.minecraft.util.math.BlockPos; -import wtf.hak.survivalfabric.veinminer.VeinMinerSession; +import wtf.hak.survivalfabric.features.veinminer.VeinMinerSession; import java.util.ArrayDeque; diff --git a/src/main/java/wtf/hak/survivalfabric/veinminer/drills/OreDrill.java b/src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/OreDrill.java similarity index 93% rename from src/main/java/wtf/hak/survivalfabric/veinminer/drills/OreDrill.java rename to src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/OreDrill.java index fec8e6f..14664f3 100644 --- a/src/main/java/wtf/hak/survivalfabric/veinminer/drills/OreDrill.java +++ b/src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/OreDrill.java @@ -1,4 +1,4 @@ -package wtf.hak.survivalfabric.veinminer.drills; +package wtf.hak.survivalfabric.features.veinminer.drills; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -9,9 +9,8 @@ import net.minecraft.util.Identifier; import java.util.ArrayDeque; -import net.minecraft.registry.Registries; import net.minecraft.util.math.BlockPos; -import wtf.hak.survivalfabric.veinminer.VeinMinerSession; +import wtf.hak.survivalfabric.features.veinminer.VeinMinerSession; import static wtf.hak.survivalfabric.config.ConfigManager.getConfig; diff --git a/src/main/java/wtf/hak/survivalfabric/veinminer/drills/WoodDrill.java b/src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/WoodDrill.java similarity index 95% rename from src/main/java/wtf/hak/survivalfabric/veinminer/drills/WoodDrill.java rename to src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/WoodDrill.java index 1e57a4c..3540621 100644 --- a/src/main/java/wtf/hak/survivalfabric/veinminer/drills/WoodDrill.java +++ b/src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/WoodDrill.java @@ -1,4 +1,4 @@ -package wtf.hak.survivalfabric.veinminer.drills; +package wtf.hak.survivalfabric.features.veinminer.drills; import net.minecraft.block.BlockState; import net.minecraft.registry.RegistryKeys; @@ -12,7 +12,7 @@ import java.util.ArrayDeque; import net.minecraft.block.Block; import net.minecraft.registry.Registries; import net.minecraft.util.math.BlockPos; -import wtf.hak.survivalfabric.veinminer.VeinMinerSession; +import wtf.hak.survivalfabric.features.veinminer.VeinMinerSession; import static wtf.hak.survivalfabric.config.ConfigManager.getConfig; From c7722115ed7d0a2f00ab1e6a2104110faa5dd9fe Mon Sep 17 00:00:00 2001 From: Hedzer Kuijlman Date: Fri, 11 Apr 2025 14:17:14 +0200 Subject: [PATCH 06/19] Fixed bug where EC closes if another player is still inside --- .../features/sharedenderchest/SharedEnderChest.java | 5 ++++- .../features/sharedenderchest/SharedInventory.java | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/wtf/hak/survivalfabric/features/sharedenderchest/SharedEnderChest.java b/src/main/java/wtf/hak/survivalfabric/features/sharedenderchest/SharedEnderChest.java index d14a83a..05318c7 100644 --- a/src/main/java/wtf/hak/survivalfabric/features/sharedenderchest/SharedEnderChest.java +++ b/src/main/java/wtf/hak/survivalfabric/features/sharedenderchest/SharedEnderChest.java @@ -113,7 +113,6 @@ public class SharedEnderChest implements ServerLifecycleEvents.ServerStopping, S } public static void openSharedEnderChest(PlayerEntity player, World world, BlockPos pos) { - playEnderChestOpenSound(world, pos); fakeEnderChestOpen(world, pos, true); sharedInventory.openedEnderChests.put(player, pos); player.openHandledScreen(new SimpleNamedScreenHandlerFactory((int_1, playerInventory, playerEntity) -> @@ -133,6 +132,10 @@ public class SharedEnderChest implements ServerLifecycleEvents.ServerStopping, S return; } + if(open) + playEnderChestOpenSound(world, pos); + else + playEnderChestCloseSound(world, pos); world.addSyncedBlockEvent(pos, Blocks.ENDER_CHEST, 1, open ? 1 : 0); } diff --git a/src/main/java/wtf/hak/survivalfabric/features/sharedenderchest/SharedInventory.java b/src/main/java/wtf/hak/survivalfabric/features/sharedenderchest/SharedInventory.java index 0deb00b..3f859b8 100644 --- a/src/main/java/wtf/hak/survivalfabric/features/sharedenderchest/SharedInventory.java +++ b/src/main/java/wtf/hak/survivalfabric/features/sharedenderchest/SharedInventory.java @@ -89,7 +89,8 @@ public class SharedInventory implements Inventory { @Override public void onClose(PlayerEntity player) { BlockPos pos = openedEnderChests.remove(player); + if(openedEnderChests.containsValue(pos)) + return; SharedEnderChest.fakeEnderChestOpen(player.getWorld(), pos, false); - SharedEnderChest.playEnderChestCloseSound(player.getWorld(), pos); } } \ No newline at end of file From 0941d3929e0f8bd9ef6eaef4e52f23691a4be7cc Mon Sep 17 00:00:00 2001 From: Hedzer Kuijlman Date: Fri, 11 Apr 2025 14:18:38 +0200 Subject: [PATCH 07/19] Renamed Utils.java to PacketUtils.java --- .../wtf/hak/survivalfabric/commands/SpectatorCommand.java | 6 +++--- .../java/wtf/hak/survivalfabric/mixin/ServerWorldMixin.java | 4 ++-- .../survivalfabric/utils/{Utils.java => PacketUtils.java} | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) rename src/main/java/wtf/hak/survivalfabric/utils/{Utils.java => PacketUtils.java} (94%) diff --git a/src/main/java/wtf/hak/survivalfabric/commands/SpectatorCommand.java b/src/main/java/wtf/hak/survivalfabric/commands/SpectatorCommand.java index 0fc1b4e..2e7c758 100644 --- a/src/main/java/wtf/hak/survivalfabric/commands/SpectatorCommand.java +++ b/src/main/java/wtf/hak/survivalfabric/commands/SpectatorCommand.java @@ -8,7 +8,7 @@ import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerWorld; import net.minecraft.text.Text; import net.minecraft.world.GameMode; -import wtf.hak.survivalfabric.utils.Utils; +import wtf.hak.survivalfabric.utils.PacketUtils; import java.util.HashMap; import java.util.Map; @@ -36,7 +36,7 @@ public class SpectatorCommand { player.teleport(data.world, data.x, data.y, data.z, Set.of(), data.yaw, data.pitch, false); player.changeGameMode(GameMode.SURVIVAL); spectating.remove(player); - Utils.updateListNames(player); + PacketUtils.updateListNames(player); } else { spectating.put(player, new LocationData(player @@ -47,7 +47,7 @@ public class SpectatorCommand { .getPitch(), player .getServerWorld())); player.changeGameMode(GameMode.SPECTATOR); - Utils.updateListNames(player); + PacketUtils.updateListNames(player); } return 1; } diff --git a/src/main/java/wtf/hak/survivalfabric/mixin/ServerWorldMixin.java b/src/main/java/wtf/hak/survivalfabric/mixin/ServerWorldMixin.java index adc620a..4926600 100644 --- a/src/main/java/wtf/hak/survivalfabric/mixin/ServerWorldMixin.java +++ b/src/main/java/wtf/hak/survivalfabric/mixin/ServerWorldMixin.java @@ -7,7 +7,7 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import wtf.hak.survivalfabric.utils.Utils; +import wtf.hak.survivalfabric.utils.PacketUtils; @Mixin(ServerWorld.class) public class ServerWorldMixin { @@ -15,7 +15,7 @@ public class ServerWorldMixin { @Inject(method = "onDimensionChanged", at = {@At("HEAD")}) public void onDimensionChange(Entity entity, CallbackInfo ci) { if(entity instanceof ServerPlayerEntity) { - Utils.updateListNames((ServerPlayerEntity)entity); + PacketUtils.updateListNames((ServerPlayerEntity)entity); } } } diff --git a/src/main/java/wtf/hak/survivalfabric/utils/Utils.java b/src/main/java/wtf/hak/survivalfabric/utils/PacketUtils.java similarity index 94% rename from src/main/java/wtf/hak/survivalfabric/utils/Utils.java rename to src/main/java/wtf/hak/survivalfabric/utils/PacketUtils.java index c7cbb0e..c647737 100644 --- a/src/main/java/wtf/hak/survivalfabric/utils/Utils.java +++ b/src/main/java/wtf/hak/survivalfabric/utils/PacketUtils.java @@ -5,7 +5,7 @@ import net.minecraft.server.network.ServerPlayerEntity; import java.util.Objects; -public class Utils { +public class PacketUtils { public static void updateListNames(ServerPlayerEntity p) { for(ServerPlayerEntity sp : Objects.requireNonNull(p.getServer()).getPlayerManager().getPlayerList()) { From 23aefb2f8d5f0892f8e21506b81cff2956b25e08 Mon Sep 17 00:00:00 2001 From: Hedzer Kuijlman Date: Fri, 11 Apr 2025 17:21:51 +0200 Subject: [PATCH 08/19] Code cleanup --- .../mixin/client/BackgroundRendererMixin.java | 2 ++ .../features/sharedenderchest/SharedInventory.java | 3 +-- .../features/veinminer/VeinMinerSession.java | 2 +- .../features/veinminer/drills/WoodDrill.java | 7 ++----- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/client/java/wtf/hak/survivalfabric/mixin/client/BackgroundRendererMixin.java b/src/client/java/wtf/hak/survivalfabric/mixin/client/BackgroundRendererMixin.java index 9cb66a0..56cb7f5 100644 --- a/src/client/java/wtf/hak/survivalfabric/mixin/client/BackgroundRendererMixin.java +++ b/src/client/java/wtf/hak/survivalfabric/mixin/client/BackgroundRendererMixin.java @@ -8,6 +8,7 @@ import net.minecraft.client.render.FogShape; import net.minecraft.world.World; import org.joml.Vector4f; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @@ -17,6 +18,7 @@ import static wtf.hak.survivalfabric.config.client.ClientConfigManager.getConfig @Mixin(value = BackgroundRenderer.class, priority = 910) public abstract class BackgroundRendererMixin { + @Unique private static final Fog EMPTY_FOG = new Fog(-8.0f, 1_000_000.0F, FogShape.CYLINDER, 0,0,0,0); @Inject(method = "applyFog", at = @At("RETURN"), cancellable = true) diff --git a/src/main/java/wtf/hak/survivalfabric/features/sharedenderchest/SharedInventory.java b/src/main/java/wtf/hak/survivalfabric/features/sharedenderchest/SharedInventory.java index 3f859b8..614675b 100644 --- a/src/main/java/wtf/hak/survivalfabric/features/sharedenderchest/SharedInventory.java +++ b/src/main/java/wtf/hak/survivalfabric/features/sharedenderchest/SharedInventory.java @@ -57,8 +57,7 @@ public class SharedInventory implements Inventory { @Override public ItemStack removeStack(int int_1, int int_2) { - ItemStack itemStack_1 = Inventories.splitStack(this.stacks, int_1, int_2); - return itemStack_1; + return Inventories.splitStack(this.stacks, int_1, int_2); } @Override diff --git a/src/main/java/wtf/hak/survivalfabric/features/veinminer/VeinMinerSession.java b/src/main/java/wtf/hak/survivalfabric/features/veinminer/VeinMinerSession.java index 08e6eb1..431e065 100644 --- a/src/main/java/wtf/hak/survivalfabric/features/veinminer/VeinMinerSession.java +++ b/src/main/java/wtf/hak/survivalfabric/features/veinminer/VeinMinerSession.java @@ -9,7 +9,7 @@ import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.BlockPos; public class VeinMinerSession { - private static ArrayList sessions = new ArrayList<>(); + private static final ArrayList sessions = new ArrayList<>(); public ServerPlayerEntity player; public ServerWorld world; diff --git a/src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/WoodDrill.java b/src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/WoodDrill.java index 3540621..cbb75a6 100644 --- a/src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/WoodDrill.java +++ b/src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/WoodDrill.java @@ -33,8 +33,8 @@ public class WoodDrill extends DrillBase { public boolean drill(BlockPos startPos) { ServerWorld world = session.world; int broken = 0; - ArrayDeque pendingLogs = new ArrayDeque(); - ArrayDeque logBlocks = new ArrayDeque(); + ArrayDeque pendingLogs = new ArrayDeque<>(); + ArrayDeque logBlocks = new ArrayDeque<>(); pendingLogs.add(startPos); String leavesBlockId = Registries.BLOCK.getId(world.getBlockState(startPos).getBlock()).toString().replace("_log", "_leaves"); @@ -57,11 +57,8 @@ public class WoodDrill extends DrillBase { } } - // second round, leaves - // The pending blocks are all air now, ArrayDeque pendingLeaves = logBlocks; while (!pendingLeaves.isEmpty() && broken < getConfig().maxVeinSize) { - // remove the immediately surrounding leaves around the log blocks broken += forXYZ(pendingLeaves.remove(), 1, newPos -> { int brokenLeaves = 0; Block newBlock = world.getBlockState(newPos).getBlock(); From 9041bacf482f564cf674d948b097d5a4f29500ab Mon Sep 17 00:00:00 2001 From: Hedzer Kuijlman Date: Fri, 11 Apr 2025 17:21:59 +0200 Subject: [PATCH 09/19] Updated README.md --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7a1386c..7486918 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ # ![Logo](https://i.imgur.com/ktkHND1.png) This mod is FAR FROM FINISHED, and initially just created for our private Survival Server. -As a challenge I'm trying to make it as user-friendly as possible. (It ain't there yet tho ;) ) +As a challenge I'm trying to make it as user-friendly as possible. # Current feature-set ## Server Side @@ -58,6 +58,11 @@ As a challenge I'm trying to make it as user-friendly as possible. (It ain't the # Features to come +## General +- Rework config system + - Store server settings in world folder for better singleplayer use + - Rework Mod Menu integration to be more flexible + ## Server Side - Telekinesis From 02d2f624cf81146c6fb55dfec4ca941cc779f440 Mon Sep 17 00:00:00 2001 From: Hedzer Kuijlman Date: Fri, 11 Apr 2025 17:30:08 +0200 Subject: [PATCH 10/19] Code cleanup --- .../survivalfabric/SurvivalFabricClient.java | 12 +- .../SurvivalFabricDataGenerator.java | 6 +- .../config/client/ClientConfigManager.java | 6 +- .../survivalfabric/features/AngleViewer.java | 6 +- .../features/RemoveDarknessEffect.java | 4 +- .../mixin/client/BackgroundRendererMixin.java | 18 +-- .../mixin/client/EntityMixin.java | 8 +- .../survivalfabric.client.mixins.json | 2 +- .../hak/survivalfabric/SurvivalFabric.java | 42 +++--- .../commands/SlimeChunkCommand.java | 4 +- .../survivalfabric/config/ConfigManager.java | 4 +- .../sharedenderchest/SharedEnderChest.java | 138 +++++++++--------- .../sharedenderchest/SharedInventory.java | 6 +- .../features/veinminer/Drill.java | 2 + .../features/veinminer/VeinMinerEvents.java | 17 +-- .../features/veinminer/VeinMinerSession.java | 28 ++-- .../features/veinminer/drills/DrillBase.java | 47 +++--- .../veinminer/drills/LeavesDrill.java | 4 +- .../features/veinminer/drills/OreDrill.java | 9 +- .../features/veinminer/drills/WoodDrill.java | 14 +- .../mixin/PlayerManagerMixin.java | 27 ++-- .../mixin/ServerPlayNetworkHandlerMixin.java | 2 +- .../mixin/ServerPlayerEntityMixin.java | 2 +- .../mixin/ServerWorldMixin.java | 4 +- .../hak/survivalfabric/utils/PacketUtils.java | 2 +- src/main/resources/fabric.mod.json | 92 ++++++------ src/main/resources/survivalfabric.mixins.json | 2 +- 27 files changed, 246 insertions(+), 262 deletions(-) diff --git a/src/client/java/wtf/hak/survivalfabric/SurvivalFabricClient.java b/src/client/java/wtf/hak/survivalfabric/SurvivalFabricClient.java index 94e7367..c4447d2 100644 --- a/src/client/java/wtf/hak/survivalfabric/SurvivalFabricClient.java +++ b/src/client/java/wtf/hak/survivalfabric/SurvivalFabricClient.java @@ -7,10 +7,10 @@ import wtf.hak.survivalfabric.features.RemoveDarknessEffect; public class SurvivalFabricClient implements ClientModInitializer { - @Override - public void onInitializeClient() { - ClientConfigManager.getConfig(); - AngleViewer.register(); - RemoveDarknessEffect.register(); - } + @Override + public void onInitializeClient() { + ClientConfigManager.getConfig(); + AngleViewer.register(); + RemoveDarknessEffect.register(); + } } \ No newline at end of file diff --git a/src/client/java/wtf/hak/survivalfabric/SurvivalFabricDataGenerator.java b/src/client/java/wtf/hak/survivalfabric/SurvivalFabricDataGenerator.java index b14e2d9..1385d79 100644 --- a/src/client/java/wtf/hak/survivalfabric/SurvivalFabricDataGenerator.java +++ b/src/client/java/wtf/hak/survivalfabric/SurvivalFabricDataGenerator.java @@ -4,8 +4,8 @@ import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint; import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator; public class SurvivalFabricDataGenerator implements DataGeneratorEntrypoint { - @Override - public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) { + @Override + public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) { - } + } } diff --git a/src/client/java/wtf/hak/survivalfabric/config/client/ClientConfigManager.java b/src/client/java/wtf/hak/survivalfabric/config/client/ClientConfigManager.java index d0cedfd..84f9da2 100644 --- a/src/client/java/wtf/hak/survivalfabric/config/client/ClientConfigManager.java +++ b/src/client/java/wtf/hak/survivalfabric/config/client/ClientConfigManager.java @@ -25,7 +25,7 @@ public class ClientConfigManager { } public static ClientConfig load() { - try(FileReader reader = new FileReader(CONFIG_FILE)) { + try (FileReader reader = new FileReader(CONFIG_FILE)) { INSTANCE = GSON.fromJson(reader, ClientConfig.class); if (INSTANCE.configVersion.equalsIgnoreCase(new Config().configVersion)) { return INSTANCE; @@ -41,12 +41,12 @@ public class ClientConfigManager { } } - public static void save(){ + public static void save() { save(INSTANCE); } public static void save(ClientConfig config) { - try(FileWriter writer = new FileWriter(CONFIG_FILE)) { + try (FileWriter writer = new FileWriter(CONFIG_FILE)) { GSON.toJson(config, writer); } catch (IOException e) { System.out.println("Error saving config: " + e.getMessage()); diff --git a/src/client/java/wtf/hak/survivalfabric/features/AngleViewer.java b/src/client/java/wtf/hak/survivalfabric/features/AngleViewer.java index 3a1ede1..1cdc78f 100644 --- a/src/client/java/wtf/hak/survivalfabric/features/AngleViewer.java +++ b/src/client/java/wtf/hak/survivalfabric/features/AngleViewer.java @@ -17,7 +17,7 @@ public class AngleViewer { public static boolean PREVENT_HEAD_MOVEMENT = false; public static void register() { - for(Angle angle : Angle.values()) { + for (Angle angle : Angle.values()) { KeyBinding keyBinding = KeyBindingHelper.registerKeyBinding(new KeyBinding( "key.survivalfabric." + angle.name().toLowerCase(), InputUtil.Type.KEYSYM, @@ -28,14 +28,14 @@ public class AngleViewer { ClientTickEvents.END_CLIENT_TICK.register(mc -> { while (keyBinding.wasPressed()) { ClientPlayerEntity player = mc.player; - if(player == null) return; + if (player == null) return; player.setYaw(angle.yaw); player.setPitch(angle.pitch); PREVENT_HEAD_MOVEMENT = true; scheduler.schedule(() -> { - if(player == null) return; + if (player == null) return; PREVENT_HEAD_MOVEMENT = false; player.setPitch(-90); PREVENT_HEAD_MOVEMENT = true; diff --git a/src/client/java/wtf/hak/survivalfabric/features/RemoveDarknessEffect.java b/src/client/java/wtf/hak/survivalfabric/features/RemoveDarknessEffect.java index 2744053..c1d8d6c 100644 --- a/src/client/java/wtf/hak/survivalfabric/features/RemoveDarknessEffect.java +++ b/src/client/java/wtf/hak/survivalfabric/features/RemoveDarknessEffect.java @@ -9,9 +9,9 @@ public class RemoveDarknessEffect { public static void register() { ClientTickEvents.END_CLIENT_TICK.register(client -> { - if(client.player != null && ClientConfigManager.getConfig().removeDarknessEffect){ + if (client.player != null && ClientConfigManager.getConfig().removeDarknessEffect) { StatusEffectInstance darknessEffect = client.player.getStatusEffect(StatusEffects.DARKNESS); - if(darknessEffect != null) + if (darknessEffect != null) client.player.removeStatusEffect(darknessEffect.getEffectType()); } }); diff --git a/src/client/java/wtf/hak/survivalfabric/mixin/client/BackgroundRendererMixin.java b/src/client/java/wtf/hak/survivalfabric/mixin/client/BackgroundRendererMixin.java index 56cb7f5..9270448 100644 --- a/src/client/java/wtf/hak/survivalfabric/mixin/client/BackgroundRendererMixin.java +++ b/src/client/java/wtf/hak/survivalfabric/mixin/client/BackgroundRendererMixin.java @@ -19,28 +19,28 @@ import static wtf.hak.survivalfabric.config.client.ClientConfigManager.getConfig public abstract class BackgroundRendererMixin { @Unique - private static final Fog EMPTY_FOG = new Fog(-8.0f, 1_000_000.0F, FogShape.CYLINDER, 0,0,0,0); + private static final Fog EMPTY_FOG = new Fog(-8.0f, 1_000_000.0F, FogShape.CYLINDER, 0, 0, 0, 0); @Inject(method = "applyFog", at = @At("RETURN"), cancellable = true) private static void applyFog(Camera camera, BackgroundRenderer.FogType fogType, Vector4f color, float viewDistance, boolean thickenFog, float tickProgress, CallbackInfoReturnable cir) { boolean renderFog = true; CameraSubmersionType subType = camera.getSubmersionType(); - if(subType == CameraSubmersionType.NONE) { + if (subType == CameraSubmersionType.NONE) { World world = camera.getFocusedEntity().getWorld(); - if(world.getRegistryKey() == World.OVERWORLD && !getConfig().renderOverworldFog) + if (world.getRegistryKey() == World.OVERWORLD && !getConfig().renderOverworldFog) renderFog = false; - else if(world.getRegistryKey() == World.NETHER && !getConfig().renderNetherFog) + else if (world.getRegistryKey() == World.NETHER && !getConfig().renderNetherFog) renderFog = false; - else if(world.getRegistryKey() == World.END && !getConfig().renderEndFog) + else if (world.getRegistryKey() == World.END && !getConfig().renderEndFog) renderFog = false; - } else if(subType == CameraSubmersionType.WATER && !getConfig().renderWaterFog) + } else if (subType == CameraSubmersionType.WATER && !getConfig().renderWaterFog) renderFog = false; - else if(subType == CameraSubmersionType.LAVA && !getConfig().renderLavaFog) + else if (subType == CameraSubmersionType.LAVA && !getConfig().renderLavaFog) renderFog = false; - else if(subType == CameraSubmersionType.POWDER_SNOW && !getConfig().renderSnowFog) + else if (subType == CameraSubmersionType.POWDER_SNOW && !getConfig().renderSnowFog) renderFog = false; - if(!renderFog) + if (!renderFog) cir.setReturnValue(EMPTY_FOG); } } diff --git a/src/client/java/wtf/hak/survivalfabric/mixin/client/EntityMixin.java b/src/client/java/wtf/hak/survivalfabric/mixin/client/EntityMixin.java index 5aca6bd..e5beae8 100644 --- a/src/client/java/wtf/hak/survivalfabric/mixin/client/EntityMixin.java +++ b/src/client/java/wtf/hak/survivalfabric/mixin/client/EntityMixin.java @@ -13,8 +13,8 @@ public abstract class EntityMixin { @Inject(method = "setYaw", at = @At("HEAD"), cancellable = true) private void preventYawChange(float yaw, CallbackInfo ci) { - if((Object) this instanceof ClientPlayerEntity player) { - if(player.isMainPlayer() && AngleViewer.PREVENT_HEAD_MOVEMENT) { + if ((Object) this instanceof ClientPlayerEntity player) { + if (player.isMainPlayer() && AngleViewer.PREVENT_HEAD_MOVEMENT) { ci.cancel(); } } @@ -22,8 +22,8 @@ public abstract class EntityMixin { @Inject(method = "setPitch", at = @At("HEAD"), cancellable = true) private void preventPitchChange(float pitch, CallbackInfo ci) { - if((Object) this instanceof ClientPlayerEntity player) { - if(player.isMainPlayer() && AngleViewer.PREVENT_HEAD_MOVEMENT) { + if ((Object) this instanceof ClientPlayerEntity player) { + if (player.isMainPlayer() && AngleViewer.PREVENT_HEAD_MOVEMENT) { ci.cancel(); } } diff --git a/src/client/resources/survivalfabric.client.mixins.json b/src/client/resources/survivalfabric.client.mixins.json index 9c10e21..6e215a6 100644 --- a/src/client/resources/survivalfabric.client.mixins.json +++ b/src/client/resources/survivalfabric.client.mixins.json @@ -8,5 +8,5 @@ ], "injectors": { "defaultRequire": 1 - } + } } \ No newline at end of file diff --git a/src/main/java/wtf/hak/survivalfabric/SurvivalFabric.java b/src/main/java/wtf/hak/survivalfabric/SurvivalFabric.java index 23043a2..0af8e4b 100644 --- a/src/main/java/wtf/hak/survivalfabric/SurvivalFabric.java +++ b/src/main/java/wtf/hak/survivalfabric/SurvivalFabric.java @@ -1,7 +1,6 @@ package wtf.hak.survivalfabric; import net.fabricmc.api.ModInitializer; - import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerEntityEvents; import net.fabricmc.fabric.api.event.player.PlayerBlockBreakEvents; @@ -18,30 +17,29 @@ import static wtf.hak.survivalfabric.config.ConfigManager.getConfig; public class SurvivalFabric implements ModInitializer { - public static final String MOD_ID = "survivalfabric"; + public static final String MOD_ID = "survivalfabric"; - public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID); + public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID); - @Override - public void onInitialize() { - CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> SpectatorCommand.register(dispatcher, new String[] { "spectator", "s", "S", "camera", "c", "C", })); - CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> ReloadConfigCommand.register(dispatcher, new String[] { "reloadsurvivalconfig" })); - CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> SlimeChunkCommand.register(dispatcher, new String[] { "slimechunk", "sc" })); + @Override + public void onInitialize() { + CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> SpectatorCommand.register(dispatcher, "spectator", "s", "S", "camera", "c", "C")); + CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> ReloadConfigCommand.register(dispatcher, "reloadsurvivalconfig")); + CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> SlimeChunkCommand.register(dispatcher, "slimechunk", "sc")); - if(getConfig().sharedEnderChestEnabled) - new SharedEnderChest().onInitialize(); + if (getConfig().sharedEnderChestEnabled) + new SharedEnderChest().onInitialize(); - if(getConfig().veinMinerEnabled) { - PlayerBlockBreakEvents.BEFORE.register((world, player, pos, state, blockEntity) -> { - if (player instanceof ServerPlayerEntity serverPlayer) { - return VeinMinerEvents.beforeBlockBreak(world, serverPlayer, pos, state); - } - else { - return true; - } - }); + if (getConfig().veinMinerEnabled) { + PlayerBlockBreakEvents.BEFORE.register((world, player, pos, state, blockEntity) -> { + if (player instanceof ServerPlayerEntity serverPlayer) { + return VeinMinerEvents.beforeBlockBreak(world, serverPlayer, pos, state); + } else { + return true; + } + }); - ServerEntityEvents.ENTITY_LOAD.register(VeinMinerEvents::onEntityLoad); - } - } + ServerEntityEvents.ENTITY_LOAD.register(VeinMinerEvents::onEntityLoad); + } + } } \ No newline at end of file diff --git a/src/main/java/wtf/hak/survivalfabric/commands/SlimeChunkCommand.java b/src/main/java/wtf/hak/survivalfabric/commands/SlimeChunkCommand.java index fa0e7de..bd0bc90 100644 --- a/src/main/java/wtf/hak/survivalfabric/commands/SlimeChunkCommand.java +++ b/src/main/java/wtf/hak/survivalfabric/commands/SlimeChunkCommand.java @@ -6,11 +6,9 @@ import net.minecraft.server.command.CommandManager; import net.minecraft.server.command.ServerCommandSource; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.Text; -import net.minecraft.util.math.random.CheckedRandom; import net.minecraft.util.math.random.ChunkRandom; import net.minecraft.util.math.random.Random; import net.minecraft.world.chunk.Chunk; -import wtf.hak.survivalfabric.config.ConfigManager; import static wtf.hak.survivalfabric.config.ConfigManager.getConfig; @@ -31,7 +29,7 @@ public class SlimeChunkCommand { ServerPlayerEntity p = (ServerPlayerEntity) source.getEntity(); Chunk chunk = p.getServerWorld().getChunk(p.getBlockPos()); Random slimeRandom = ChunkRandom.getSlimeRandom(chunk.getPos().x, chunk.getPos().z, p.getServerWorld().getSeed(), 987234911L); - if(slimeRandom.nextInt(10) == 0) { + if (slimeRandom.nextInt(10) == 0) { p.sendMessage(Text.literal(getConfig().inSlimeChunkMessage)); } else p.sendMessage(Text.literal(getConfig().notInSlimeChunkMessage)); diff --git a/src/main/java/wtf/hak/survivalfabric/config/ConfigManager.java b/src/main/java/wtf/hak/survivalfabric/config/ConfigManager.java index 3742424..82c3023 100644 --- a/src/main/java/wtf/hak/survivalfabric/config/ConfigManager.java +++ b/src/main/java/wtf/hak/survivalfabric/config/ConfigManager.java @@ -24,7 +24,7 @@ public class ConfigManager { } public static Config load() { - try(FileReader reader = new FileReader(CONFIG_FILE)) { + try (FileReader reader = new FileReader(CONFIG_FILE)) { INSTANCE = GSON.fromJson(reader, Config.class); if (INSTANCE.configVersion.equalsIgnoreCase(new Config().configVersion)) { return INSTANCE; @@ -41,7 +41,7 @@ public class ConfigManager { } public static void save(Config config) { - try(FileWriter writer = new FileWriter(CONFIG_FILE)) { + try (FileWriter writer = new FileWriter(CONFIG_FILE)) { GSON.toJson(config, writer); } catch (IOException e) { System.out.println("Error saving config: " + e.getMessage()); diff --git a/src/main/java/wtf/hak/survivalfabric/features/sharedenderchest/SharedEnderChest.java b/src/main/java/wtf/hak/survivalfabric/features/sharedenderchest/SharedEnderChest.java index 05318c7..2f8fde5 100644 --- a/src/main/java/wtf/hak/survivalfabric/features/sharedenderchest/SharedEnderChest.java +++ b/src/main/java/wtf/hak/survivalfabric/features/sharedenderchest/SharedEnderChest.java @@ -1,15 +1,8 @@ package wtf.hak.survivalfabric.features.sharedenderchest; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; - -import net.fabricmc.fabric.api.event.player.UseBlockCallback; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; - +import net.fabricmc.fabric.api.event.player.UseBlockCallback; import net.minecraft.block.Blocks; import net.minecraft.block.EnderChestBlock; import net.minecraft.entity.player.PlayerEntity; @@ -24,11 +17,14 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.sound.SoundCategory; import net.minecraft.sound.SoundEvents; import net.minecraft.text.Text; -import net.minecraft.util.*; +import net.minecraft.util.ActionResult; +import net.minecraft.util.WorldSavePath; import net.minecraft.util.collection.DefaultedList; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import java.io.*; + import static wtf.hak.survivalfabric.SurvivalFabric.LOGGER; import static wtf.hak.survivalfabric.config.ConfigManager.getConfig; @@ -38,24 +34,6 @@ public class SharedEnderChest implements ServerLifecycleEvents.ServerStopping, S private long ticksUntilSave = -20; - public void onServerStarted(MinecraftServer server) { - File inventoryFile = getFile(server); - if (inventoryFile.exists()) { - try (FileInputStream inventoryFileInputStream = new FileInputStream(inventoryFile); - DataInputStream inventoryFileDataInput = new DataInputStream(inventoryFileInputStream)) { - NbtCompound nbt = NbtIo.readCompressed(inventoryFileDataInput, NbtSizeTracker.ofUnlimitedBytes()); - DefaultedList inventoryItemStacks = DefaultedList.ofSize(getConfig().sharedEnderChestRows * 9, ItemStack.EMPTY); - Inventories.readNbt(nbt, inventoryItemStacks, server.getRegistryManager()); - sharedInventory = new SharedInventory(inventoryItemStacks); - } catch (Exception e) { - LOGGER.error("Error while loading Shared Ender Chest: " + e); - sharedInventory = new SharedInventory(getConfig().sharedEnderChestRows); - } - } else { - sharedInventory = new SharedInventory(getConfig().sharedEnderChestRows); - } - } - public static void saveInventory(MinecraftServer server) { File inventoryFile = getFile(server); NbtCompound nbt = new NbtCompound(); @@ -69,48 +47,6 @@ public class SharedEnderChest implements ServerLifecycleEvents.ServerStopping, S LOGGER.error("Error while saving Shared Ender Chest: " + e); } } - public void onServerStopping(MinecraftServer server) { - saveInventory(server); - } - - public void onEndTick(MinecraftServer server) { - if (ticksUntilSave != -20 && --ticksUntilSave <= 0L) { - saveInventory(server); - ticksUntilSave = 20L; - } - } - - public void onInitialize() { - ticksUntilSave = 20L; - - UseBlockCallback listenerUseBlock = (player, world, hand, hitResult) -> { - - if (world.getBlockState(hitResult.getBlockPos()).getBlock() instanceof EnderChestBlock) { - if (!player.isSpectator()) { - if(!getConfig().sharedEnderChestLimitedAccess) { - if (world.isClient()) return ActionResult.SUCCESS; - openSharedEnderChest(player, world, hitResult.getBlockPos()); - return ActionResult.SUCCESS; - } else { - for(String name : getConfig().sharedEnderChestNames) { - if(name.toLowerCase().strip().equalsIgnoreCase(player.getNameForScoreboard().toLowerCase())) { - if (world.isClient()) return ActionResult.SUCCESS; - openSharedEnderChest(player, world, hitResult.getBlockPos()); - return ActionResult.SUCCESS; - } - } - } - } - } - return ActionResult.PASS; - }; - - UseBlockCallback.EVENT.register(listenerUseBlock); - ServerLifecycleEvents.SERVER_STARTED.register(this); - ServerLifecycleEvents.SERVER_STOPPING.register(this); - ServerTickEvents.END_SERVER_TICK.register(this); - - } public static void openSharedEnderChest(PlayerEntity player, World world, BlockPos pos) { fakeEnderChestOpen(world, pos, true); @@ -132,16 +68,76 @@ public class SharedEnderChest implements ServerLifecycleEvents.ServerStopping, S return; } - if(open) + if (open) playEnderChestOpenSound(world, pos); else playEnderChestCloseSound(world, pos); world.addSyncedBlockEvent(pos, Blocks.ENDER_CHEST, 1, open ? 1 : 0); } - private static File getFile(MinecraftServer server) { return server.getSavePath(WorldSavePath.ROOT).resolve("sharedenderchest.sav").toFile(); } + public void onServerStarted(MinecraftServer server) { + File inventoryFile = getFile(server); + if (inventoryFile.exists()) { + try (FileInputStream inventoryFileInputStream = new FileInputStream(inventoryFile); + DataInputStream inventoryFileDataInput = new DataInputStream(inventoryFileInputStream)) { + NbtCompound nbt = NbtIo.readCompressed(inventoryFileDataInput, NbtSizeTracker.ofUnlimitedBytes()); + DefaultedList inventoryItemStacks = DefaultedList.ofSize(getConfig().sharedEnderChestRows * 9, ItemStack.EMPTY); + Inventories.readNbt(nbt, inventoryItemStacks, server.getRegistryManager()); + sharedInventory = new SharedInventory(inventoryItemStacks); + } catch (Exception e) { + LOGGER.error("Error while loading Shared Ender Chest: " + e); + sharedInventory = new SharedInventory(getConfig().sharedEnderChestRows); + } + } else { + sharedInventory = new SharedInventory(getConfig().sharedEnderChestRows); + } + } + + public void onServerStopping(MinecraftServer server) { + saveInventory(server); + } + + public void onEndTick(MinecraftServer server) { + if (ticksUntilSave != -20 && --ticksUntilSave <= 0L) { + saveInventory(server); + ticksUntilSave = 20L; + } + } + + public void onInitialize() { + ticksUntilSave = 20L; + + UseBlockCallback listenerUseBlock = (player, world, hand, hitResult) -> { + + if (world.getBlockState(hitResult.getBlockPos()).getBlock() instanceof EnderChestBlock) { + if (!player.isSpectator()) { + if (!getConfig().sharedEnderChestLimitedAccess) { + if (world.isClient()) return ActionResult.SUCCESS; + openSharedEnderChest(player, world, hitResult.getBlockPos()); + return ActionResult.SUCCESS; + } else { + for (String name : getConfig().sharedEnderChestNames) { + if (name.toLowerCase().strip().equalsIgnoreCase(player.getNameForScoreboard().toLowerCase())) { + if (world.isClient()) return ActionResult.SUCCESS; + openSharedEnderChest(player, world, hitResult.getBlockPos()); + return ActionResult.SUCCESS; + } + } + } + } + } + return ActionResult.PASS; + }; + + UseBlockCallback.EVENT.register(listenerUseBlock); + ServerLifecycleEvents.SERVER_STARTED.register(this); + ServerLifecycleEvents.SERVER_STOPPING.register(this); + ServerTickEvents.END_SERVER_TICK.register(this); + + } + } \ No newline at end of file diff --git a/src/main/java/wtf/hak/survivalfabric/features/sharedenderchest/SharedInventory.java b/src/main/java/wtf/hak/survivalfabric/features/sharedenderchest/SharedInventory.java index 614675b..ec4dba6 100644 --- a/src/main/java/wtf/hak/survivalfabric/features/sharedenderchest/SharedInventory.java +++ b/src/main/java/wtf/hak/survivalfabric/features/sharedenderchest/SharedInventory.java @@ -12,8 +12,8 @@ import java.util.Map; public class SharedInventory implements Inventory { - private final DefaultedList stacks; public final Map openedEnderChests = new HashMap<>(); + private final DefaultedList stacks; public SharedInventory(int inventoryRows) { this.stacks = DefaultedList.ofSize(inventoryRows * 9, ItemStack.EMPTY); @@ -45,7 +45,7 @@ public class SharedInventory implements Inventory { } itemStack_1 = var1.next(); - } while(itemStack_1.isEmpty()); + } while (itemStack_1.isEmpty()); return false; } @@ -88,7 +88,7 @@ public class SharedInventory implements Inventory { @Override public void onClose(PlayerEntity player) { BlockPos pos = openedEnderChests.remove(player); - if(openedEnderChests.containsValue(pos)) + if (openedEnderChests.containsValue(pos)) return; SharedEnderChest.fakeEnderChestOpen(player.getWorld(), pos, false); } diff --git a/src/main/java/wtf/hak/survivalfabric/features/veinminer/Drill.java b/src/main/java/wtf/hak/survivalfabric/features/veinminer/Drill.java index 35e8408..3ea597a 100644 --- a/src/main/java/wtf/hak/survivalfabric/features/veinminer/Drill.java +++ b/src/main/java/wtf/hak/survivalfabric/features/veinminer/Drill.java @@ -5,6 +5,8 @@ import net.minecraft.util.math.BlockPos; public interface Drill { boolean canHandle(BlockState blockState); + boolean isRightTool(BlockPos pos); + boolean drill(BlockPos blockPos); } \ No newline at end of file diff --git a/src/main/java/wtf/hak/survivalfabric/features/veinminer/VeinMinerEvents.java b/src/main/java/wtf/hak/survivalfabric/features/veinminer/VeinMinerEvents.java index b31537d..9d3a301 100644 --- a/src/main/java/wtf/hak/survivalfabric/features/veinminer/VeinMinerEvents.java +++ b/src/main/java/wtf/hak/survivalfabric/features/veinminer/VeinMinerEvents.java @@ -20,26 +20,25 @@ public class VeinMinerEvents { boolean isVeinMining = VeinMinerSession.sessionForPlayer(player) != null; boolean canVeinMine = player.isInSneakingPose(); if (canVeinMine && !isVeinMining) { - VeinMinerSession session = VeinMinerSession.start(player, (ServerWorld)world, pos); + VeinMinerSession session = VeinMinerSession.start(player, (ServerWorld) world, pos); boolean shouldContinue = !mine(session); session.finish(); return shouldContinue; - } - else { + } else { return true; } } public static void onEntityLoad(Entity entity, ServerWorld world) { - BlockPos pos = entity.getBlockPos(); - VeinMinerSession session = VeinMinerSession.sessionForPosition(pos); - if (session != null) { - entity.setPos(session.initialPos.getX(), session.initialPos.getY(), session.initialPos.getZ()); - } + BlockPos pos = entity.getBlockPos(); + VeinMinerSession session = VeinMinerSession.sessionForPosition(pos); + if (session != null) { + entity.setPos(session.initialPos.getX(), session.initialPos.getY(), session.initialPos.getZ()); + } } private static boolean mine(VeinMinerSession session) { - Drill[] drills = new Drill[] { + Drill[] drills = new Drill[]{ new OreDrill(session), new WoodDrill(session), new LeavesDrill(session) diff --git a/src/main/java/wtf/hak/survivalfabric/features/veinminer/VeinMinerSession.java b/src/main/java/wtf/hak/survivalfabric/features/veinminer/VeinMinerSession.java index 431e065..e727b60 100644 --- a/src/main/java/wtf/hak/survivalfabric/features/veinminer/VeinMinerSession.java +++ b/src/main/java/wtf/hak/survivalfabric/features/veinminer/VeinMinerSession.java @@ -1,13 +1,13 @@ package wtf.hak.survivalfabric.features.veinminer; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Set; - import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.BlockPos; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Set; + public class VeinMinerSession { private static final ArrayList sessions = new ArrayList<>(); @@ -16,8 +16,16 @@ public class VeinMinerSession { public Set positions; public BlockPos initialPos; + private VeinMinerSession(ServerPlayerEntity player, ServerWorld world, BlockPos initialPos) { + this.player = player; + this.world = world; + this.initialPos = initialPos; + this.positions = new HashSet<>(); + positions.add(initialPos); + } + public static VeinMinerSession sessionForPlayer(ServerPlayerEntity player) { - for (var session: sessions) { + for (var session : sessions) { if (session.player == player) { return session; } @@ -26,7 +34,7 @@ public class VeinMinerSession { } public static VeinMinerSession sessionForPosition(BlockPos position) { - for (var session: sessions) { + for (var session : sessions) { if (session.positions.contains(position)) { return session; } @@ -44,14 +52,6 @@ public class VeinMinerSession { sessions.remove(session); } - private VeinMinerSession(ServerPlayerEntity player, ServerWorld world, BlockPos initialPos) { - this.player = player; - this.world = world; - this.initialPos = initialPos; - this.positions = new HashSet<>(); - positions.add(initialPos); - } - public void addPosition(BlockPos pos) { positions.add(pos); } diff --git a/src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/DrillBase.java b/src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/DrillBase.java index 977ff12..edf69da 100644 --- a/src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/DrillBase.java +++ b/src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/DrillBase.java @@ -1,8 +1,6 @@ package wtf.hak.survivalfabric.features.veinminer.drills; + import net.minecraft.block.BlockState; - -import java.util.ArrayList; - import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.MutableText; import net.minecraft.text.PlainTextContent; @@ -11,6 +9,8 @@ import net.minecraft.util.math.BlockPos; import wtf.hak.survivalfabric.features.veinminer.Drill; import wtf.hak.survivalfabric.features.veinminer.VeinMinerSession; +import java.util.ArrayList; + import static wtf.hak.survivalfabric.SurvivalFabric.LOGGER; public class DrillBase implements Drill { @@ -37,14 +37,6 @@ public class DrillBase implements Drill { return session.player.getMainHandStack().isSuitableFor(blockState); } - protected interface ForXYZHandler { - public void handle(BlockPos pos); - } - - protected interface ForXYZCounter { - public int handle(BlockPos pos); - } - protected void forXYZ(BlockPos pos, int max, ForXYZHandler handler) { forXYZ(pos, max, handlerPos -> { handler.handle(handlerPos); @@ -72,33 +64,30 @@ public class DrillBase implements Drill { } } - String[] order = new String[] { "x", "y", "z" }; + String[] order = new String[]{"x", "y", "z"}; if (forceVertical) { - order = new String[] { "y", "x", "z" }; - } - else { + order = new String[]{"y", "x", "z"}; + } else { ServerPlayerEntity player = session.player; boolean majorPitchChange = player.getPitch() < -45.0 || player.getPitch() > 45.0; boolean majorYawChange = (player.getYaw() > 45.0 && player.getYaw() < 135.0) || (player.getYaw() < -45.0 && player.getYaw() > -135.0); if (majorPitchChange) { if (majorYawChange) { - order = new String[] { "y", "z", "x" }; + order = new String[]{"y", "z", "x"}; + } else { + order = new String[]{"y", "x", "z"}; } - else { - order = new String[] { "y", "x", "z" }; - } - } - else { + } else { if (majorYawChange) { - order = new String[] { "z", "y", "x" }; + order = new String[]{"z", "y", "x"}; } } } int counter = 0; - for (int i1: offsets) { - for (int i2: offsets) { - for (int i3: offsets) { + for (int i1 : offsets) { + for (int i2 : offsets) { + for (int i3 : offsets) { int ix = order[0] == "x" ? i1 : order[1] == "x" ? i2 : i3; int iy = order[0] == "y" ? i1 : order[1] == "y" ? i2 : i3; int iz = order[0] == "z" ? i1 : order[1] == "z" ? i2 : i3; @@ -130,4 +119,12 @@ public class DrillBase implements Drill { session.player.sendMessage(text); LOGGER.info(message); } + + protected interface ForXYZHandler { + void handle(BlockPos pos); + } + + protected interface ForXYZCounter { + int handle(BlockPos pos); + } } \ No newline at end of file diff --git a/src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/LeavesDrill.java b/src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/LeavesDrill.java index 4e1effd..3b56798 100644 --- a/src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/LeavesDrill.java +++ b/src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/LeavesDrill.java @@ -15,12 +15,12 @@ import static wtf.hak.survivalfabric.config.ConfigManager.getConfig; public class LeavesDrill extends DrillBase { + public static final TagKey leavesTag = TagKey.of(RegistryKeys.BLOCK, Identifier.of("survivalfabric", "leaves")); + public LeavesDrill(VeinMinerSession session) { super(session); } - public static final TagKey leavesTag = TagKey.of(RegistryKeys.BLOCK, Identifier.of("survivalfabric", "leaves")); - @Override public boolean canHandle(BlockState blockState) { return blockState.isIn(leavesTag); diff --git a/src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/OreDrill.java b/src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/OreDrill.java index 14664f3..55675cc 100644 --- a/src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/OreDrill.java +++ b/src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/OreDrill.java @@ -6,22 +6,21 @@ import net.minecraft.registry.RegistryKeys; import net.minecraft.registry.tag.TagKey; import net.minecraft.server.world.ServerWorld; import net.minecraft.util.Identifier; - -import java.util.ArrayDeque; - import net.minecraft.util.math.BlockPos; import wtf.hak.survivalfabric.features.veinminer.VeinMinerSession; +import java.util.ArrayDeque; + import static wtf.hak.survivalfabric.config.ConfigManager.getConfig; public class OreDrill extends DrillBase { + public static final TagKey oreTag = TagKey.of(RegistryKeys.BLOCK, Identifier.of("survivalfabric", "ore")); + public OreDrill(VeinMinerSession session) { super(session); } - public static final TagKey oreTag = TagKey.of(RegistryKeys.BLOCK, Identifier.of("survivalfabric", "ore")); - @Override public boolean canHandle(BlockState blockState) { return blockState.isIn(oreTag); diff --git a/src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/WoodDrill.java b/src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/WoodDrill.java index cbb75a6..1c32d9b 100644 --- a/src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/WoodDrill.java +++ b/src/main/java/wtf/hak/survivalfabric/features/veinminer/drills/WoodDrill.java @@ -1,29 +1,27 @@ package wtf.hak.survivalfabric.features.veinminer.drills; +import net.minecraft.block.Block; import net.minecraft.block.BlockState; +import net.minecraft.registry.Registries; import net.minecraft.registry.RegistryKeys; import net.minecraft.registry.tag.TagKey; import net.minecraft.server.world.ServerWorld; import net.minecraft.util.Identifier; - - -import java.util.ArrayDeque; - -import net.minecraft.block.Block; -import net.minecraft.registry.Registries; import net.minecraft.util.math.BlockPos; import wtf.hak.survivalfabric.features.veinminer.VeinMinerSession; +import java.util.ArrayDeque; + import static wtf.hak.survivalfabric.config.ConfigManager.getConfig; public class WoodDrill extends DrillBase { + public static final TagKey woodTag = TagKey.of(RegistryKeys.BLOCK, Identifier.of("survivalfabric", "wood")); + public WoodDrill(VeinMinerSession session) { super(session); } - public static final TagKey woodTag = TagKey.of(RegistryKeys.BLOCK, Identifier.of("survivalfabric", "wood")); - @Override public boolean canHandle(BlockState blockState) { return blockState.isIn(woodTag); diff --git a/src/main/java/wtf/hak/survivalfabric/mixin/PlayerManagerMixin.java b/src/main/java/wtf/hak/survivalfabric/mixin/PlayerManagerMixin.java index e97cc76..a1b54ff 100644 --- a/src/main/java/wtf/hak/survivalfabric/mixin/PlayerManagerMixin.java +++ b/src/main/java/wtf/hak/survivalfabric/mixin/PlayerManagerMixin.java @@ -1,10 +1,8 @@ package wtf.hak.survivalfabric.mixin; -import com.mojang.authlib.minecraft.client.MinecraftClient; import net.minecraft.network.ClientConnection; import net.minecraft.network.message.MessageType; import net.minecraft.network.message.SignedMessage; -import net.minecraft.server.MinecraftServer; import net.minecraft.server.PlayerManager; import net.minecraft.server.network.ConnectedClientData; import net.minecraft.server.network.ServerPlayerEntity; @@ -18,9 +16,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import wtf.hak.survivalfabric.commands.SpectatorCommand; import wtf.hak.survivalfabric.config.ConfigManager; -import java.awt.*; -import java.beans.Expression; -import java.util.Objects; import java.util.Set; @Mixin(PlayerManager.class) @@ -28,7 +23,7 @@ public abstract class PlayerManagerMixin { @Inject(method = {"onPlayerConnect"}, at = {@At(value = "INVOKE", target = "Lnet/minecraft/server/PlayerManager;broadcast(Lnet/minecraft/text/Text;Z)V")}) public void onPlayerConnect(ClientConnection connection, ServerPlayerEntity player, ConnectedClientData clientData, CallbackInfo ci) { - if(ConfigManager.getConfig().joinMessageEnabled && !player.getServer().isSingleplayer()) { + if (ConfigManager.getConfig().joinMessageEnabled && !player.getServer().isSingleplayer()) { Text text = Text.literal(String.format(ConfigManager.getConfig().joinMessage, player.getName().getString())); player.sendMessage(text, false); } @@ -36,7 +31,7 @@ public abstract class PlayerManagerMixin { @ModifyArg(method = {"onPlayerConnect"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/server/PlayerManager;broadcast(Lnet/minecraft/text/Text;Z)V")) private Text onPlayerConnect(Text text) { - if(ConfigManager.getConfig().joinMessageEnabled) { + if (ConfigManager.getConfig().joinMessageEnabled) { String name = text.getString().split(" ")[0]; return Text.literal(String.format(ConfigManager.getConfig().joinMessage, name)); } else @@ -45,24 +40,25 @@ public abstract class PlayerManagerMixin { @Inject(method = {"remove"}, at = {@At("HEAD")}) public void onPlayerLeave(ServerPlayerEntity player, CallbackInfo ci) { - if(SpectatorCommand.spectating.containsKey(player)) { + if (SpectatorCommand.spectating.containsKey(player)) { SpectatorCommand.LocationData loc = SpectatorCommand.spectating.remove(player); - player.teleport(loc.world, loc.x,loc.y,loc.z, Set.of(), loc.yaw, loc.pitch, false); + player.teleport(loc.world, loc.x, loc.y, loc.z, Set.of(), loc.yaw, loc.pitch, false); player.changeGameMode(GameMode.SURVIVAL); } } @Inject(method = {"broadcast(Lnet/minecraft/network/message/SignedMessage;Lnet/minecraft/server/network/ServerPlayerEntity;Lnet/minecraft/network/message/MessageType$Parameters;)V"}, at = {@At("HEAD")}, cancellable = true) private void onBroadcast(SignedMessage message, ServerPlayerEntity sender, MessageType.Parameters parameters, CallbackInfo ci) { - if(sender != null && ConfigManager.getConfig().chatMessageEnabled) { + if (sender != null && ConfigManager.getConfig().chatMessageEnabled) { String rawMessage = message.getContent().getString().trim(); - if(sender != null && ConfigManager.getConfig().chatCalcEnabled && rawMessage.endsWith("=")) { + if (sender != null && ConfigManager.getConfig().chatCalcEnabled && rawMessage.endsWith("=")) { String expression = rawMessage.substring(0, rawMessage.length() - 1).trim(); try { String result = String.valueOf(evaluateExpression(expression)); - if(rawMessage.contains(" ")) rawMessage += " "; + if (rawMessage.contains(" ")) rawMessage += " "; rawMessage += (result.endsWith(".0")) ? result.substring(0, result.length() - 2) : result; - } catch (Exception e) {} + } catch (Exception e) { + } } Text text = Text.literal(String.format(ConfigManager.getConfig().chatMessage, sender.getName().getString(), rawMessage)); sender.getServer().getPlayerManager().broadcast(text, false); @@ -73,12 +69,13 @@ public abstract class PlayerManagerMixin { String expression = rawMessage.substring(0, rawMessage.length() - 1).trim(); try { String result = String.valueOf(evaluateExpression(expression)); - if(rawMessage.contains(" ")) rawMessage += " "; + if (rawMessage.contains(" ")) rawMessage += " "; rawMessage += (result.endsWith(".0")) ? result.substring(0, result.length() - 2) : result; Text formattedMessage = Text.literal("<" + sender.getName().getString() + "> " + rawMessage); sender.getServer().getPlayerManager().broadcast(formattedMessage, false); ci.cancel(); - } catch (Exception e) {} + } catch (Exception e) { + } } } } diff --git a/src/main/java/wtf/hak/survivalfabric/mixin/ServerPlayNetworkHandlerMixin.java b/src/main/java/wtf/hak/survivalfabric/mixin/ServerPlayNetworkHandlerMixin.java index c9c5294..8d2caf9 100644 --- a/src/main/java/wtf/hak/survivalfabric/mixin/ServerPlayNetworkHandlerMixin.java +++ b/src/main/java/wtf/hak/survivalfabric/mixin/ServerPlayNetworkHandlerMixin.java @@ -12,7 +12,7 @@ public abstract class ServerPlayNetworkHandlerMixin { @ModifyArg(method = {"cleanUp"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/server/PlayerManager;broadcast(Lnet/minecraft/text/Text;Z)V")) private Text quitMessage(Text text) { - if(ConfigManager.getConfig().quitMessageEnabled) { + if (ConfigManager.getConfig().quitMessageEnabled) { String name = text.getString().split(" ")[0]; return Text.literal(String.format(ConfigManager.getConfig().quitMessage, name)); } diff --git a/src/main/java/wtf/hak/survivalfabric/mixin/ServerPlayerEntityMixin.java b/src/main/java/wtf/hak/survivalfabric/mixin/ServerPlayerEntityMixin.java index 9628b7d..d0110f9 100644 --- a/src/main/java/wtf/hak/survivalfabric/mixin/ServerPlayerEntityMixin.java +++ b/src/main/java/wtf/hak/survivalfabric/mixin/ServerPlayerEntityMixin.java @@ -14,7 +14,7 @@ public abstract class ServerPlayerEntityMixin { @Inject(method = "getPlayerListName", at = @At("HEAD"), cancellable = true) private void changePlayerListName(CallbackInfoReturnable cir) { - if(ConfigManager.getConfig().dimensionIndicatorEnabled) { + if (ConfigManager.getConfig().dimensionIndicatorEnabled) { ServerPlayerEntity p = (ServerPlayerEntity) (Object) this; String world = p.getServerWorld().getRegistryKey().getValue().toTranslationKey(); String finalName; diff --git a/src/main/java/wtf/hak/survivalfabric/mixin/ServerWorldMixin.java b/src/main/java/wtf/hak/survivalfabric/mixin/ServerWorldMixin.java index 4926600..d2ea4ae 100644 --- a/src/main/java/wtf/hak/survivalfabric/mixin/ServerWorldMixin.java +++ b/src/main/java/wtf/hak/survivalfabric/mixin/ServerWorldMixin.java @@ -14,8 +14,8 @@ public class ServerWorldMixin { @Inject(method = "onDimensionChanged", at = {@At("HEAD")}) public void onDimensionChange(Entity entity, CallbackInfo ci) { - if(entity instanceof ServerPlayerEntity) { - PacketUtils.updateListNames((ServerPlayerEntity)entity); + if (entity instanceof ServerPlayerEntity) { + PacketUtils.updateListNames((ServerPlayerEntity) entity); } } } diff --git a/src/main/java/wtf/hak/survivalfabric/utils/PacketUtils.java b/src/main/java/wtf/hak/survivalfabric/utils/PacketUtils.java index c647737..eec0313 100644 --- a/src/main/java/wtf/hak/survivalfabric/utils/PacketUtils.java +++ b/src/main/java/wtf/hak/survivalfabric/utils/PacketUtils.java @@ -8,7 +8,7 @@ import java.util.Objects; public class PacketUtils { public static void updateListNames(ServerPlayerEntity p) { - for(ServerPlayerEntity sp : Objects.requireNonNull(p.getServer()).getPlayerManager().getPlayerList()) { + for (ServerPlayerEntity sp : Objects.requireNonNull(p.getServer()).getPlayerManager().getPlayerList()) { sp.networkHandler.sendPacket(new PlayerListS2CPacket(PlayerListS2CPacket.Action.UPDATE_DISPLAY_NAME, p)); } } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index ce129b9..36ad2c7 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -1,48 +1,48 @@ { - "schemaVersion": 1, - "id": "survivalfabric", - "version": "${version}", - "name": "SurvivalFabric", - "description": "Adds a few QOL features to your Survival!", - "authors": [ - "AlwaysHAK" - ], - "contact": { - "homepage": "https://hak.wtf", - "sources": "https://git.hak.wtf/hkuijlman/SurvivalFabric", - "issues": "https://git.hak.wtf/hkuijlman/SurvivalFabric/issues" - }, - "license": "CC0-1.0", - "icon": "assets/survivalfabric/icon.png", - "environment": "*", - "entrypoints": { - "main": [ - "wtf.hak.survivalfabric.SurvivalFabric" - ], - "client": [ - "wtf.hak.survivalfabric.SurvivalFabricClient" - ], - "fabric-datagen": [ - "wtf.hak.survivalfabric.SurvivalFabricDataGenerator" - ], - "modmenu": [ - "wtf.hak.survivalfabric.modmenu.ModMenuIntegration" - ] - }, - "mixins": [ - "survivalfabric.mixins.json", - { - "config": "survivalfabric.client.mixins.json", - "environment": "client" - } - ], - "depends": { - "fabricloader": ">=0.16.10", - "minecraft": "~1.21.5", - "java": ">=21", - "fabric-api": "*" - }, - "optional": { - "modmenu": "*" - } + "schemaVersion": 1, + "id": "survivalfabric", + "version": "${version}", + "name": "SurvivalFabric", + "description": "Adds a few QOL features to your Survival!", + "authors": [ + "AlwaysHAK" + ], + "contact": { + "homepage": "https://hak.wtf", + "sources": "https://git.hak.wtf/hkuijlman/SurvivalFabric", + "issues": "https://git.hak.wtf/hkuijlman/SurvivalFabric/issues" + }, + "license": "CC0-1.0", + "icon": "assets/survivalfabric/icon.png", + "environment": "*", + "entrypoints": { + "main": [ + "wtf.hak.survivalfabric.SurvivalFabric" + ], + "client": [ + "wtf.hak.survivalfabric.SurvivalFabricClient" + ], + "fabric-datagen": [ + "wtf.hak.survivalfabric.SurvivalFabricDataGenerator" + ], + "modmenu": [ + "wtf.hak.survivalfabric.modmenu.ModMenuIntegration" + ] + }, + "mixins": [ + "survivalfabric.mixins.json", + { + "config": "survivalfabric.client.mixins.json", + "environment": "client" + } + ], + "depends": { + "fabricloader": ">=0.16.10", + "minecraft": "~1.21.5", + "java": ">=21", + "fabric-api": "*" + }, + "optional": { + "modmenu": "*" + } } \ No newline at end of file diff --git a/src/main/resources/survivalfabric.mixins.json b/src/main/resources/survivalfabric.mixins.json index 521879b..4795188 100644 --- a/src/main/resources/survivalfabric.mixins.json +++ b/src/main/resources/survivalfabric.mixins.json @@ -10,5 +10,5 @@ ], "injectors": { "defaultRequire": 1 - } + } } \ No newline at end of file From 9325e24c5c5b5695cd8a18e1b571552d79cf8c19 Mon Sep 17 00:00:00 2001 From: Hedzer Kuijlman Date: Sat, 12 Apr 2025 15:21:21 +0200 Subject: [PATCH 11/19] Removed unnecessary comment --- src/client/java/wtf/hak/survivalfabric/modmenu/ConfigScreen.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/client/java/wtf/hak/survivalfabric/modmenu/ConfigScreen.java b/src/client/java/wtf/hak/survivalfabric/modmenu/ConfigScreen.java index 907c154..6b4843f 100644 --- a/src/client/java/wtf/hak/survivalfabric/modmenu/ConfigScreen.java +++ b/src/client/java/wtf/hak/survivalfabric/modmenu/ConfigScreen.java @@ -55,7 +55,6 @@ public class ConfigScreen extends Screen { } } - // Done button this.addDrawableChild(ButtonWidget.builder( Text.translatable("gui.done"), button -> this.client.setScreen(parent) From 4b5b697883b417aa392469def2014accc5a82527 Mon Sep 17 00:00:00 2001 From: Hedzer Kuijlman Date: Sat, 12 Apr 2025 16:19:36 +0200 Subject: [PATCH 12/19] Added color to Chat Calc answer & made optional to add an equals sign --- .../survivalfabric/mixin/PlayerManagerMixin.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/java/wtf/hak/survivalfabric/mixin/PlayerManagerMixin.java b/src/main/java/wtf/hak/survivalfabric/mixin/PlayerManagerMixin.java index a1b54ff..3239912 100644 --- a/src/main/java/wtf/hak/survivalfabric/mixin/PlayerManagerMixin.java +++ b/src/main/java/wtf/hak/survivalfabric/mixin/PlayerManagerMixin.java @@ -51,10 +51,14 @@ public abstract class PlayerManagerMixin { private void onBroadcast(SignedMessage message, ServerPlayerEntity sender, MessageType.Parameters parameters, CallbackInfo ci) { if (sender != null && ConfigManager.getConfig().chatMessageEnabled) { String rawMessage = message.getContent().getString().trim(); - if (sender != null && ConfigManager.getConfig().chatCalcEnabled && rawMessage.endsWith("=")) { - String expression = rawMessage.substring(0, rawMessage.length() - 1).trim(); + if (sender != null && ConfigManager.getConfig().chatCalcEnabled) { + String expression = rawMessage.endsWith("=") ? rawMessage.substring(0, rawMessage.length() - 1).trim() : rawMessage; try { String result = String.valueOf(evaluateExpression(expression)); + String old = rawMessage; + rawMessage += "§6"; + if (rawMessage.contains(" ")) rawMessage += " "; + if (!old.trim().endsWith("=")) rawMessage += "="; if (rawMessage.contains(" ")) rawMessage += " "; rawMessage += (result.endsWith(".0")) ? result.substring(0, result.length() - 2) : result; } catch (Exception e) { @@ -65,10 +69,13 @@ public abstract class PlayerManagerMixin { ci.cancel(); } else if (sender != null && ConfigManager.getConfig().chatCalcEnabled) { String rawMessage = message.getContent().getString().trim(); - if (rawMessage.endsWith("=")) { - String expression = rawMessage.substring(0, rawMessage.length() - 1).trim(); + String expression = rawMessage.endsWith("=") ? rawMessage.substring(0, rawMessage.length() - 1).trim() : rawMessage; try { String result = String.valueOf(evaluateExpression(expression)); + String old = rawMessage; + rawMessage += "§6"; + if (rawMessage.contains(" ")) rawMessage += " "; + if (!old.trim().endsWith("=")) rawMessage += "="; if (rawMessage.contains(" ")) rawMessage += " "; rawMessage += (result.endsWith(".0")) ? result.substring(0, result.length() - 2) : result; Text formattedMessage = Text.literal("<" + sender.getName().getString() + "> " + rawMessage); @@ -76,7 +83,6 @@ public abstract class PlayerManagerMixin { ci.cancel(); } catch (Exception e) { } - } } } From 55e9b0fafd1bf46069e0396dc737fb43b129750a Mon Sep 17 00:00:00 2001 From: Hedzer Kuijlman Date: Sat, 12 Apr 2025 16:19:59 +0200 Subject: [PATCH 13/19] Added /camera keybind --- .../survivalfabric/SurvivalFabricClient.java | 8 +++++++ .../features/SFKeyBindings.java | 22 +++++++++++++++++++ .../assets/survivalfabric/lang/en_us.json | 4 +++- 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 src/client/java/wtf/hak/survivalfabric/features/SFKeyBindings.java diff --git a/src/client/java/wtf/hak/survivalfabric/SurvivalFabricClient.java b/src/client/java/wtf/hak/survivalfabric/SurvivalFabricClient.java index c4447d2..bd9e9b8 100644 --- a/src/client/java/wtf/hak/survivalfabric/SurvivalFabricClient.java +++ b/src/client/java/wtf/hak/survivalfabric/SurvivalFabricClient.java @@ -4,13 +4,21 @@ import net.fabricmc.api.ClientModInitializer; import wtf.hak.survivalfabric.config.client.ClientConfigManager; import wtf.hak.survivalfabric.features.AngleViewer; import wtf.hak.survivalfabric.features.RemoveDarknessEffect; +import wtf.hak.survivalfabric.features.SFKeyBindings; public class SurvivalFabricClient implements ClientModInitializer { @Override public void onInitializeClient() { + + // Config ClientConfigManager.getConfig(); + + // Features AngleViewer.register(); RemoveDarknessEffect.register(); + + // Key Bindings + SFKeyBindings.register(); } } \ No newline at end of file diff --git a/src/client/java/wtf/hak/survivalfabric/features/SFKeyBindings.java b/src/client/java/wtf/hak/survivalfabric/features/SFKeyBindings.java new file mode 100644 index 0000000..73df70b --- /dev/null +++ b/src/client/java/wtf/hak/survivalfabric/features/SFKeyBindings.java @@ -0,0 +1,22 @@ +package wtf.hak.survivalfabric.features; + +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; +import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; +import net.minecraft.client.option.KeyBinding; +import net.minecraft.client.util.InputUtil; +import org.lwjgl.glfw.GLFW; + +public class SFKeyBindings { + + private static final KeyBinding CAMERA_BIND = KeyBindingHelper.registerKeyBinding(new KeyBinding("key.survivalfabric.camera", InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_PERIOD, "category.survivalfabric.survivalfabric")); + + public static void register() { + ClientTickEvents.END_CLIENT_TICK.register(client -> { + if(client.player != null) { + if (CAMERA_BIND.wasPressed()) { + client.player.networkHandler.sendChatCommand("camera"); + } + } + }); + } +} diff --git a/src/main/resources/assets/survivalfabric/lang/en_us.json b/src/main/resources/assets/survivalfabric/lang/en_us.json index 7df7fde..92e23d7 100644 --- a/src/main/resources/assets/survivalfabric/lang/en_us.json +++ b/src/main/resources/assets/survivalfabric/lang/en_us.json @@ -15,5 +15,7 @@ "key.survivalfabric.angle12": "204.81 / -54.23", "key.survivalfabric.angle13": "245.14 / -54.23", "key.survivalfabric.angle14": "204.98 / -41.68", - "key.survivalfabric.angle15": "244.97 / -41.71" + "key.survivalfabric.angle15": "244.97 / -41.71", + "category.survivalfabric.survivalfabric": "Survival Fabric", + "key.survivalfabric.camera": "/camera" } \ No newline at end of file From 281297bdca303f64a226efd1c02b98eadb4e6e82 Mon Sep 17 00:00:00 2001 From: Hedzer Kuijlman Date: Sat, 12 Apr 2025 16:21:27 +0200 Subject: [PATCH 14/19] Cleaned up --- .../java/wtf/hak/survivalfabric/SurvivalFabricClient.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/client/java/wtf/hak/survivalfabric/SurvivalFabricClient.java b/src/client/java/wtf/hak/survivalfabric/SurvivalFabricClient.java index bd9e9b8..099d664 100644 --- a/src/client/java/wtf/hak/survivalfabric/SurvivalFabricClient.java +++ b/src/client/java/wtf/hak/survivalfabric/SurvivalFabricClient.java @@ -17,8 +17,7 @@ public class SurvivalFabricClient implements ClientModInitializer { // Features AngleViewer.register(); RemoveDarknessEffect.register(); - - // Key Bindings SFKeyBindings.register(); + } } \ No newline at end of file From c39249e3c1f93569f78bf5e29d2758144f81aaab Mon Sep 17 00:00:00 2001 From: Hedzer Kuijlman Date: Sat, 12 Apr 2025 16:31:45 +0200 Subject: [PATCH 15/19] Optimized chat message system --- .../mixin/PlayerManagerMixin.java | 54 +++++++++---------- 1 file changed, 26 insertions(+), 28 deletions(-) diff --git a/src/main/java/wtf/hak/survivalfabric/mixin/PlayerManagerMixin.java b/src/main/java/wtf/hak/survivalfabric/mixin/PlayerManagerMixin.java index 3239912..b683469 100644 --- a/src/main/java/wtf/hak/survivalfabric/mixin/PlayerManagerMixin.java +++ b/src/main/java/wtf/hak/survivalfabric/mixin/PlayerManagerMixin.java @@ -49,41 +49,39 @@ public abstract class PlayerManagerMixin { @Inject(method = {"broadcast(Lnet/minecraft/network/message/SignedMessage;Lnet/minecraft/server/network/ServerPlayerEntity;Lnet/minecraft/network/message/MessageType$Parameters;)V"}, at = {@At("HEAD")}, cancellable = true) private void onBroadcast(SignedMessage message, ServerPlayerEntity sender, MessageType.Parameters parameters, CallbackInfo ci) { - if (sender != null && ConfigManager.getConfig().chatMessageEnabled) { + if (sender != null) { String rawMessage = message.getContent().getString().trim(); - if (sender != null && ConfigManager.getConfig().chatCalcEnabled) { + boolean isCalcEnabled = ConfigManager.getConfig().chatCalcEnabled; + boolean isMsgEnabled = ConfigManager.getConfig().chatMessageEnabled; + + String processedMessage = rawMessage; + + if (isCalcEnabled) { String expression = rawMessage.endsWith("=") ? rawMessage.substring(0, rawMessage.length() - 1).trim() : rawMessage; try { String result = String.valueOf(evaluateExpression(expression)); - String old = rawMessage; - rawMessage += "§6"; - if (rawMessage.contains(" ")) rawMessage += " "; - if (!old.trim().endsWith("=")) rawMessage += "="; - if (rawMessage.contains(" ")) rawMessage += " "; - rawMessage += (result.endsWith(".0")) ? result.substring(0, result.length() - 2) : result; - } catch (Exception e) { - } + StringBuilder sb = new StringBuilder(rawMessage).append("§6"); + + if (rawMessage.contains(" ")) sb.append(" "); + if (!rawMessage.endsWith("=")) sb.append("="); + if (rawMessage.contains(" ")) sb.append(" "); + + sb.append(result.endsWith(".0") ? result.substring(0, result.length() - 2) : result); + processedMessage = sb.toString(); + } catch (Exception ignored) {} } - Text text = Text.literal(String.format(ConfigManager.getConfig().chatMessage, sender.getName().getString(), rawMessage)); - sender.getServer().getPlayerManager().broadcast(text, false); + + if (isMsgEnabled) { + String formatted = String.format(ConfigManager.getConfig().chatMessage, sender.getName().getString(), processedMessage); + sender.getServer().getPlayerManager().broadcast(Text.literal(formatted), false); + } else if (isCalcEnabled) { + String formatted = "<" + sender.getName().getString() + "> " + processedMessage; + sender.getServer().getPlayerManager().broadcast(Text.literal(formatted), false); + } + ci.cancel(); - } else if (sender != null && ConfigManager.getConfig().chatCalcEnabled) { - String rawMessage = message.getContent().getString().trim(); - String expression = rawMessage.endsWith("=") ? rawMessage.substring(0, rawMessage.length() - 1).trim() : rawMessage; - try { - String result = String.valueOf(evaluateExpression(expression)); - String old = rawMessage; - rawMessage += "§6"; - if (rawMessage.contains(" ")) rawMessage += " "; - if (!old.trim().endsWith("=")) rawMessage += "="; - if (rawMessage.contains(" ")) rawMessage += " "; - rawMessage += (result.endsWith(".0")) ? result.substring(0, result.length() - 2) : result; - Text formattedMessage = Text.literal("<" + sender.getName().getString() + "> " + rawMessage); - sender.getServer().getPlayerManager().broadcast(formattedMessage, false); - ci.cancel(); - } catch (Exception e) { - } } + } private double evaluateExpression(String expression) { From 87b6900ff3f31bdbca6ced56f8340abe31346e77 Mon Sep 17 00:00:00 2001 From: Hedzer Kuijlman Date: Sat, 12 Apr 2025 16:59:27 +0200 Subject: [PATCH 16/19] Cleaned up --- .../mixin/client/BackgroundRendererMixin.java | 33 ++++++++++--------- .../modmenu/ModMenuIntegration.java | 3 +- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/client/java/wtf/hak/survivalfabric/mixin/client/BackgroundRendererMixin.java b/src/client/java/wtf/hak/survivalfabric/mixin/client/BackgroundRendererMixin.java index 9270448..0c42d31 100644 --- a/src/client/java/wtf/hak/survivalfabric/mixin/client/BackgroundRendererMixin.java +++ b/src/client/java/wtf/hak/survivalfabric/mixin/client/BackgroundRendererMixin.java @@ -23,24 +23,25 @@ public abstract class BackgroundRendererMixin { @Inject(method = "applyFog", at = @At("RETURN"), cancellable = true) private static void applyFog(Camera camera, BackgroundRenderer.FogType fogType, Vector4f color, float viewDistance, boolean thickenFog, float tickProgress, CallbackInfoReturnable cir) { + CameraSubmersionType submersion = camera.getSubmersionType(); boolean renderFog = true; - CameraSubmersionType subType = camera.getSubmersionType(); - if (subType == CameraSubmersionType.NONE) { - World world = camera.getFocusedEntity().getWorld(); - if (world.getRegistryKey() == World.OVERWORLD && !getConfig().renderOverworldFog) - renderFog = false; - else if (world.getRegistryKey() == World.NETHER && !getConfig().renderNetherFog) - renderFog = false; - else if (world.getRegistryKey() == World.END && !getConfig().renderEndFog) - renderFog = false; - } else if (subType == CameraSubmersionType.WATER && !getConfig().renderWaterFog) - renderFog = false; - else if (subType == CameraSubmersionType.LAVA && !getConfig().renderLavaFog) - renderFog = false; - else if (subType == CameraSubmersionType.POWDER_SNOW && !getConfig().renderSnowFog) - renderFog = false; - if (!renderFog) + switch (submersion) { + case NONE -> { + World world = camera.getFocusedEntity().getWorld(); + if ((world.getRegistryKey() == World.OVERWORLD && !getConfig().renderOverworldFog) + || (world.getRegistryKey() == World.NETHER && !getConfig().renderNetherFog) + || (world.getRegistryKey() == World.END && !getConfig().renderEndFog)) { + renderFog = false; + } + } + case WATER -> renderFog = getConfig().renderWaterFog; + case LAVA -> renderFog = getConfig().renderLavaFog; + case POWDER_SNOW -> renderFog = getConfig().renderSnowFog; + } + + if (!renderFog) { cir.setReturnValue(EMPTY_FOG); + } } } diff --git a/src/client/java/wtf/hak/survivalfabric/modmenu/ModMenuIntegration.java b/src/client/java/wtf/hak/survivalfabric/modmenu/ModMenuIntegration.java index d2f93d7..cb7b2e2 100644 --- a/src/client/java/wtf/hak/survivalfabric/modmenu/ModMenuIntegration.java +++ b/src/client/java/wtf/hak/survivalfabric/modmenu/ModMenuIntegration.java @@ -10,7 +10,6 @@ public class ModMenuIntegration implements ModMenuApi { @Override public ConfigScreenFactory getModConfigScreenFactory() { - System.out.println("Does ModMenuIntegration even load?"); - return parent -> new ConfigScreen(parent); + return ConfigScreen::new; } } From 6b2d0807460ca500f0ff98b8334044f1a705a019 Mon Sep 17 00:00:00 2001 From: Hedzer Kuijlman Date: Sat, 12 Apr 2025 16:59:39 +0200 Subject: [PATCH 17/19] Made teleport head lock toggleable --- .../wtf/hak/survivalfabric/config/client/ClientConfig.java | 1 + .../wtf/hak/survivalfabric/mixin/client/EntityMixin.java | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/client/java/wtf/hak/survivalfabric/config/client/ClientConfig.java b/src/client/java/wtf/hak/survivalfabric/config/client/ClientConfig.java index 5c3e8e8..d9f5cb5 100644 --- a/src/client/java/wtf/hak/survivalfabric/config/client/ClientConfig.java +++ b/src/client/java/wtf/hak/survivalfabric/config/client/ClientConfig.java @@ -10,4 +10,5 @@ public class ClientConfig { public boolean renderWaterFog = false; public boolean renderSnowFog = false; public boolean removeDarknessEffect = true; + public boolean lockTeleportHeadMovement = true; } diff --git a/src/client/java/wtf/hak/survivalfabric/mixin/client/EntityMixin.java b/src/client/java/wtf/hak/survivalfabric/mixin/client/EntityMixin.java index e5beae8..df4ded4 100644 --- a/src/client/java/wtf/hak/survivalfabric/mixin/client/EntityMixin.java +++ b/src/client/java/wtf/hak/survivalfabric/mixin/client/EntityMixin.java @@ -6,6 +6,7 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import wtf.hak.survivalfabric.config.client.ClientConfigManager; import wtf.hak.survivalfabric.features.AngleViewer; @Mixin(Entity.class) @@ -14,7 +15,7 @@ public abstract class EntityMixin { @Inject(method = "setYaw", at = @At("HEAD"), cancellable = true) private void preventYawChange(float yaw, CallbackInfo ci) { if ((Object) this instanceof ClientPlayerEntity player) { - if (player.isMainPlayer() && AngleViewer.PREVENT_HEAD_MOVEMENT) { + if (player.isMainPlayer() && AngleViewer.PREVENT_HEAD_MOVEMENT && ClientConfigManager.getConfig().lockTeleportHeadMovement) { ci.cancel(); } } @@ -23,7 +24,7 @@ public abstract class EntityMixin { @Inject(method = "setPitch", at = @At("HEAD"), cancellable = true) private void preventPitchChange(float pitch, CallbackInfo ci) { if ((Object) this instanceof ClientPlayerEntity player) { - if (player.isMainPlayer() && AngleViewer.PREVENT_HEAD_MOVEMENT) { + if (player.isMainPlayer() && AngleViewer.PREVENT_HEAD_MOVEMENT && ClientConfigManager.getConfig().lockTeleportHeadMovement) { ci.cancel(); } } From 798027a3afa47c6068f583229e38406a7cf1d586 Mon Sep 17 00:00:00 2001 From: Hedzer Kuijlman Date: Sat, 12 Apr 2025 17:19:40 +0200 Subject: [PATCH 18/19] Updated mod version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 01327ce..9969eda 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ yarn_mappings=1.21.5+build.1 loader_version=0.16.10 # Mod Properties -mod_version=1.3.2 +mod_version=1.4.0 maven_group=wtf.hak.survivalfabric archives_base_name=survivalfabric From ba6153fa410197fb227187f8ce815fec6ff15a75 Mon Sep 17 00:00:00 2001 From: Hedzer Kuijlman Date: Sat, 12 Apr 2025 17:29:40 +0200 Subject: [PATCH 19/19] Updated README.md --- README.md | 35 ++++++++++++++--------------------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 7486918..03d8767 100644 --- a/README.md +++ b/README.md @@ -26,37 +26,30 @@ As a challenge I'm trying to make it as user-friendly as possible. - Version "control" - Shared Ender Chest - Shared EC Access control (via config) + - Open/close EC block while opening/closing SEC + - Play open & close sounds - Vein miner ![VeinMiner](https://i.imgur.com/zOXWMNa.gif) +- Chat Calculator ### Commands - /spectator | Essentially server-side free-cam, you get put in spectator and are able to fly around, once you use the command again you get put back to where you were. - /slimechunk (/sc) | See if you're currently in a slimechunk -# Currently working on 1.3.2 - -## Server Side -- [x] Chat Calculator - - ## Client Side -### New Features -- [x] Teleportation Angle Viewer for [this machine](https://www.youtube.com/watch?v=FnUE-ZaALLw) -![Teleportation Keybindings](https://i.imgur.com/gjO1H3d.png) -- [x] Removed game fog (lava, water, etc.) - - [x] All types individually toggleable -- [x] Mod Menu integration - - [x] Automatic config adaption (currently booleans only) -- [x] Removed darkness effect - - [x] Toggleable +- Teleportation Angle Viewer for [this machine](https://www.youtube.com/watch?v=FnUE-ZaALLw) + - Toggleable pitch/yaw lock while teleporting + ![Teleportation Keybindings](https://i.imgur.com/gjO1H3d.png) +- Remove game fog (lava, water, etc.) + - All types individually toggleable +- Mod Menu integration + - Automatic config adaption (currently booleans only) +- Remove darkness effect + - Toggleable +- Keybinding for /camera -### Changes -- Shared Ender Chest - - [x] Open/close EC block while opening/closing SEC - - [x] Play open & close sounds - -# Features to come +# To-do ## General - Rework config system