9
0
mirror of https://github.com/LeavesMC/Leaves.git synced 2026-01-04 15:41:31 +00:00
Files
LeavesMC/leaves-server/minecraft-patches/features/0131-Fix-block-place-desync-due-to-update-suppression.patch
2025-09-25 15:54:57 +08:00

38 lines
1.9 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: MC_XiaoHei <xor7xiaohei@gmail.com>
Date: Sat, 5 Jul 2025 09:48:47 +0800
Subject: [PATCH] Fix block place desync due to update suppression
diff --git a/net/minecraft/world/item/ItemStack.java b/net/minecraft/world/item/ItemStack.java
index fba077a5b6b9256dd117ae72c6aa0c63452a3eaa..33df00727e42ee0728dfb6a8c0816395fab5d4a9 100644
--- a/net/minecraft/world/item/ItemStack.java
+++ b/net/minecraft/world/item/ItemStack.java
@@ -390,8 +390,18 @@ public final class ItemStack implements DataComponentHolder {
}
}
InteractionResult interactionResult;
+ // Leaves start - fix block place desync due to update suppression
+ org.leavesmc.leaves.util.UpdateSuppressionException ue = null;
try {
interactionResult = item.useOn(context);
+ } catch (org.leavesmc.leaves.util.UpdateSuppressionException ex) {
+ interactionResult = net.minecraft.world.InteractionResult.SUCCESS.configurePaper(e -> e.placedBlockAt(clickedPos.immutable()));
+ ue = ex;
+ ue.provideBlock(context.getLevel(), context.getClickedPos(), serverLevel.getBlockState(context.getClickedPos()).getBlock());
+ if (player != null) {
+ ue.providePlayer((net.minecraft.server.level.ServerPlayer) player);
+ }
+ // Leaves end - fix block place desync due to update suppression
} finally {
serverLevel.captureBlockStates = false;
}
@@ -538,6 +548,7 @@ public final class ItemStack implements DataComponentHolder {
serverLevel.capturedBlockStates.clear();
// CraftBukkit end
+ if (ue != null) throw ue; // Leaves - fix block place desync due to update suppression
return interactionResult;
}
}