9761fde77d
WARNING: no patch merged, we will start merge later there are to many update between 1.21.11 and 26.1.2, so we need more time to build a base version which can stable to use
71 lines
5.4 KiB
Diff
71 lines
5.4 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Helvetica Volubi <suisuroru@blue-millennium.fun>
|
|
Date: Tue, 18 Nov 2025 23:26:27 +0800
|
|
Subject: [PATCH] Leaves: Do not reset placed block on exception & Do not
|
|
prevent block entity and entity crash at LevelChunk
|
|
|
|
Co-authored by: MC_XiaoHei <xiaohei.xor7@outlook.com>
|
|
As a part of : Leaves (https://github.com/LeavesMC/Leaves)
|
|
Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html)
|
|
|
|
diff --git a/net/minecraft/world/item/BlockItem.java b/net/minecraft/world/item/BlockItem.java
|
|
index a5d3caab2072b2c9bf8fdcbdb7c52c2dee16cfaf..4bb36d2965785fadf628a9bfac4fa2aa305aaf65 100644
|
|
--- a/net/minecraft/world/item/BlockItem.java
|
|
+++ b/net/minecraft/world/item/BlockItem.java
|
|
@@ -77,20 +77,22 @@ public class BlockItem extends Item {
|
|
BlockState blockState = level.getBlockState(clickedPos);
|
|
if (blockState.is(placementState.getBlock())) {
|
|
blockState = this.updateBlockStateFromTag(clickedPos, level, itemInHand, blockState);
|
|
+ // Leaves start - we do not need this
|
|
// Paper start - Reset placed block on exception
|
|
- try {
|
|
+ // try {
|
|
this.updateCustomBlockEntityTag(clickedPos, level, player, itemInHand, blockState);
|
|
updateBlockEntityComponents(level, clickedPos, itemInHand);
|
|
- } catch (Exception ex) {
|
|
- ((org.bukkit.craftbukkit.block.CraftBlockState) oldBukkitState).revertPlace();
|
|
- if (player instanceof ServerPlayer serverPlayer) {
|
|
- org.apache.logging.log4j.LogManager.getLogger().error("Player {} tried placing invalid block", player.getScoreboardName(), ex);
|
|
- serverPlayer.getBukkitEntity().kickPlayer("Packet processing error");
|
|
- return InteractionResult.FAIL;
|
|
- }
|
|
- throw ex; // Rethrow exception if not placed by a player
|
|
- }
|
|
+ // } catch (Exception ex) {
|
|
+ // ((org.bukkit.craftbukkit.block.CraftBlockState) oldBukkitState).revertPlace();
|
|
+ // if (player instanceof ServerPlayer serverPlayer) {
|
|
+ // org.apache.logging.log4j.LogManager.getLogger().error("Player {} tried placing invalid block", player.getScoreboardName(), ex);
|
|
+ // serverPlayer.getBukkitEntity().kickPlayer("Packet processing error");
|
|
+ // return InteractionResult.FAIL;
|
|
+ // }
|
|
+ // throw ex; // Rethrow exception if not placed by a player
|
|
+ // }
|
|
// Paper end - Reset placed block on exception
|
|
+ // Leaves end - we dot not need this
|
|
blockState.getBlock().setPlacedBy(level, clickedPos, blockState, player, itemInHand);
|
|
// CraftBukkit start
|
|
if (bukkitState != null) {
|
|
diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java
|
|
index 73dd8e67938fbfff745b189c06a93174976ba1bf..8e56c2237f9d49d0b09b62c0933283f77aaae679 100644
|
|
--- a/net/minecraft/world/level/chunk/LevelChunk.java
|
|
+++ b/net/minecraft/world/level/chunk/LevelChunk.java
|
|
@@ -1001,12 +1001,14 @@ public class LevelChunk extends ChunkAccess implements DebugValueSource, ca.spot
|
|
|
|
profilerFiller.pop();
|
|
} catch (Throwable var5) {
|
|
+ // Leaves start - do not prevent here
|
|
// Paper start - Prevent block entity and entity crashes
|
|
- final String msg = String.format("BlockEntity threw exception at %s:%s,%s,%s", LevelChunk.this.getLevel().getWorld().getName(), this.getPos().getX(), this.getPos().getY(), this.getPos().getZ());
|
|
- net.minecraft.server.MinecraftServer.LOGGER.error(msg, var5);
|
|
- net.minecraft.world.level.chunk.LevelChunk.this.level.getCraftServer().getPluginManager().callEvent(new com.destroystokyo.paper.event.server.ServerExceptionEvent(new com.destroystokyo.paper.exception.ServerInternalException(msg, var5))); // Paper - ServerExceptionEvent
|
|
- LevelChunk.this.removeBlockEntity(this.getPos());
|
|
+ // final String msg = String.format("BlockEntity threw exception at %s:%s,%s,%s", LevelChunk.this.getLevel().getWorld().getName(), this.getPos().getX(), this.getPos().getY(), this.getPos().getZ());
|
|
+ // net.minecraft.server.MinecraftServer.LOGGER.error(msg, var5);
|
|
+ // net.minecraft.world.level.chunk.LevelChunk.this.level.getCraftServer().getPluginManager().callEvent(new com.destroystokyo.paper.event.server.ServerExceptionEvent(new com.destroystokyo.paper.exception.ServerInternalException(msg, var5))); // Paper - ServerExceptionEvent
|
|
+ // LevelChunk.this.removeBlockEntity(this.getPos());
|
|
// Paper end - Prevent block entity and entity crashes
|
|
+ // Leaves end - do not prevent here
|
|
}
|
|
}
|
|
}
|