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 e9faf23ea..bdd1a5d52 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 @@ -7,6 +7,7 @@ import net.momirealms.craftengine.bukkit.plugin.injector.BukkitInjector; import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer; import net.momirealms.craftengine.bukkit.util.ItemUtils; import net.momirealms.craftengine.bukkit.util.Reflections; +import net.momirealms.craftengine.core.item.CustomItem; import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.item.ItemBuildContext; import net.momirealms.craftengine.core.item.ItemManager; @@ -497,7 +498,19 @@ public class RecipeEventListener implements Listener { return; } - Item newItem = plugin.itemManager().getCustomItem(left.id()).get().buildItem(ItemBuildContext.of(plugin.adapt(player), ContextHolder.EMPTY)); + Optional> customItemOptional = plugin.itemManager().getCustomItem(left.id()); + if (!customItemOptional.isPresent()) { + inventory.setResult(null); + return; + } + + CustomItem customItem = customItemOptional.get(); + if (!customItem.settings().canRepair()) { + inventory.setResult(null); + return; + } + + Item newItem = customItem.buildItem(ItemBuildContext.of(plugin.adapt(player), ContextHolder.EMPTY)); int remainingDurability = totalMaxDamage - totalDamage; int newItemDamage = Math.max(0, newItem.maxDamage().get() - remainingDurability); newItem.damage(newItemDamage); 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 c45c1d7aa..c8bf5c432 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 @@ -16,6 +16,7 @@ public class ItemSettings { Set tags = Set.of(); @Nullable EquipmentGeneration equipment; + boolean canRepair = true; private ItemSettings() {} @@ -39,6 +40,7 @@ public class ItemSettings { newSettings.fuelTime = settings.fuelTime; newSettings.tags = settings.tags; newSettings.equipment = settings.equipment; + newSettings.canRepair = settings.canRepair; return newSettings; } @@ -54,6 +56,10 @@ public class ItemSettings { return settings; } + public boolean canRepair() { + return canRepair; + } + public int fuelTime() { return fuelTime; } @@ -67,6 +73,11 @@ public class ItemSettings { return equipment; } + public ItemSettings canRepair(boolean canRepair) { + this.canRepair = canRepair; + return this; + } + public ItemSettings fuelTime(int fuelTime) { this.fuelTime = fuelTime; return this; @@ -98,6 +109,10 @@ public class ItemSettings { private static final Map FACTORIES = new HashMap<>(); static { + registerFactory("repairable", (value -> { + boolean bool = (boolean) value; + return settings -> settings.canRepair(bool); + })); registerFactory("fuel-time", (value -> { int intValue = MiscUtils.getAsInt(value); return settings -> settings.fuelTime(intValue);