From 56654b481fe61f475d4b110bb4754f044ee21b47 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Tue, 26 Aug 2025 22:12:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E8=BF=9B=E7=A6=81=E6=AD=A2=E9=99=84?= =?UTF-8?q?=E9=AD=94=E5=9C=A8=E9=93=81=E7=A0=A7=E5=90=88=E5=B9=B6=E9=87=8C?= =?UTF-8?q?=E7=9A=84=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../item/recipe/RecipeEventListener.java | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) 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()) {