diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/bukkit/CraftInventoryViewMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/bukkit/CraftInventoryViewMixin.java new file mode 100644 index 00000000..b5e64791 --- /dev/null +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/bukkit/CraftInventoryViewMixin.java @@ -0,0 +1,30 @@ +package io.izzel.arclight.common.mixin.bukkit; + +import io.izzel.arclight.common.mod.server.ArclightContainer; +import net.minecraft.world.inventory.AbstractContainerMenu; +import org.bukkit.craftbukkit.v.entity.CraftHumanEntity; +import org.bukkit.craftbukkit.v.inventory.CraftInventory; +import org.bukkit.craftbukkit.v.inventory.CraftInventoryView; +import org.bukkit.entity.HumanEntity; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryView; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Mutable; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(value = CraftInventoryView.class, remap = false) +public abstract class CraftInventoryViewMixin extends InventoryView { + + @Shadow @Final @Mutable private CraftInventory viewing; + + @Inject(method = "", at = @At("RETURN")) + private void arclight$validate(HumanEntity player, Inventory viewing, AbstractContainerMenu container, CallbackInfo ci) { + if (container.slots.size() > this.countSlots()) { + this.viewing = ArclightContainer.createInv(((CraftHumanEntity) player).getHandle(), container); + } + } +} diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/entity/player/InventoryMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/entity/player/InventoryMixin.java index cfb10ceb..ee5f07f4 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/entity/player/InventoryMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/entity/player/InventoryMixin.java @@ -32,7 +32,7 @@ public abstract class InventoryMixin implements Container, IInventoryBridge, Pla @Shadow protected abstract boolean hasRemainingSpaceForItem(ItemStack stack1, ItemStack stack2); // @formatter:on - private List transaction = new ArrayList<>(); + public List transaction = new ArrayList<>(); private int maxStack = MAX_STACK; public int canHold(ItemStack stack) { diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mod/server/ArclightContainer.java b/arclight-common/src/main/java/io/izzel/arclight/common/mod/server/ArclightContainer.java index 00a95456..74cc9c92 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mod/server/ArclightContainer.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mod/server/ArclightContainer.java @@ -30,10 +30,14 @@ public class ArclightContainer { */ public static InventoryView createInvView(AbstractContainerMenu container) { var containerOwner = ArclightCaptures.getContainerOwner(); - Inventory viewing = new CraftInventory(new ContainerInvWrapper(container, containerOwner)); + Inventory viewing = createInv(containerOwner, container); return new CraftInventoryView(((PlayerEntityBridge) containerOwner).bridge$getBukkitEntity(), viewing, container); } + public static CraftInventory createInv(Player containerOwner, AbstractContainerMenu container) { + return new CraftInventory(new ContainerInvWrapper(container, containerOwner)); + } + private static class ContainerInvWrapper implements Container, IInventoryBridge { private final AbstractContainerMenu container; diff --git a/arclight-common/src/main/resources/mixins.arclight.bukkit.json b/arclight-common/src/main/resources/mixins.arclight.bukkit.json index cf2cc615..78b0d9e6 100644 --- a/arclight-common/src/main/resources/mixins.arclight.bukkit.json +++ b/arclight-common/src/main/resources/mixins.arclight.bukkit.json @@ -21,6 +21,7 @@ "CraftEventFactoryMixin", "CraftHumanEntityMixin", "CraftInventoryMixin", + "CraftInventoryViewMixin", "CraftItemFactoryMixin", "CraftItemStackMixin", "CraftLegacyLegacyMixin",