From 841d63423076b815500380a896f45fbb9c1cb19d Mon Sep 17 00:00:00 2001 From: Pedro <3602279+Doc94@users.noreply.github.com> Date: Sat, 17 May 2025 10:13:08 -0400 Subject: [PATCH] Fix ItemStack#addUnsafeEnchantment ignored for missing enchantment component (#12549) --- .../enchantment/EnchantmentHelper.java.patch | 18 ++++++++++++++++++ .../craftbukkit/inventory/CraftItemStack.java | 4 +--- 2 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 paper-server/patches/sources/net/minecraft/world/item/enchantment/EnchantmentHelper.java.patch diff --git a/paper-server/patches/sources/net/minecraft/world/item/enchantment/EnchantmentHelper.java.patch b/paper-server/patches/sources/net/minecraft/world/item/enchantment/EnchantmentHelper.java.patch new file mode 100644 index 0000000000..beb8db3ee9 --- /dev/null +++ b/paper-server/patches/sources/net/minecraft/world/item/enchantment/EnchantmentHelper.java.patch @@ -0,0 +1,18 @@ +--- a/net/minecraft/world/item/enchantment/EnchantmentHelper.java ++++ b/net/minecraft/world/item/enchantment/EnchantmentHelper.java +@@ -52,8 +_,14 @@ + } + + public static ItemEnchantments updateEnchantments(ItemStack stack, Consumer updater) { ++ // Paper start - allowing updating enchantments on items without component ++ return updateEnchantments(stack, updater, false); ++ } ++ ++ public static ItemEnchantments updateEnchantments(ItemStack stack, Consumer updater, final boolean createComponentIfMissing) { ++ // Paper end - allowing updating enchantments on items without component + DataComponentType componentType = getComponentType(stack); +- ItemEnchantments itemEnchantments = stack.get(componentType); ++ ItemEnchantments itemEnchantments = createComponentIfMissing ? stack.getOrDefault(componentType, ItemEnchantments.EMPTY) : stack.get(componentType); // Paper - allowing updating enchantments on items without component + if (itemEnchantments == null) { + return ItemEnchantments.EMPTY; + } else { diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java b/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java index 1aa17423f4..02109a3ca5 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java @@ -268,15 +268,13 @@ public final class CraftItemStack extends ItemStack { public void addUnsafeEnchantment(Enchantment enchant, int level) { Preconditions.checkArgument(enchant != null, "Enchantment cannot be null"); - // Paper start if (this.handle == null) { return; } EnchantmentHelper.updateEnchantments(this.handle, mutable -> { // data component api doesn't really support mutable things once already set yet mutable.set(CraftEnchantment.bukkitToMinecraftHolder(enchant), level); - }); - // Paper end + }, true); } @Override