diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/RecipeEventListener.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/RecipeEventListener.java index 1446cf0c4..251f73c61 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/RecipeEventListener.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/RecipeEventListener.java @@ -261,6 +261,7 @@ public class RecipeEventListener implements Listener { @EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST) public void onAnvilEvent(PrepareAnvilEvent event) { + if (event.getResult() == null) return; preProcess(event); processRepairable(event); processRename(event); @@ -317,12 +318,24 @@ public class RecipeEventListener implements Listener { return; } - // 如果禁止在铁砧使用两个相同物品修复 - firstCustom.ifPresent(it -> { - if (it.settings().canRepair() == Tristate.FALSE) { + + if (firstCustom.isPresent()) { + CustomItem firstCustomItem = firstCustom.get(); + if (firstCustomItem.settings().canRepair() == Tristate.FALSE) { event.setResult(null); + return; } - }); + + Item wrappedResult = BukkitItemManager.instance().wrap(event.getResult()); + if (!firstCustomItem.settings().canEnchant()) { + Object previousEnchantment = wrappedFirst.getExactComponent(ComponentTypes.ENCHANTMENTS); + if (previousEnchantment != null) { + wrappedResult.setExactComponent(ComponentTypes.ENCHANTMENTS, previousEnchantment); + } else { + wrappedResult.resetComponent(ComponentTypes.ENCHANTMENTS); + } + } + } } /* @@ -486,9 +499,6 @@ public class RecipeEventListener implements Listener { if (ItemStackUtils.isEmpty(first)) { return; } - if (event.getResult() == null) { - return; - } Item wrappedFirst = BukkitItemManager.instance().wrap(first); wrappedFirst.getCustomItem().ifPresent(item -> { if (!item.settings().renameable()) {