From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Cryptite Date: Mon, 28 Feb 2022 08:54:52 -0600 Subject: [PATCH] Add BlockDestroyedByNeighborEvent diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java index d8ef17bc72388046e3f428c108aaaecd02d4eed3..f2a9da819243a140550a37b2b17182f70c01fddd 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -735,6 +735,17 @@ public abstract class Level implements LevelAccessor, AutoCloseable { if (iblockdata.isAir()) { return false; } else { + // Paper start + PendingBlockEvent blockEvent = pendingPlayerBlockEvents.get(pos); + if (blockEvent != null && blockEvent.sourceBlock != null) { + io.papermc.paper.event.block.BlockDestroyedByNeighborEvent event = + new io.papermc.paper.event.block.BlockDestroyedByNeighborEvent(org.bukkit.craftbukkit.block.CraftBlock.at(this, pos), + (org.bukkit.entity.Player) blockEvent.player.getBukkitEntity(), + org.bukkit.craftbukkit.block.CraftBlock.at(this, blockEvent.sourceBlock)); + event.callEvent(); + } + // Paper end + FluidState fluid = this.getFluidState(pos); // Paper start - while the above setAir method is named same and looks very similar // they are NOT used with same intent and the above should not fire this event. The above method is more of a BlockSetToAirEvent, diff --git a/src/main/java/net/minecraft/world/level/block/DoublePlantBlock.java b/src/main/java/net/minecraft/world/level/block/DoublePlantBlock.java index 301dfb74fec49b7f6f0452e4c49c8f1df43c0180..6b63bc56bfa757a17f9a6f98b31861a7f350be80 100644 --- a/src/main/java/net/minecraft/world/level/block/DoublePlantBlock.java +++ b/src/main/java/net/minecraft/world/level/block/DoublePlantBlock.java @@ -106,8 +106,11 @@ public class DoublePlantBlock extends BushBlock { Level.PendingBlockEvent blockEvent = world.pendingPlayerBlockEvents.remove(pos); if (blockEvent != null) { - //Would fire a future BlockDestroyedByNeighborEvent here, but must have this conditional block - //because it's important to remove from pendingPlayerBlockEvents + io.papermc.paper.event.block.BlockDestroyedByNeighborEvent event = + new io.papermc.paper.event.block.BlockDestroyedByNeighborEvent(org.bukkit.craftbukkit.block.CraftBlock.at(world, blockposition1), + (org.bukkit.entity.Player) blockEvent.player.getBukkitEntity(), + org.bukkit.craftbukkit.block.CraftBlock.at(world, pos)); + if (!event.callEvent()) return; } if (iblockdata1.is(state.getBlock()) && iblockdata1.getValue(DoublePlantBlock.HALF) == DoubleBlockHalf.LOWER) {