aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorLulu13022002 <[email protected]>2024-11-26 20:05:52 +0100
committerGitHub <[email protected]>2024-11-26 20:05:52 +0100
commit7e789e8376b855e0c25fbbf23cf957daf24aa577 (patch)
tree0534757a56080490fbb6f8f6964bf23c1658f771
parentf4741f22e813e0909a3f5ceacbadeac4f2b03f3b (diff)
downloadPaper-7e789e8376b855e0c25fbbf23cf957daf24aa577.tar.gz
Paper-7e789e8376b855e0c25fbbf23cf957daf24aa577.zip
Prevent duplicate/superfluous BlockPhysicsEvent (#11609)
-rw-r--r--patches/server/0732-Add-source-block-to-BlockPhysicsEvent.patch42
-rw-r--r--patches/server/0732-Call-BlockPhysicsEvent-more-often.patch32
2 files changed, 42 insertions, 32 deletions
diff --git a/patches/server/0732-Add-source-block-to-BlockPhysicsEvent.patch b/patches/server/0732-Add-source-block-to-BlockPhysicsEvent.patch
new file mode 100644
index 0000000000..91adea4a23
--- /dev/null
+++ b/patches/server/0732-Add-source-block-to-BlockPhysicsEvent.patch
@@ -0,0 +1,42 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Lulu13022002 <[email protected]>
+Date: Sun, 7 Aug 2022 22:16:36 +0200
+Subject: [PATCH] Add source block to BlockPhysicsEvent
+
+
+diff --git a/src/main/java/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java b/src/main/java/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java
+index 5821c802ec880501df025fcd3fbbd98242ed952c..3a95e3236eafd14baed035e53503b58c2e21b68a 100644
+--- a/src/main/java/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java
++++ b/src/main/java/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java
+@@ -135,7 +135,7 @@ public class CollectingNeighborUpdater implements NeighborUpdater {
+ orientation = this.orientation.withFront(direction);
+ }
+
+- NeighborUpdater.executeUpdate(world, blockState, blockPos, this.sourceBlock, orientation, false);
++ NeighborUpdater.executeUpdate(world, blockState, blockPos, this.sourceBlock, orientation, false, this.sourcePos); // Paper - Add source block to BlockPhysicsEvent
+ if (this.idx < NeighborUpdater.UPDATE_ORDER.length && NeighborUpdater.UPDATE_ORDER[this.idx] == this.skipDirection) {
+ this.idx++;
+ }
+diff --git a/src/main/java/net/minecraft/world/level/redstone/NeighborUpdater.java b/src/main/java/net/minecraft/world/level/redstone/NeighborUpdater.java
+index be8f34dd222e43b2db7f05e5e5839df8446e1b02..e414da8a51bb9b49c28a74eca166046cbee44835 100644
+--- a/src/main/java/net/minecraft/world/level/redstone/NeighborUpdater.java
++++ b/src/main/java/net/minecraft/world/level/redstone/NeighborUpdater.java
+@@ -55,11 +55,17 @@ public interface NeighborUpdater {
+ }
+
+ static void executeUpdate(Level world, BlockState state, BlockPos pos, Block sourceBlock, @Nullable Orientation orientation, boolean notify) {
++ // Paper start - Add source block to BlockPhysicsEvent
++ executeUpdate(world, state, pos, sourceBlock, orientation, notify, pos);
++ }
++
++ static void executeUpdate(Level world, BlockState state, BlockPos pos, Block sourceBlock, @Nullable Orientation orientation, boolean notify, BlockPos sourcePos) {
++ // Paper end - Add source block to BlockPhysicsEvent
+ try {
+ // CraftBukkit start
+ CraftWorld cworld = ((ServerLevel) world).getWorld();
+ if (cworld != null) {
+- BlockPhysicsEvent event = new BlockPhysicsEvent(CraftBlock.at(world, pos), CraftBlockData.fromData(state));
++ BlockPhysicsEvent event = new BlockPhysicsEvent(CraftBlock.at(world, pos), CraftBlockData.fromData(state), CraftBlock.at(world, sourcePos)); // Paper - Add source block to BlockPhysicsEvent
+ ((ServerLevel) world).getCraftServer().getPluginManager().callEvent(event);
+
+ if (event.isCancelled()) {
diff --git a/patches/server/0732-Call-BlockPhysicsEvent-more-often.patch b/patches/server/0732-Call-BlockPhysicsEvent-more-often.patch
deleted file mode 100644
index ad24091f87..0000000000
--- a/patches/server/0732-Call-BlockPhysicsEvent-more-often.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Lulu13022002 <[email protected]>
-Date: Sun, 7 Aug 2022 22:16:36 +0200
-Subject: [PATCH] Call BlockPhysicsEvent more often
-
-
-diff --git a/src/main/java/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java b/src/main/java/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java
-index 5821c802ec880501df025fcd3fbbd98242ed952c..0587f4e5083a6c890a11642284a9c16fb2eb2fe1 100644
---- a/src/main/java/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java
-+++ b/src/main/java/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java
-@@ -135,7 +135,20 @@ public class CollectingNeighborUpdater implements NeighborUpdater {
- orientation = this.orientation.withFront(direction);
- }
-
-- NeighborUpdater.executeUpdate(world, blockState, blockPos, this.sourceBlock, orientation, false);
-+ // Paper start - Call BlockPhysicsEvent
-+ try {
-+ org.bukkit.event.block.BlockPhysicsEvent event = new org.bukkit.event.block.BlockPhysicsEvent(
-+ org.bukkit.craftbukkit.block.CraftBlock.at(world, blockPos),
-+ org.bukkit.craftbukkit.block.data.CraftBlockData.fromData(blockState),
-+ org.bukkit.craftbukkit.block.CraftBlock.at(world, this.sourcePos));
-+
-+ if (event.callEvent()) { // continue to check for adjacent block (increase idx)
-+ NeighborUpdater.executeUpdate(world, blockState, blockPos, this.sourceBlock, orientation, false);
-+ }
-+ } catch (StackOverflowError ex) {
-+ world.lastPhysicsProblem = blockPos;
-+ }
-+ // Paper end - Call BlockPhysicsEvent
- if (this.idx < NeighborUpdater.UPDATE_ORDER.length && NeighborUpdater.UPDATE_ORDER[this.idx] == this.skipDirection) {
- this.idx++;
- }