mirror of
https://github.com/LeavesMC/Leaves.git
synced 2025-12-19 14:59:32 +00:00
* feat: enhance update suppression * fix: fix nest exception, better print * fix: bot update suppression catch * chore: format * feat: better performance * fix: fix build err * refactor * fix: throw IAE when call not from net.minecraft * format: use jbr annotation * fix: fix comment pos * chore: format * fix: fix comment * feat: add stacktrace to event
38 lines
1.9 KiB
Diff
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 e59b8d42d602bbdae1071f2a5be1180420c4efb7..a63330b232dc41f0a5bb36bb94dfb84f01504699 100644
|
|
--- a/net/minecraft/world/item/ItemStack.java
|
|
+++ b/net/minecraft/world/item/ItemStack.java
|
|
@@ -389,8 +389,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;
|
|
}
|
|
@@ -537,6 +547,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;
|
|
}
|
|
}
|