diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AutoDisenchanter.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AutoDisenchanter.java index c14aa32810..61f38c5b75 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AutoDisenchanter.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AutoDisenchanter.java @@ -2,6 +2,7 @@ import java.util.HashMap; import java.util.Map; +import java.util.logging.Level; import javax.annotation.Nullable; import javax.annotation.ParametersAreNonnullByDefault; @@ -20,6 +21,8 @@ import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItem; import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack; import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType; +import io.github.thebusybiscuit.slimefun4.implementation.Slimefun; + import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; @@ -128,16 +131,25 @@ private void transferEnchantments(ItemStack item, ItemStack book, Map entry : enchantments.entrySet()) { - item.removeEnchantment(entry.getKey()); - meta.addStoredEnchant(entry.getKey(), entry.getValue(), true); + Enchantment enchantmentToTransfer = entry.getKey(); + boolean wasEnchantmentRemoved = itemMeta.removeEnchant(enchantmentToTransfer); + boolean stillHasEnchantment = itemMeta.getEnchants().containsKey(enchantmentToTransfer); + + // Prevent future enchantment duplication (#3837) + if (wasEnchantmentRemoved && !stillHasEnchantment) { + meta.addStoredEnchant(enchantmentToTransfer, entry.getValue(), true); + } else { + // Get Enchantment Name + Slimefun.logger().log(Level.SEVERE, "AutoDisenchanter has failed to remove enchantment \"{0}\"", enchantmentToTransfer.getKey().getKey()); + } } + item.setItemMeta(itemMeta); book.setItemMeta(meta); }