From 00b95a8b43aec1ace0e6d76fe72966922692bec0 Mon Sep 17 00:00:00 2001 From: XiaoMoMi <972454774@qq.com> Date: Wed, 8 Oct 2025 14:42:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9B=BF=E4=BB=A3=E9=85=8D?= =?UTF-8?q?=E6=96=B9=E7=9A=84=E9=85=8D=E7=BD=AE=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/item/AbstractItemManager.java | 20 +++++++++---------- .../craftengine/core/item/ItemSettings.java | 12 +++++++++++ 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java b/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java index 3346e12ca..82c46f8cb 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java @@ -208,6 +208,15 @@ public abstract class AbstractItemManager extends AbstractModelGenerator impl for (Key tag : tags) { this.customItemTags.computeIfAbsent(tag, k -> new ArrayList<>()).add(customItem.uniqueId()); } + // ingredient substitutes + List substitutes = customItem.settings().ingredientSubstitutes(); + if (!substitutes.isEmpty()) { + for (Key key : substitutes) { + if (VANILLA_ITEMS.contains(key)) { + AbstractItemManager.this.ingredientSubstitutes.computeIfAbsent(key, k -> new ArrayList<>()).add(customItem.uniqueId()); + } + } + } } return true; } @@ -611,17 +620,6 @@ public abstract class AbstractItemManager extends AbstractModelGenerator impl AbstractItemManager.this.plugin.itemBrowserManager().addExternalCategoryMember(id, MiscUtils.getAsStringList(section.get("category")).stream().map(Key::of).toList()); } - // 替代配方材料 - if (section.containsKey("ingredient-substitute")) { - List substitutes = MiscUtils.getAsStringList(section.get("ingredient-substitute")); - for (String substitute : substitutes) { - Key key = Key.of(substitute); - if (VANILLA_ITEMS.contains(key)) { - AbstractItemManager.this.ingredientSubstitutes.computeIfAbsent(key, k -> new ArrayList<>()).add(uniqueId); - } - } - } - /* * ======================== * diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/ItemSettings.java b/core/src/main/java/net/momirealms/craftengine/core/item/ItemSettings.java index 076316376..4d86ee23f 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/ItemSettings.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/ItemSettings.java @@ -38,6 +38,7 @@ public class ItemSettings { boolean canEnchant = true; float compostProbability= 0.5f; boolean respectRepairableComponent = false; + List ingredientSubstitutes = List.of(); @Nullable ItemEquipment equipment; @Nullable @@ -104,6 +105,7 @@ public class ItemSettings { newSettings.respectRepairableComponent = settings.respectRepairableComponent; newSettings.dyeColor = settings.dyeColor; newSettings.fireworkColor = settings.fireworkColor; + newSettings.ingredientSubstitutes = settings.ingredientSubstitutes; return newSettings; } @@ -159,6 +161,10 @@ public class ItemSettings { return respectRepairableComponent; } + public List ingredientSubstitutes() { + return ingredientSubstitutes; + } + @Nullable public FoodData foodData() { return foodData; @@ -207,6 +213,11 @@ public class ItemSettings { return this; } + public ItemSettings ingredientSubstitutes(List substitutes) { + this.ingredientSubstitutes = substitutes; + return this; + } + public ItemSettings dyeColor(Color color) { this.dyeColor = color; return this; @@ -458,6 +469,7 @@ public class ItemSettings { }).toList(); return settings -> settings.invulnerable(list); })); + registerFactory("ingredient-substitute", (value -> settings -> settings.ingredientSubstitutes(MiscUtils.getAsStringList(value).stream().map(Key::of).toList()))); } private static void registerFactory(String id, ItemSettings.Modifier.Factory factory) {