From 5ae383e9e334b5f41b07f700daf448aef45c5cf0 Mon Sep 17 00:00:00 2001 From: YouHaveTrouble Date: Sat, 17 Jan 2026 19:06:46 +0100 Subject: [PATCH] slowly going absolutely insane --- .../quickerstacker/QuickerStacker.java | 14 +--- .../interaction/ChestInteraction.java | 69 ------------------- .../listener/ChestInteractListener.java | 50 -------------- .../system/QuickStackToChestSystem.java | 57 +++++++++++++++ ...uble_QuickerStacker_QuickStackToChest.json | 3 - .../Item/Interactions/Block_Secondary.json | 11 --- ...uble_QuickerStacker_QuickStackToChest.json | 5 -- 7 files changed, 60 insertions(+), 149 deletions(-) delete mode 100644 src/main/java/me/youhavetrouble/quickerstacker/interaction/ChestInteraction.java delete mode 100644 src/main/java/me/youhavetrouble/quickerstacker/listener/ChestInteractListener.java create mode 100644 src/main/java/me/youhavetrouble/quickerstacker/system/QuickStackToChestSystem.java delete mode 100644 src/main/resources/Server/Item/Interactions/Block/YouHaveTrouble_QuickerStacker_QuickStackToChest.json delete mode 100644 src/main/resources/Server/Item/Interactions/Block_Secondary.json delete mode 100644 src/main/resources/Server/Item/RootInteractions/Block/YouHaveTrouble_QuickerStacker_QuickStackToChest.json diff --git a/src/main/java/me/youhavetrouble/quickerstacker/QuickerStacker.java b/src/main/java/me/youhavetrouble/quickerstacker/QuickerStacker.java index acd8802..1036184 100644 --- a/src/main/java/me/youhavetrouble/quickerstacker/QuickerStacker.java +++ b/src/main/java/me/youhavetrouble/quickerstacker/QuickerStacker.java @@ -1,14 +1,9 @@ package me.youhavetrouble.quickerstacker; -import com.hypixel.hytale.server.core.event.events.ecs.UseBlockEvent; -import com.hypixel.hytale.server.core.event.events.player.PlayerInteractEvent; -import com.hypixel.hytale.server.core.event.events.player.PlayerReadyEvent; -import com.hypixel.hytale.server.core.modules.interaction.interaction.config.Interaction; import com.hypixel.hytale.server.core.plugin.JavaPlugin; import com.hypixel.hytale.server.core.plugin.JavaPluginInit; -import me.youhavetrouble.quickerstacker.interaction.ChestInteraction; -import me.youhavetrouble.quickerstacker.listener.ChestInteractListener; +import me.youhavetrouble.quickerstacker.system.QuickStackToChestSystem; import org.checkerframework.checker.nullness.compatqual.NonNullDecl; public class QuickerStacker extends JavaPlugin { @@ -18,11 +13,8 @@ public class QuickerStacker extends JavaPlugin { } @Override - public void setup() { - this.getEventRegistry().registerGlobal(UseBlockEvent.class, ChestInteractListener::onChestInteract); - this.getEventRegistry().registerGlobal(PlayerReadyEvent.class, ChestInteractListener::playerJoin); - - this.getCodecRegistry(Interaction.CODEC).register("YouHaveTrouble_QuickerStacker_QuickStackToChest", ChestInteraction.class, ChestInteraction.CODEC); + public void start() { + this.getEntityStoreRegistry().registerSystem(new QuickStackToChestSystem()); } } diff --git a/src/main/java/me/youhavetrouble/quickerstacker/interaction/ChestInteraction.java b/src/main/java/me/youhavetrouble/quickerstacker/interaction/ChestInteraction.java deleted file mode 100644 index 0027e5c..0000000 --- a/src/main/java/me/youhavetrouble/quickerstacker/interaction/ChestInteraction.java +++ /dev/null @@ -1,69 +0,0 @@ -package me.youhavetrouble.quickerstacker.interaction; - - -import com.hypixel.hytale.codec.builder.BuilderCodec; -import com.hypixel.hytale.component.CommandBuffer; -import com.hypixel.hytale.component.Ref; -import com.hypixel.hytale.component.Store; -import com.hypixel.hytale.math.util.ChunkUtil; -import com.hypixel.hytale.math.vector.Vector3i; -import com.hypixel.hytale.protocol.BlockPosition; -import com.hypixel.hytale.protocol.InteractionSyncData; -import com.hypixel.hytale.protocol.InteractionType; -import com.hypixel.hytale.server.core.Message; -import com.hypixel.hytale.server.core.entity.InteractionContext; -import com.hypixel.hytale.server.core.entity.entities.Player; -import com.hypixel.hytale.server.core.inventory.Inventory; -import com.hypixel.hytale.server.core.inventory.ItemStack; -import com.hypixel.hytale.server.core.modules.interaction.interaction.CooldownHandler; -import com.hypixel.hytale.server.core.modules.interaction.interaction.config.SimpleInstantInteraction; -import com.hypixel.hytale.server.core.modules.interaction.interaction.config.client.SimpleBlockInteraction; -import com.hypixel.hytale.server.core.universe.world.World; -import com.hypixel.hytale.server.core.universe.world.chunk.WorldChunk; -import com.hypixel.hytale.server.core.universe.world.meta.state.ItemContainerState; -import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; -import com.hypixel.hytale.server.core.util.NotificationUtil; -import org.checkerframework.checker.nullness.compatqual.NonNullDecl; -import org.checkerframework.checker.nullness.compatqual.NullableDecl; - -public class ChestInteraction extends SimpleBlockInteraction { - - public static final BuilderCodec CODEC = BuilderCodec - .builder(ChestInteraction.class, ChestInteraction::new) - .build(); - - @Override - protected void interactWithBlock( - @NonNullDecl World world, - @NonNullDecl CommandBuffer commandBuffer, - @NonNullDecl InteractionType interactionType, - @NonNullDecl InteractionContext interactionContext, - @NullableDecl ItemStack itemStack, - @NonNullDecl Vector3i vector3i, - @NonNullDecl CooldownHandler cooldownHandler - ) { - Ref ref = interactionContext.getEntity(); - Player player = ref.getStore().getComponent(ref, Player.getComponentType()); - if (player == null) return; - NotificationUtil.sendNotification(player.getPlayerRef().getPacketHandler(), "Interaction happened! "+ interactionType.name()); - player.sendMessage(Message.raw("Interaction: " + interactionType.name())); - InteractionSyncData clientState = interactionContext.getClientState(); - if (clientState == null) return; - BlockPosition targetBlockPosition = clientState.blockPosition; - if (targetBlockPosition == null) return; - WorldChunk chunk = world.getChunk(ChunkUtil.indexChunkFromBlock(targetBlockPosition.x, targetBlockPosition.z)); - if (chunk == null) return; - var blockState = chunk.getState(targetBlockPosition.x, targetBlockPosition.y, targetBlockPosition.z); - if (!(blockState instanceof ItemContainerState containerState)) return; - - Inventory playerInventory = player.getInventory(); - if (playerInventory == null) return; - playerInventory.getCombinedHotbarFirst().quickStackTo(containerState.getItemContainer()); - player.sendMessage(Message.raw("Quick stacked items to chest.")); - } - - @Override - protected void simulateInteractWithBlock(@NonNullDecl InteractionType interactionType, @NonNullDecl InteractionContext interactionContext, @NullableDecl ItemStack itemStack, @NonNullDecl World world, @NonNullDecl Vector3i vector3i) { - - } -} diff --git a/src/main/java/me/youhavetrouble/quickerstacker/listener/ChestInteractListener.java b/src/main/java/me/youhavetrouble/quickerstacker/listener/ChestInteractListener.java deleted file mode 100644 index ee0c9a3..0000000 --- a/src/main/java/me/youhavetrouble/quickerstacker/listener/ChestInteractListener.java +++ /dev/null @@ -1,50 +0,0 @@ -package me.youhavetrouble.quickerstacker.listener; - -import com.hypixel.hytale.component.Ref; -import com.hypixel.hytale.math.util.ChunkUtil; -import com.hypixel.hytale.protocol.BlockPosition; -import com.hypixel.hytale.protocol.InteractionSyncData; -import com.hypixel.hytale.server.core.Message; -import com.hypixel.hytale.server.core.entity.entities.Player; -import com.hypixel.hytale.server.core.event.events.ecs.UseBlockEvent; -import com.hypixel.hytale.server.core.event.events.player.PlayerInteractEvent; -import com.hypixel.hytale.server.core.event.events.player.PlayerReadyEvent; -import com.hypixel.hytale.server.core.inventory.Inventory; -import com.hypixel.hytale.server.core.universe.world.World; -import com.hypixel.hytale.server.core.universe.world.chunk.WorldChunk; -import com.hypixel.hytale.server.core.universe.world.meta.state.ItemContainerState; -import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; -import com.hypixel.hytale.server.core.util.NotificationUtil; - -public class ChestInteractListener { - - public static void onChestInteract(UseBlockEvent event) { - Ref ref = event.getContext().getEntity(); - Player player = ref.getStore().getComponent(ref, Player.getComponentType()); - if (player == null) return; - NotificationUtil.sendNotification(player.getPlayerRef().getPacketHandler(), "Interaction happened! "+ event.getInteractionType().name()); - player.sendMessage(Message.raw("Interaction: " + event.getInteractionType().name())); - BlockPosition targetBlockPosition = new BlockPosition(); - targetBlockPosition.x = event.getTargetBlock().x; - targetBlockPosition.y = event.getTargetBlock().y; - targetBlockPosition.z = event.getTargetBlock().z; - World world = player.getWorld(); - if (world == null) return; - WorldChunk chunk = world.getChunk(ChunkUtil.indexChunkFromBlock(targetBlockPosition.x, targetBlockPosition.z)); - if (chunk == null) return; - var blockState = chunk.getState(targetBlockPosition.x, targetBlockPosition.y, targetBlockPosition.z); - if (!(blockState instanceof ItemContainerState containerState)) return; - - Inventory playerInventory = player.getInventory(); - if (playerInventory == null) return; - playerInventory.getCombinedHotbarFirst().quickStackTo(containerState.getItemContainer()); - player.sendMessage(Message.raw("Quick stacked items to chest.")); - } - - public static void playerJoin(PlayerReadyEvent event) { - Player player = event.getPlayer(); - NotificationUtil.sendNotification(player.getPlayerConnection(), "QuickerStacker Loaded!"); - player.sendMessage(Message.raw("QuickerStacker Loaded!")); - } - -} diff --git a/src/main/java/me/youhavetrouble/quickerstacker/system/QuickStackToChestSystem.java b/src/main/java/me/youhavetrouble/quickerstacker/system/QuickStackToChestSystem.java new file mode 100644 index 0000000..749bb96 --- /dev/null +++ b/src/main/java/me/youhavetrouble/quickerstacker/system/QuickStackToChestSystem.java @@ -0,0 +1,57 @@ +package me.youhavetrouble.quickerstacker.system; + +import com.hypixel.hytale.component.ArchetypeChunk; +import com.hypixel.hytale.component.CommandBuffer; +import com.hypixel.hytale.component.Ref; +import com.hypixel.hytale.component.Store; +import com.hypixel.hytale.component.query.Query; +import com.hypixel.hytale.component.system.EntityEventSystem; +import com.hypixel.hytale.math.util.ChunkUtil; +import com.hypixel.hytale.protocol.InteractionType; +import com.hypixel.hytale.server.core.Message; +import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType; +import com.hypixel.hytale.server.core.entity.entities.Player; +import com.hypixel.hytale.server.core.event.events.ecs.UseBlockEvent; +import com.hypixel.hytale.server.core.inventory.Inventory; +import com.hypixel.hytale.server.core.universe.PlayerRef; +import com.hypixel.hytale.server.core.universe.world.World; +import com.hypixel.hytale.server.core.universe.world.chunk.WorldChunk; +import com.hypixel.hytale.server.core.universe.world.meta.state.ItemContainerState; +import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; +import com.hypixel.hytale.server.core.util.NotificationUtil; +import org.checkerframework.checker.nullness.compatqual.NonNullDecl; +import org.checkerframework.checker.nullness.compatqual.NullableDecl; + +public class QuickStackToChestSystem extends EntityEventSystem { + + public QuickStackToChestSystem() { + super(UseBlockEvent.Post.class); + } + + @Override + public void handle(int index, @NonNullDecl ArchetypeChunk archetypeChunk, @NonNullDecl Store store, @NonNullDecl CommandBuffer commandBuffer, @NonNullDecl UseBlockEvent.Post event) { + if (event.getBlockType() != BlockType.EMPTY) return; + if (event.getInteractionType() != InteractionType.Secondary) return; // right click + Ref ref = archetypeChunk.getReferenceTo(index); + Player player = store.getComponent(ref, Player.getComponentType()); + if (player == null) return; + World world = player.getWorld(); + if (world == null) return; + WorldChunk chunk = world.getChunk(ChunkUtil.indexChunkFromBlock(event.getTargetBlock().x, event.getTargetBlock().z)); + if (chunk == null) return; + var blockState = chunk.getState(event.getTargetBlock().x, event.getTargetBlock().y, event.getTargetBlock().z); + if (!(blockState instanceof ItemContainerState containerState)) return; + Inventory playerInventory = player.getInventory(); + if (playerInventory == null) return; + playerInventory.getCombinedHotbarFirst().quickStackTo(containerState.getItemContainer()); + player.sendMessage(Message.raw("Quick stacked items to chest.")); + + NotificationUtil.sendNotification(player.getPlayerRef().getPacketHandler(), "Quick stacked items to chest."); + } + + @NullableDecl + @Override + public Query getQuery() { + return PlayerRef.getComponentType(); + } +} diff --git a/src/main/resources/Server/Item/Interactions/Block/YouHaveTrouble_QuickerStacker_QuickStackToChest.json b/src/main/resources/Server/Item/Interactions/Block/YouHaveTrouble_QuickerStacker_QuickStackToChest.json deleted file mode 100644 index e5b4f99..0000000 --- a/src/main/resources/Server/Item/Interactions/Block/YouHaveTrouble_QuickerStacker_QuickStackToChest.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "Type": "YouHaveTrouble_QuickerStacker_QuickStackToChest" -} diff --git a/src/main/resources/Server/Item/Interactions/Block_Secondary.json b/src/main/resources/Server/Item/Interactions/Block_Secondary.json deleted file mode 100644 index db03851..0000000 --- a/src/main/resources/Server/Item/Interactions/Block_Secondary.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "Type": "UseBlock", - "Failed": { - "Type": "YouHaveTrouble_QuickerStacker_QuickStackToChest", - "RunTime": 0.125, - "Effects": { - "WaitForAnimationToFinish": false, - "ItemAnimationId": "Build" - } - } -} \ No newline at end of file diff --git a/src/main/resources/Server/Item/RootInteractions/Block/YouHaveTrouble_QuickerStacker_QuickStackToChest.json b/src/main/resources/Server/Item/RootInteractions/Block/YouHaveTrouble_QuickerStacker_QuickStackToChest.json deleted file mode 100644 index 3e16fb9..0000000 --- a/src/main/resources/Server/Item/RootInteractions/Block/YouHaveTrouble_QuickerStacker_QuickStackToChest.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "Interactions": [ - "YouHaveTrouble_QuickerStacker_QuickStackToChest" - ] -}