diff --git a/nms-patches/BlockChest.patch b/nms-patches/BlockChest.patch new file mode 100644 index 0000000000..468567f4d9 --- /dev/null +++ b/nms-patches/BlockChest.patch @@ -0,0 +1,67 @@ +--- a/net/minecraft/server/BlockChest.java ++++ b/net/minecraft/server/BlockChest.java +@@ -30,24 +30,7 @@ + public ITileInventory b(final TileEntityChest tileentitychest, final TileEntityChest tileentitychest1) { + final InventoryLargeChest inventorylargechest = new InventoryLargeChest(tileentitychest, tileentitychest1); + +- return new ITileInventory() { +- @Nullable +- @Override +- public Container createMenu(int i, PlayerInventory playerinventory, EntityHuman entityhuman) { +- if (tileentitychest.e(entityhuman) && tileentitychest1.e(entityhuman)) { +- tileentitychest.d(playerinventory.player); +- tileentitychest1.d(playerinventory.player); +- return ContainerChest.b(i, playerinventory, inventorylargechest); +- } else { +- return null; +- } +- } +- +- @Override +- public IChatBaseComponent getScoreboardDisplayName() { +- return new ChatMessage("container.chestDouble", new Object[0]); +- } +- }; ++ return new DoubleInventory(tileentitychest, tileentitychest1, inventorylargechest); // CraftBukkit + } + + @Override +@@ -56,6 +39,38 @@ + } + }; + ++ // CraftBukkit start ++ public static class DoubleInventory implements ITileInventory { ++ ++ private final TileEntityChest tileentitychest; ++ private final TileEntityChest tileentitychest1; ++ public final InventoryLargeChest inventorylargechest; ++ ++ public DoubleInventory(TileEntityChest tileentitychest, TileEntityChest tileentitychest1, InventoryLargeChest inventorylargechest) { ++ this.tileentitychest = tileentitychest; ++ this.tileentitychest1 = tileentitychest1; ++ this.inventorylargechest = inventorylargechest; ++ } ++ ++ @Nullable ++ @Override ++ public Container createMenu(int i, PlayerInventory playerinventory, EntityHuman entityhuman) { ++ if (tileentitychest.e(entityhuman) && tileentitychest1.e(entityhuman)) { ++ tileentitychest.d(playerinventory.player); ++ tileentitychest1.d(playerinventory.player); ++ return ContainerChest.b(i, playerinventory, inventorylargechest); ++ } else { ++ return null; ++ } ++ } ++ ++ @Override ++ public IChatBaseComponent getScoreboardDisplayName() { ++ return new ChatMessage("container.chestDouble", new Object[0]); ++ } ++ }; ++ // CraftBukkit end ++ + protected BlockChest(Block.Info block_info) { + super(block_info); + this.o((IBlockData) ((IBlockData) ((IBlockData) ((IBlockData) this.blockStateList.getBlockData()).set(BlockChest.FACING, EnumDirection.NORTH)).set(BlockChest.b, BlockPropertyChestType.SINGLE)).set(BlockChest.c, false)); diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftChest.java b/src/main/java/org/bukkit/craftbukkit/block/CraftChest.java index 142521a172..0e8f1a89fc 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftChest.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftChest.java @@ -50,8 +50,8 @@ public class CraftChest extends CraftLootable implements Chest BlockChest blockChest = (BlockChest) (this.getType() == Material.CHEST ? Blocks.CHEST : Blocks.TRAPPED_CHEST); ITileInventory nms = blockChest.getInventory(data, world.getHandle(), this.getPosition()); - if (nms instanceof InventoryLargeChest) { - inventory = new CraftInventoryDoubleChest((InventoryLargeChest) nms); + if (nms instanceof BlockChest.DoubleInventory) { + inventory = new CraftInventoryDoubleChest(((BlockChest.DoubleInventory) nms).inventorylargechest); } return inventory; }