From 067cd73889701051475793e06b70b81c86bedab7 Mon Sep 17 00:00:00 2001 From: cakoyo Date: Fri, 24 Aug 2018 22:38:31 +0800 Subject: [PATCH] Add source block to BlockPhysicsEvent (#1364) Resolves #1275 For plants, the source block is itself, because the `changed` type is itself. --- ...dd-source-block-to-BlockPhysicsEvent.patch | 59 +++++++++++++++++++ ...dd-source-block-to-BlockPhysicsEvent.patch | 20 +++++++ 2 files changed, 79 insertions(+) create mode 100644 Spigot-API-Patches/Add-source-block-to-BlockPhysicsEvent.patch create mode 100644 Spigot-Server-Patches/Add-source-block-to-BlockPhysicsEvent.patch diff --git a/Spigot-API-Patches/Add-source-block-to-BlockPhysicsEvent.patch b/Spigot-API-Patches/Add-source-block-to-BlockPhysicsEvent.patch new file mode 100644 index 0000000000..03296c531c --- /dev/null +++ b/Spigot-API-Patches/Add-source-block-to-BlockPhysicsEvent.patch @@ -0,0 +1,59 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Sotr +Date: Thu, 23 Aug 2018 16:14:25 +0800 +Subject: [PATCH] Add source block to BlockPhysicsEvent + + +diff --git a/src/main/java/org/bukkit/event/block/BlockPhysicsEvent.java b/src/main/java/org/bukkit/event/block/BlockPhysicsEvent.java +index 01a545b4..d17e05ac 100644 +--- a/src/main/java/org/bukkit/event/block/BlockPhysicsEvent.java ++++ b/src/main/java/org/bukkit/event/block/BlockPhysicsEvent.java +@@ -0,0 +0,0 @@ public class BlockPhysicsEvent extends BlockEvent implements Cancellable { + private static final HandlerList handlers = new HandlerList(); + private final int changed; + private boolean cancel = false; ++ // Paper start - add source block ++ private int sourceX; ++ private int sourceY; ++ private int sourceZ; ++ private Block sourceBlock; ++ ++ /** ++ * ++ * @deprecated Magic value ++ * @param block the block involved in this event ++ * @param changed the changed block's type id ++ * @param sourceX the x of the source block ++ * @param sourceY the y of the source block ++ * @param sourceZ the z of the source block ++ */ ++ @Deprecated ++ public BlockPhysicsEvent(final Block block, final int changed, final int sourceX, final int sourceY, final int sourceZ) { ++ this(block, changed); ++ this.sourceX = sourceX; ++ this.sourceY = sourceY; ++ this.sourceZ = sourceZ; ++ this.sourceBlock = null; ++ } ++ ++ /** ++ * Gets the source block, causing this event ++ * ++ * @return Source block ++ */ ++ public Block getSourceBlock() { ++ return sourceBlock == null ? (sourceBlock = block.getWorld().getBlockAt(sourceX, sourceY, sourceZ)) : sourceBlock; ++ } ++ // Paper end + + /** + * +@@ -0,0 +0,0 @@ public class BlockPhysicsEvent extends BlockEvent implements Cancellable { + public BlockPhysicsEvent(final Block block, final int changed) { + super(block); + this.changed = changed; ++ this.sourceBlock = block; // Paper - add source block + } + + /** +-- \ No newline at end of file diff --git a/Spigot-Server-Patches/Add-source-block-to-BlockPhysicsEvent.patch b/Spigot-Server-Patches/Add-source-block-to-BlockPhysicsEvent.patch new file mode 100644 index 0000000000..1e5b75e8c9 --- /dev/null +++ b/Spigot-Server-Patches/Add-source-block-to-BlockPhysicsEvent.patch @@ -0,0 +1,20 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Sotr +Date: Thu, 23 Aug 2018 16:14:12 +0800 +Subject: [PATCH] Add source block to BlockPhysicsEvent + + +diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java +index 04d0fa1d..64d75934 100644 +--- a/src/main/java/net/minecraft/server/World.java ++++ b/src/main/java/net/minecraft/server/World.java +@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess { + // CraftBukkit start + CraftWorld world = ((WorldServer) this).getWorld(); + if (world != null && !((WorldServer)this).stopPhysicsEvent) { // Paper +- BlockPhysicsEvent event = new BlockPhysicsEvent(world.getBlockAt(blockposition.getX(), blockposition.getY(), blockposition.getZ()), CraftMagicNumbers.getId(block)); ++ BlockPhysicsEvent event = new BlockPhysicsEvent(world.getBlockAt(blockposition.getX(), blockposition.getY(), blockposition.getZ()), CraftMagicNumbers.getId(block), blockposition1.getX(), blockposition1.getY(), blockposition1.getZ()); // Paper - add source block + this.getServer().getPluginManager().callEvent(event); + + if (event.isCancelled()) { +-- \ No newline at end of file