mirror of
https://github.com/LeavesMC/Leaves.git
synced 2026-01-03 14:22:09 +00:00
--------- Co-authored-by: MC-XiaoHei <xor7xiaohei@gmail.com> Co-authored-by: violetc <58360096+s-yh-china@users.noreply.github.com> Co-authored-by: Fortern <blueten.ki@gmail.com> Co-authored-by: Helvetica Volubi <88063803+Suisuroru@users.noreply.github.com>
98 lines
6.4 KiB
Diff
98 lines
6.4 KiB
Diff
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 5d4eb61af0b0f39a5d4c37f4a303fa24b3a2936d..48bb795216ca3fb301813080de403a048bbfa98c 100644
|
|
--- a/net/minecraft/server/level/ServerPlayerGameMode.java
|
|
+++ b/net/minecraft/server/level/ServerPlayerGameMode.java
|
|
@@ -381,7 +381,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.subcommands.BlockUpdateCommand.isNoBlockUpdate() ? blockState : block.playerWillDestroy(this.level, pos, blockState, this.player); // Leaves - no block update
|
|
boolean flag = this.level.removeBlock(pos, false);
|
|
if (flag) {
|
|
block.destroy(this.level, pos, blockState1);
|
|
diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java
|
|
index ef8a072838558caab19e8a85f4b59cac570c2635..590252ca203124f0b720a73f174c92fbe49bc685 100644
|
|
--- a/net/minecraft/world/level/Level.java
|
|
+++ b/net/minecraft/world/level/Level.java
|
|
@@ -1089,6 +1089,11 @@ public abstract class Level implements LevelAccessor, UUIDLookup<Entity>, AutoCl
|
|
|
|
@Override
|
|
public boolean setBlock(BlockPos pos, BlockState state, int flags, int recursionLeft) {
|
|
+ // Leaves start - no block update
|
|
+ if (org.leavesmc.leaves.command.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
|
|
@@ -1190,6 +1195,11 @@ public abstract class Level implements LevelAccessor, UUIDLookup<Entity>, AutoCl
|
|
BlockState state = newState;
|
|
BlockState blockState = oldState;
|
|
BlockState blockState1 = currentState;
|
|
+ // Leaves start - no block update
|
|
+ if (org.leavesmc.leaves.command.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);
|
|
@@ -1208,7 +1218,12 @@ public abstract class Level implements LevelAccessor, UUIDLookup<Entity>, AutoCl
|
|
|
|
if ((flags & 16) == 0 && recursionLeft > 0) {
|
|
int i = flags & -34;
|
|
-
|
|
+ // Leaves start - no block update
|
|
+ if (org.leavesmc.leaves.command.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 16aa9f5996dc6eda95541fddb01e00e41305357a..31ab92e0769aa4ce09da5073ad9b734eeebac9c5 100644
|
|
--- a/net/minecraft/world/level/block/piston/PistonBaseBlock.java
|
|
+++ b/net/minecraft/world/level/block/piston/PistonBaseBlock.java
|
|
@@ -105,6 +105,7 @@ public class PistonBaseBlock extends DirectionalBlock {
|
|
}
|
|
|
|
private void checkIfExtend(Level level, BlockPos pos, BlockState state) {
|
|
+ if (org.leavesmc.leaves.command.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 263bf2b795057c2d5218bf9cfb684e526601aa77..da1e77ccd8805ac0cb0729720b4a1742da67d35c 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.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 & 128) == 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.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
|