mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-26 22:40:21 +01:00
Fix double chest identification (#11812)
This commit is contained in:
parent
b8a0541ccf
commit
9e2d39cd26
3 changed files with 35 additions and 21 deletions
|
@ -919,7 +919,7 @@
|
||||||
+ ((Container) menu).stopOpen(this);
|
+ ((Container) menu).stopOpen(this);
|
||||||
+ } else if (menu instanceof net.minecraft.world.level.block.ChestBlock.DoubleInventory doubleInventory) {
|
+ } else if (menu instanceof net.minecraft.world.level.block.ChestBlock.DoubleInventory doubleInventory) {
|
||||||
+ // SPIGOT-5355 - double chests too :(
|
+ // SPIGOT-5355 - double chests too :(
|
||||||
+ doubleInventory.inventorylargechest.stopOpen(this);
|
+ doubleInventory.container.stopOpen(this);
|
||||||
+ // Paper start - Fix InventoryOpenEvent cancellation
|
+ // Paper start - Fix InventoryOpenEvent cancellation
|
||||||
+ } else if (!this.enderChestInventory.isActiveChest(null)) {
|
+ } else if (!this.enderChestInventory.isActiveChest(null)) {
|
||||||
+ this.enderChestInventory.stopOpen(this);
|
+ this.enderChestInventory.stopOpen(this);
|
||||||
|
|
|
@ -1,39 +1,53 @@
|
||||||
--- a/net/minecraft/world/level/block/ChestBlock.java
|
--- a/net/minecraft/world/level/block/ChestBlock.java
|
||||||
+++ b/net/minecraft/world/level/block/ChestBlock.java
|
+++ b/net/minecraft/world/level/block/ChestBlock.java
|
||||||
@@ -120,6 +_,38 @@
|
@@ -85,7 +_,7 @@
|
||||||
|
@Override
|
||||||
|
public Optional<MenuProvider> acceptDouble(final ChestBlockEntity first, final ChestBlockEntity second) {
|
||||||
|
final Container container = new CompoundContainer(first, second);
|
||||||
|
- return Optional.of(new MenuProvider() {
|
||||||
|
+ return Optional.of(DoubleInventory.wrap(new MenuProvider() { // CraftBukkit - wrap for identification
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public AbstractContainerMenu createMenu(int containerId, Inventory playerInventory, Player player) {
|
||||||
|
@@ -106,7 +_,7 @@
|
||||||
|
return (Component)(second.hasCustomName() ? second.getDisplayName() : Component.translatable("container.chestDouble"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- });
|
||||||
|
+ }, (CompoundContainer) container)); // CraftBukkit - wrap for identification
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@@ -120,6 +_,34 @@
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
+ // CraftBukkit start
|
+ // CraftBukkit start
|
||||||
+ public static class DoubleInventory implements MenuProvider {
|
+ public static class DoubleInventory implements MenuProvider {
|
||||||
+
|
+
|
||||||
+ private final ChestBlockEntity tileentitychest;
|
+ private final MenuProvider delegate;
|
||||||
+ private final ChestBlockEntity tileentitychest1;
|
+ public final CompoundContainer container; // expose to api
|
||||||
+ public final CompoundContainer inventorylargechest;
|
|
||||||
+
|
+
|
||||||
+ public DoubleInventory(ChestBlockEntity tileentitychest, ChestBlockEntity tileentitychest1, CompoundContainer inventorylargechest) {
|
+ private DoubleInventory(MenuProvider delegate, CompoundContainer container) {
|
||||||
+ this.tileentitychest = tileentitychest;
|
+ this.delegate = delegate;
|
||||||
+ this.tileentitychest1 = tileentitychest1;
|
+ this.container = container;
|
||||||
+ this.inventorylargechest = inventorylargechest;
|
+ }
|
||||||
|
+
|
||||||
|
+ public static DoubleInventory wrap(MenuProvider delegate, CompoundContainer container) {
|
||||||
|
+ return new DoubleInventory(delegate, container);
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ @Nullable
|
+ @Nullable
|
||||||
+ @Override
|
+ @Override
|
||||||
+ public AbstractContainerMenu createMenu(int syncId, Inventory playerInventory, Player player) {
|
+ public AbstractContainerMenu createMenu(int syncId, Inventory playerInventory, Player player) {
|
||||||
+ if (this.tileentitychest.canOpen(player) && this.tileentitychest1.canOpen(player)) {
|
+ return this.delegate.createMenu(syncId, playerInventory, player);
|
||||||
+ this.tileentitychest.unpackLootTable(playerInventory.player);
|
|
||||||
+ this.tileentitychest1.unpackLootTable(playerInventory.player);
|
|
||||||
+ return ChestMenu.sixRows(syncId, playerInventory, this.inventorylargechest);
|
|
||||||
+ } else {
|
|
||||||
+ return null;
|
|
||||||
+ }
|
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ @Override
|
+ @Override
|
||||||
+ public Component getDisplayName() {
|
+ public Component getDisplayName() {
|
||||||
+ return (Component) (this.tileentitychest.hasCustomName() ? this.tileentitychest.getDisplayName() : (this.tileentitychest1.hasCustomName() ? this.tileentitychest1.getDisplayName() : Component.translatable("container.chestDouble")));
|
+ return this.delegate.getDisplayName();
|
||||||
+ }
|
+ }
|
||||||
+ };
|
+ }
|
||||||
+ // CraftBukkit end
|
+ // CraftBukkit end
|
||||||
+
|
+
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -16,10 +16,10 @@ public class CraftInventoryDoubleChest extends CraftInventory implements DoubleC
|
||||||
private final CraftInventory right;
|
private final CraftInventory right;
|
||||||
|
|
||||||
public CraftInventoryDoubleChest(ChestBlock.DoubleInventory block) {
|
public CraftInventoryDoubleChest(ChestBlock.DoubleInventory block) {
|
||||||
super(block.inventorylargechest);
|
super(block.container);
|
||||||
this.tile = block;
|
this.tile = block;
|
||||||
this.left = new CraftInventory(block.inventorylargechest.container1);
|
this.left = new CraftInventory(block.container.container1);
|
||||||
this.right = new CraftInventory(block.inventorylargechest.container2);
|
this.right = new CraftInventory(block.container.container2);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CraftInventoryDoubleChest(CompoundContainer largeChest) {
|
public CraftInventoryDoubleChest(CompoundContainer largeChest) {
|
||||||
|
|
Loading…
Reference in a new issue