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 6e2035f84..82467401f 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 @@ -407,8 +407,12 @@ public class RecipeEventListener implements Listener { } boolean hasResult = true; - + int realDurabilityPerItem = (int) (repairItem.amount() + repairItem.percent() * maxDamage); + if (realDurabilityPerItem == 0) { + return; + } + int consumeMaxAmount = damage / realDurabilityPerItem + 1; int actualConsumedAmount = Math.min(consumeMaxAmount, wrappedSecond.count()); int actualRepairAmount = actualConsumedAmount * realDurabilityPerItem; 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 08e4310c5..186588e32 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 @@ -109,7 +109,7 @@ public class ItemSettings { newSettings.dyeColor = settings.dyeColor; newSettings.fireworkColor = settings.fireworkColor; newSettings.ingredientSubstitutes = settings.ingredientSubstitutes; - newSettings.customData = settings.customData; + newSettings.customData = new IdentityHashMap<>(settings.customData); return newSettings; } @@ -360,14 +360,11 @@ public class ItemSettings { return settings -> settings.renameable(bool); })); registerFactory("anvil-repair-item", (value -> { - @SuppressWarnings("unchecked") - List> materials = (List>) value; - List anvilRepairItemList = new ArrayList<>(); - for (Map material : materials) { + List anvilRepairItemList = ResourceConfigUtils.parseConfigAsList(value, material -> { int amount = ResourceConfigUtils.getAsInt(material.getOrDefault("amount", 0), "amount"); double percent = ResourceConfigUtils.getAsDouble(material.getOrDefault("percent", 0), "percent"); - anvilRepairItemList.add(new AnvilRepairItem(MiscUtils.getAsStringList(material.get("target")), amount, percent)); - } + return new AnvilRepairItem(MiscUtils.getAsStringList(material.get("target")), amount, percent); + }); return settings -> settings.repairItems(anvilRepairItemList); })); registerFactory("fuel-time", (value -> {