From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: violetc <58360096+s-yh-china@users.noreply.github.com> Date: Mon, 17 Jul 2023 11:41:50 +0800 Subject: [PATCH] Container open passthrough diff --git a/src/main/java/net/minecraft/world/level/block/SignBlock.java b/src/main/java/net/minecraft/world/level/block/SignBlock.java index 73874cd18a5b335e895ea0b2fefbd521209afe08..0f560a03676571e1ebf3811a7caa4faba0e7ef95 100644 --- a/src/main/java/net/minecraft/world/level/block/SignBlock.java +++ b/src/main/java/net/minecraft/world/level/block/SignBlock.java @@ -110,6 +110,18 @@ public abstract class SignBlock extends BaseEntityBlock implements SimpleWaterlo } else { return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; } + // Leaves start - signContainerPassthrough + } else if (org.leavesmc.leaves.LeavesConfig.containerPassthrough) { + BlockPos pos1 = pos.relative(hit.getDirection().getOpposite()); + if (this instanceof WallSignBlock || this instanceof WallHangingSignBlock) { + pos1 = pos.relative(state.getValue(HorizontalDirectionalBlock.FACING).getOpposite()); + } + if (world.getBlockEntity(pos1) instanceof net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity) { + BlockState state1 = world.getBlockState(pos1); + return state1.useItemOn(stack, world, player, hand, hit.withPosition(pos1)); + } + return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; + // Leaves end - signContainerPassthrough } else { return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; } @@ -138,6 +150,25 @@ public abstract class SignBlock extends BaseEntityBlock implements SimpleWaterlo return InteractionResult.SUCCESS; } else if (flag1) { return InteractionResult.SUCCESS; + // Leaves start - signContainerPassthrough + } else if (org.leavesmc.leaves.LeavesConfig.containerPassthrough) { + if (player.isShiftKeyDown()) { + if (!this.otherPlayerIsEditingSign(player, tileentitysign) && player.mayBuild() && this.hasEditableText(player, tileentitysign, flag1)) { + this.openTextEdit(player, tileentitysign, flag1); + return InteractionResult.SUCCESS; + } + } + + BlockPos pos1 = pos.relative(hit.getDirection().getOpposite()); + if (this instanceof WallSignBlock || this instanceof WallHangingSignBlock) { + pos1 = pos.relative(state.getValue(HorizontalDirectionalBlock.FACING).getOpposite()); + } + if (world.getBlockEntity(pos1) instanceof net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity) { + BlockState state1 = world.getBlockState(pos1); + return state1.useWithoutItem(world, player, hit.withPosition(pos1)); + } + return InteractionResult.PASS; + // Leaves end - signContainerPassthrough } else if (!this.otherPlayerIsEditingSign(player, tileentitysign) && player.mayBuild() && this.hasEditableText(player, tileentitysign, flag)) { this.openTextEdit(player, tileentitysign, flag, io.papermc.paper.event.player.PlayerOpenSignEvent.Cause.INTERACT); // Paper - Add PlayerOpenSignEvent return InteractionResult.SUCCESS;