From ab2d02afadeb137a41545c3074d6375ebbc331c9 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Sun, 7 Sep 2025 17:54:46 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E5=A4=8D1.21.2=E9=87=8D=E5=8F=A0i?= =?UTF-8?q?tem=20model=20json=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/pack/AbstractPackManager.java | 36 +++++++++++++++---- .../core/pack/model/LegacyOverridesModel.java | 2 +- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java b/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java index c4dab03ce..60433897e 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java @@ -1851,9 +1851,13 @@ public abstract class AbstractPackManager implements PackManager { } JsonArray overrides = new JsonArray(); for (LegacyOverridesModel legacyOverridesModel : legacyOverridesModels) { - overrides.add(legacyOverridesModel.toLegacyPredicateElement()); + if (legacyOverridesModel.hasPredicate()) { + overrides.add(legacyOverridesModel.toLegacyPredicateElement()); + } + } + if (!overrides.isEmpty()) { + itemJson.add("overrides", overrides); } - itemJson.add("overrides", overrides); } catch (IOException e) { this.plugin.logger().warn("Failed to read item json " + itemPath.toAbsolutePath()); continue; @@ -1861,13 +1865,31 @@ public abstract class AbstractPackManager implements PackManager { } else { // 如果路径不存在,则需要我们创建一个json对象,并对接model的路径 itemJson = new JsonObject(); - LegacyOverridesModel firstModel = legacyOverridesModels.getFirst(); - itemJson.addProperty("parent", firstModel.model()); - JsonArray overrides = new JsonArray(); + + LegacyOverridesModel firstBaseModel = null; + List overrideJsons = new ArrayList<>(); for (LegacyOverridesModel legacyOverridesModel : legacyOverridesModels) { - overrides.add(legacyOverridesModel.toLegacyPredicateElement()); + if (!legacyOverridesModel.hasPredicate()) { + if (firstBaseModel == null) { + firstBaseModel = legacyOverridesModel; + } + } else { + JsonObject legacyPredicateElement = legacyOverridesModel.toLegacyPredicateElement(); + overrideJsons.add(legacyPredicateElement); + } + } + if (firstBaseModel == null) { + firstBaseModel = legacyOverridesModels.getFirst(); + } + + itemJson.addProperty("parent", firstBaseModel.model()); + if (!overrideJsons.isEmpty()) { + JsonArray overrides = new JsonArray(); + for (JsonObject override : overrideJsons) { + overrides.add(override); + } + itemJson.add("overrides", overrides); } - itemJson.add("overrides", overrides); } try { Files.createDirectories(itemPath.getParent()); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/LegacyOverridesModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/LegacyOverridesModel.java index cbb4f5179..6f93c7777 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/LegacyOverridesModel.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/LegacyOverridesModel.java @@ -27,7 +27,7 @@ public class LegacyOverridesModel implements Comparable { } public boolean hasPredicate() { - return !predicate.isEmpty(); + return predicate != null && !predicate.isEmpty(); } public String model() { From 447e7c2a0a9cd5362e049421d511df41c167c645 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Sun, 7 Sep 2025 20:41:04 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BD=8E=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E4=BF=AE=E5=A4=8D=E9=85=8D=E6=96=B9=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bukkit/block/entity/SimpleStorageBlockEntity.java | 2 -- .../bukkit/entity/furniture/BukkitFurnitureManager.java | 1 - .../bukkit/entity/furniture/hitbox/CustomHitBox.java | 1 - .../bukkit/entity/furniture/hitbox/HappyGhastHitBox.java | 1 - .../bukkit/entity/furniture/hitbox/InteractionHitBox.java | 1 - .../craftengine/bukkit/item/factory/UniversalItemFactory.java | 1 - .../craftengine/bukkit/item/recipe/RecipeEventListener.java | 1 - .../resources/resources/default/configuration/templates.yml | 2 +- .../craftengine/core/block/AbstractBlockManager.java | 1 - .../craftengine/core/entity/furniture/HitBoxFactory.java | 1 - .../craftengine/core/item/modifier/DyedColorModifier.java | 1 - .../core/pack/model/generation/display/DisplayMeta.java | 1 - .../java/net/momirealms/craftengine/core/util/MiscUtils.java | 4 ---- gradle.properties | 4 ++-- 14 files changed, 3 insertions(+), 19 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/entity/SimpleStorageBlockEntity.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/entity/SimpleStorageBlockEntity.java index 742295096..c15a2d687 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/entity/SimpleStorageBlockEntity.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/entity/SimpleStorageBlockEntity.java @@ -20,7 +20,6 @@ import net.momirealms.craftengine.core.world.BlockPos; import net.momirealms.craftengine.core.world.Vec3d; import net.momirealms.sparrow.nbt.CompoundTag; import net.momirealms.sparrow.nbt.ListTag; -import net.momirealms.sparrow.nbt.Tag; import org.bukkit.Bukkit; import org.bukkit.GameEvent; import org.bukkit.GameMode; @@ -31,7 +30,6 @@ import org.bukkit.util.Vector; import org.jetbrains.annotations.Nullable; import java.util.List; -import java.util.Map; import java.util.Optional; public class SimpleStorageBlockEntity extends BlockEntity { diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/BukkitFurnitureManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/BukkitFurnitureManager.java index 3a8f53497..7cc579dce 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/BukkitFurnitureManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/BukkitFurnitureManager.java @@ -15,7 +15,6 @@ import net.momirealms.craftengine.core.entity.furniture.*; import net.momirealms.craftengine.core.plugin.config.Config; import net.momirealms.craftengine.core.sound.SoundData; import net.momirealms.craftengine.core.util.Key; -import net.momirealms.craftengine.core.util.MiscUtils; import net.momirealms.craftengine.core.util.ResourceConfigUtils; import net.momirealms.craftengine.core.util.VersionHelper; import net.momirealms.craftengine.core.world.WorldPosition; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/CustomHitBox.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/CustomHitBox.java index 763c9a654..f5b3d87c1 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/CustomHitBox.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/CustomHitBox.java @@ -8,7 +8,6 @@ import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.NetworkRefl import net.momirealms.craftengine.core.entity.furniture.*; import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; import net.momirealms.craftengine.core.util.Key; -import net.momirealms.craftengine.core.util.MiscUtils; import net.momirealms.craftengine.core.util.ResourceConfigUtils; import net.momirealms.craftengine.core.util.VersionHelper; import net.momirealms.craftengine.core.world.WorldPosition; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/HappyGhastHitBox.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/HappyGhastHitBox.java index fde041616..91754fd9b 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/HappyGhastHitBox.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/HappyGhastHitBox.java @@ -9,7 +9,6 @@ import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MEntityType import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.NetworkReflections; import net.momirealms.craftengine.core.entity.furniture.*; import net.momirealms.craftengine.core.util.Key; -import net.momirealms.craftengine.core.util.MiscUtils; import net.momirealms.craftengine.core.util.ResourceConfigUtils; import net.momirealms.craftengine.core.util.VersionHelper; import net.momirealms.craftengine.core.world.World; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/InteractionHitBox.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/InteractionHitBox.java index cd0d1a523..f8ae1852e 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/InteractionHitBox.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/hitbox/InteractionHitBox.java @@ -7,7 +7,6 @@ import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflect import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MEntityTypes; import net.momirealms.craftengine.core.entity.furniture.*; import net.momirealms.craftengine.core.util.Key; -import net.momirealms.craftengine.core.util.MiscUtils; import net.momirealms.craftengine.core.util.ResourceConfigUtils; import net.momirealms.craftengine.core.world.Vec3d; import net.momirealms.craftengine.core.world.WorldPosition; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/UniversalItemFactory.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/UniversalItemFactory.java index 172279912..83520ce08 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/UniversalItemFactory.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/UniversalItemFactory.java @@ -190,7 +190,6 @@ public class UniversalItemFactory extends BukkitItemFactory { @Override protected void maxDamage(LegacyItemWrapper item, Integer damage) { - throw new UnsupportedOperationException("This feature is only available on 1.20.5+"); } @Override 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 78bf6203f..0b9f047cd 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 @@ -318,7 +318,6 @@ public class RecipeEventListener implements Listener { return; } - if (firstCustom.isPresent()) { CustomItem firstCustomItem = firstCustom.get(); if (firstCustomItem.settings().canRepair() == Tristate.FALSE) { diff --git a/common-files/src/main/resources/resources/default/configuration/templates.yml b/common-files/src/main/resources/resources/default/configuration/templates.yml index 5760c9c18..8e6a62609 100644 --- a/common-files/src/main/resources/resources/default/configuration/templates.yml +++ b/common-files/src/main/resources/resources/default/configuration/templates.yml @@ -3142,7 +3142,7 @@ templates#recipes: category: building group: planks ingredients: - A: '#default:${wood_type}_logs' + - '#default:${wood_type}_logs' result: id: default:${wood_type}_planks count: 4 diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/AbstractBlockManager.java b/core/src/main/java/net/momirealms/craftengine/core/block/AbstractBlockManager.java index 2ecd81814..96916ea58 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/block/AbstractBlockManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/block/AbstractBlockManager.java @@ -5,7 +5,6 @@ import com.google.gson.JsonObject; import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import net.momirealms.craftengine.core.block.entity.render.BlockEntityElement; -import net.momirealms.craftengine.core.block.entity.render.BlockEntityRenderer; import net.momirealms.craftengine.core.block.entity.render.BlockEntityRendererConfig; import net.momirealms.craftengine.core.block.properties.Properties; import net.momirealms.craftengine.core.block.properties.Property; diff --git a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/HitBoxFactory.java b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/HitBoxFactory.java index 1f06c8846..6b85ae871 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/HitBoxFactory.java +++ b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/HitBoxFactory.java @@ -1,6 +1,5 @@ package net.momirealms.craftengine.core.entity.furniture; -import net.momirealms.craftengine.core.util.MiscUtils; import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.util.List; diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/modifier/DyedColorModifier.java b/core/src/main/java/net/momirealms/craftengine/core/item/modifier/DyedColorModifier.java index 73cc1c0ae..81e964094 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/modifier/DyedColorModifier.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/modifier/DyedColorModifier.java @@ -6,7 +6,6 @@ import net.momirealms.craftengine.core.item.ItemBuildContext; import net.momirealms.craftengine.core.item.ItemDataModifierFactory; import net.momirealms.craftengine.core.util.Color; import net.momirealms.craftengine.core.util.Key; -import net.momirealms.craftengine.core.util.MiscUtils; import net.momirealms.craftengine.core.util.ResourceConfigUtils; import org.jetbrains.annotations.Nullable; import org.joml.Vector3f; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/display/DisplayMeta.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/display/DisplayMeta.java index 8b9b51f2e..fb416275d 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/display/DisplayMeta.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/display/DisplayMeta.java @@ -1,6 +1,5 @@ package net.momirealms.craftengine.core.pack.model.generation.display; -import net.momirealms.craftengine.core.util.MiscUtils; import net.momirealms.craftengine.core.util.ResourceConfigUtils; import org.joml.Vector3f; diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/MiscUtils.java b/core/src/main/java/net/momirealms/craftengine/core/util/MiscUtils.java index df5b8e924..8e5a2864a 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/util/MiscUtils.java +++ b/core/src/main/java/net/momirealms/craftengine/core/util/MiscUtils.java @@ -1,9 +1,5 @@ package net.momirealms.craftengine.core.util; -import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; -import org.joml.Quaternionf; -import org.joml.Vector3f; - import java.util.*; public class MiscUtils { diff --git a/gradle.properties b/gradle.properties index 7f34bd693..73e1ce710 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx1G # Project settings # Rule: [major update].[feature update].[bug fix] -project_version=0.0.62.15 +project_version=0.0.62.16 config_version=45 lang_version=25 project_group=net.momirealms @@ -50,7 +50,7 @@ byte_buddy_version=1.17.5 ahocorasick_version=0.6.3 snake_yaml_version=2.5 anti_grief_version=0.20 -nms_helper_version=1.0.77 +nms_helper_version=1.0.79 evalex_version=3.5.0 reactive_streams_version=1.0.4 amazon_awssdk_version=2.33.1 From c205da109b909eb2659e88e6b6efa19cf288813c Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Sun, 7 Sep 2025 21:43:31 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=AE=8C=E5=96=84=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E7=89=A9=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../item/recipe/RecipeEventListener.java | 7 +++--- .../bukkit/plugin/BukkitCraftEngine.java | 12 +++++----- .../plugin/injector/RecipeInjector.java | 2 +- .../craftengine/core/item/ItemSettings.java | 22 ++++++++++++------- .../core/item/setting/Repairable.java | 20 +++++++++++++++++ gradle.properties | 2 +- 6 files changed, 47 insertions(+), 18 deletions(-) create mode 100644 core/src/main/java/net/momirealms/craftengine/core/item/setting/Repairable.java 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 0b9f047cd..ef458eacb 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,7 +261,6 @@ 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); @@ -271,6 +270,7 @@ public class RecipeEventListener implements Listener { 预处理会阻止一些不合理的原版材质造成的合并问题 */ private void preProcess(PrepareAnvilEvent event) { + if (event.getResult() == null) return; AnvilInventory inventory = event.getInventory(); ItemStack first = inventory.getFirstItem(); ItemStack second = inventory.getSecondItem(); @@ -320,7 +320,7 @@ public class RecipeEventListener implements Listener { if (firstCustom.isPresent()) { CustomItem firstCustomItem = firstCustom.get(); - if (firstCustomItem.settings().canRepair() == Tristate.FALSE) { + if (firstCustomItem.settings().repairable().anvilCombine() == Tristate.FALSE) { event.setResult(null); return; } @@ -372,7 +372,7 @@ public class RecipeEventListener implements Listener { Key firstId = wrappedFirst.id(); Optional> optionalCustomTool = wrappedFirst.getCustomItem(); // 物品无法被修复 - if (optionalCustomTool.isPresent() && optionalCustomTool.get().settings().canRepair() == Tristate.FALSE) { + if (optionalCustomTool.isPresent() && optionalCustomTool.get().settings().repairable().anvilRepair() == Tristate.FALSE) { return; } @@ -493,6 +493,7 @@ public class RecipeEventListener implements Listener { */ @SuppressWarnings("UnstableApiUsage") private void processRename(PrepareAnvilEvent event) { + if (event.getResult() == null) return; AnvilInventory inventory = event.getInventory(); ItemStack first = inventory.getFirstItem(); if (ItemStackUtils.isEmpty(first)) { diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java index b191553b8..e69ac269a 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java @@ -89,11 +89,13 @@ public class BukkitCraftEngine extends CraftEngine { super.logger = logger; super.platform = new BukkitPlatform(); super.scheduler = new BukkitSchedulerAdapter(this); - Class compatibilityClass = Objects.requireNonNull(ReflectionUtils.getClazz(COMPATIBILITY_CLASS), "Compatibility class not found"); - try { - super.compatibilityManager = (CompatibilityManager) Objects.requireNonNull(ReflectionUtils.getConstructor(compatibilityClass, 0)).newInstance(this); - } catch (ReflectiveOperationException e) { - logger().warn("Compatibility class could not be instantiated: " + compatibilityClass.getName()); + Class compatibilityClass = ReflectionUtils.getClazz(COMPATIBILITY_CLASS); + if (compatibilityClass != null) { + try { + super.compatibilityManager = (CompatibilityManager) Objects.requireNonNull(ReflectionUtils.getConstructor(compatibilityClass, 0)).newInstance(this); + } catch (ReflectiveOperationException e) { + logger().warn("Compatibility class could not be instantiated: " + compatibilityClass.getName()); + } } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/injector/RecipeInjector.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/injector/RecipeInjector.java index 1149aa9b9..d474df0f8 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/injector/RecipeInjector.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/injector/RecipeInjector.java @@ -240,7 +240,7 @@ public final class RecipeInjector { if (input2.count() != 1 || !isDamageableItem(input2)) return false; if (!input1.id().equals(input2.id())) return false; Optional> customItem = input1.getCustomItem(); - return customItem.isEmpty() || customItem.get().settings().canRepair() != Tristate.FALSE; + return customItem.isEmpty() || customItem.get().settings().repairable().craftingTable() != Tristate.FALSE; } private static boolean isDamageableItem(Item item) { 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 b53902ccf..03c355356 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 @@ -25,7 +25,7 @@ import java.util.stream.Collectors; public class ItemSettings { int fuelTime; Set tags = Set.of(); - Tristate canRepair = Tristate.UNDEFINED; + Repairable repairable = Repairable.UNDEFINED; List anvilRepairItems = List.of(); boolean renameable = true; boolean canPlaceRelatedVanillaBlock = false; @@ -89,7 +89,7 @@ public class ItemSettings { newSettings.fuelTime = settings.fuelTime; newSettings.tags = settings.tags; newSettings.equipment = settings.equipment; - newSettings.canRepair = settings.canRepair; + newSettings.repairable = settings.repairable; newSettings.anvilRepairItems = settings.anvilRepairItems; newSettings.renameable = settings.renameable; newSettings.canPlaceRelatedVanillaBlock = settings.canPlaceRelatedVanillaBlock; @@ -128,8 +128,8 @@ public class ItemSettings { return canPlaceRelatedVanillaBlock; } - public Tristate canRepair() { - return canRepair; + public Repairable repairable() { + return repairable; } public int fuelTime() { @@ -233,8 +233,8 @@ public class ItemSettings { return this; } - public ItemSettings canRepair(Tristate canRepair) { - this.canRepair = canRepair; + public ItemSettings repairable(Repairable repairable) { + this.repairable = repairable; return this; } @@ -315,8 +315,14 @@ public class ItemSettings { static { registerFactory("repairable", (value -> { - boolean bool = ResourceConfigUtils.getAsBoolean(value, "repairable"); - return settings -> settings.canRepair(bool ? Tristate.TRUE : Tristate.FALSE); + if (value instanceof Map mapValue) { + Map repairableData = ResourceConfigUtils.getAsMap(mapValue, "repairable"); + Repairable repairable = Repairable.fromMap(repairableData); + return settings -> settings.repairable(repairable); + } else { + boolean bool = ResourceConfigUtils.getAsBoolean(value, "repairable"); + return settings -> settings.repairable(bool ? Repairable.TRUE : Repairable.FALSE); + } })); registerFactory("enchantable", (value -> { boolean bool = ResourceConfigUtils.getAsBoolean(value, "enchantable"); diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/setting/Repairable.java b/core/src/main/java/net/momirealms/craftengine/core/item/setting/Repairable.java new file mode 100644 index 000000000..36ff26fe3 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/item/setting/Repairable.java @@ -0,0 +1,20 @@ +package net.momirealms.craftengine.core.item.setting; + +import net.momirealms.craftengine.core.util.ResourceConfigUtils; +import net.momirealms.craftengine.core.util.Tristate; + +import java.util.Map; + +public record Repairable(Tristate craftingTable, Tristate anvilRepair, Tristate anvilCombine) { + + public static final Repairable UNDEFINED = new Repairable(Tristate.UNDEFINED, Tristate.UNDEFINED, Tristate.UNDEFINED); + public static final Repairable TRUE = new Repairable(Tristate.TRUE, Tristate.TRUE, Tristate.TRUE); + public static final Repairable FALSE = new Repairable(Tristate.FALSE, Tristate.FALSE, Tristate.FALSE); + + public static Repairable fromMap(Map map) { + Tristate craftingTable = map.containsKey("crafting-table") ? Tristate.of(ResourceConfigUtils.getAsBoolean(map.get("crafting-table"), "crafting-table")) : Tristate.UNDEFINED; + Tristate anvilRepair = map.containsKey("anvil-repair") ? Tristate.of(ResourceConfigUtils.getAsBoolean(map.get("anvil-repair"), "anvil-repair")) : Tristate.UNDEFINED; + Tristate anvilCombine = map.containsKey("anvil-combine") ? Tristate.of(ResourceConfigUtils.getAsBoolean(map.get("anvil-combine"), "anvil-combine")) : Tristate.UNDEFINED; + return new Repairable(craftingTable, anvilRepair, anvilCombine); + } +} diff --git a/gradle.properties b/gradle.properties index 73e1ce710..90bc010eb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -50,7 +50,7 @@ byte_buddy_version=1.17.5 ahocorasick_version=0.6.3 snake_yaml_version=2.5 anti_grief_version=0.20 -nms_helper_version=1.0.79 +nms_helper_version=1.0.80 evalex_version=3.5.0 reactive_streams_version=1.0.4 amazon_awssdk_version=2.33.1