mirror of
https://github.com/YouHaveTrouble/QuickerStacker.git
synced 2026-05-12 06:06:55 +00:00
slowly going absolutely insane
This commit is contained in:
@@ -1,14 +1,9 @@
|
|||||||
package me.youhavetrouble.quickerstacker;
|
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.JavaPlugin;
|
||||||
import com.hypixel.hytale.server.core.plugin.JavaPluginInit;
|
import com.hypixel.hytale.server.core.plugin.JavaPluginInit;
|
||||||
import me.youhavetrouble.quickerstacker.interaction.ChestInteraction;
|
import me.youhavetrouble.quickerstacker.system.QuickStackToChestSystem;
|
||||||
import me.youhavetrouble.quickerstacker.listener.ChestInteractListener;
|
|
||||||
import org.checkerframework.checker.nullness.compatqual.NonNullDecl;
|
import org.checkerframework.checker.nullness.compatqual.NonNullDecl;
|
||||||
|
|
||||||
public class QuickerStacker extends JavaPlugin {
|
public class QuickerStacker extends JavaPlugin {
|
||||||
@@ -18,11 +13,8 @@ public class QuickerStacker extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setup() {
|
public void start() {
|
||||||
this.getEventRegistry().registerGlobal(UseBlockEvent.class, ChestInteractListener::onChestInteract);
|
this.getEntityStoreRegistry().registerSystem(new QuickStackToChestSystem());
|
||||||
this.getEventRegistry().registerGlobal(PlayerReadyEvent.class, ChestInteractListener::playerJoin);
|
|
||||||
|
|
||||||
this.getCodecRegistry(Interaction.CODEC).register("YouHaveTrouble_QuickerStacker_QuickStackToChest", ChestInteraction.class, ChestInteraction.CODEC);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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<ChestInteraction> CODEC = BuilderCodec
|
|
||||||
.builder(ChestInteraction.class, ChestInteraction::new)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void interactWithBlock(
|
|
||||||
@NonNullDecl World world,
|
|
||||||
@NonNullDecl CommandBuffer<EntityStore> commandBuffer,
|
|
||||||
@NonNullDecl InteractionType interactionType,
|
|
||||||
@NonNullDecl InteractionContext interactionContext,
|
|
||||||
@NullableDecl ItemStack itemStack,
|
|
||||||
@NonNullDecl Vector3i vector3i,
|
|
||||||
@NonNullDecl CooldownHandler cooldownHandler
|
|
||||||
) {
|
|
||||||
Ref<EntityStore> 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) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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<EntityStore> 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!"));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -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<EntityStore, UseBlockEvent.Post> {
|
||||||
|
|
||||||
|
public QuickStackToChestSystem() {
|
||||||
|
super(UseBlockEvent.Post.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handle(int index, @NonNullDecl ArchetypeChunk<EntityStore> archetypeChunk, @NonNullDecl Store<EntityStore> store, @NonNullDecl CommandBuffer<EntityStore> commandBuffer, @NonNullDecl UseBlockEvent.Post event) {
|
||||||
|
if (event.getBlockType() != BlockType.EMPTY) return;
|
||||||
|
if (event.getInteractionType() != InteractionType.Secondary) return; // right click
|
||||||
|
Ref<EntityStore> 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<EntityStore> getQuery() {
|
||||||
|
return PlayerRef.getComponentType();
|
||||||
|
}
|
||||||
|
}
|
||||||
-3
@@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"Type": "YouHaveTrouble_QuickerStacker_QuickStackToChest"
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
"Type": "UseBlock",
|
|
||||||
"Failed": {
|
|
||||||
"Type": "YouHaveTrouble_QuickerStacker_QuickStackToChest",
|
|
||||||
"RunTime": 0.125,
|
|
||||||
"Effects": {
|
|
||||||
"WaitForAnimationToFinish": false,
|
|
||||||
"ItemAnimationId": "Build"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-5
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"Interactions": [
|
|
||||||
"YouHaveTrouble_QuickerStacker_QuickStackToChest"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user