geforkt von Mirrors/Paper
2873869bb1
Signs no longer have a specific isEdiable state, the entire API in this regard needs updating/deprecation. The boolean field is completely gone, replaced by a uuid (which will need a new setEditingPlayer(UUID) method on the Sign interface), and the current upstream implementation of setEdiable simply flips the is_waxed state. This patch is hence not needed as it neither allows editing (which will be redone in a later patch) nor is required to copy the is_waxed boolean flag as it lives in the signs compound tag and is covered by applyTo.
40 Zeilen
2.3 KiB
Diff
40 Zeilen
2.3 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 a0d035dde5a4976db2d4a9b0ae474e944583f722..ec81be70cd6f92bbf9011395cb361f0ce54c5ad0 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,27 @@ 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);
|
|
- blockState.neighborChanged(world, blockPos, this.sourceBlock, this.sourcePos, false);
|
|
+ // Paper start
|
|
+ try {
|
|
+ boolean cancelled = false;
|
|
+ org.bukkit.craftbukkit.CraftWorld cworld = world.getWorld();
|
|
+ if (cworld != null) {
|
|
+ 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, sourcePos));
|
|
+
|
|
+ if (!event.callEvent()) {
|
|
+ cancelled = true;
|
|
+ }
|
|
+ }
|
|
+ if (!cancelled) { // continue to check for adjacent block (increase idx)
|
|
+ blockState.neighborChanged(world, blockPos, this.sourceBlock, this.sourcePos, false);
|
|
+ }
|
|
+ } catch (StackOverflowError ex) {
|
|
+ world.lastPhysicsProblem = new BlockPos(blockPos);
|
|
+ }
|
|
+ // Paper end
|
|
if (this.idx < NeighborUpdater.UPDATE_ORDER.length && NeighborUpdater.UPDATE_ORDER[this.idx] == this.skipDirection) {
|
|
++this.idx;
|
|
}
|