diff --git a/README.md b/README.md index 4d9ad9c..6d3354e 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ As a challenge I'm trying to make it as user-friendly as possible. (It ain't the ### Commands -- [ ] /slimechunk (/sc) | See if you're currently in a slimechunk +- [x] /slimechunk (/sc) | See if you're currently in a slimechunk ### Misc - [x] Updated icon diff --git a/src/main/java/wtf/hak/survivalfabric/SurvivalFabric.java b/src/main/java/wtf/hak/survivalfabric/SurvivalFabric.java index ddd2f46..3ff7642 100644 --- a/src/main/java/wtf/hak/survivalfabric/SurvivalFabric.java +++ b/src/main/java/wtf/hak/survivalfabric/SurvivalFabric.java @@ -6,6 +6,7 @@ import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; import org.slf4j.Logger; 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; @@ -21,6 +22,7 @@ public class SurvivalFabric implements ModInitializer { 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" })); if(getConfig().sharedEnderChestEnabled) new SharedEnderChest().onInitialize(); diff --git a/src/main/java/wtf/hak/survivalfabric/commands/SlimeChunkCommand.java b/src/main/java/wtf/hak/survivalfabric/commands/SlimeChunkCommand.java new file mode 100644 index 0000000..fa0e7de --- /dev/null +++ b/src/main/java/wtf/hak/survivalfabric/commands/SlimeChunkCommand.java @@ -0,0 +1,40 @@ +package wtf.hak.survivalfabric.commands; + +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.context.CommandContext; +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; + +public class SlimeChunkCommand { + + public static void register(CommandDispatcher dispatcher, String... aliases) { + for (String str : aliases) + dispatcher.register(CommandManager.literal(str) + .executes(SlimeChunkCommand::execute)); + } + + private static int execute(CommandContext context) { + ServerCommandSource source = context.getSource(); + if (source.getEntity() == null) { + source.sendMessage(Text.literal("Console cannot go into spectator mode!")); + return 0; + } + 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) { + p.sendMessage(Text.literal(getConfig().inSlimeChunkMessage)); + } else + p.sendMessage(Text.literal(getConfig().notInSlimeChunkMessage)); + return 1; + } +} \ No newline at end of file diff --git a/src/main/java/wtf/hak/survivalfabric/config/Config.java b/src/main/java/wtf/hak/survivalfabric/config/Config.java index fecfb19..8a70fdc 100644 --- a/src/main/java/wtf/hak/survivalfabric/config/Config.java +++ b/src/main/java/wtf/hak/survivalfabric/config/Config.java @@ -32,6 +32,9 @@ public class Config { public boolean sharedEnderChestLimitedAccess = true; public List sharedEnderChestNames = Lists.newArrayList("AlwaysHAK", "LunaticFox"); + public String inSlimeChunkMessage = "§aYou're currently in a slime chunk"; + public String notInSlimeChunkMessage = "§cYou're currently not in a slime chunk"; + public ScreenHandlerType screenHandlerType() { return switch (sharedEnderChestRows) { case 1 -> ScreenHandlerType.GENERIC_9X1; diff --git a/src/main/java/wtf/hak/survivalfabric/sharedenderchest/SharedEnderChest.java b/src/main/java/wtf/hak/survivalfabric/sharedenderchest/SharedEnderChest.java index 32fccda..0923f02 100644 --- a/src/main/java/wtf/hak/survivalfabric/sharedenderchest/SharedEnderChest.java +++ b/src/main/java/wtf/hak/survivalfabric/sharedenderchest/SharedEnderChest.java @@ -28,6 +28,7 @@ import net.minecraft.util.collection.DefaultedList; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import static wtf.hak.survivalfabric.SurvivalFabric.LOGGER; import static wtf.hak.survivalfabric.config.ConfigManager.getConfig; public class SharedEnderChest implements ServerLifecycleEvents.ServerStopping, ServerLifecycleEvents.ServerStarted, ServerTickEvents.EndTick { @@ -46,7 +47,7 @@ public class SharedEnderChest implements ServerLifecycleEvents.ServerStopping, S Inventories.readNbt(nbt, inventoryItemStacks, server.getRegistryManager()); sharedInventory = new SharedInventory(inventoryItemStacks); } catch (Exception e) { - System.out.println("[ShareEnderChest] Error while loading inventory: " + e); + LOGGER.error("Error while loading Shared Ender Chest: " + e); sharedInventory = new SharedInventory(getConfig().sharedEnderChestRows); } } else { @@ -64,10 +65,9 @@ public class SharedEnderChest implements ServerLifecycleEvents.ServerStopping, S inventoryFile.createNewFile(); NbtIo.writeCompressed(nbt, inventoryFileDataOutput); } catch (Exception e) { - System.out.println("[ShareEnderChest] Error while saving inventory: " + e); + LOGGER.error("Error while saving Shared Ender Chest: " + e); } } - public void onServerStopping(MinecraftServer server) { saveInventory(server); }