From 4c9058528f06b28f45278c079199d0beacec7a49 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Mon, 24 Nov 2025 01:14:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=98=B2=E5=91=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../craftengine/core/item/ItemSettings.java | 3 +++ .../core/item/equipment/AbstractEquipment.java | 4 ++-- .../item/equipment/ComponentBasedEquipment.java | 16 ++++++++++++++++ .../core/pack/AbstractPackManager.java | 5 +++++ 4 files changed, 26 insertions(+), 2 deletions(-) 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 2800dcfc5..08e4310c5 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 @@ -399,6 +399,9 @@ public class ItemSettings { registerFactory("equippable", (value -> { Map args = MiscUtils.castToMap(value, false); EquipmentData data = EquipmentData.fromMap(args); + if (data.assetId() == null) { + throw new IllegalArgumentException("Please move 'equippable' option to 'data' section."); + } ComponentBasedEquipment componentBasedEquipment = ComponentBasedEquipment.FACTORY.create(data.assetId(), args); ((AbstractItemManager) CraftEngine.instance().itemManager()).addOrMergeEquipment(componentBasedEquipment); ItemEquipment itemEquipment = new ItemEquipment(Tristate.FALSE, data, componentBasedEquipment); diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/equipment/AbstractEquipment.java b/core/src/main/java/net/momirealms/craftengine/core/item/equipment/AbstractEquipment.java index bc315c190..7d0428166 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/equipment/AbstractEquipment.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/equipment/AbstractEquipment.java @@ -8,11 +8,11 @@ public abstract class AbstractEquipment implements Equipment { protected final Key assetId; protected AbstractEquipment(Key assetId) { - this.assetId = Objects.requireNonNull(assetId, "assetId cannot be null"); + this.assetId = Objects.requireNonNull(assetId, "asset-id cannot be null"); } @Override public Key assetId() { - return assetId; + return this.assetId; } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/equipment/ComponentBasedEquipment.java b/core/src/main/java/net/momirealms/craftengine/core/item/equipment/ComponentBasedEquipment.java index f60d497de..079732a56 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/equipment/ComponentBasedEquipment.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/equipment/ComponentBasedEquipment.java @@ -143,5 +143,21 @@ public class ComponentBasedEquipment extends AbstractEquipment implements Suppli return dyeData; } } + + @Override + public @NotNull String toString() { + return "Layer{" + + "texture='" + texture + '\'' + + ", data=" + data + + ", usePlayerTexture=" + usePlayerTexture + + '}'; + } + } + + @Override + public String toString() { + return "ComponentBasedEquipment{" + + "layers=" + this.layers + + '}'; } } 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 a5429d220..1aa740527 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 @@ -1915,6 +1915,11 @@ public abstract class AbstractPackManager implements PackManager { private void processComponentBasedEquipment(ComponentBasedEquipment componentBasedEquipment, Path generatedPackPath) { Key assetId = componentBasedEquipment.assetId(); + if (assetId == null) { + this.plugin.logger().severe("Asset id is null for equipment " + componentBasedEquipment); + return; + } + if (Config.packMaxVersion().isAtOrAbove(MinecraftVersions.V1_21_4)) { Path equipmentPath = generatedPackPath .resolve("assets")