net.minecraft.world.level.redstone
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
--- a/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java
|
||||
+++ b/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java
|
||||
@@ -133,7 +_,7 @@
|
||||
orientation = this.orientation.withFront(direction);
|
||||
}
|
||||
|
||||
- NeighborUpdater.executeUpdate(level, blockState, blockPos, this.sourceBlock, orientation, false);
|
||||
+ NeighborUpdater.executeUpdate(level, 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++;
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
--- a/net/minecraft/world/level/redstone/DefaultRedstoneWireEvaluator.java
|
||||
+++ b/net/minecraft/world/level/redstone/DefaultRedstoneWireEvaluator.java
|
||||
@@ -17,7 +_,16 @@
|
||||
@Override
|
||||
public void updatePowerStrength(Level level, BlockPos pos, BlockState state, @Nullable Orientation orientation, boolean updateShape) {
|
||||
int i = this.calculateTargetStrength(level, pos);
|
||||
- if (state.getValue(RedStoneWireBlock.POWER) != i) {
|
||||
+ // CraftBukkit start
|
||||
+ int oldPower = state.getValue(RedStoneWireBlock.POWER);
|
||||
+ if (oldPower != i) {
|
||||
+ org.bukkit.event.block.BlockRedstoneEvent event = new org.bukkit.event.block.BlockRedstoneEvent(org.bukkit.craftbukkit.block.CraftBlock.at(level, pos), oldPower, i);
|
||||
+ level.getCraftServer().getPluginManager().callEvent(event);
|
||||
+
|
||||
+ i = event.getNewCurrent();
|
||||
+ }
|
||||
+ if (oldPower != i) {
|
||||
+ // CraftBukkit end
|
||||
if (level.getBlockState(pos) == state) {
|
||||
level.setBlock(pos, state.setValue(RedStoneWireBlock.POWER, Integer.valueOf(i)), 2);
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
--- a/net/minecraft/world/level/redstone/ExperimentalRedstoneWireEvaluator.java
|
||||
+++ b/net/minecraft/world/level/redstone/ExperimentalRedstoneWireEvaluator.java
|
||||
@@ -36,7 +_,16 @@
|
||||
int intValue = entry.getIntValue();
|
||||
int i = unpackPower(intValue);
|
||||
BlockState blockState = level.getBlockState(blockPos);
|
||||
- if (blockState.is(this.wireBlock) && !blockState.getValue(RedStoneWireBlock.POWER).equals(i)) {
|
||||
+ // CraftBukkit start
|
||||
+ int oldPower = blockState.getValue(RedStoneWireBlock.POWER); // Paper - Call BlockRedstoneEvent properly; get the previous power from the right state
|
||||
+ if (oldPower != i) {
|
||||
+ org.bukkit.event.block.BlockRedstoneEvent event = new org.bukkit.event.block.BlockRedstoneEvent(org.bukkit.craftbukkit.block.CraftBlock.at(level, blockPos), oldPower, i);
|
||||
+ level.getCraftServer().getPluginManager().callEvent(event);
|
||||
+
|
||||
+ i = event.getNewCurrent();
|
||||
+ }
|
||||
+ if (blockState.is((net.minecraft.world.level.block.Block) this.wireBlock) && oldPower != i) {
|
||||
+ // CraftBukkit end
|
||||
int i1 = 2;
|
||||
if (!updateShape || !flag) {
|
||||
i1 |= 128;
|
||||
@@ -0,0 +1,32 @@
|
||||
--- a/net/minecraft/world/level/redstone/NeighborUpdater.java
|
||||
+++ b/net/minecraft/world/level/redstone/NeighborUpdater.java
|
||||
@@ -42,8 +_,29 @@
|
||||
}
|
||||
|
||||
static void executeUpdate(Level level, BlockState state, BlockPos pos, Block neighborBlock, @Nullable Orientation orientation, boolean movedByPiston) {
|
||||
+ // Paper start - Add source block to BlockPhysicsEvent
|
||||
+ executeUpdate(level, state, pos, neighborBlock, orientation, movedByPiston, pos);
|
||||
+ }
|
||||
+
|
||||
+ static void executeUpdate(Level level, BlockState state, BlockPos pos, Block neighborBlock, @Nullable Orientation orientation, boolean movedByPiston, BlockPos sourcePos) {
|
||||
+ // Paper end - Add source block to BlockPhysicsEvent
|
||||
try {
|
||||
+ // CraftBukkit start
|
||||
+ org.bukkit.craftbukkit.CraftWorld cworld = level.getWorld();
|
||||
+ if (cworld != null) {
|
||||
+ org.bukkit.event.block.BlockPhysicsEvent event = new org.bukkit.event.block.BlockPhysicsEvent(org.bukkit.craftbukkit.block.CraftBlock.at(level, pos), org.bukkit.craftbukkit.block.data.CraftBlockData.fromData(state), org.bukkit.craftbukkit.block.CraftBlock.at(level, sourcePos)); // Paper - Add source block to BlockPhysicsEvent
|
||||
+ level.getCraftServer().getPluginManager().callEvent(event);
|
||||
+
|
||||
+ if (event.isCancelled()) {
|
||||
+ return;
|
||||
+ }
|
||||
+ }
|
||||
+ // CraftBukkit end
|
||||
state.handleNeighborChanged(level, pos, neighborBlock, orientation, movedByPiston);
|
||||
+ // Spigot Start
|
||||
+ } catch (StackOverflowError ex) {
|
||||
+ level.lastPhysicsProblem = new BlockPos(pos);
|
||||
+ // Spigot End
|
||||
} catch (Throwable var9) {
|
||||
CrashReport crashReport = CrashReport.forThrowable(var9, "Exception while updating neighbours");
|
||||
CrashReportCategory crashReportCategory = crashReport.addCategory("Block being updated");
|
||||
Reference in New Issue
Block a user