mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-12 04:06:52 +01:00
6e71f41536
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing CraftBukkit Changes: 65247583f SPIGOT-7857: Improve ItemMeta block data deserialization 05d80500d SPIGOT-7857: Fix spurious internal NBT tag when deserializing BlockStateMeta cebb58e9a SPIGOT-7804: Fix written book serialization efcdd5d38 SPIGOT-7794: Cancelling InventoryItemMoveEvent destroys items b568ba572 SPIGOT-7789: Fix NPE in CraftMetaFirework applyToItem f057cf449 Remove outdated build delay Spigot Changes: f6a48054 SPIGOT-7835: Fix issue with custom hopper settings bb63b137 Rebuild patches e1142b4d Rebuild patches
40 lines
2.7 KiB
Diff
40 lines
2.7 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Nassim Jahnke <nassim@njahnke.dev>
|
|
Date: Fri, 7 Jan 2022 11:45:15 +0100
|
|
Subject: [PATCH] Reset placed block on exception
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/item/BlockItem.java b/src/main/java/net/minecraft/world/item/BlockItem.java
|
|
index cee3f1200af602b5dfd0b27d05eb01826c5bbb1d..7d76cdc59984b156628273c8357485eb10046007 100644
|
|
--- a/src/main/java/net/minecraft/world/item/BlockItem.java
|
|
+++ b/src/main/java/net/minecraft/world/item/BlockItem.java
|
|
@@ -77,6 +77,7 @@ public class BlockItem extends Item {
|
|
if (this instanceof PlaceOnWaterBlockItem || this instanceof SolidBucketItem) {
|
|
blockstate = org.bukkit.craftbukkit.block.CraftBlockStates.getBlockState(blockactioncontext1.getLevel(), blockactioncontext1.getClickedPos());
|
|
}
|
|
+ final org.bukkit.block.BlockState oldBlockstate = blockstate != null ? blockstate : org.bukkit.craftbukkit.block.CraftBlockStates.getBlockState(blockactioncontext1.getLevel(), blockactioncontext1.getClickedPos()); // Paper - Reset placed block on exception
|
|
// CraftBukkit end
|
|
|
|
if (iblockdata == null) {
|
|
@@ -92,8 +93,20 @@ public class BlockItem extends Item {
|
|
|
|
if (iblockdata1.is(iblockdata.getBlock())) {
|
|
iblockdata1 = this.updateBlockStateFromTag(blockposition, world, itemstack, iblockdata1);
|
|
+ // Paper start - Reset placed block on exception
|
|
+ try {
|
|
this.updateCustomBlockEntityTag(blockposition, world, entityhuman, itemstack, iblockdata1);
|
|
BlockItem.updateBlockEntityComponents(world, blockposition, itemstack);
|
|
+ } catch (Exception e) {
|
|
+ oldBlockstate.update(true, false);
|
|
+ if (entityhuman instanceof ServerPlayer player) {
|
|
+ org.apache.logging.log4j.LogManager.getLogger().error("Player {} tried placing invalid block", player.getScoreboardName(), e);
|
|
+ player.getBukkitEntity().kickPlayer("Packet processing error");
|
|
+ return InteractionResult.FAIL;
|
|
+ }
|
|
+ throw e; // Rethrow exception if not placed by a player
|
|
+ }
|
|
+ // Paper end - Reset placed block on exception
|
|
iblockdata1.getBlock().setPlacedBy(world, blockposition, iblockdata1, entityhuman, itemstack);
|
|
// CraftBukkit start
|
|
if (blockstate != null) {
|