mirror of
https://github.com/LeavesMC/Leaves.git
synced 2025-12-19 14:59:32 +00:00
--------- Co-authored-by: Lumine1909 <133463833+Lumine1909@users.noreply.github.com> Co-authored-by: violetc <58360096+s-yh-china@users.noreply.github.com> Co-authored-by: Helvetica Volubi <88063803+Suisuroru@users.noreply.github.com>
44 lines
2.5 KiB
Diff
44 lines
2.5 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: MC_XiaoHei <xor7xiaohei@gmail.com>
|
|
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 fc205e54941d40a5583129b0c6540950f97a6b49..2b69ff82977f3592fb99ef494d090d77be34c186 100644
|
|
--- a/net/minecraft/server/level/ServerPlayerGameMode.java
|
|
+++ b/net/minecraft/server/level/ServerPlayerGameMode.java
|
|
@@ -402,11 +402,21 @@ public class ServerPlayerGameMode {
|
|
this.level.captureDrops = new java.util.ArrayList<>();
|
|
// CraftBukkit end
|
|
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);
|
|
+ // Leaves start - Prevent loss of item drops due to update suppression when breaking blocks
|
|
+ boolean flag;
|
|
if (SharedConstants.DEBUG_BLOCK_BREAK) {
|
|
LOGGER.info("server broke {} {} -> {}", pos, blockState1, this.level.getBlockState(pos));
|
|
}
|
|
-
|
|
+ org.leavesmc.leaves.util.UpdateSuppressionException ex = null;
|
|
+ try {
|
|
+ flag = this.level.removeBlock(pos, false);
|
|
+ } catch (org.leavesmc.leaves.util.UpdateSuppressionException e) {
|
|
+ ex = e;
|
|
+ ex.provideBlock(level, pos, block);
|
|
+ ex.providePlayer(this.player);
|
|
+ flag = false;
|
|
+ }
|
|
+ // Leaves end - Prevent loss of item drops due to update suppression when breaking blocks
|
|
if (flag) {
|
|
block.destroy(this.level, pos, blockState1);
|
|
}
|
|
@@ -434,6 +444,7 @@ public class ServerPlayerGameMode {
|
|
if (event.isDropItems()) {
|
|
org.bukkit.craftbukkit.event.CraftEventFactory.handleBlockDropItemEvent(bblock, state, this.player, itemsToDrop); // Paper - capture all item additions to the world
|
|
}
|
|
+ if (ex != null) throw ex; // Leaves - Prevent loss of item drops due to update suppression when breaking blocks
|
|
|
|
// Drop event experience
|
|
if (flag) {
|