diff --git a/Spigot-Server-Patches/0415-Fire-BlockPistonRetractEvent-for-all-empty-pistons.patch b/Spigot-Server-Patches/0415-Fire-BlockPistonRetractEvent-for-all-empty-pistons.patch new file mode 100644 index 0000000000..7b93753855 --- /dev/null +++ b/Spigot-Server-Patches/0415-Fire-BlockPistonRetractEvent-for-all-empty-pistons.patch @@ -0,0 +1,50 @@ +From 823c5e876e5dc00680950023057a21894c12011c Mon Sep 17 00:00:00 2001 +From: Zach Brown +Date: Thu, 31 Jan 2019 16:33:36 -0500 +Subject: [PATCH] Fire BlockPistonRetractEvent for all empty pistons + +There is an explicit check in the handling code for empty pistons that +prevents sticky pistons from firing the event. However when we look back +at the history we see that this check was originally added so that ONLY +sticky pistons would fire the retract event. I'm not sure why. +https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/commits/1092acbddf07edfa4100bc6824504ac75088e913 + +Over the course of several updates, the meaning of that field appears to +have changed from "is NOT sticky" to "is sticky". So now its having the +opposite effect. Only normal pistons fire the retraction event. And like +all things in CB, it's just been carried around since. + +If we are to believe the history, the correct fix for this issue is to +flip it so it only fires for sticky pistons, but that puts us in a +bind. It's already firing for non-sticky pistons, changing it now would +likely result in breakage. Furthermore, there is little documentation as +to WHY that was ever intended to be the case. + +Instead we opt to remove the check entirely so that the event fires for +all piston types. + +diff --git a/src/main/java/net/minecraft/server/BlockPiston.java b/src/main/java/net/minecraft/server/BlockPiston.java +index dbe0ff33a..0109484e0 100644 +--- a/src/main/java/net/minecraft/server/BlockPiston.java ++++ b/src/main/java/net/minecraft/server/BlockPiston.java +@@ -118,7 +118,7 @@ public class BlockPiston extends BlockDirectional { + } + + // CraftBukkit start +- if (!this.sticky) { ++ //if (!this.sticky) { // Paper - Prevents empty sticky pistons from firing retract - history behind is odd + org.bukkit.block.Block block = world.getWorld().getBlockAt(blockposition.getX(), blockposition.getY(), blockposition.getZ()); + BlockPistonRetractEvent event = new BlockPistonRetractEvent(block, ImmutableList.of(), CraftBlock.notchToBlockFace(enumdirection)); + world.getServer().getPluginManager().callEvent(event); +@@ -126,7 +126,7 @@ public class BlockPiston extends BlockDirectional { + if (event.isCancelled()) { + return; + } +- } ++ //} // Paper + // PAIL: checkME - what happened to setTypeAndData? + // CraftBukkit end + world.playBlockAction(blockposition, this, b0, enumdirection.a()); +-- +2.20.1 +