From 0a188529c80b25abb9cd68dca469bd310e04cb38 Mon Sep 17 00:00:00 2001 From: TonimatasDEV Date: Fri, 1 Mar 2024 19:51:52 +0100 Subject: [PATCH] More things --- src/main/java/dev/tonimatas/mossy/Mossy.java | 5 +++- .../mossy/blocks/AnvilBlockHandler.java | 25 +++++++++++++++++++ .../mossy/blocks/ChestBlockHandler.java | 11 ++++++-- .../blocks/ChippedAnvilBlockHandler.java | 14 +++++++++++ .../blocks/DamagedAnvilBlockHandler.java | 12 +++++++++ .../placement/AnvilBlockPlacementRule.java | 21 ++++++++++++++++ .../tonimatas/mossy/events/BlockEvents.java | 1 - .../mossy/events/InventoryEvents.java | 23 +++++++++++++++++ .../tonimatas/mossy/events/PlayerEvents.java | 5 ++++ .../mossy/manager/MossyBlockManager.java | 11 +++++--- .../mossy/manager/MossyEventManager.java | 4 +-- 11 files changed, 123 insertions(+), 9 deletions(-) create mode 100644 src/main/java/dev/tonimatas/mossy/blocks/AnvilBlockHandler.java create mode 100644 src/main/java/dev/tonimatas/mossy/blocks/ChippedAnvilBlockHandler.java create mode 100644 src/main/java/dev/tonimatas/mossy/blocks/DamagedAnvilBlockHandler.java create mode 100644 src/main/java/dev/tonimatas/mossy/blocks/placement/AnvilBlockPlacementRule.java create mode 100644 src/main/java/dev/tonimatas/mossy/events/InventoryEvents.java diff --git a/src/main/java/dev/tonimatas/mossy/Mossy.java b/src/main/java/dev/tonimatas/mossy/Mossy.java index a6c5570..73cfc89 100644 --- a/src/main/java/dev/tonimatas/mossy/Mossy.java +++ b/src/main/java/dev/tonimatas/mossy/Mossy.java @@ -55,7 +55,10 @@ public static void main(String[] args) { public static void stop() { long time = System.currentTimeMillis(); ConsoleThread.stopConsole(); - MinecraftServer.getInstanceManager().getInstances().forEach(Instance::saveChunksToStorage); + MinecraftServer.getInstanceManager().getInstances().forEach(instance -> { + instance.saveChunksToStorage(); + Logger.info("World " + instance.getDimensionName() + " saved."); + }); MinecraftServer.stopCleanly(); Logger.info("Finish! (" + (System.currentTimeMillis() - time) + "ms)"); } diff --git a/src/main/java/dev/tonimatas/mossy/blocks/AnvilBlockHandler.java b/src/main/java/dev/tonimatas/mossy/blocks/AnvilBlockHandler.java new file mode 100644 index 0000000..c2146ea --- /dev/null +++ b/src/main/java/dev/tonimatas/mossy/blocks/AnvilBlockHandler.java @@ -0,0 +1,25 @@ +package dev.tonimatas.mossy.blocks; + +import net.kyori.adventure.text.Component; +import net.minestom.server.instance.block.Block; +import net.minestom.server.instance.block.BlockHandler; +import net.minestom.server.inventory.Inventory; +import net.minestom.server.inventory.InventoryType; +import net.minestom.server.inventory.type.AnvilInventory; +import net.minestom.server.utils.NamespaceID; +import org.jetbrains.annotations.NotNull; + +public class AnvilBlockHandler implements BlockHandler { + @Override + public boolean onInteract(@NotNull BlockHandler.Interaction interaction) { + interaction.getPlayer().openInventory(new Inventory(InventoryType.ANVIL, Component.translatable("container.repair"))); + + // TODO: Add damage phases + return true; + } + + @Override + public @NotNull NamespaceID getNamespaceId() { + return Block.ANVIL.namespace(); + } +} diff --git a/src/main/java/dev/tonimatas/mossy/blocks/ChestBlockHandler.java b/src/main/java/dev/tonimatas/mossy/blocks/ChestBlockHandler.java index fb1af64..96d4224 100644 --- a/src/main/java/dev/tonimatas/mossy/blocks/ChestBlockHandler.java +++ b/src/main/java/dev/tonimatas/mossy/blocks/ChestBlockHandler.java @@ -1,18 +1,25 @@ package dev.tonimatas.mossy.blocks; +import net.kyori.adventure.text.Component; +import net.minestom.server.instance.block.Block; import net.minestom.server.instance.block.BlockHandler; +import net.minestom.server.inventory.Inventory; +import net.minestom.server.inventory.InventoryType; import net.minestom.server.utils.NamespaceID; import org.jetbrains.annotations.NotNull; public class ChestBlockHandler implements BlockHandler { + private final Inventory inventory = new Inventory(InventoryType.CHEST_3_ROW, Component.translatable("container.chest")); + @Override public boolean onInteract(@NotNull Interaction interaction) { - System.out.println("Chest opened."); + // TODO: Make the logic + interaction.getPlayer().openInventory(inventory); return BlockHandler.super.onInteract(interaction); } @Override public @NotNull NamespaceID getNamespaceId() { - return NamespaceID.from("minecraft:chest"); + return Block.CHEST.namespace(); } } diff --git a/src/main/java/dev/tonimatas/mossy/blocks/ChippedAnvilBlockHandler.java b/src/main/java/dev/tonimatas/mossy/blocks/ChippedAnvilBlockHandler.java new file mode 100644 index 0000000..7f6638d --- /dev/null +++ b/src/main/java/dev/tonimatas/mossy/blocks/ChippedAnvilBlockHandler.java @@ -0,0 +1,14 @@ +package dev.tonimatas.mossy.blocks; + +import net.minestom.server.instance.block.Block; +import net.minestom.server.instance.block.BlockHandler; +import net.minestom.server.inventory.type.AnvilInventory; +import net.minestom.server.utils.NamespaceID; +import org.jetbrains.annotations.NotNull; + +public class ChippedAnvilBlockHandler extends AnvilBlockHandler { + @Override + public @NotNull NamespaceID getNamespaceId() { + return Block.CHIPPED_ANVIL.namespace(); + } +} diff --git a/src/main/java/dev/tonimatas/mossy/blocks/DamagedAnvilBlockHandler.java b/src/main/java/dev/tonimatas/mossy/blocks/DamagedAnvilBlockHandler.java new file mode 100644 index 0000000..75c4bb4 --- /dev/null +++ b/src/main/java/dev/tonimatas/mossy/blocks/DamagedAnvilBlockHandler.java @@ -0,0 +1,12 @@ +package dev.tonimatas.mossy.blocks; + +import net.minestom.server.instance.block.Block; +import net.minestom.server.utils.NamespaceID; +import org.jetbrains.annotations.NotNull; + +public class DamagedAnvilBlockHandler extends AnvilBlockHandler { + @Override + public @NotNull NamespaceID getNamespaceId() { + return Block.DAMAGED_ANVIL.namespace(); + } +} diff --git a/src/main/java/dev/tonimatas/mossy/blocks/placement/AnvilBlockPlacementRule.java b/src/main/java/dev/tonimatas/mossy/blocks/placement/AnvilBlockPlacementRule.java new file mode 100644 index 0000000..532916d --- /dev/null +++ b/src/main/java/dev/tonimatas/mossy/blocks/placement/AnvilBlockPlacementRule.java @@ -0,0 +1,21 @@ +package dev.tonimatas.mossy.blocks.placement; + +import net.minestom.server.instance.block.Block; +import net.minestom.server.instance.block.rule.BlockPlacementRule; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Map; + +public class AnvilBlockPlacementRule extends BlockPlacementRule { + private static final String HORIZONTAL_DIRECTION = "vertical_direction"; + + protected AnvilBlockPlacementRule() { + super(Block.ANVIL); + } + + @Override + public @Nullable Block blockPlace(@NotNull BlockPlacementRule.PlacementState placementState) { + return null; + } +} diff --git a/src/main/java/dev/tonimatas/mossy/events/BlockEvents.java b/src/main/java/dev/tonimatas/mossy/events/BlockEvents.java index a1091e0..1fbdf84 100644 --- a/src/main/java/dev/tonimatas/mossy/events/BlockEvents.java +++ b/src/main/java/dev/tonimatas/mossy/events/BlockEvents.java @@ -4,6 +4,5 @@ public class BlockEvents { public static void init(GlobalEventHandler eventHandler) { - } } diff --git a/src/main/java/dev/tonimatas/mossy/events/InventoryEvents.java b/src/main/java/dev/tonimatas/mossy/events/InventoryEvents.java new file mode 100644 index 0000000..7819961 --- /dev/null +++ b/src/main/java/dev/tonimatas/mossy/events/InventoryEvents.java @@ -0,0 +1,23 @@ +package dev.tonimatas.mossy.events; + +import net.minestom.server.event.GlobalEventHandler; +import net.minestom.server.event.inventory.InventoryCloseEvent; +import net.minestom.server.inventory.Inventory; +import net.minestom.server.inventory.InventoryType; +import net.minestom.server.item.ItemStack; + +public class InventoryEvents { + public static void init(GlobalEventHandler eventHandler) { + eventHandler.addListener(InventoryCloseEvent.class, event -> { + Inventory inventory = event.getInventory(); + if (inventory == null) return; + InventoryType inventoryType = inventory.getInventoryType(); + + if (inventoryType.equals(InventoryType.ANVIL)) { + for (ItemStack itemStack : inventory.getItemStacks()) { + event.getPlayer().getInventory().addItemStack(itemStack); + } + } + }); + } +} diff --git a/src/main/java/dev/tonimatas/mossy/events/PlayerEvents.java b/src/main/java/dev/tonimatas/mossy/events/PlayerEvents.java index cc1cacf..86ce0f2 100644 --- a/src/main/java/dev/tonimatas/mossy/events/PlayerEvents.java +++ b/src/main/java/dev/tonimatas/mossy/events/PlayerEvents.java @@ -4,6 +4,7 @@ import net.minestom.server.entity.GameMode; import net.minestom.server.event.GlobalEventHandler; import net.minestom.server.event.player.AsyncPlayerConfigurationEvent; +import net.minestom.server.event.player.PlayerBlockPlaceEvent; import net.minestom.server.instance.block.Block; import dev.tonimatas.mossy.Mossy; @@ -25,5 +26,9 @@ public static void init(GlobalEventHandler eventHandler) { } event.getPlayer().setRespawnPoint(new Pos(0, y, 0)); }); + + eventHandler.addListener(PlayerBlockPlaceEvent.class, event -> { + if (event.getPlayer().getOpenInventory() != null) event.setCancelled(true); + }); } } diff --git a/src/main/java/dev/tonimatas/mossy/manager/MossyBlockManager.java b/src/main/java/dev/tonimatas/mossy/manager/MossyBlockManager.java index f6a9293..398c005 100644 --- a/src/main/java/dev/tonimatas/mossy/manager/MossyBlockManager.java +++ b/src/main/java/dev/tonimatas/mossy/manager/MossyBlockManager.java @@ -1,12 +1,14 @@ package dev.tonimatas.mossy.manager; +import dev.tonimatas.mossy.blocks.AnvilBlockHandler; import dev.tonimatas.mossy.blocks.ChestBlockHandler; +import dev.tonimatas.mossy.blocks.ChippedAnvilBlockHandler; +import dev.tonimatas.mossy.blocks.DamagedAnvilBlockHandler; +import dev.tonimatas.mossy.logger.Logger; import net.minestom.server.MinecraftServer; import net.minestom.server.instance.block.Block; import net.minestom.server.instance.block.BlockHandler; import net.minestom.server.instance.block.BlockManager; -import net.minestom.server.utils.NamespaceID; -import dev.tonimatas.mossy.logger.Logger; import java.util.Objects; @@ -15,10 +17,13 @@ public class MossyBlockManager { public static void init() { registerHandler(Block.CHEST, new ChestBlockHandler()); + registerHandler(Block.ANVIL, new AnvilBlockHandler()); + registerHandler(Block.DAMAGED_ANVIL, new DamagedAnvilBlockHandler()); + registerHandler(Block.CHIPPED_ANVIL, new ChippedAnvilBlockHandler()); Logger.info("All block handlers registered."); } private static void registerHandler(Block block, BlockHandler blockHandler) { - blockManager.registerHandler(NamespaceID.from("minecraft:" + block.name().toLowerCase()), () -> Objects.requireNonNull(block.withHandler(blockHandler).handler())); + blockManager.registerHandler(block.namespace(), () -> Objects.requireNonNull(block.withHandler(blockHandler).handler())); } } diff --git a/src/main/java/dev/tonimatas/mossy/manager/MossyEventManager.java b/src/main/java/dev/tonimatas/mossy/manager/MossyEventManager.java index 864abc9..9fbf994 100644 --- a/src/main/java/dev/tonimatas/mossy/manager/MossyEventManager.java +++ b/src/main/java/dev/tonimatas/mossy/manager/MossyEventManager.java @@ -6,11 +6,11 @@ import dev.tonimatas.mossy.logger.Logger; public class MossyEventManager { - private static final GlobalEventHandler eventHandler = MinecraftServer.getGlobalEventHandler(); - public static void init() { + GlobalEventHandler eventHandler = MinecraftServer.getGlobalEventHandler(); BlockEvents.init(eventHandler); InstanceEvents.init(eventHandler); + InventoryEvents.init(eventHandler); ItemEvents.init(eventHandler); PlayerEvents.init(eventHandler); ServerEvents.init(eventHandler);