mirror of
https://github.com/YouHaveTrouble/QuickerStacker.git
synced 2026-05-12 06:06:55 +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;
|
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.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 com.hypixel.hytale.server.core.universe.PlayerRef;
|
||||||
|
import com.hypixel.hytale.server.core.universe.world.World;
|
||||||
import me.youhavetrouble.quickerstacker.interaction.QuickStackToChestInteraction;
|
import me.youhavetrouble.quickerstacker.interaction.QuickStackToChestInteraction;
|
||||||
import org.checkerframework.checker.nullness.compatqual.NonNullDecl;
|
import org.checkerframework.checker.nullness.compatqual.NonNullDecl;
|
||||||
|
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
|
||||||
|
|
||||||
public class QuickerStacker extends JavaPlugin {
|
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);
|
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.inventory.transaction.MoveTransaction;
|
||||||
import com.hypixel.hytale.server.core.modules.interaction.interaction.CooldownHandler;
|
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.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.World;
|
||||||
import com.hypixel.hytale.server.core.universe.world.chunk.WorldChunk;
|
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.meta.state.ItemContainerState;
|
||||||
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
|
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
|
||||||
import com.hypixel.hytale.server.core.util.NotificationUtil;
|
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.NonNullDecl;
|
||||||
import org.checkerframework.checker.nullness.compatqual.NullableDecl;
|
import org.checkerframework.checker.nullness.compatqual.NullableDecl;
|
||||||
|
|
||||||
@@ -37,6 +39,7 @@ public class QuickStackToChestInteraction extends SimpleBlockInteraction {
|
|||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
BlockPosition targetBlockPosition = interactionContext.getTargetBlock();
|
BlockPosition targetBlockPosition = interactionContext.getTargetBlock();
|
||||||
if (targetBlockPosition == null) return;
|
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));
|
WorldChunk chunk = world.getChunk(ChunkUtil.indexChunkFromBlock(targetBlockPosition.x, targetBlockPosition.z));
|
||||||
if (chunk == null) return;
|
if (chunk == null) return;
|
||||||
var blockState = chunk.getState(targetBlockPosition.x, targetBlockPosition.y, targetBlockPosition.z);
|
var blockState = chunk.getState(targetBlockPosition.x, targetBlockPosition.y, targetBlockPosition.z);
|
||||||
@@ -45,7 +48,9 @@ public class QuickStackToChestInteraction extends SimpleBlockInteraction {
|
|||||||
if (playerInventory == null) return;
|
if (playerInventory == null) return;
|
||||||
ListTransaction<MoveTransaction<ItemStackTransaction>> transaction = playerInventory.getCombinedHotbarFirst().quickStackTo(containerState.getItemContainer());
|
ListTransaction<MoveTransaction<ItemStackTransaction>> transaction = playerInventory.getCombinedHotbarFirst().quickStackTo(containerState.getItemContainer());
|
||||||
if (transaction.size() <= 0) return;
|
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
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user