From 24965b48c56e79f40b6f4181be2bb7eb050a85ed Mon Sep 17 00:00:00 2001 From: Helvetica Volubi Date: Wed, 3 Jun 2026 00:33:11 +0800 Subject: [PATCH] old block behavior re-patched --- .../experiment/RedStoneConfig.java | 32 --- .../UpdateSuppressionCrashFixConfig.java | 13 - ...eaves-Catch-update-suppression-crash.patch | 243 ---------------- .../0033-Leaves-CCE-update-suppression.patch | 24 -- ...eaves-Redstone-ignore-upwards-update.patch | 55 ---- .../features/0035-Instant-Block-Updater.patch | 52 ---- ...ert-TrapDoorBlock-changes-form-Paper.patch | 49 ---- ...oss-of-item-drops-due-to-update-supp.patch | 42 --- ...set-placed-block-on-exception-Do-not.patch | 70 ----- ...eaves-Catch-update-suppression-crash.patch | 2 +- .../0035-Leaves-CCE-update-suppression.patch | 2 +- ...eaves-Redstone-ignore-upwards-update.patch | 2 +- .../features/0037-Instant-Block-Updater.patch | 4 +- ...ert-TrapDoorBlock-changes-form-Paper.patch | 4 +- ...oss-of-item-drops-due-to-update-supp.patch | 6 +- ...set-placed-block-on-exception-Do-not.patch | 6 +- ...41-Leaves-Old-Block-remove-behaviour.patch | 263 +++++++++--------- 17 files changed, 146 insertions(+), 723 deletions(-) delete mode 100644 1todos/server/config-files/experiment/RedStoneConfig.java delete mode 100644 1todos/server/config-files/fixes/UpdateSuppressionCrashFixConfig.java delete mode 100644 1todos/server/minecraft-patches/features/0032-Leaves-Catch-update-suppression-crash.patch delete mode 100644 1todos/server/minecraft-patches/features/0033-Leaves-CCE-update-suppression.patch delete mode 100644 1todos/server/minecraft-patches/features/0034-Leaves-Redstone-ignore-upwards-update.patch delete mode 100644 1todos/server/minecraft-patches/features/0035-Instant-Block-Updater.patch delete mode 100644 1todos/server/minecraft-patches/features/0036-Revert-TrapDoorBlock-changes-form-Paper.patch delete mode 100644 1todos/server/minecraft-patches/features/0037-Leaves-Prevent-loss-of-item-drops-due-to-update-supp.patch delete mode 100644 1todos/server/minecraft-patches/features/0039-Leaves-Do-not-reset-placed-block-on-exception-Do-not.patch rename 1todos/server/minecraft-patches/features/0038-Leaves-Old-Block-remove-behaviour.patch => lophine-server/minecraft-patches/features/0041-Leaves-Old-Block-remove-behaviour.patch (72%) diff --git a/1todos/server/config-files/experiment/RedStoneConfig.java b/1todos/server/config-files/experiment/RedStoneConfig.java deleted file mode 100644 index 8cdc8d3..0000000 --- a/1todos/server/config-files/experiment/RedStoneConfig.java +++ /dev/null @@ -1,32 +0,0 @@ -package fun.bm.lophine.config.modules.experiment; - -import me.earthme.luminol.config.IConfigModule; -import me.earthme.luminol.config.flags.ConfigClassInfo; -import me.earthme.luminol.config.flags.ConfigInfo; -import me.earthme.luminol.config.flags.HotReloadUnsupported; -import me.earthme.luminol.config.flags.TransformedConfig; -import me.earthme.luminol.enums.EnumConfigCategory; - -/* - * This is a config module for redstone in experimental level - * If we think configs from here is stable for future, we will move them to function module directory - */ -@ConfigClassInfo(category = EnumConfigCategory.EXPERIMENT, name = "redstone") -public class RedStoneConfig implements IConfigModule { - @ConfigInfo(name = "redstone-ignore-upwards-update", comments = """ - Should the pre-1.20 mechanism be reintroduced: - Redstone dust does not connect to adjacent redstone dust on trapdoors that are open - Pre-1.20.2 mechanism: Redstone dust, redstone repeaters, and redstone comparators do not check for attachment when receiving status updates from below""") - public static boolean redstoneIgnoreUpwardsUpdate = false; - - @ConfigInfo(name = "cce-update-suppression", comments = """ - Is it permissible to use ClassCastException for update suppression?""") - public static boolean cce = false; - - @HotReloadUnsupported - @ConfigInfo(name = "instant-block-updater") - public static boolean instantBlockUpdater = false; - - @ConfigInfo(name = "old-block-remove-behaviour") - public static boolean oldBlockRemoveBehaviour = false; -} diff --git a/1todos/server/config-files/fixes/UpdateSuppressionCrashFixConfig.java b/1todos/server/config-files/fixes/UpdateSuppressionCrashFixConfig.java deleted file mode 100644 index d29ac4d..0000000 --- a/1todos/server/config-files/fixes/UpdateSuppressionCrashFixConfig.java +++ /dev/null @@ -1,13 +0,0 @@ -package fun.bm.lophine.config.modules.fixes; - -import me.earthme.luminol.config.IConfigModule; -import me.earthme.luminol.config.flags.ConfigClassInfo; -import me.earthme.luminol.config.flags.ConfigInfo; -import me.earthme.luminol.enums.EnumConfigCategory; - -@ConfigClassInfo(category = EnumConfigCategory.FIXES, name = "update-suppression-crash-fix") -public class UpdateSuppressionCrashFixConfig implements IConfigModule { - @ConfigInfo(name = "enabled", comments = """ - Should crash caused by update suppression be prevented?""") - public static boolean enabled = true; -} diff --git a/1todos/server/minecraft-patches/features/0032-Leaves-Catch-update-suppression-crash.patch b/1todos/server/minecraft-patches/features/0032-Leaves-Catch-update-suppression-crash.patch deleted file mode 100644 index bb7b54b..0000000 --- a/1todos/server/minecraft-patches/features/0032-Leaves-Catch-update-suppression-crash.patch +++ /dev/null @@ -1,243 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Bacteriawa -Date: Sat, 7 Feb 2026 23:57:50 +0800 -Subject: [PATCH] Leaves: Catch update suppression crash - -Co-authored by: violetc <58360096+s-yh-china@users.noreply.github.com> -As a part of : Leaves (https://github.com/LeavesMC/Leaves) -Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) - -diff --git a/net/minecraft/network/PacketProcessor.java b/net/minecraft/network/PacketProcessor.java -index cf162ec136309d05c5aa03042652ab3932935917..469ffd54eb5af980f49061bbec0a72f4e888f8a3 100644 ---- a/net/minecraft/network/PacketProcessor.java -+++ b/net/minecraft/network/PacketProcessor.java -@@ -107,7 +107,20 @@ public class PacketProcessor implements AutoCloseable { - final int packetTimerId = profiler.getOrCreateTimerAndStart(() -> "Packet Handler: ".concat(io.papermc.paper.util.ObfHelper.INSTANCE.deobfClassName(ListenerAndPacket.this.packet.getClass().getName()))); try { // Folia - profiler - this.packet.handle(this.listener); - } finally { profiler.stopTimer(packetTimerId); } // Folia - profiler -- } catch (Exception var3) { -+ // Leaves start - update suppression crash fix -+ } catch (org.leavesmc.leaves.util.UpdateSuppressionException exception) { -+ if (this.listener instanceof net.minecraft.server.network.ServerGamePacketListenerImpl gamePacketListener) { -+ exception.providePlayer(gamePacketListener.player); -+ } -+ exception.consume(); -+ } catch (Exception var3) { -+ if (var3.getCause() instanceof org.leavesmc.leaves.util.UpdateSuppressionException exception) { -+ if (this.listener instanceof net.minecraft.server.network.ServerGamePacketListenerImpl gamePacketListener) { -+ exception.providePlayer(gamePacketListener.player); -+ } -+ exception.consume(); -+ } -+ // Leaves end - update suppression crash fix - if (var3 instanceof ReportedException reportedException && reportedException.getCause() instanceof OutOfMemoryError) { - throw PacketUtils.makeReportedException(var3, this.packet, this.listener); - } -diff --git a/net/minecraft/network/protocol/PacketUtils.java b/net/minecraft/network/protocol/PacketUtils.java -index ab80a66646a7ebe2862221ac342b06c14fcfc734..7834f3da4d0ff4a5cdec46b023d7348369a12e96 100644 ---- a/net/minecraft/network/protocol/PacketUtils.java -+++ b/net/minecraft/network/protocol/PacketUtils.java -@@ -34,6 +34,7 @@ public class PacketUtils { - } - - public static ReportedException makeReportedException(Exception exception, Packet packet, T packetListener) { -+ - if (exception instanceof ReportedException reportedException) { - fillCrashReport(reportedException.getReport(), packetListener, packet); - return reportedException; -diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 24f83a6875219aaf4b29e2461afcd0478a391014..9457d86461b032ff2dac338620c3d4a54e6c7071 100644 ---- a/net/minecraft/server/MinecraftServer.java -+++ b/net/minecraft/server/MinecraftServer.java -@@ -1978,11 +1978,27 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop implements ca.spottedleaf.moonrise.patch - if (ret != null) { - return ret; - } -- throw new IllegalArgumentException("Cannot get property " + property + " as it does not exist in " + this.owner); -+ // Leaves start - update suppression crash fix -+ IllegalArgumentException iae = new IllegalArgumentException("Cannot get property " + property + " as it does not exist in " + this.owner); -+ if (fun.bm.lophine.config.modules.fixes.UpdateSuppressionCrashFixConfig.enabled) { -+ org.leavesmc.leaves.util.UpdateSuppressionException exception = new org.leavesmc.leaves.util.UpdateSuppressionException(null, null, null, null, iae); -+ if (exception.getStackTrace()[1].getClassName().startsWith("net.minecraft")) { -+ throw exception; -+ } -+ } -+ throw iae; -+ // Leaves end - update suppression crash fix - // Paper end - optimise blockstate property access - } - -diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java -index 77577d0df9b14a7ad55b2866c2ac31863226458b..5551d80a81c2878136f96b3e695c4888c7105a49 100644 ---- a/net/minecraft/world/level/chunk/LevelChunk.java -+++ b/net/minecraft/world/level/chunk/LevelChunk.java -@@ -383,7 +383,7 @@ public class LevelChunk extends ChunkAccess implements DebugValueSource, ca.spot - if (blockState == state) { - return null; - } else { -- Block block = state.getBlock(); -+ Block block = state.getBlock(); try { // Leaves start - update suppression crash fix - this.heightmaps.get(Heightmap.Types.MOTION_BLOCKING).update(i, y, i2, state); - this.heightmaps.get(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES).update(i, y, i2, state); - this.heightmaps.get(Heightmap.Types.OCEAN_FLOOR).update(i, y, i2, state); -@@ -457,6 +457,7 @@ public class LevelChunk extends ChunkAccess implements DebugValueSource, ca.spot - this.markUnsaved(); - return blockState; - } -+ } catch (org.leavesmc.leaves.util.UpdateSuppressionException e) { e.provideBlock(level, pos, block); throw e; } // Leaves - update suppression crash fix - } - } - } -diff --git a/net/minecraft/world/level/redstone/NeighborUpdater.java b/net/minecraft/world/level/redstone/NeighborUpdater.java -index af21821513f11011e7bf3841d2f79cb99e4cd517..32488203ff074b675f5c8831d157b1d91bae48a9 100644 ---- a/net/minecraft/world/level/redstone/NeighborUpdater.java -+++ b/net/minecraft/world/level/redstone/NeighborUpdater.java -@@ -63,9 +63,22 @@ public interface NeighborUpdater { - } finally { if (levelChunk != null) levelChunk.getChunkHot().stopTickingAndCount(); } // KioCG - // Spigot start - } catch (StackOverflowError ex) { -+ // Leaves start - update suppression crash fix -+ if (fun.bm.lophine.config.modules.fixes.UpdateSuppressionCrashFixConfig.enabled) { -+ throw new org.leavesmc.leaves.util.UpdateSuppressionException(pos, level, neighborBlock, null, ex); -+ } - level.lastPhysicsProblem = pos.immutable(); - // Spigot end - } catch (Throwable var9) { -+ if (fun.bm.lophine.config.modules.fixes.UpdateSuppressionCrashFixConfig.enabled) { -+ if (var9 instanceof org.leavesmc.leaves.util.UpdateSuppressionException ue) { -+ ue.provideBlock(level, pos, neighborBlock); -+ throw ue; -+ } else { -+ throw new org.leavesmc.leaves.util.UpdateSuppressionException(pos, level, neighborBlock, null, var9); -+ } -+ } -+ // Leaves end - update suppression crash fix - CrashReport crashReport = CrashReport.forThrowable(var9, "Exception while updating neighbours"); - CrashReportCategory crashReportCategory = crashReport.addCategory("Block being updated"); - crashReportCategory.setDetail( diff --git a/1todos/server/minecraft-patches/features/0033-Leaves-CCE-update-suppression.patch b/1todos/server/minecraft-patches/features/0033-Leaves-CCE-update-suppression.patch deleted file mode 100644 index f64d61d..0000000 --- a/1todos/server/minecraft-patches/features/0033-Leaves-CCE-update-suppression.patch +++ /dev/null @@ -1,24 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Bacteriawa -Date: Sat, 15 Nov 2025 01:12:39 +0800 -Subject: [PATCH] Leaves: CCE update suppression - -Co-authored by: violetc <58360096+s-yh-china@users.noreply.github.com> -As a part of : Leaves (https://github.com/LeavesMC/Leaves) -Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) - -diff --git a/net/minecraft/world/level/block/ShulkerBoxBlock.java b/net/minecraft/world/level/block/ShulkerBoxBlock.java -index 46d6c6e3befc70a6878e12a4d75575e6d48d10ca..77840814806c7d07b58cd716cf7ec095e894498a 100644 ---- a/net/minecraft/world/level/block/ShulkerBoxBlock.java -+++ b/net/minecraft/world/level/block/ShulkerBoxBlock.java -@@ -183,7 +183,9 @@ public class ShulkerBoxBlock extends BaseEntityBlock { - protected int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos, Direction direction) { - // Leaves start - update suppression crash fix - try { -- return AbstractContainerMenu.getRedstoneSignalFromBlockEntity(level.getBlockEntity(pos)); -+ return fun.bm.lophine.config.modules.experiment.RedStoneConfig.cce ? -+ AbstractContainerMenu.getRedstoneSignalFromContainer((net.minecraft.world.Container) level.getBlockEntity(pos)) : // Leaves - make cce happy(?) -+ AbstractContainerMenu.getRedstoneSignalFromBlockEntity(level.getBlockEntity(pos)); - } catch (ClassCastException ex) { - if (fun.bm.lophine.config.modules.fixes.UpdateSuppressionCrashFixConfig.enabled) { - throw new org.leavesmc.leaves.util.UpdateSuppressionException(pos, null, this, null, ex); diff --git a/1todos/server/minecraft-patches/features/0034-Leaves-Redstone-ignore-upwards-update.patch b/1todos/server/minecraft-patches/features/0034-Leaves-Redstone-ignore-upwards-update.patch deleted file mode 100644 index 02b1518..0000000 --- a/1todos/server/minecraft-patches/features/0034-Leaves-Redstone-ignore-upwards-update.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: violetc <58360096+s-yh-china@users.noreply.github.com> -Date: Wed, 14 Jun 2023 12:07:07 +0800 -Subject: [PATCH] Leaves: Redstone ignore upwards update - -Co-authored by: violetc <58360096+s-yh-china@users.noreply.github.com> -As a part of : Leaves (https://github.com/LeavesMC/Leaves) -Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) - -diff --git a/net/minecraft/world/level/block/ComparatorBlock.java b/net/minecraft/world/level/block/ComparatorBlock.java -index 578e7c8dc601f53cf2a068685c6901bfaf47e763..0686aa5425c00e10beb381f3c3ff3c554603cd49 100644 ---- a/net/minecraft/world/level/block/ComparatorBlock.java -+++ b/net/minecraft/world/level/block/ComparatorBlock.java -@@ -58,6 +58,7 @@ public class ComparatorBlock extends DiodeBlock implements EntityBlock { - BlockState neighborState, - RandomSource random - ) { -+ if (fun.bm.lophine.config.modules.experiment.RedStoneConfig.redstoneIgnoreUpwardsUpdate && direction == Direction.DOWN) return state; // Leaves - behavior to 1.20.1 - return direction == Direction.DOWN && !this.canSurviveOn(level, neighborPos, neighborState) - ? Blocks.AIR.defaultBlockState() - : super.updateShape(state, level, scheduledTickAccess, pos, direction, neighborPos, neighborState, random); -diff --git a/net/minecraft/world/level/block/RedStoneWireBlock.java b/net/minecraft/world/level/block/RedStoneWireBlock.java -index ba253a9af6141d8ea99c064e3cc0c6486c221098..48f9e234e4025633cbc41d334d88ada36c2e0d7b 100644 ---- a/net/minecraft/world/level/block/RedStoneWireBlock.java -+++ b/net/minecraft/world/level/block/RedStoneWireBlock.java -@@ -178,7 +178,7 @@ public class RedStoneWireBlock extends Block { - RandomSource random - ) { - if (direction == Direction.DOWN) { -- return !this.canSurviveOn(level, neighborPos, neighborState) ? Blocks.AIR.defaultBlockState() : state; -+ return fun.bm.lophine.config.modules.experiment.RedStoneConfig.redstoneIgnoreUpwardsUpdate ? state : !this.canSurviveOn(level, neighborPos, neighborState) ? Blocks.AIR.defaultBlockState() : state; // Leaves - behavior to 1.19 - } else if (direction == Direction.UP) { - return this.getConnectionState(level, state, pos); - } else { -@@ -238,7 +238,7 @@ public class RedStoneWireBlock extends Block { - BlockPos blockPos = pos.relative(direction); - BlockState blockState = level.getBlockState(blockPos); - if (nonNormalCubeAbove) { -- boolean flag = blockState.getBlock() instanceof TrapDoorBlock || this.canSurviveOn(level, blockPos, blockState); -+ boolean flag = (!fun.bm.lophine.config.modules.experiment.RedStoneConfig.redstoneIgnoreUpwardsUpdate && blockState.getBlock() instanceof TrapDoorBlock) || this.canSurviveOn(level, blockPos, blockState); // Leaves - behavior to 1.19 - if (flag && shouldConnectTo(level.getBlockState(blockPos.above()))) { - if (blockState.isFaceSturdy(level, blockPos, direction.getOpposite())) { - return RedstoneSide.UP; -diff --git a/net/minecraft/world/level/block/RepeaterBlock.java b/net/minecraft/world/level/block/RepeaterBlock.java -index 87e1a32376adc5a15f035b62bc1f672c507cd230..26c10c1fecb976f3ef0338aa78603d454d1b3fe8 100644 ---- a/net/minecraft/world/level/block/RepeaterBlock.java -+++ b/net/minecraft/world/level/block/RepeaterBlock.java -@@ -68,6 +68,7 @@ public class RepeaterBlock extends DiodeBlock { - BlockState neighborState, - RandomSource random - ) { -+ if (fun.bm.lophine.config.modules.experiment.RedStoneConfig.redstoneIgnoreUpwardsUpdate && direction == Direction.DOWN) return state; // Leaves - behavior to 1.20.1 - if (direction == Direction.DOWN && !this.canSurviveOn(level, neighborPos, neighborState)) { - return Blocks.AIR.defaultBlockState(); - } else { diff --git a/1todos/server/minecraft-patches/features/0035-Instant-Block-Updater.patch b/1todos/server/minecraft-patches/features/0035-Instant-Block-Updater.patch deleted file mode 100644 index 77b9db3..0000000 --- a/1todos/server/minecraft-patches/features/0035-Instant-Block-Updater.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Helvetica Volubi -Date: Mon, 17 Nov 2025 18:41:08 +0800 -Subject: [PATCH] Instant Block Updater - - -diff --git a/io/papermc/paper/threadedregions/RegionizedWorldData.java b/io/papermc/paper/threadedregions/RegionizedWorldData.java -index 33d186d660ce3e3dc8cf26cd521fa99291ff78a5..ce1918d12b88835ea79a5c0dc90e0315c408830b 100644 ---- a/io/papermc/paper/threadedregions/RegionizedWorldData.java -+++ b/io/papermc/paper/threadedregions/RegionizedWorldData.java -@@ -494,7 +494,7 @@ public final class RegionizedWorldData { - public long lastMidTickExecuteFailure; - // From Level - public boolean populating; -- public final CollectingNeighborUpdater neighborUpdater; -+ public final net.minecraft.world.level.redstone.NeighborUpdater neighborUpdater; - public boolean captureBlockStates = false; - public boolean captureTreeGeneration = false; - public final Map capturedBlockStates = new java.util.LinkedHashMap<>(); // Paper -@@ -582,7 +582,7 @@ public final class RegionizedWorldData { - this.world = world; - this.blockLevelTicks = new LevelTicks<>(world::isPositionTickingWithEntitiesLoaded, world, true); - this.fluidLevelTicks = new LevelTicks<>(world::isPositionTickingWithEntitiesLoaded, world, false); -- this.neighborUpdater = new CollectingNeighborUpdater(world, world.neighbourUpdateMax); -+ this.neighborUpdater = fun.bm.lophine.config.modules.experiment.RedStoneConfig.instantBlockUpdater ? new net.minecraft.world.level.redstone.InstantNeighborUpdater(world) : new CollectingNeighborUpdater(world, world.neighbourUpdateMax); // Lophine - Instant Block Updater - this.nearbyPlayers = new NearbyPlayers(world); - this.wireHandler = new alternate.current.wire.WireHandler(world); - this.turbo = new io.papermc.paper.redstone.RedstoneWireTurbo((RedStoneWireBlock)Blocks.REDSTONE_WIRE); -diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 447b3e6149716a3ca4b9721746ea471c94c56e67..d8a2f8a1fbf0189e86ccbce70a84641a143cdb91 100644 ---- a/net/minecraft/server/level/ServerLevel.java -+++ b/net/minecraft/server/level/ServerLevel.java -@@ -927,12 +927,16 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe - // Paper - rewrite chunk system - profilerFiller.pop(); - profilerFiller.push("debugSynchronizers"); -+ // Lophine start - instant neighbor updates -+ if (regionizedWorldData.neighborUpdater instanceof net.minecraft.world.level.redstone.CollectingNeighborUpdater neighborUpdater) { - if (this.debugSynchronizers.hasAnySubscriberFor(DebugSubscriptions.NEIGHBOR_UPDATES)) { -- regionizedWorldData.neighborUpdater // Folia - region threading -- .setDebugListener(blockPos -> this.debugSynchronizers.broadcastEventToTracking(blockPos, DebugSubscriptions.NEIGHBOR_UPDATES, blockPos)); -+ neighborUpdater // Folia - region threading -+ .setDebugListener(blockPos -> this.debugSynchronizers.broadcastEventToTracking(blockPos, DebugSubscriptions.NEIGHBOR_UPDATES, blockPos)); - } else { -- regionizedWorldData.neighborUpdater.setDebugListener(null); // Folia - region threading -+ neighborUpdater.setDebugListener(null); // Folia - region threading - } -+ } -+ // Lophine end - instant neighbor updates - - this.debugSynchronizers.tick(this.server.debugSubscribers()); - profilerFiller.pop(); diff --git a/1todos/server/minecraft-patches/features/0036-Revert-TrapDoorBlock-changes-form-Paper.patch b/1todos/server/minecraft-patches/features/0036-Revert-TrapDoorBlock-changes-form-Paper.patch deleted file mode 100644 index a86521f..0000000 --- a/1todos/server/minecraft-patches/features/0036-Revert-TrapDoorBlock-changes-form-Paper.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Helvetica Volubi -Date: Tue, 18 Nov 2025 00:24:32 +0800 -Subject: [PATCH] Revert TrapDoorBlock changes form Paper - - -diff --git a/net/minecraft/world/level/block/TrapDoorBlock.java b/net/minecraft/world/level/block/TrapDoorBlock.java -index b45ae50db32c4156b8f8008335673d20c570c72d..af78831441f362b0129aa864854ce5a64d544640 100644 ---- a/net/minecraft/world/level/block/TrapDoorBlock.java -+++ b/net/minecraft/world/level/block/TrapDoorBlock.java -@@ -128,37 +128,7 @@ public class TrapDoorBlock extends HorizontalDirectionalBlock implements SimpleW - if (!level.isClientSide()) { - boolean hasNeighborSignal = level.hasNeighborSignal(pos); - if (hasNeighborSignal != state.getValue(POWERED)) { -- // CraftBukkit start -- org.bukkit.block.Block bblock = org.bukkit.craftbukkit.block.CraftBlock.at(level, pos); -- int power = bblock.getBlockPower(); -- int oldPower = state.getValue(TrapDoorBlock.OPEN) ? 15 : 0; -- -- if (oldPower == 0 ^ power == 0 || neighborBlock.defaultBlockState().isSignalSource()) { -- org.bukkit.event.block.BlockRedstoneEvent eventRedstone = new org.bukkit.event.block.BlockRedstoneEvent(bblock, oldPower, power); -- level.getCraftServer().getPluginManager().callEvent(eventRedstone); -- hasNeighborSignal = eventRedstone.getNewCurrent() > 0; -- } -- // CraftBukkit end -- // Paper start - break redstone on trapdoors early -- boolean open = state.getValue(TrapDoorBlock.OPEN) != hasNeighborSignal; -- // note: this must run before any state for this block/its neighbours are written to the world -- // we allow the redstone event to fire so that plugins can block -- if (hasNeighborSignal && open) { // if we are now powered and it caused the trap door to open -- // in this case, first check for the redstone on top first -- BlockPos abovePos = pos.above(); -- BlockState above = level.getBlockState(abovePos); -- if (above.getBlock() instanceof RedStoneWireBlock) { -- level.setBlock(abovePos, Blocks.AIR.defaultBlockState(), Block.UPDATE_CLIENTS | Block.UPDATE_NEIGHBORS); -- Block.popResource(level, abovePos, new net.minecraft.world.item.ItemStack(net.minecraft.world.item.Items.REDSTONE)); -- // now check that this didn't change our state -- if (level.getBlockState(pos) != state) { -- // our state was changed, so we cannot propagate this update -- return; -- } -- } -- } -- if (open) { -- // Paper end - break redstone on trapdoors early -+ if (state.getValue(OPEN) != hasNeighborSignal) { - state = state.setValue(OPEN, hasNeighborSignal); - this.playSound(null, level, pos, hasNeighborSignal); - } diff --git a/1todos/server/minecraft-patches/features/0037-Leaves-Prevent-loss-of-item-drops-due-to-update-supp.patch b/1todos/server/minecraft-patches/features/0037-Leaves-Prevent-loss-of-item-drops-due-to-update-supp.patch deleted file mode 100644 index 1ba1169..0000000 --- a/1todos/server/minecraft-patches/features/0037-Leaves-Prevent-loss-of-item-drops-due-to-update-supp.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Helvetica Volubi -Date: Tue, 18 Nov 2025 00:35:13 +0800 -Subject: [PATCH] Leaves: Prevent loss of item drops due to update suppression - when breaking blocks - -Co-authored by: violetc <58360096+s-yh-china@users.noreply.github.com> -As a part of : Leaves (https://github.com/LeavesMC/Leaves/blob/ea91106ae57fc4cc14e2e0225009cf9919072f7f/leaves-server/minecraft-patches/features/0090-Servux-Protocol.patch) -Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) - -diff --git a/net/minecraft/server/level/ServerPlayerGameMode.java b/net/minecraft/server/level/ServerPlayerGameMode.java -index 3301e521a79adbc6dd76be05e69cce1c97f8697e..8dc1db0e6bafba19e07a7fa78f3920d572d38466 100644 ---- a/net/minecraft/server/level/ServerPlayerGameMode.java -+++ b/net/minecraft/server/level/ServerPlayerGameMode.java -@@ -386,7 +386,18 @@ public class ServerPlayerGameMode { - this.level.getCurrentWorldData().captureDrops = new java.util.ArrayList<>(); // Folia - region threading - // CraftBukkit end - BlockState blockState1 = block.playerWillDestroy(this.level, pos, blockState, this.player); -- boolean flag = this.level.removeBlock(pos, false); -+ // Leaves start - Prevent loss of item drops due to update suppression when breaking blocks -+ boolean flag; -+ org.leavesmc.leaves.util.UpdateSuppressionException ex = null; -+ try { -+ flag = this.level.removeBlock(pos, false); -+ } catch (org.leavesmc.leaves.util.UpdateSuppressionException e) { -+ ex = e; -+ ex.provideBlock(level, pos, block); -+ ex.providePlayer(this.player); -+ flag = false; -+ } -+ // Leaves end - Prevent loss of item drops due to update suppression when breaking blocks - if (SharedConstants.DEBUG_BLOCK_BREAK) { - LOGGER.info("server broke {} {} -> {}", pos, blockState1, this.level.getBlockState(pos)); - } -@@ -418,6 +429,7 @@ public class ServerPlayerGameMode { - if (event.isDropItems()) { - org.bukkit.craftbukkit.event.CraftEventFactory.handleBlockDropItemEvent(bblock, state, this.player, itemsToDrop); // Paper - capture all item additions to the world - } -+ if (ex != null) throw ex; // Leaves - Prevent loss of item drops due to update suppression when breaking blocks - - // Drop event experience - if (flag) { diff --git a/1todos/server/minecraft-patches/features/0039-Leaves-Do-not-reset-placed-block-on-exception-Do-not.patch b/1todos/server/minecraft-patches/features/0039-Leaves-Do-not-reset-placed-block-on-exception-Do-not.patch deleted file mode 100644 index ec048d3..0000000 --- a/1todos/server/minecraft-patches/features/0039-Leaves-Do-not-reset-placed-block-on-exception-Do-not.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Helvetica Volubi -Date: Tue, 18 Nov 2025 23:26:27 +0800 -Subject: [PATCH] Leaves: Do not reset placed block on exception & Do not - prevent block entity and entity crash at LevelChunk - -Co-authored by: MC_XiaoHei -As a part of : Leaves (https://github.com/LeavesMC/Leaves) -Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) - -diff --git a/net/minecraft/world/item/BlockItem.java b/net/minecraft/world/item/BlockItem.java -index a5d3caab2072b2c9bf8fdcbdb7c52c2dee16cfaf..4bb36d2965785fadf628a9bfac4fa2aa305aaf65 100644 ---- a/net/minecraft/world/item/BlockItem.java -+++ b/net/minecraft/world/item/BlockItem.java -@@ -77,20 +77,22 @@ public class BlockItem extends Item { - BlockState blockState = level.getBlockState(clickedPos); - if (blockState.is(placementState.getBlock())) { - blockState = this.updateBlockStateFromTag(clickedPos, level, itemInHand, blockState); -+ // Leaves start - we do not need this - // Paper start - Reset placed block on exception -- try { -+ // try { - this.updateCustomBlockEntityTag(clickedPos, level, player, itemInHand, blockState); - updateBlockEntityComponents(level, clickedPos, itemInHand); -- } catch (Exception ex) { -- ((org.bukkit.craftbukkit.block.CraftBlockState) oldBukkitState).revertPlace(); -- if (player instanceof ServerPlayer serverPlayer) { -- org.apache.logging.log4j.LogManager.getLogger().error("Player {} tried placing invalid block", player.getScoreboardName(), ex); -- serverPlayer.getBukkitEntity().kickPlayer("Packet processing error"); -- return InteractionResult.FAIL; -- } -- throw ex; // Rethrow exception if not placed by a player -- } -+ // } catch (Exception ex) { -+ // ((org.bukkit.craftbukkit.block.CraftBlockState) oldBukkitState).revertPlace(); -+ // if (player instanceof ServerPlayer serverPlayer) { -+ // org.apache.logging.log4j.LogManager.getLogger().error("Player {} tried placing invalid block", player.getScoreboardName(), ex); -+ // serverPlayer.getBukkitEntity().kickPlayer("Packet processing error"); -+ // return InteractionResult.FAIL; -+ // } -+ // throw ex; // Rethrow exception if not placed by a player -+ // } - // Paper end - Reset placed block on exception -+ // Leaves end - we dot not need this - blockState.getBlock().setPlacedBy(level, clickedPos, blockState, player, itemInHand); - // CraftBukkit start - if (bukkitState != null) { -diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java -index 73dd8e67938fbfff745b189c06a93174976ba1bf..8e56c2237f9d49d0b09b62c0933283f77aaae679 100644 ---- a/net/minecraft/world/level/chunk/LevelChunk.java -+++ b/net/minecraft/world/level/chunk/LevelChunk.java -@@ -1001,12 +1001,14 @@ public class LevelChunk extends ChunkAccess implements DebugValueSource, ca.spot - - profilerFiller.pop(); - } catch (Throwable var5) { -+ // Leaves start - do not prevent here - // Paper start - Prevent block entity and entity crashes -- final String msg = String.format("BlockEntity threw exception at %s:%s,%s,%s", LevelChunk.this.getLevel().getWorld().getName(), this.getPos().getX(), this.getPos().getY(), this.getPos().getZ()); -- net.minecraft.server.MinecraftServer.LOGGER.error(msg, var5); -- net.minecraft.world.level.chunk.LevelChunk.this.level.getCraftServer().getPluginManager().callEvent(new com.destroystokyo.paper.event.server.ServerExceptionEvent(new com.destroystokyo.paper.exception.ServerInternalException(msg, var5))); // Paper - ServerExceptionEvent -- LevelChunk.this.removeBlockEntity(this.getPos()); -+ // final String msg = String.format("BlockEntity threw exception at %s:%s,%s,%s", LevelChunk.this.getLevel().getWorld().getName(), this.getPos().getX(), this.getPos().getY(), this.getPos().getZ()); -+ // net.minecraft.server.MinecraftServer.LOGGER.error(msg, var5); -+ // net.minecraft.world.level.chunk.LevelChunk.this.level.getCraftServer().getPluginManager().callEvent(new com.destroystokyo.paper.event.server.ServerExceptionEvent(new com.destroystokyo.paper.exception.ServerInternalException(msg, var5))); // Paper - ServerExceptionEvent -+ // LevelChunk.this.removeBlockEntity(this.getPos()); - // Paper end - Prevent block entity and entity crashes -+ // Leaves end - do not prevent here - } - } - } diff --git a/lophine-server/minecraft-patches/features/0034-Leaves-Catch-update-suppression-crash.patch b/lophine-server/minecraft-patches/features/0034-Leaves-Catch-update-suppression-crash.patch index 5928055..a9cba66 100644 --- a/lophine-server/minecraft-patches/features/0034-Leaves-Catch-update-suppression-crash.patch +++ b/lophine-server/minecraft-patches/features/0034-Leaves-Catch-update-suppression-crash.patch @@ -1,6 +1,6 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Bacteriawa -Date: Tue, 2 Jun 2026 19:55:06 +0800 +Date: Sat, 7 Feb 2026 23:57:50 +0800 Subject: [PATCH] Leaves: Catch update suppression crash Co-authored by: violetc <58360096+s-yh-china@users.noreply.github.com> diff --git a/lophine-server/minecraft-patches/features/0035-Leaves-CCE-update-suppression.patch b/lophine-server/minecraft-patches/features/0035-Leaves-CCE-update-suppression.patch index f7d627d..a4e377e 100644 --- a/lophine-server/minecraft-patches/features/0035-Leaves-CCE-update-suppression.patch +++ b/lophine-server/minecraft-patches/features/0035-Leaves-CCE-update-suppression.patch @@ -1,6 +1,6 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Bacteriawa -Date: Tue, 2 Jun 2026 20:06:33 +0800 +Date: Sat, 15 Nov 2025 01:12:39 +0800 Subject: [PATCH] Leaves: CCE update suppression Co-authored by: violetc <58360096+s-yh-china@users.noreply.github.com> diff --git a/lophine-server/minecraft-patches/features/0036-Leaves-Redstone-ignore-upwards-update.patch b/lophine-server/minecraft-patches/features/0036-Leaves-Redstone-ignore-upwards-update.patch index c1067f2..2e005c5 100644 --- a/lophine-server/minecraft-patches/features/0036-Leaves-Redstone-ignore-upwards-update.patch +++ b/lophine-server/minecraft-patches/features/0036-Leaves-Redstone-ignore-upwards-update.patch @@ -1,6 +1,6 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Bacteriawa -Date: Tue, 2 Jun 2026 20:15:44 +0800 +Date: Wed, 14 Jun 2023 12:07:07 +0800 Subject: [PATCH] Leaves: Redstone ignore upwards update Co-authored by: violetc <58360096+s-yh-china@users.noreply.github.com> diff --git a/lophine-server/minecraft-patches/features/0037-Instant-Block-Updater.patch b/lophine-server/minecraft-patches/features/0037-Instant-Block-Updater.patch index 465af7a..8c4d1b3 100644 --- a/lophine-server/minecraft-patches/features/0037-Instant-Block-Updater.patch +++ b/lophine-server/minecraft-patches/features/0037-Instant-Block-Updater.patch @@ -1,6 +1,6 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Bacteriawa -Date: Tue, 2 Jun 2026 20:32:47 +0800 +From: Helvetica Volubi +Date: Mon, 17 Nov 2025 18:41:08 +0800 Subject: [PATCH] Instant Block Updater diff --git a/lophine-server/minecraft-patches/features/0038-Revert-TrapDoorBlock-changes-form-Paper.patch b/lophine-server/minecraft-patches/features/0038-Revert-TrapDoorBlock-changes-form-Paper.patch index e398f6d..f3b0a76 100644 --- a/lophine-server/minecraft-patches/features/0038-Revert-TrapDoorBlock-changes-form-Paper.patch +++ b/lophine-server/minecraft-patches/features/0038-Revert-TrapDoorBlock-changes-form-Paper.patch @@ -1,6 +1,6 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Bacteriawa -Date: Tue, 2 Jun 2026 20:37:27 +0800 +From: Helvetica Volubi +Date: Tue, 18 Nov 2025 00:24:32 +0800 Subject: [PATCH] Revert TrapDoorBlock changes form Paper diff --git a/lophine-server/minecraft-patches/features/0039-Leaves-Prevent-loss-of-item-drops-due-to-update-supp.patch b/lophine-server/minecraft-patches/features/0039-Leaves-Prevent-loss-of-item-drops-due-to-update-supp.patch index b0ac880..81abc43 100644 --- a/lophine-server/minecraft-patches/features/0039-Leaves-Prevent-loss-of-item-drops-due-to-update-supp.patch +++ b/lophine-server/minecraft-patches/features/0039-Leaves-Prevent-loss-of-item-drops-due-to-update-supp.patch @@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Bacteriawa -Date: Tue, 2 Jun 2026 20:42:45 +0800 -Subject: [PATCH] Leaves: Prevent loss of item drops due to update suppression +From: Helvetica Volubi +Date: Tue, 18 Nov 2025 00:35:13 +0800 +Subject: [PATCH] Leaves: Prevent loss of item drops due to update suppression when breaking blocks Co-authored by: violetc <58360096+s-yh-china@users.noreply.github.com> diff --git a/lophine-server/minecraft-patches/features/0040-Leaves-Do-not-reset-placed-block-on-exception-Do-not.patch b/lophine-server/minecraft-patches/features/0040-Leaves-Do-not-reset-placed-block-on-exception-Do-not.patch index 3d98d16..1f357e9 100644 --- a/lophine-server/minecraft-patches/features/0040-Leaves-Do-not-reset-placed-block-on-exception-Do-not.patch +++ b/lophine-server/minecraft-patches/features/0040-Leaves-Do-not-reset-placed-block-on-exception-Do-not.patch @@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Bacteriawa -Date: Tue, 2 Jun 2026 20:50:57 +0800 -Subject: [PATCH] Leaves: Do not reset placed block on exception & Do not +From: Helvetica Volubi +Date: Tue, 18 Nov 2025 23:26:27 +0800 +Subject: [PATCH] Leaves: Do not reset placed block on exception & Do not prevent block entity and entity crash at LevelChunk Co-authored by: MC_XiaoHei diff --git a/1todos/server/minecraft-patches/features/0038-Leaves-Old-Block-remove-behaviour.patch b/lophine-server/minecraft-patches/features/0041-Leaves-Old-Block-remove-behaviour.patch similarity index 72% rename from 1todos/server/minecraft-patches/features/0038-Leaves-Old-Block-remove-behaviour.patch rename to lophine-server/minecraft-patches/features/0041-Leaves-Old-Block-remove-behaviour.patch index f0b9a3d..e5fb9ac 100644 --- a/1todos/server/minecraft-patches/features/0038-Leaves-Old-Block-remove-behaviour.patch +++ b/lophine-server/minecraft-patches/features/0041-Leaves-Old-Block-remove-behaviour.patch @@ -8,11 +8,11 @@ As a part of : Leaves (https://github.com/LeavesMC/Leaves) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/net/minecraft/world/Containers.java b/net/minecraft/world/Containers.java -index da10ca5ef12be1a834adda9243c082dadde24ec0..f682930f765d04f0a278b0648c2773ab5d4d740e 100644 +index 1311d4936f84652c5ffc51544f99cb98fc293906..b4cbe16c9660f3e88a1177817979b1f6a59fc485 100644 --- a/net/minecraft/world/Containers.java +++ b/net/minecraft/world/Containers.java @@ -51,4 +51,15 @@ public class Containers { - public static void updateNeighboursAfterDestroy(BlockState state, Level level, BlockPos pos) { + public static void updateNeighboursAfterDestroy(final BlockState state, final Level level, final BlockPos pos) { level.updateNeighbourForOutputSignal(pos, state.getBlock()); } + @@ -28,10 +28,10 @@ index da10ca5ef12be1a834adda9243c082dadde24ec0..f682930f765d04f0a278b0648c2773ab + // Leaves end - behaviour 1.21.1- } diff --git a/net/minecraft/world/level/block/AbstractFurnaceBlock.java b/net/minecraft/world/level/block/AbstractFurnaceBlock.java -index dcc1bb4fcee9646212a424c03f77370ffa577fee..ca5cf7526082b9d3a7887dd77313e2c0012efebb 100644 +index 98561dcc465ca9d5394e58b05ad3e8dc59773ebc..16b9f7eaccbe63aa13fcc89571e0b9c95ff9fd25 100644 --- a/net/minecraft/world/level/block/AbstractFurnaceBlock.java +++ b/net/minecraft/world/level/block/AbstractFurnaceBlock.java -@@ -51,6 +51,26 @@ public abstract class AbstractFurnaceBlock extends BaseEntityBlock { +@@ -53,6 +53,26 @@ public abstract class AbstractFurnaceBlock extends BaseEntityBlock { return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite()); } @@ -56,13 +56,13 @@ index dcc1bb4fcee9646212a424c03f77370ffa577fee..ca5cf7526082b9d3a7887dd77313e2c0 + // Leaves end - behaviour 1.21.1- + @Override - protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + protected void affectNeighborsAfterRemoval(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) { Containers.updateNeighboursAfterDestroy(state, level, pos); diff --git a/net/minecraft/world/level/block/BarrelBlock.java b/net/minecraft/world/level/block/BarrelBlock.java -index 8139799a24274cfb70a99d301c2688c0360720c6..b224d3756120cd82d1381c55a95ad63c18c123b7 100644 +index 5332fd32fa7a0d3fc3be1b0a7c2ca5dee8e402c6..0a77f67da73856edd2c45c8a9c6962cc653d7176 100644 --- a/net/minecraft/world/level/block/BarrelBlock.java +++ b/net/minecraft/world/level/block/BarrelBlock.java -@@ -49,6 +49,14 @@ public class BarrelBlock extends BaseEntityBlock { +@@ -51,6 +51,14 @@ public class BarrelBlock extends BaseEntityBlock { return InteractionResult.SUCCESS; } @@ -75,13 +75,13 @@ index 8139799a24274cfb70a99d301c2688c0360720c6..b224d3756120cd82d1381c55a95ad63c + // Leaves end - behaviour 1.21.1- + @Override - protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + protected void affectNeighborsAfterRemoval(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) { Containers.updateNeighboursAfterDestroy(state, level, pos); diff --git a/net/minecraft/world/level/block/BasePressurePlateBlock.java b/net/minecraft/world/level/block/BasePressurePlateBlock.java -index 7135a6bc87f90fafa94d0783aaf7b42d66449010..afd06de092a75c6c4f7b8848055e314b0c241029 100644 +index c2fbf44e93e44c36423465d406b5e4d3db029a80..e22cade1f4258f9660f1f5ac3a330432cdf326d1 100644 --- a/net/minecraft/world/level/block/BasePressurePlateBlock.java +++ b/net/minecraft/world/level/block/BasePressurePlateBlock.java -@@ -125,6 +125,19 @@ public abstract class BasePressurePlateBlock extends Block { +@@ -133,6 +133,19 @@ public abstract class BasePressurePlateBlock extends Block { } } @@ -99,13 +99,13 @@ index 7135a6bc87f90fafa94d0783aaf7b42d66449010..afd06de092a75c6c4f7b8848055e314b + // Leaves end - behaviour 1.21.1- + @Override - protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + protected void affectNeighborsAfterRemoval(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) { if (!movedByPiston && this.getSignalForState(state) > 0) { diff --git a/net/minecraft/world/level/block/BaseRailBlock.java b/net/minecraft/world/level/block/BaseRailBlock.java -index 504f38ce16f6a5d2b748a5c71c69f5be5886ceb5..db0b38db5675cb248e31e7a5988c35496561ad6f 100644 +index bc79a7c2cb18237dad15432ae7e1238125108696..ac1db4712de6d998fe6b992dd75ed5f7fd1a0338 100644 --- a/net/minecraft/world/level/block/BaseRailBlock.java +++ b/net/minecraft/world/level/block/BaseRailBlock.java -@@ -121,6 +121,23 @@ public abstract class BaseRailBlock extends Block implements SimpleWaterloggedBl +@@ -123,6 +123,23 @@ public abstract class BaseRailBlock extends Block implements SimpleWaterloggedBl } } @@ -127,16 +127,17 @@ index 504f38ce16f6a5d2b748a5c71c69f5be5886ceb5..db0b38db5675cb248e31e7a5988c3549 + // Leaves end - behaviour 1.21.1- + @Override - protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + protected void affectNeighborsAfterRemoval(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) { if (!movedByPiston) { diff --git a/net/minecraft/world/level/block/BrewingStandBlock.java b/net/minecraft/world/level/block/BrewingStandBlock.java -index bd6dc109fd9c37666f23ccd17c0eab8aff95e777..e25103c62a41e3fb0a8f7e84496cacc73ed71a74 100644 +index aea12aad3270b966eed7779eaf77d26052f8a21f..751792a388202a14be69fd68f891198bcea71193 100644 --- a/net/minecraft/world/level/block/BrewingStandBlock.java +++ b/net/minecraft/world/level/block/BrewingStandBlock.java -@@ -78,6 +78,14 @@ public class BrewingStandBlock extends BaseEntityBlock { - level.addParticle(ParticleTypes.SMOKE, d, d1, d2, 0.0, 0.0, 0.0); +@@ -79,7 +79,13 @@ public class BrewingStandBlock extends BaseEntityBlock { + double z = pos.getZ() + 0.4 + random.nextFloat() * 0.2; + level.addParticle(ParticleTypes.SMOKE, x, y, z, 0.0, 0.0, 0.0); } - +- + // Leaves start - behaviour 1.21.1- + @Override + protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) { @@ -144,16 +145,15 @@ index bd6dc109fd9c37666f23ccd17c0eab8aff95e777..e25103c62a41e3fb0a8f7e84496cacc7 + super.onRemove(state, level, pos, newState, isMoving); + } + // Leaves end - behaviour 1.21.1- -+ @Override - protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + protected void affectNeighborsAfterRemoval(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) { Containers.updateNeighboursAfterDestroy(state, level, pos); diff --git a/net/minecraft/world/level/block/ButtonBlock.java b/net/minecraft/world/level/block/ButtonBlock.java -index 27ca29f1d3e0e68229edef3b32634ce9b054824a..ea2c5d79fc41f58b263ec34b53df436e0043ef53 100644 +index 86f4dcd959bb83247c6d2c5e947c79230aed3189..e6c2630e33ac23b31a01ef8b1c5c10b72a854251 100644 --- a/net/minecraft/world/level/block/ButtonBlock.java +++ b/net/minecraft/world/level/block/ButtonBlock.java -@@ -132,6 +132,19 @@ public class ButtonBlock extends FaceAttachedHorizontalDirectionalBlock { - return isOn ? this.type.buttonClickOn() : this.type.buttonClickOff(); +@@ -131,6 +131,19 @@ public class ButtonBlock extends FaceAttachedHorizontalDirectionalBlock { + return pressed ? this.type.buttonClickOn() : this.type.buttonClickOff(); } + // Leaves start - behaviour 1.21.1- @@ -170,13 +170,13 @@ index 27ca29f1d3e0e68229edef3b32634ce9b054824a..ea2c5d79fc41f58b263ec34b53df436e + // Leaves end - behaviour 1.21.1- + @Override - protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + protected void affectNeighborsAfterRemoval(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) { if (!movedByPiston && state.getValue(POWERED)) { diff --git a/net/minecraft/world/level/block/CampfireBlock.java b/net/minecraft/world/level/block/CampfireBlock.java -index b9e11a361e91cf3d5c929330fc0ba59cfe903198..4985fcfef75abbe2be9cd5e6111de4d60237bafa 100644 +index 8b706b34914326c039b761387f25e488f30fe6c8..d83754699a181c6abb97e9492186dc96d922b325 100644 --- a/net/minecraft/world/level/block/CampfireBlock.java +++ b/net/minecraft/world/level/block/CampfireBlock.java -@@ -105,6 +105,20 @@ public class CampfireBlock extends BaseEntityBlock implements SimpleWaterloggedB +@@ -111,6 +111,20 @@ public class CampfireBlock extends BaseEntityBlock implements SimpleWaterloggedB return InteractionResult.TRY_WITH_EMPTY_HAND; } @@ -195,14 +195,14 @@ index b9e11a361e91cf3d5c929330fc0ba59cfe903198..4985fcfef75abbe2be9cd5e6111de4d6 + // Leaves end - behaviour 1.21.1- + @Override - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier, boolean pastEdges) { - if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent + protected void entityInside( + final BlockState state, diff --git a/net/minecraft/world/level/block/ChestBlock.java b/net/minecraft/world/level/block/ChestBlock.java -index fa2dce759419f62825000718361f47c6f208cdb2..64c0616c294bd7c7b62ae376d50369500b948390 100644 +index d3f0680d59ec87990b54dc3dbce27706bfadf5f1..85d6c53c06245d5692d27650fc5b5f98f4760dfc 100644 --- a/net/minecraft/world/level/block/ChestBlock.java +++ b/net/minecraft/world/level/block/ChestBlock.java -@@ -280,6 +280,14 @@ public class ChestBlock extends AbstractChestBlock implements - return this.chestCanConnectTo(blockState) && blockState.getValue(TYPE) == ChestType.SINGLE ? blockState.getValue(FACING) : null; +@@ -257,6 +257,14 @@ public class ChestBlock extends AbstractChestBlock implements + return this.chestCanConnectTo(state) && state.getValue(TYPE) == ChestType.SINGLE ? state.getValue(FACING) : null; } + // Leaves start - behaviour 1.21.1- @@ -214,13 +214,13 @@ index fa2dce759419f62825000718361f47c6f208cdb2..64c0616c294bd7c7b62ae376d5036950 + // Leaves end - behaviour 1.21.1- + @Override - protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + protected void affectNeighborsAfterRemoval(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) { Containers.updateNeighboursAfterDestroy(state, level, pos); diff --git a/net/minecraft/world/level/block/ChiseledBookShelfBlock.java b/net/minecraft/world/level/block/ChiseledBookShelfBlock.java -index cea0f015290137a5284f4a3021c954272b3db543..53d983505b4c92824083ecd123901874d04704c5 100644 +index 0682acaae12650549eea3c291d8cde7bb17766bd..9dc7edb546eafc60c05f9004205f1ff329c6a46b 100644 --- a/net/minecraft/world/level/block/ChiseledBookShelfBlock.java +++ b/net/minecraft/world/level/block/ChiseledBookShelfBlock.java -@@ -149,6 +149,27 @@ public class ChiseledBookShelfBlock extends BaseEntityBlock implements Selectabl +@@ -168,6 +168,27 @@ public class ChiseledBookShelfBlock extends BaseEntityBlock implements Selectabl SLOT_OCCUPIED_PROPERTIES.forEach(property -> builder.add(property)); } @@ -246,13 +246,13 @@ index cea0f015290137a5284f4a3021c954272b3db543..53d983505b4c92824083ecd123901874 + // Leaves end - behaviour 1.21.1- + @Override - protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + protected void affectNeighborsAfterRemoval(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) { Containers.updateNeighboursAfterDestroy(state, level, pos); diff --git a/net/minecraft/world/level/block/CrafterBlock.java b/net/minecraft/world/level/block/CrafterBlock.java -index 3faa541c4a4623e915269d6241e1a3a3c6e374ff..18c660893a33ecf70c3d225525505852e4449182 100644 +index 2b97fd6af1c4956eb173b8c66c2a3efc8772a798..8f7258e3cb01ae55fd153b051506b54c2db91782 100644 --- a/net/minecraft/world/level/block/CrafterBlock.java +++ b/net/minecraft/world/level/block/CrafterBlock.java -@@ -128,6 +128,14 @@ public class CrafterBlock extends BaseEntityBlock { +@@ -130,6 +130,14 @@ public class CrafterBlock extends BaseEntityBlock { } } @@ -265,10 +265,10 @@ index 3faa541c4a4623e915269d6241e1a3a3c6e374ff..18c660893a33ecf70c3d225525505852 + // Leaves end - behaviour 1.21.1- + @Override - protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + protected void affectNeighborsAfterRemoval(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) { Containers.updateNeighboursAfterDestroy(state, level, pos); diff --git a/net/minecraft/world/level/block/CreakingHeartBlock.java b/net/minecraft/world/level/block/CreakingHeartBlock.java -index dfb9a10622ba2a0c2759bb563fefd729f1109865..c735e7de1b88de531dd00a2cc2dd4a1394b808e6 100644 +index 3dd5f8c20ad68e0bd6222c8ba1687df0b2ad3b0d..746f140ea7522db879b8af1922be54395741c9f2 100644 --- a/net/minecraft/world/level/block/CreakingHeartBlock.java +++ b/net/minecraft/world/level/block/CreakingHeartBlock.java @@ -152,6 +152,16 @@ public class CreakingHeartBlock extends BaseEntityBlock { @@ -286,14 +286,14 @@ index dfb9a10622ba2a0c2759bb563fefd729f1109865..c735e7de1b88de531dd00a2cc2dd4a13 + // Leaves end - behaviour 1.21.1- + @Override - protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + protected void affectNeighborsAfterRemoval(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) { Containers.updateNeighboursAfterDestroy(state, level, pos); diff --git a/net/minecraft/world/level/block/DecoratedPotBlock.java b/net/minecraft/world/level/block/DecoratedPotBlock.java -index dd20e3c57352859ab931692445c83669da94f629..e8c216831b66cd0f4e989797030119388a3378a5 100644 +index 3ce41ce3f9d2bf7a79e4b9811e043a69e0dedb13..237d0f609a9343ea067fe0bbe4a80dc9a61d8eff 100644 --- a/net/minecraft/world/level/block/DecoratedPotBlock.java +++ b/net/minecraft/world/level/block/DecoratedPotBlock.java -@@ -164,6 +164,14 @@ public class DecoratedPotBlock extends BaseEntityBlock implements SimpleWaterlog - return new DecoratedPotBlockEntity(pos, state); +@@ -172,6 +172,14 @@ public class DecoratedPotBlock extends BaseEntityBlock implements SimpleWaterlog + return new DecoratedPotBlockEntity(worldPosition, blockState); } + // Leaves start - behaviour 1.21.1- @@ -305,13 +305,13 @@ index dd20e3c57352859ab931692445c83669da94f629..e8c216831b66cd0f4e98979703011938 + // Leaves end - behaviour 1.21.1- + @Override - protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + protected void affectNeighborsAfterRemoval(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) { Containers.updateNeighboursAfterDestroy(state, level, pos); diff --git a/net/minecraft/world/level/block/DiodeBlock.java b/net/minecraft/world/level/block/DiodeBlock.java -index b34e051b4a672d44872a74e810f978373e73af05..4525d718016fe125e3cdb1c1798fe9483213ba49 100644 +index 3457a1fa8f5efc4bf173bf155165ab5e5ae9f303..fc1861cffed656ecb0f58e5aef11f85cc40c7785 100644 --- a/net/minecraft/world/level/block/DiodeBlock.java +++ b/net/minecraft/world/level/block/DiodeBlock.java -@@ -176,6 +176,16 @@ public abstract class DiodeBlock extends HorizontalDirectionalBlock { +@@ -180,6 +180,16 @@ public abstract class DiodeBlock extends HorizontalDirectionalBlock { if (me.earthme.luminol.config.modules.optimizations.LeavesSleepingBlockEntityConfig.enabled && this instanceof ComparatorBlock && !oldState.is(Blocks.COMPARATOR)) org.leavesmc.leaves.lithium.common.block.entity.inventory_comparator_tracking.ComparatorTracking.notifyNearbyBlockEntitiesAboutNewComparator(level, pos); // Leaves - Lithium Sleeping Block Entity } @@ -326,13 +326,13 @@ index b34e051b4a672d44872a74e810f978373e73af05..4525d718016fe125e3cdb1c1798fe948 + // Leaves end - behaviour 1.21.1- + @Override - protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + protected void affectNeighborsAfterRemoval(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) { if (!movedByPiston) { diff --git a/net/minecraft/world/level/block/DispenserBlock.java b/net/minecraft/world/level/block/DispenserBlock.java -index 2ef2861041f3aaf85ea64458c43c5d83fdab9bfc..0828d663647f7c3267a4a9392a3b0b8e6e54928c 100644 +index dca954bd076fa917512af91e0b93d449eb5cac6d..6e52b01c497357ebd51f319b9d9e3eec2e52a069 100644 --- a/net/minecraft/world/level/block/DispenserBlock.java +++ b/net/minecraft/world/level/block/DispenserBlock.java -@@ -147,6 +147,14 @@ public class DispenserBlock extends BaseEntityBlock { +@@ -159,6 +159,14 @@ public class DispenserBlock extends BaseEntityBlock { return this.defaultBlockState().setValue(FACING, context.getNearestLookingDirection().getOpposite()); } @@ -345,13 +345,13 @@ index 2ef2861041f3aaf85ea64458c43c5d83fdab9bfc..0828d663647f7c3267a4a9392a3b0b8e + // Leaves end - behaviour 1.21.1- + @Override - protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + protected void affectNeighborsAfterRemoval(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) { Containers.updateNeighboursAfterDestroy(state, level, pos); diff --git a/net/minecraft/world/level/block/HopperBlock.java b/net/minecraft/world/level/block/HopperBlock.java -index 3c349b4216d934068c26017820884593662f471e..4c5a12784e97e599891d40d5ce784b4f8c1e5b15 100644 +index 88606b84ea3a33ffbb0cfa6e073eb8f59d7188d0..413be2cbaf2ca89974f3f6242d6a3499e70fb018 100644 --- a/net/minecraft/world/level/block/HopperBlock.java +++ b/net/minecraft/world/level/block/HopperBlock.java -@@ -133,6 +133,14 @@ public class HopperBlock extends BaseEntityBlock implements org.leavesmc.leaves. +@@ -139,6 +139,14 @@ public class HopperBlock extends BaseEntityBlock implements org.leavesmc.leaves. } } @@ -364,13 +364,13 @@ index 3c349b4216d934068c26017820884593662f471e..4c5a12784e97e599891d40d5ce784b4f + // Leaves end - behaviour 1.21.1- + @Override - protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + protected void affectNeighborsAfterRemoval(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) { Containers.updateNeighboursAfterDestroy(state, level, pos); diff --git a/net/minecraft/world/level/block/JukeboxBlock.java b/net/minecraft/world/level/block/JukeboxBlock.java -index a4b824dab307705559a76b954a3e47d30dd65889..bc036d8e9d241ea9178808fce39c4e5115d5f753 100644 +index a9e46a66ffc868c3b4ef2bb6257f23a20f12b1a6..8f32082ccc49b50d9a1d1048841342ce3817a36f 100644 --- a/net/minecraft/world/level/block/JukeboxBlock.java +++ b/net/minecraft/world/level/block/JukeboxBlock.java -@@ -73,6 +73,19 @@ public class JukeboxBlock extends BaseEntityBlock { +@@ -82,6 +82,19 @@ public class JukeboxBlock extends BaseEntityBlock { } } @@ -388,13 +388,13 @@ index a4b824dab307705559a76b954a3e47d30dd65889..bc036d8e9d241ea9178808fce39c4e51 + // Leaves end - behaviour 1.21.1- + @Override - protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + protected void affectNeighborsAfterRemoval(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) { Containers.updateNeighboursAfterDestroy(state, level, pos); diff --git a/net/minecraft/world/level/block/LecternBlock.java b/net/minecraft/world/level/block/LecternBlock.java -index 52b9bd310c731c407fc4264559084debec81d3d9..0b991825d48ad64c1c68fd7c6bded7583572dded 100644 +index 75660fb19c25444e35dbbe58cd20f9b3d3f7ad32..7d4ce2d8018e7be813e32a462ee4c33872f9bb4a 100644 --- a/net/minecraft/world/level/block/LecternBlock.java +++ b/net/minecraft/world/level/block/LecternBlock.java -@@ -198,6 +198,36 @@ public class LecternBlock extends BaseEntityBlock { +@@ -200,6 +200,36 @@ public class LecternBlock extends BaseEntityBlock { changePowered(level, pos, state, false); } @@ -429,13 +429,13 @@ index 52b9bd310c731c407fc4264559084debec81d3d9..0b991825d48ad64c1c68fd7c6bded758 + // Leaves end - behaviour 1.21.1- + @Override - protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + protected void affectNeighborsAfterRemoval(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) { if (state.getValue(POWERED)) { diff --git a/net/minecraft/world/level/block/LeverBlock.java b/net/minecraft/world/level/block/LeverBlock.java -index 5f03e9fed3d4a8c3b72ca05be0b62ef45ac291f7..359fe5d611bcebe4cb98b9d8cea26b255adb167e 100644 +index 341960ef67a689f660d0dcf61aaf5bf52bdc9074..341acc65fb2ffa45d9ad90fa15cf4e972e68a95e 100644 --- a/net/minecraft/world/level/block/LeverBlock.java +++ b/net/minecraft/world/level/block/LeverBlock.java -@@ -124,6 +124,19 @@ public class LeverBlock extends FaceAttachedHorizontalDirectionalBlock { +@@ -127,6 +127,19 @@ public class LeverBlock extends FaceAttachedHorizontalDirectionalBlock { } } @@ -453,13 +453,13 @@ index 5f03e9fed3d4a8c3b72ca05be0b62ef45ac291f7..359fe5d611bcebe4cb98b9d8cea26b25 + // Leaves end - behaviour 1.21.1- + @Override - protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + protected void affectNeighborsAfterRemoval(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) { if (!movedByPiston && state.getValue(POWERED)) { diff --git a/net/minecraft/world/level/block/LightningRodBlock.java b/net/minecraft/world/level/block/LightningRodBlock.java -index dbfe086123c4b3cdc866111e1b6ec37d8d38d394..adad6e538b128729b72b7d44cabbd0cfba7417f9 100644 +index 47ca45518df306cc4368983eefb89294e56b015a..c440a04864fae43f94185e02bb8c3c33abf01a5c 100644 --- a/net/minecraft/world/level/block/LightningRodBlock.java +++ b/net/minecraft/world/level/block/LightningRodBlock.java -@@ -120,6 +120,18 @@ public class LightningRodBlock extends RodBlock implements SimpleWaterloggedBloc +@@ -123,6 +123,18 @@ public class LightningRodBlock extends RodBlock implements SimpleWaterloggedBloc } } @@ -476,13 +476,13 @@ index dbfe086123c4b3cdc866111e1b6ec37d8d38d394..adad6e538b128729b72b7d44cabbd0cf + // Leaves end - behaviour 1.21.1- + @Override - protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + protected void affectNeighborsAfterRemoval(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) { if (state.getValue(POWERED)) { diff --git a/net/minecraft/world/level/block/ObserverBlock.java b/net/minecraft/world/level/block/ObserverBlock.java -index 3c12d8e23f20b666b0005e597ba2e803c02d5d78..17c371f4c24e8a81705bdd322b1de5de4b8be8b7 100644 +index 6a3413ca875ce78f48cd8d3ce2cfe7798be1a19e..c492a770cedf976949434d700c943fcd8d4b4199 100644 --- a/net/minecraft/world/level/block/ObserverBlock.java +++ b/net/minecraft/world/level/block/ObserverBlock.java -@@ -127,6 +127,17 @@ public class ObserverBlock extends DirectionalBlock { +@@ -128,6 +128,17 @@ public class ObserverBlock extends DirectionalBlock { } } @@ -498,13 +498,13 @@ index 3c12d8e23f20b666b0005e597ba2e803c02d5d78..17c371f4c24e8a81705bdd322b1de5de + // Leaves end - behaviour 1.21.1- + @Override - protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + protected void affectNeighborsAfterRemoval(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) { if (state.getValue(POWERED) && level.getBlockTicks().hasScheduledTick(pos, this)) { diff --git a/net/minecraft/world/level/block/RedStoneWireBlock.java b/net/minecraft/world/level/block/RedStoneWireBlock.java -index 48f9e234e4025633cbc41d334d88ada36c2e0d7b..5c154d15e5aa45988436722595c7fca74e166c9a 100644 +index 66a05f099a263b0c9220f1416f3cf1221422cc20..eb7b8d971185764230d575af1f54537b48526548 100644 --- a/net/minecraft/world/level/block/RedStoneWireBlock.java +++ b/net/minecraft/world/level/block/RedStoneWireBlock.java -@@ -368,6 +368,27 @@ public class RedStoneWireBlock extends Block { +@@ -378,6 +378,27 @@ public class RedStoneWireBlock extends Block { } } @@ -530,13 +530,13 @@ index 48f9e234e4025633cbc41d334d88ada36c2e0d7b..5c154d15e5aa45988436722595c7fca7 + // Leaves end - behaviour 1.21.1- + @Override - protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + protected void affectNeighborsAfterRemoval(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) { if (!movedByPiston) { diff --git a/net/minecraft/world/level/block/RedstoneTorchBlock.java b/net/minecraft/world/level/block/RedstoneTorchBlock.java -index d1dbfc821f068f14bf975842f66251816ea5c985..fe13504a7d2d685e43183dd7b3219f1605570adb 100644 +index 0d0b5443c5c56825e88fd64c02c993eca6044d45..23137a24794fbe1536e1c47bc783ed211fc1042f 100644 --- a/net/minecraft/world/level/block/RedstoneTorchBlock.java +++ b/net/minecraft/world/level/block/RedstoneTorchBlock.java -@@ -53,6 +53,15 @@ public class RedstoneTorchBlock extends BaseTorchBlock { +@@ -54,6 +54,15 @@ public class RedstoneTorchBlock extends BaseTorchBlock { } } @@ -550,13 +550,13 @@ index d1dbfc821f068f14bf975842f66251816ea5c985..fe13504a7d2d685e43183dd7b3219f16 + // Leaves end - behaviour 1.21.1- + @Override - protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + protected void affectNeighborsAfterRemoval(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) { if (!movedByPiston) { diff --git a/net/minecraft/world/level/block/SculkSensorBlock.java b/net/minecraft/world/level/block/SculkSensorBlock.java -index 80e6ba8f026a6565696f18304507b2d0a347650c..593fab3d2a70bcd6832dd777afa4973f22abbaeb 100644 +index 2bbce50d9dd0ca65f9e3bc90c8de098473039bc5..94ec05d2c6338464f4912cc1c919165c080f8cde 100644 --- a/net/minecraft/world/level/block/SculkSensorBlock.java +++ b/net/minecraft/world/level/block/SculkSensorBlock.java -@@ -128,6 +128,18 @@ public class SculkSensorBlock extends BaseEntityBlock implements SimpleWaterlogg +@@ -129,6 +129,18 @@ public class SculkSensorBlock extends BaseEntityBlock implements SimpleWaterlogg } } @@ -573,14 +573,14 @@ index 80e6ba8f026a6565696f18304507b2d0a347650c..593fab3d2a70bcd6832dd777afa4973f + // Leaves end - behaviour 1.21.1- + @Override - protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + protected void affectNeighborsAfterRemoval(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) { if (getPhase(state) == SculkSensorPhase.ACTIVE) { diff --git a/net/minecraft/world/level/block/SculkShriekerBlock.java b/net/minecraft/world/level/block/SculkShriekerBlock.java -index 2815fb48530de3a2f9ef0f472a0fd0a2c32140b6..6b5e5bbbeb11bd8ce100ef3c215dfcf4b387e595 100644 +index d7e5ec23c64b60c47ab6b54cbf282e88c3a4a045..6858d2721a7e5bad21756bacd90255e3c817f931 100644 --- a/net/minecraft/world/level/block/SculkShriekerBlock.java +++ b/net/minecraft/world/level/block/SculkShriekerBlock.java @@ -68,6 +68,16 @@ public class SculkShriekerBlock extends BaseEntityBlock implements SimpleWaterlo - super.stepOn(level, pos, state, entity); + super.stepOn(level, pos, onState, entity); } + // Leaves start - behaviour 1.21.1- @@ -594,10 +594,10 @@ index 2815fb48530de3a2f9ef0f472a0fd0a2c32140b6..6b5e5bbbeb11bd8ce100ef3c215dfcf4 + // Leaves end - behaviour 1.21.1- + @Override - protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + protected void tick(final BlockState state, final ServerLevel level, final BlockPos pos, final RandomSource random) { if (state.getValue(SHRIEKING)) { diff --git a/net/minecraft/world/level/block/ShulkerBoxBlock.java b/net/minecraft/world/level/block/ShulkerBoxBlock.java -index 77840814806c7d07b58cd716cf7ec095e894498a..e820cd03e695649a8f83e23ae822524a8f78e23b 100644 +index ffa76dc1338c6c892a42b2148f9f01c933660b98..2957008ce8fc8c39a7c13637dad42784f230f575 100644 --- a/net/minecraft/world/level/block/ShulkerBoxBlock.java +++ b/net/minecraft/world/level/block/ShulkerBoxBlock.java @@ -150,6 +150,19 @@ public class ShulkerBoxBlock extends BaseEntityBlock { @@ -618,35 +618,38 @@ index 77840814806c7d07b58cd716cf7ec095e894498a..e820cd03e695649a8f83e23ae822524a + // Leaves end - behaviour 1.21.1- + @Override - protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + protected void affectNeighborsAfterRemoval(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) { Containers.updateNeighboursAfterDestroy(state, level, pos); diff --git a/net/minecraft/world/level/block/TripWireBlock.java b/net/minecraft/world/level/block/TripWireBlock.java -index 9d005c3db8f0c784cdd7217e7b110daa703a9cf3..190d7cd818f768bd44fc1b4e62af2c9b3aacbe4d 100644 +index 04e5995409a3532947dfab1c8ef05bd546a6f66d..961995694172658716309e2695f9a034fe058b06 100644 --- a/net/minecraft/world/level/block/TripWireBlock.java +++ b/net/minecraft/world/level/block/TripWireBlock.java -@@ -108,6 +108,16 @@ public class TripWireBlock extends Block { +@@ -107,9 +107,18 @@ public class TripWireBlock extends Block { } } + // Leaves start - behaviour 1.21.1- -+ @Override + @Override +- protected void affectNeighborsAfterRemoval(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) { + protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) { -+ if (io.papermc.paper.configuration.GlobalConfiguration.get().blockUpdates.disableTripwireUpdates) return; // Paper - prevent adjacent tripwires from updating + if (io.papermc.paper.configuration.GlobalConfiguration.get().blockUpdates.disableTripwireUpdates) return; // Paper - prevent adjacent tripwires from updating + if (!isMoving && !state.is(newState.getBlock())) { + this.updateSource(level, pos, state.setValue(POWERED, Boolean.TRUE)); + } + } + // Leaves end - behaviour 1.21.1- + - @Override - protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { - if (io.papermc.paper.configuration.GlobalConfiguration.get().blockUpdates.disableTripwireUpdates) return; // Paper - prevent adjacent tripwires from updating ++ @Override ++ protected void affectNeighborsAfterRemoval(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) { + if (!movedByPiston) { + this.updateSource(level, pos, state.setValue(POWERED, true)); + } diff --git a/net/minecraft/world/level/block/TripWireHookBlock.java b/net/minecraft/world/level/block/TripWireHookBlock.java -index 42a5e9a7f5d604e4821a116ba13319df052faf97..e90e142cfb15335522a48ad82aa90018ed8ec349 100644 +index fd808353181e05f2fc527a391ce7bb990f61b4c7..e070b2781ce15c754a678eb76de4c0248b0ddec7 100644 --- a/net/minecraft/world/level/block/TripWireHookBlock.java +++ b/net/minecraft/world/level/block/TripWireHookBlock.java -@@ -244,6 +244,25 @@ public class TripWireHookBlock extends Block { - level.updateNeighborsAt(pos.relative(opposite), block, orientation); +@@ -248,6 +248,25 @@ public class TripWireHookBlock extends Block { + level.updateNeighborsAt(pos.relative(front), block, orientation); } + // Leaves start - behaviour 1.21.1- @@ -669,27 +672,27 @@ index 42a5e9a7f5d604e4821a116ba13319df052faf97..e90e142cfb15335522a48ad82aa90018 + // Leaves end - behaviour 1.21.1- + @Override - protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + protected void affectNeighborsAfterRemoval(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) { if (!movedByPiston) { diff --git a/net/minecraft/world/level/block/entity/BlockEntityType.java b/net/minecraft/world/level/block/entity/BlockEntityType.java -index 6a9d23d25a79c73d5792011faf0e5a1c4c25bc64..84e0d3cd3c349f0d588a4b4c2d6844480a92b4ca 100644 +index ac58bbed01edaf5dfe4839c89649ca865c339c8a..caead1012ff3b5b5f78c24a3baf20b7d00b84cf6 100644 --- a/net/minecraft/world/level/block/entity/BlockEntityType.java +++ b/net/minecraft/world/level/block/entity/BlockEntityType.java -@@ -306,7 +306,7 @@ public class BlockEntityType { +@@ -301,7 +301,7 @@ public class BlockEntityType { } - public boolean isValid(BlockState state) { + public boolean isValid(final BlockState state) { - return this.validBlocks.contains(state.getBlock()); + return fun.bm.lophine.config.modules.experiment.RedStoneConfig.oldBlockRemoveBehaviour || this.validBlocks.contains(state.getBlock()); // Leaves - behaviour 1.21.1- } @Deprecated diff --git a/net/minecraft/world/level/block/piston/MovingPistonBlock.java b/net/minecraft/world/level/block/piston/MovingPistonBlock.java -index 58b78e6b9a43605940420d8cb0f1163ee3f0a5ff..eebf03ece11052f07702951b9335bc151e160848 100644 +index 2b6ad989e1e1424d0283bae39e5dae33eba44923..c72a14a8c3d9fe4430cfde671f29688c696f983a 100644 --- a/net/minecraft/world/level/block/piston/MovingPistonBlock.java +++ b/net/minecraft/world/level/block/piston/MovingPistonBlock.java -@@ -65,6 +65,18 @@ public class MovingPistonBlock extends BaseEntityBlock { - return createTickerHelper(blockEntityType, BlockEntityType.PISTON, PistonMovingBlockEntity::tick); +@@ -70,6 +70,18 @@ public class MovingPistonBlock extends BaseEntityBlock { + return createTickerHelper(type, BlockEntityType.PISTON, PistonMovingBlockEntity::tick); } + // Leaves start - behaviour 1.21.1- @@ -705,10 +708,10 @@ index 58b78e6b9a43605940420d8cb0f1163ee3f0a5ff..eebf03ece11052f07702951b9335bc15 + // Leaves end - behaviour 1.21.1- + @Override - public void destroy(LevelAccessor level, BlockPos pos, BlockState state) { - BlockPos blockPos = pos.relative(state.getValue(FACING).getOpposite()); + public void destroy(final LevelAccessor level, final BlockPos pos, final BlockState state) { + BlockPos relative = pos.relative(state.getValue(FACING).getOpposite()); diff --git a/net/minecraft/world/level/block/piston/PistonHeadBlock.java b/net/minecraft/world/level/block/piston/PistonHeadBlock.java -index b369e80a4fc371a3762e34e7d4d180b86d1d190f..0b412e360b090dc85d1726eb8f51c69b47061276 100644 +index f8caa0b3c21766dbad73c524c1680346e4257188..343660d3e5fbdc25aba84a5cacbc367d40533848 100644 --- a/net/minecraft/world/level/block/piston/PistonHeadBlock.java +++ b/net/minecraft/world/level/block/piston/PistonHeadBlock.java @@ -78,6 +78,19 @@ public class PistonHeadBlock extends DirectionalBlock { @@ -729,13 +732,13 @@ index b369e80a4fc371a3762e34e7d4d180b86d1d190f..0b412e360b090dc85d1726eb8f51c69b + // Leaves end - behaviour 1.21.1- + @Override - protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { - BlockPos blockPos = pos.relative(state.getValue(FACING).getOpposite()); + protected void affectNeighborsAfterRemoval(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) { + BlockPos basePos = pos.relative(state.getValue(FACING).getOpposite()); diff --git a/net/minecraft/world/level/block/state/BlockBehaviour.java b/net/minecraft/world/level/block/state/BlockBehaviour.java -index 418517faeaf40ae2f7dea5635e4232cd89db3ead..0de2f6627fb6295d7927ac3e37026f4daf68cfd3 100644 +index 0fbdf810c785c8a596d461e7651361fdedbb6217..66f3fbe18451644be939b22342fc22592005d252 100644 --- a/net/minecraft/world/level/block/state/BlockBehaviour.java +++ b/net/minecraft/world/level/block/state/BlockBehaviour.java -@@ -171,6 +171,15 @@ public abstract class BlockBehaviour implements FeatureElement, org.leavesmc.lea +@@ -174,6 +174,15 @@ public abstract class BlockBehaviour implements FeatureElement, org.leavesmc.lea org.spigotmc.AsyncCatcher.catchOp("block onPlace"); // Spigot } @@ -748,10 +751,10 @@ index 418517faeaf40ae2f7dea5635e4232cd89db3ead..0de2f6627fb6295d7927ac3e37026f4d + } + // Leaves end - behaviour 1.21.1- + - protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + protected void affectNeighborsAfterRemoval(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) { } -@@ -866,6 +875,12 @@ public abstract class BlockBehaviour implements FeatureElement, org.leavesmc.lea +@@ -889,6 +898,12 @@ public abstract class BlockBehaviour implements FeatureElement, org.leavesmc.lea // CraftBukkit end } @@ -761,51 +764,51 @@ index 418517faeaf40ae2f7dea5635e4232cd89db3ead..0de2f6627fb6295d7927ac3e37026f4d + } + // Leaves end - behaviour 1.21.1- + - public void affectNeighborsAfterRemoval(ServerLevel level, BlockPos pos, boolean movedByPiston) { + public void affectNeighborsAfterRemoval(final ServerLevel level, final BlockPos pos, final boolean movedByPiston) { this.getBlock().affectNeighborsAfterRemoval(this.asState(), level, pos, movedByPiston); } diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java -index 5551d80a81c2878136f96b3e695c4888c7105a49..73dd8e67938fbfff745b189c06a93174976ba1bf 100644 +index b7ba4d8ed2cc65ba0e85a3cdf8b6568a7c9c02f1..6b5ad391eda92cdbb47ab78a4c27d7e6a3b098a8 100644 --- a/net/minecraft/world/level/chunk/LevelChunk.java +++ b/net/minecraft/world/level/chunk/LevelChunk.java -@@ -406,22 +406,28 @@ public class LevelChunk extends ChunkAccess implements DebugValueSource, ca.spot - boolean flag = !blockState.is(block); - boolean flag1 = (flags & Block.UPDATE_MOVE_BY_PISTON) != 0; - boolean flag2 = (flags & Block.UPDATE_SKIP_BLOCK_ENTITY_SIDEEFFECTS) == 0; -- if (flag && blockState.hasBlockEntity() && !state.shouldChangedStateKeepBlockEntity(blockState)) { -- if (!this.level.isClientSide() && flag2) { +@@ -408,22 +408,28 @@ public class LevelChunk extends ChunkAccess implements DebugValueSource, ca.spot + boolean blockChanged = !oldState.is(newBlock); + boolean movedByPiston = (flags & Block.UPDATE_MOVE_BY_PISTON) != 0; + boolean sideEffects = (flags & Block.UPDATE_SKIP_BLOCK_ENTITY_SIDEEFFECTS) == 0; +- if (blockChanged && oldState.hasBlockEntity() && !state.shouldChangedStateKeepBlockEntity(oldState)) { +- if (!this.level.isClientSide() && sideEffects) { - BlockEntity blockEntity = this.level.getBlockEntity(pos); - if (blockEntity != null) { -- blockEntity.preRemoveSideEffects(pos, blockState); +- blockEntity.preRemoveSideEffects(pos, oldState); + // Leaves start - behaviour 1.21.1- + if (!fun.bm.lophine.config.modules.experiment.RedStoneConfig.oldBlockRemoveBehaviour) { -+ if (flag && blockState.hasBlockEntity() && !state.shouldChangedStateKeepBlockEntity(blockState)) { -+ if (!this.level.isClientSide() && flag2) { ++ if (blockChanged && oldState.hasBlockEntity() && !state.shouldChangedStateKeepBlockEntity(oldState)) { ++ if (!this.level.isClientSide() && sideEffects) { + BlockEntity blockEntity = this.level.getBlockEntity(pos); + if (blockEntity != null) { -+ blockEntity.preRemoveSideEffects(pos, blockState); ++ blockEntity.preRemoveSideEffects(pos, oldState); + } } - } - this.removeBlockEntity(pos); - } -+ this.removeBlockEntity(pos); -+ } ++ this.removeBlockEntity(pos); ++ } -- if ((flag || block instanceof BaseRailBlock) +- if ((blockChanged || newBlock instanceof BaseRailBlock) - && this.level instanceof ServerLevel serverLevel -- && ((flags & Block.UPDATE_NEIGHBORS) != 0 || flag1)) { -- blockState.affectNeighborsAfterRemoval(serverLevel, pos, flag1); -+ if ((flag || block instanceof BaseRailBlock) +- && ((flags & Block.UPDATE_NEIGHBORS) != 0 || movedByPiston)) { +- oldState.affectNeighborsAfterRemoval(serverLevel, pos, movedByPiston); ++ if ((blockChanged || newBlock instanceof BaseRailBlock) + && this.level instanceof ServerLevel serverLevel -+ && ((flags & Block.UPDATE_NEIGHBORS) != 0 || flag1)) { -+ blockState.affectNeighborsAfterRemoval(serverLevel, pos, flag1); ++ && ((flags & Block.UPDATE_NEIGHBORS) != 0 || movedByPiston)) { ++ oldState.affectNeighborsAfterRemoval(serverLevel, pos, movedByPiston); + } + } else { -+ blockState.onRemove(this.level, pos, state, flag1); ++ oldState.onRemove(this.level, pos, state, movedByPiston); } + // Leaves end - behaviour 1.21.1- - if (!section.getBlockState(i, i1, i2).is(block)) { + if (!section.getBlockState(localX, localY, localZ).is(newBlock)) { return null;