mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-30 04:02:50 +01:00
89d51d5f29
Because this exploit has been widely known for years and has not been fixed by Mojang, we decided that it was worth allowing people to toggle it on/off due to how easy it is to make it configurable. It should be noted that this decision does not promise all future exploits will be configurable.
32 lines
2.1 KiB
Diff
32 lines
2.1 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com>
|
|
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 7d54abc2553f4b319df4d533a0b689c1807b6102..87db9febbbf53702be0e1e89a95db99e823713e5 100644
|
|
--- a/src/main/java/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java
|
|
+++ b/src/main/java/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java
|
|
@@ -119,7 +119,20 @@ public class CollectingNeighborUpdater implements NeighborUpdater {
|
|
public boolean runNext(Level world) {
|
|
BlockPos blockPos = this.sourcePos.relative(NeighborUpdater.UPDATE_ORDER[this.idx++]);
|
|
BlockState blockState = world.getBlockState(blockPos);
|
|
- NeighborUpdater.executeUpdate(world, blockState, blockPos, this.sourceBlock, this.sourcePos, 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, this.sourcePos, 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;
|
|
}
|