diff --git a/eco-core/core-nms/v1_16_R1/src/main/java/com/willfp/ecoenchants/proxy/v1_16_R1/enchants/EcoCraftEnchantment.java b/eco-core/core-nms/v1_16_R1/src/main/java/com/willfp/ecoenchants/proxy/v1_16_R1/enchants/EcoCraftEnchantment.java index 6a5ef5d5..ae0a2ad9 100644 --- a/eco-core/core-nms/v1_16_R1/src/main/java/com/willfp/ecoenchants/proxy/v1_16_R1/enchants/EcoCraftEnchantment.java +++ b/eco-core/core-nms/v1_16_R1/src/main/java/com/willfp/ecoenchants/proxy/v1_16_R1/enchants/EcoCraftEnchantment.java @@ -1,5 +1,6 @@ package com.willfp.ecoenchants.proxy.v1_16_R1.enchants; +import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.support.vanilla.VanillaEnchantmentMetadata; import net.minecraft.server.v1_16_R1.Enchantment; import org.bukkit.NamespacedKey; @@ -25,6 +26,11 @@ public class EcoCraftEnchantment extends CraftEnchantment { return metadata.getMaxLevel() == null ? this.getHandle().getMaxLevel() : metadata.getMaxLevel(); } + @Override + public boolean conflictsWith(@NotNull final org.bukkit.enchantments.Enchantment other) { + return EcoEnchants.getFromEnchantment(other) == null ? super.conflictsWith(other) : other.conflictsWith(other); + } + public void register() { try { Field byIdField = org.bukkit.enchantments.Enchantment.class.getDeclaredField("byKey"); diff --git a/eco-core/core-nms/v1_16_R2/src/main/java/com/willfp/ecoenchants/proxy/v1_16_R2/enchants/EcoCraftEnchantment.java b/eco-core/core-nms/v1_16_R2/src/main/java/com/willfp/ecoenchants/proxy/v1_16_R2/enchants/EcoCraftEnchantment.java index be2f6cc2..781c48a2 100644 --- a/eco-core/core-nms/v1_16_R2/src/main/java/com/willfp/ecoenchants/proxy/v1_16_R2/enchants/EcoCraftEnchantment.java +++ b/eco-core/core-nms/v1_16_R2/src/main/java/com/willfp/ecoenchants/proxy/v1_16_R2/enchants/EcoCraftEnchantment.java @@ -1,5 +1,6 @@ package com.willfp.ecoenchants.proxy.v1_16_R2.enchants; +import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.support.vanilla.VanillaEnchantmentMetadata; import net.minecraft.server.v1_16_R2.Enchantment; import org.bukkit.NamespacedKey; @@ -25,6 +26,11 @@ public class EcoCraftEnchantment extends CraftEnchantment { return metadata.getMaxLevel() == null ? this.getHandle().getMaxLevel() : metadata.getMaxLevel(); } + @Override + public boolean conflictsWith(@NotNull final org.bukkit.enchantments.Enchantment other) { + return EcoEnchants.getFromEnchantment(other) == null ? super.conflictsWith(other) : other.conflictsWith(other); + } + public void register() { try { Field byIdField = org.bukkit.enchantments.Enchantment.class.getDeclaredField("byKey"); diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/support/merging/anvil/AnvilMerge.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/support/merging/anvil/AnvilMerge.java index 219a3480..05b5b37f 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/support/merging/anvil/AnvilMerge.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/support/merging/anvil/AnvilMerge.java @@ -7,6 +7,8 @@ import com.willfp.ecoenchants.enchantments.EcoEnchant; import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.meta.EnchantmentTarget; import com.willfp.ecoenchants.enchantments.meta.EnchantmentType; +import com.willfp.ecoenchants.proxy.proxies.FastGetEnchantsProxy; +import com.willfp.ecoenchants.util.ProxyUtils; import lombok.experimental.UtilityClass; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; @@ -120,22 +122,10 @@ public class AnvilMerge { return new Pair<>(null, null); } - HashMap leftEnchants = new HashMap<>(); - HashMap rightEnchants = new HashMap<>(); - Map outEnchants = new HashMap<>(); - if (left.getItemMeta() instanceof EnchantmentStorageMeta) { - leftEnchants.putAll(((EnchantmentStorageMeta) left.getItemMeta()).getStoredEnchants()); - } else { - leftEnchants.putAll(left.getItemMeta().getEnchants()); - } - - if (right.getItemMeta() instanceof EnchantmentStorageMeta) { - rightEnchants.putAll(((EnchantmentStorageMeta) right.getItemMeta()).getStoredEnchants()); - } else { - rightEnchants.putAll(right.getItemMeta().getEnchants()); - } + HashMap leftEnchants = new HashMap<>(ProxyUtils.getProxy(FastGetEnchantsProxy.class).getEnchantmentsOnItem(left, true)); + HashMap rightEnchants = new HashMap<>(ProxyUtils.getProxy(FastGetEnchantsProxy.class).getEnchantmentsOnItem(right, true)); leftEnchants.forEach(((enchantment, integer) -> { int level = integer;