From c37d2873b5dc00c27de5ca17f024c03098ac0e26 Mon Sep 17 00:00:00 2001 From: MC_XiaoHei Date: Fri, 4 Jul 2025 17:14:02 +0800 Subject: [PATCH] fix: prevent loss of item drops due to update suppression when breaking blocks(#525) --- ...item-drops-due-to-update-suppression.patch | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 leaves-server/minecraft-patches/features/0136-Prevent-loss-of-item-drops-due-to-update-suppression.patch diff --git a/leaves-server/minecraft-patches/features/0136-Prevent-loss-of-item-drops-due-to-update-suppression.patch b/leaves-server/minecraft-patches/features/0136-Prevent-loss-of-item-drops-due-to-update-suppression.patch new file mode 100644 index 00000000..3575c803 --- /dev/null +++ b/leaves-server/minecraft-patches/features/0136-Prevent-loss-of-item-drops-due-to-update-suppression.patch @@ -0,0 +1,26 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: MC_XiaoHei +Date: Fri, 4 Jul 2025 17:13:15 +0800 +Subject: [PATCH] Prevent loss of item drops due to update suppression when + breaking blocks + + +diff --git a/net/minecraft/server/level/ServerPlayerGameMode.java b/net/minecraft/server/level/ServerPlayerGameMode.java +index 48bb795216ca3fb301813080de403a048bbfa98c..e62fca1668d5523453b3cae44dda2a01b33c7813 100644 +--- a/net/minecraft/server/level/ServerPlayerGameMode.java ++++ b/net/minecraft/server/level/ServerPlayerGameMode.java +@@ -382,7 +382,13 @@ public class ServerPlayerGameMode { + this.level.captureDrops = new java.util.ArrayList<>(); + // CraftBukkit end + 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); ++ boolean flag; // Leaves start - Prevent loss of item drops due to update suppression when breaking blocks ++ try { ++ flag = this.level.removeBlock(pos, false); ++ } catch (org.leavesmc.leaves.util.UpdateSuppressionException e) { ++ this.level.captureDrops = null; ++ throw e; ++ } // Leaves end - Prevent loss of item drops due to update suppression when breaking blocks + if (flag) { + block.destroy(this.level, pos, blockState1); + }