--- a/net/minecraft/world/level/block/BlockChest.java
+++ b/net/minecraft/world/level/block/BlockChest.java
@@ -93,24 +93,7 @@
         public Optional<ITileInventory> acceptDouble(final TileEntityChest tileentitychest, final TileEntityChest tileentitychest1) {
             final InventoryLargeChest inventorylargechest = new InventoryLargeChest(tileentitychest, tileentitychest1);
 
-            return Optional.of(new ITileInventory() {
-                @Nullable
-                @Override
-                public Container createMenu(int i, PlayerInventory playerinventory, EntityHuman entityhuman) {
-                    if (tileentitychest.canOpen(entityhuman) && tileentitychest1.canOpen(entityhuman)) {
-                        tileentitychest.unpackLootTable(playerinventory.player);
-                        tileentitychest1.unpackLootTable(playerinventory.player);
-                        return ContainerChest.sixRows(i, playerinventory, inventorylargechest);
-                    } else {
-                        return null;
-                    }
-                }
-
-                @Override
-                public IChatBaseComponent getDisplayName() {
-                    return (IChatBaseComponent) (tileentitychest.hasCustomName() ? tileentitychest.getDisplayName() : (tileentitychest1.hasCustomName() ? tileentitychest1.getDisplayName() : IChatBaseComponent.translatable("container.chestDouble")));
-                }
-            });
+            return Optional.of(new DoubleInventory(tileentitychest, tileentitychest1, inventorylargechest)); // CraftBukkit
         }
 
         public Optional<ITileInventory> acceptSingle(TileEntityChest tileentitychest) {
@@ -123,6 +106,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.canOpen(entityhuman) && tileentitychest1.canOpen(entityhuman)) {
+                tileentitychest.unpackLootTable(playerinventory.player);
+                tileentitychest1.unpackLootTable(playerinventory.player);
+                return ContainerChest.sixRows(i, playerinventory, inventorylargechest);
+            } else {
+                return null;
+            }
+        }
+
+        @Override
+        public IChatBaseComponent getDisplayName() {
+            return (IChatBaseComponent) (tileentitychest.hasCustomName() ? tileentitychest.getDisplayName() : (tileentitychest1.hasCustomName() ? tileentitychest1.getDisplayName() : IChatBaseComponent.translatable("container.chestDouble")));
+        }
+    };
+    // CraftBukkit end
+
     @Override
     public MapCodec<? extends BlockChest> codec() {
         return BlockChest.CODEC;
@@ -278,7 +293,7 @@
 
     @Override
     public DoubleBlockFinder.Result<? extends TileEntityChest> combine(IBlockData iblockdata, World world, BlockPosition blockposition, boolean flag) {
-        BiPredicate bipredicate;
+        BiPredicate<GeneratorAccess, BlockPosition> bipredicate; // CraftBukkit - decompile error
 
         if (flag) {
             bipredicate = (generatoraccess, blockposition1) -> {
@@ -294,7 +309,14 @@
     @Nullable
     @Override
     public ITileInventory getMenuProvider(IBlockData iblockdata, World world, BlockPosition blockposition) {
-        return (ITileInventory) ((Optional) this.combine(iblockdata, world, blockposition, false).apply(BlockChest.MENU_PROVIDER_COMBINER)).orElse((Object) null);
+        // CraftBukkit start
+        return getMenuProvider(iblockdata, world, blockposition, false);
+    }
+
+    @Nullable
+    public ITileInventory getMenuProvider(IBlockData iblockdata, World world, BlockPosition blockposition, boolean ignoreObstructions) {
+        return (ITileInventory) ((Optional) this.combine(iblockdata, world, blockposition, ignoreObstructions).apply(BlockChest.MENU_PROVIDER_COMBINER)).orElse((Object) null);
+        // CraftBukkit end
     }
 
     public static DoubleBlockFinder.Combiner<TileEntityChest, Float2FloatFunction> opennessCombiner(final LidBlockEntity lidblockentity) {
