From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: violetc <58360096+s-yh-china@users.noreply.github.com> Date: Mon, 3 Feb 2025 19:16:16 +0800 Subject: [PATCH] No block update command diff --git a/net/minecraft/server/level/ServerPlayerGameMode.java b/net/minecraft/server/level/ServerPlayerGameMode.java index 65e2edf39857b2e03c5a32dfb3b822b5cb4ce93c..1a680c491ae2ed764d3f24b465de72372b65f68d 100644 --- a/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/net/minecraft/server/level/ServerPlayerGameMode.java @@ -401,7 +401,7 @@ public class ServerPlayerGameMode { org.bukkit.block.BlockState state = bblock.getState(); this.level.captureDrops = new java.util.ArrayList<>(); // CraftBukkit end - BlockState blockState1 = block.playerWillDestroy(this.level, pos, blockState, this.player); + BlockState blockState1 = org.leavesmc.leaves.command.leaves.subcommands.BlockUpdateCommand.isNoBlockUpdate() ? blockState : block.playerWillDestroy(this.level, pos, blockState, this.player); // Leaves - no block update boolean flag = this.level.removeBlock(pos, false); if (SharedConstants.DEBUG_BLOCK_BREAK) { LOGGER.info("server broke {} {} -> {}", pos, blockState1, this.level.getBlockState(pos)); diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java index feafaaeca7ffa6fda5af9897c448b61ee1760290..48eca978dc58c3c2045c5746aac5d7f5b732ff89 100644 --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java @@ -1043,6 +1043,11 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl @Override public boolean setBlock(BlockPos pos, BlockState state, int flags, int recursionLeft) { + // Leaves start - no block update + if (org.leavesmc.leaves.command.leaves.subcommands.BlockUpdateCommand.isNoBlockUpdate()) { + flags = flags & ~1 | net.minecraft.world.level.block.Block.UPDATE_SKIP_ON_PLACE; + } + // Leaves end - no block update // CraftBukkit start - tree generation if (this.captureTreeGeneration) { // Paper start - Protect Bedrock and End Portal/Frames from being destroyed @@ -1144,6 +1149,11 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl BlockState state = newState; BlockState blockState = oldState; BlockState blockState1 = currentState; + // Leaves start - no block update + if (org.leavesmc.leaves.command.leaves.subcommands.BlockUpdateCommand.isNoBlockUpdate()) { + flags = flags & ~1 | net.minecraft.world.level.block.Block.UPDATE_SKIP_ON_PLACE; + } + // Leaves end - no block update if (blockState1 == state) { if (blockState != blockState1) { this.setBlocksDirty(pos, blockState, blockState1); @@ -1162,7 +1172,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl if ((flags & 16) == 0 && recursionLeft > 0) { int i = flags & -34; - + // Leaves start - no block update + if (org.leavesmc.leaves.command.leaves.subcommands.BlockUpdateCommand.isNoBlockUpdate()) { + this.updatePOIOnBlockStateChange(pos, blockState, blockState1); + return; + } + // Leaves end - no block update // CraftBukkit start blockState.updateIndirectNeighbourShapes(this, pos, i, recursionLeft - 1); // Don't call an event for the old block to limit event spam boolean cancelledUpdates = false; // Paper - Fix block place logic diff --git a/net/minecraft/world/level/block/piston/PistonBaseBlock.java b/net/minecraft/world/level/block/piston/PistonBaseBlock.java index 114aa0f1ac9feefdb856bfc821489b864aba18f3..295357c842a4a4e9e18de68c570168b1cae9593a 100644 --- a/net/minecraft/world/level/block/piston/PistonBaseBlock.java +++ b/net/minecraft/world/level/block/piston/PistonBaseBlock.java @@ -106,6 +106,7 @@ public class PistonBaseBlock extends DirectionalBlock { } private void checkIfExtend(Level level, BlockPos pos, BlockState state) { + if (org.leavesmc.leaves.command.leaves.subcommands.BlockUpdateCommand.isNoBlockUpdate()) return; // Leaves - no block update Direction direction = state.getValue(FACING); boolean neighborSignal = this.getNeighborSignal(level, pos, direction); if (neighborSignal && !state.getValue(EXTENDED)) { diff --git a/net/minecraft/world/level/redstone/NeighborUpdater.java b/net/minecraft/world/level/redstone/NeighborUpdater.java index 77ed7a6a4bea3dfc77d060c49f77f4e080da200b..be5d8ca78b4e293766add81ed6cacdae7cb02436 100644 --- a/net/minecraft/world/level/redstone/NeighborUpdater.java +++ b/net/minecraft/world/level/redstone/NeighborUpdater.java @@ -34,6 +34,11 @@ public interface NeighborUpdater { static void executeShapeUpdate( LevelAccessor level, Direction direction, BlockPos pos, BlockPos neighborPos, BlockState neighborState, int flags, int recursionLeft ) { + // Leaves start - no block update + if (org.leavesmc.leaves.command.leaves.subcommands.BlockUpdateCommand.isNoBlockUpdate()) { + flags = flags & ~1 | net.minecraft.world.level.block.Block.UPDATE_SKIP_ON_PLACE; + } + // Leaves end - no block update BlockState blockState = level.getBlockState(pos); if ((flags & Block.UPDATE_SKIP_SHAPE_UPDATE_ON_WIRE) == 0 || !blockState.is(Blocks.REDSTONE_WIRE)) { BlockState blockState1 = blockState.updateShape(level, level, pos, direction, neighborPos, neighborState, level.getRandom()); @@ -48,6 +53,7 @@ public interface NeighborUpdater { 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 + if (org.leavesmc.leaves.command.leaves.subcommands.BlockUpdateCommand.isNoBlockUpdate()) return; // Leaves - no block update try { // CraftBukkit start 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