diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/player/ServerPlayerEntityMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/player/ServerPlayerEntityMixin.java index 23fa3259..5183b521 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/player/ServerPlayerEntityMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/player/ServerPlayerEntityMixin.java @@ -705,9 +705,11 @@ public abstract class ServerPlayerEntityMixin extends PlayerEntityMixin implemen ArclightCaptures.resetContainerOwner(); } - @Inject(method = "closeScreen", at = @At("HEAD")) + @Inject(method = "closeContainer", at = @At("HEAD")) private void arclight$invClose(CallbackInfo ci) { - CraftEventFactory.handleInventoryCloseEvent((ServerPlayerEntity) (Object) this); + if (this.openContainer != this.container) { + CraftEventFactory.handleInventoryCloseEvent((ServerPlayerEntity) (Object) this); + } } @Redirect(method = "addStat", at = @At(value = "INVOKE", target = "Lnet/minecraft/scoreboard/Scoreboard;forAllObjectives(Lnet/minecraft/scoreboard/ScoreCriteria;Ljava/lang/String;Ljava/util/function/Consumer;)V")) diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/inventory/container/ContainerMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/inventory/container/ContainerMixin.java index bad40958..feff20df 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/inventory/container/ContainerMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/inventory/container/ContainerMixin.java @@ -87,18 +87,20 @@ public abstract class ContainerMixin implements ContainerBridge { public final ITextComponent getTitle() { if (this.title == null) { - if (this.containerType != null && this.containerType.getRegistryName() != null) { - this.title = new StringTextComponent(this.containerType.getRegistryName().toString()); - } else { - this.title = new StringTextComponent(this.toString()); - } ArclightMod.LOGGER.warn("Container {}/{} has no title.", this, this.getClass().getName()); + if (this.containerType != null && this.containerType.getRegistryName() != null) { + return new StringTextComponent(this.containerType.getRegistryName().toString()); + } else { + return new StringTextComponent(this.toString()); + } } return this.title; } public final void setTitle(ITextComponent title) { - this.title = title; + if (this.title == null) { + this.title = title; + } } @Redirect(method = "onContainerClosed", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;dropItem(Lnet/minecraft/item/ItemStack;Z)Lnet/minecraft/entity/item/ItemEntity;")) diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/network/play/ServerPlayNetHandlerMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/network/play/ServerPlayNetHandlerMixin.java index ce03783f..8040ea8a 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/network/play/ServerPlayNetHandlerMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/network/play/ServerPlayNetHandlerMixin.java @@ -1208,9 +1208,8 @@ public abstract class ServerPlayNetHandlerMixin implements ServerPlayNetHandlerB private void arclight$invClose(CCloseWindowPacket packetIn, CallbackInfo ci) { if (((ServerPlayerEntityBridge) this.player).bridge$isMovementBlocked()) { ci.cancel(); - return; } - CraftEventFactory.handleInventoryCloseEvent(this.player); + // CraftEventFactory.handleInventoryCloseEvent(this.player); handled in ServerPlayerEntity#closeContainer } /** diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/forge/NetworkHooksMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/forge/NetworkHooksMixin.java index 07fcd47c..879e0d82 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/forge/NetworkHooksMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/forge/NetworkHooksMixin.java @@ -1,6 +1,7 @@ package io.izzel.arclight.common.mixin.forge; import io.izzel.arclight.common.bridge.inventory.container.ContainerBridge; +import io.izzel.arclight.common.mod.util.ArclightCaptures; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.container.Container; @@ -24,7 +25,9 @@ public class NetworkHooksMixin { private static void arclight$openContainer(ServerPlayerEntity player, INamedContainerProvider containerSupplier, Consumer extraDataWriter, CallbackInfo ci, int currentId, PacketBuffer extraData, PacketBuffer output, Container container) { ((ContainerBridge) container).bridge$setTitle(containerSupplier.getDisplayName()); + ArclightCaptures.captureContainerOwner(player); container = CraftEventFactory.callInventoryOpenEvent(player, container); + ArclightCaptures.resetContainerOwner(); if (container == null) { if (containerSupplier instanceof IInventory) { ((IInventory) containerSupplier).closeInventory(player); 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 b17e9b43..ad09c2e4 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 @@ -106,7 +106,7 @@ public class ArclightContainer { if (candidate == null) { throw new RuntimeException("candidate cannot be null, " + container + "/" + container.getClass()); } - if (bottomBegin < bottomEnd) { + if (bottomBegin < bottomEnd || bottomBegin == -1) { bottomBegin = container.inventorySlots.size(); } Inventory viewing = new CraftInventory(new ContainerInvWrapper(container, bottomBegin, candidate));