mirror of
https://github.com/YouHaveTrouble/QuickerStacker.git
synced 2026-05-12 14:16:56 +00:00
prevent quick stack when player cannot interact with the chest for any reason
This commit is contained in:
@@ -1,11 +1,23 @@
|
||||
package me.youhavetrouble.quickerstacker;
|
||||
|
||||
|
||||
import com.hypixel.hytale.component.Ref;
|
||||
import com.hypixel.hytale.math.vector.Vector3i;
|
||||
import com.hypixel.hytale.protocol.InteractionType;
|
||||
import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
|
||||
import com.hypixel.hytale.server.core.entity.InteractionContext;
|
||||
import com.hypixel.hytale.server.core.entity.InteractionManager;
|
||||
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.modules.interaction.InteractionSimulationHandler;
|
||||
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 com.hypixel.hytale.server.core.universe.PlayerRef;
|
||||
import com.hypixel.hytale.server.core.universe.world.World;
|
||||
import me.youhavetrouble.quickerstacker.interaction.QuickStackToChestInteraction;
|
||||
import org.checkerframework.checker.nullness.compatqual.NonNullDecl;
|
||||
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
|
||||
|
||||
public class QuickerStacker extends JavaPlugin {
|
||||
|
||||
@@ -18,4 +30,25 @@ public class QuickerStacker extends JavaPlugin {
|
||||
this.getCodecRegistry(Interaction.CODEC).register("Yht_QuickerStacker_QuickStackToChest", QuickStackToChestInteraction.class, QuickStackToChestInteraction.CODEC);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the player can interact with the block at the given position
|
||||
* @param ref Player ref
|
||||
* @param world World
|
||||
* @param x x
|
||||
* @param y y
|
||||
* @param z z
|
||||
* @return true if the player can interact with the block, false otherwise
|
||||
*/
|
||||
public static boolean canInteractWithBlock(Ref<EntityStore> ref, World world, int x, int y, int z){
|
||||
Player player = ref.getStore().getComponent(ref, Player.getComponentType());
|
||||
if (player == null) return false;
|
||||
PlayerRef playerRef = ref.getStore().getComponent(ref, PlayerRef.getComponentType());
|
||||
InteractionManager interactionManager = new InteractionManager(player, playerRef, new InteractionSimulationHandler());
|
||||
BlockType blockType = world.getBlockType(x, y, z);
|
||||
if (blockType == null) return false;
|
||||
var event = new UseBlockEvent.Pre(InteractionType.Use, InteractionContext.forProxyEntity(interactionManager, player, ref), new Vector3i(x, y, z), blockType);
|
||||
ref.getStore().invoke(ref, event);
|
||||
return !event.isCancelled();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+6
-1
@@ -16,11 +16,13 @@ import com.hypixel.hytale.server.core.inventory.transaction.ListTransaction;
|
||||
import com.hypixel.hytale.server.core.inventory.transaction.MoveTransaction;
|
||||
import com.hypixel.hytale.server.core.modules.interaction.interaction.CooldownHandler;
|
||||
import com.hypixel.hytale.server.core.modules.interaction.interaction.config.client.SimpleBlockInteraction;
|
||||
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 me.youhavetrouble.quickerstacker.QuickerStacker;
|
||||
import org.checkerframework.checker.nullness.compatqual.NonNullDecl;
|
||||
import org.checkerframework.checker.nullness.compatqual.NullableDecl;
|
||||
|
||||
@@ -37,6 +39,7 @@ public class QuickStackToChestInteraction extends SimpleBlockInteraction {
|
||||
if (player == null) return;
|
||||
BlockPosition targetBlockPosition = interactionContext.getTargetBlock();
|
||||
if (targetBlockPosition == null) return;
|
||||
if (!QuickerStacker.canInteractWithBlock(ref, world, targetBlockPosition.x, targetBlockPosition.y, targetBlockPosition.z)) 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);
|
||||
@@ -45,7 +48,9 @@ public class QuickStackToChestInteraction extends SimpleBlockInteraction {
|
||||
if (playerInventory == null) return;
|
||||
ListTransaction<MoveTransaction<ItemStackTransaction>> transaction = playerInventory.getCombinedHotbarFirst().quickStackTo(containerState.getItemContainer());
|
||||
if (transaction.size() <= 0) return;
|
||||
NotificationUtil.sendNotification(player.getPlayerRef().getPacketHandler(), "Quick stacked "+ transaction.size() +" stacks");
|
||||
PlayerRef playerRef = ref.getStore().getComponent(ref, PlayerRef.getComponentType());
|
||||
if (playerRef == null) return;
|
||||
NotificationUtil.sendNotification(playerRef.getPacketHandler(), "Quick stacked "+ transaction.size() +" stacks");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user