From 9680ad8e578abc81fd92f1bb2b30357eab103057 Mon Sep 17 00:00:00 2001 From: granny Date: Thu, 6 Feb 2025 14:07:50 -0800 Subject: [PATCH] [ci skip] clean up unsafe enchants diff --- .../world/inventory/AnvilMenu.java.patch | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/inventory/AnvilMenu.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/inventory/AnvilMenu.java.patch index 71cd41ca4..f97d7fb8e 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/inventory/AnvilMenu.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/inventory/AnvilMenu.java.patch @@ -64,7 +64,7 @@ ItemStack itemStack = item.copy(); ItemStack item1 = this.inputSlots.getItem(1); ItemEnchantments.Mutable mutable = new ItemEnchantments.Mutable(EnchantmentHelper.getEnchantmentsForCrafting(itemStack)); -@@ -191,23 +_,36 @@ +@@ -191,23 +_,34 @@ int intValue = entry.getIntValue(); intValue = level == intValue ? intValue + 1 : Math.max(intValue, level); Enchantment enchantment = holder.value(); @@ -77,25 +77,21 @@ canEnchant = true; } -- for (Holder holder1 : mutable.keySet()) { -+ // Purpur start - Config to allow unsafe enchants -+ java.util.Iterator> mutableIterator = mutable.keySet().iterator(); -+ while (mutableIterator.hasNext()) { -+ Holder holder1 = mutableIterator.next(); -+ // Purpur end - Config to allow unsafe enchants ++ java.util.Set> removedEnchantments = new java.util.HashSet<>(); // Purpur - Config to allow unsafe enchants + for (Holder holder1 : mutable.keySet()) { if (!holder1.equals(holder) && !Enchantment.areCompatible(holder, holder1)) { - canEnchant = false; -- i++; -+ canEnchant1 = this.canDoUnsafeEnchants || org.purpurmc.purpur.PurpurConfig.allowIncompatibleEnchants; // Purpur - Anvil API // Purpur - flag3 -> canEnchant1 - Config to allow unsafe enchants ++ canEnchant1 = this.canDoUnsafeEnchants || org.purpurmc.purpur.PurpurConfig.allowIncompatibleEnchants; // Purpur - Anvil API // Purpur - canEnchant -> canEnchant1 - Config to allow unsafe enchants + // Purpur start - Config to allow unsafe enchants + if (!canEnchant1 && org.purpurmc.purpur.PurpurConfig.replaceIncompatibleEnchants) { -+ mutableIterator.remove(); // replace current enchant with the incompatible one trying to be applied // TODO: is this needed? ++ removedEnchantments.add(holder1); + canEnchant1 = true; + } + // Purpur end - Config to allow unsafe enchants -+ ++i; + i++; } } ++ mutable.removeIf(removedEnchantments::contains); // Purpur - Config to allow unsafe enchants - if (!canEnchant) { + if (!canEnchant || !canEnchant1) { // Purpur - Config to allow unsafe enchants