Skip to content

Commit 3e5a30d

Browse files
committed
Ensure container owner is always popped.
1 parent 58fcc06 commit 3e5a30d

2 files changed

Lines changed: 18 additions & 9 deletions

File tree

arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/server/level/ServerPlayerMixin.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -601,9 +601,12 @@ private Either<Player.BedSleepingProblem, Unit> getBedResult(BlockPos blockposit
601601
if (container != null) {
602602
((ContainerBridge) container).bridge$setTitle(iTileInventory.getDisplayName());
603603
boolean cancelled = false;
604-
ArclightCaptures.captureContainerOwner((ServerPlayer) (Object) this);
605-
container = CraftEventFactory.callInventoryOpenEvent((ServerPlayer) (Object) this, container, cancelled);
606-
ArclightCaptures.popContainerOwner((ServerPlayer) (Object) this);
604+
try {
605+
ArclightCaptures.captureContainerOwner((ServerPlayer) (Object) this);
606+
container = CraftEventFactory.callInventoryOpenEvent((ServerPlayer) (Object) this, container, cancelled);
607+
} finally {
608+
ArclightCaptures.popContainerOwner((ServerPlayer) (Object) this);
609+
}
607610
if (container == null && !cancelled) {
608611
if (iTileInventory instanceof Container) {
609612
((Container) iTileInventory).stopOpen((ServerPlayer) (Object) this);
@@ -637,9 +640,12 @@ private Either<Player.BedSleepingProblem, Unit> getBedResult(BlockPos blockposit
637640
@Inject(method = "doCloseContainer", at = @At("HEAD"))
638641
private void arclight$invClose(CallbackInfo ci) {
639642
if (this.containerMenu != this.inventoryMenu) {
640-
ArclightCaptures.captureContainerOwner((ServerPlayer) (Object) this);
641-
CraftEventFactory.handleInventoryCloseEvent((ServerPlayer) (Object) this);
642-
ArclightCaptures.popContainerOwner((ServerPlayer) (Object) this);
643+
try {
644+
ArclightCaptures.captureContainerOwner((ServerPlayer) (Object) this);
645+
CraftEventFactory.handleInventoryCloseEvent((ServerPlayer) (Object) this);
646+
} finally {
647+
ArclightCaptures.popContainerOwner((ServerPlayer) (Object) this);
648+
}
643649
}
644650
}
645651

arclight-forge/src/main/java/io/izzel/arclight/forge/mixin/forge/IForgeServerPlayerMixin.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,12 @@ default void openMenu(MenuProvider containerSupplier, Consumer<FriendlyByteBuf>
4747
return;
4848

4949
((ContainerBridge) c).bridge$setTitle(containerSupplier.getDisplayName());
50-
ArclightCaptures.captureContainerOwner(player);
51-
c = CraftEventFactory.callInventoryOpenEvent(player, c);
52-
ArclightCaptures.popContainerOwner(player);
50+
try {
51+
ArclightCaptures.captureContainerOwner(player);
52+
c = CraftEventFactory.callInventoryOpenEvent(player, c);
53+
} finally {
54+
ArclightCaptures.popContainerOwner(player);
55+
}
5356
if (c == null) {
5457
if (containerSupplier instanceof Container) {
5558
((Container) containerSupplier).stopOpen(player);

0 commit comments

Comments
 (0)