From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: SoSeDiK Date: Wed, 1 May 2024 08:22:13 +0300 Subject: [PATCH] More Chest Block API == AT == public net.minecraft.world.level.block.ChestBlock isBlockedChestByBlock(Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/core/BlockPos;)Z diff --git a/src/main/java/net/minecraft/world/level/block/EnderChestBlock.java b/src/main/java/net/minecraft/world/level/block/EnderChestBlock.java index 5f9858ef8d0ec1a74d469ab4426eb1db068873fd..ca92d49ef2010ba00c623491671dcde8ebe697c1 100644 --- a/src/main/java/net/minecraft/world/level/block/EnderChestBlock.java +++ b/src/main/java/net/minecraft/world/level/block/EnderChestBlock.java @@ -83,7 +83,7 @@ public class EnderChestBlock extends AbstractChestBlock i BlockEntity blockEntity = world.getBlockEntity(pos); if (playerEnderChestContainer != null && blockEntity instanceof EnderChestBlockEntity) { BlockPos blockPos = pos.above(); - if (world.getBlockState(blockPos).isRedstoneConductor(world, blockPos)) { + if (world.getBlockState(blockPos).isRedstoneConductor(world, blockPos)) { // Paper - diff on change; make sure that EnderChest#isBlocked uses the same logic return InteractionResult.sidedSuccess(world.isClientSide); } else if (world.isClientSide) { return InteractionResult.SUCCESS; diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftChest.java b/src/main/java/org/bukkit/craftbukkit/block/CraftChest.java index c7d19cef79dbe39edc8cddf0c60c7b59d656e581..984bb158a5de646834031d06bfd0fb9c89a76dff 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftChest.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftChest.java @@ -100,4 +100,29 @@ public class CraftChest extends CraftLootable implements Chest return getTileEntity().openersCounter.opened; } // Paper end - More Lidded Block API + + // Paper start - More Chest Block API + @Override + public boolean isBlocked() { + // Method mimics vanilla logic in ChestBlock and DoubleBlockCombiner when trying to open chest's container + if (!isPlaced()) { + return false; + } + net.minecraft.world.level.LevelAccessor world = getWorldHandle(); + if (ChestBlock.isChestBlockedAt(world, getPosition())) { + return true; + } + if (ChestBlock.getBlockType(this.data) == net.minecraft.world.level.block.DoubleBlockCombiner.BlockType.SINGLE) { + return false; + } + net.minecraft.core.Direction direction = ChestBlock.getConnectedDirection(this.data); + net.minecraft.core.BlockPos neighbourBlockPos = getPosition().relative(direction); + BlockState neighbourBlockState = world.getBlockStateIfLoaded(neighbourBlockPos); + return neighbourBlockState != null + && neighbourBlockState.is(this.data.getBlock()) + && ChestBlock.getBlockType(neighbourBlockState) != net.minecraft.world.level.block.DoubleBlockCombiner.BlockType.SINGLE + && ChestBlock.getConnectedDirection(neighbourBlockState) == direction.getOpposite() + && ChestBlock.isChestBlockedAt(world, neighbourBlockPos); + } + // Paper end - More Chest Block API } diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftEnderChest.java b/src/main/java/org/bukkit/craftbukkit/block/CraftEnderChest.java index b64adbba3e52d32d439e64a243cb74f3fbca2ce3..f45ee675a10729845bf376fa95e648b23b9aac12 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftEnderChest.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftEnderChest.java @@ -58,4 +58,13 @@ public class CraftEnderChest extends CraftBlockEntityState