From ff4e1754c578471d37f6368dd417bfb3296b1977 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Fri, 13 Jun 2025 17:59:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=B0=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../default/configuration/templates.yml | 18 +++++++++++++ .../core/item/AbstractItemManager.java | 26 ++++++++++++------- .../craftengine/core/item/ItemSettings.java | 15 +++++++++++ gradle.properties | 2 +- 4 files changed, 50 insertions(+), 11 deletions(-) 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 73324b0ed..a17ac404a 100644 --- a/common-files/src/main/resources/resources/default/configuration/templates.yml +++ b/common-files/src/main/resources/resources/default/configuration/templates.yml @@ -1,5 +1,23 @@ # This file contains some useful template data. If you have good ideas, you are welcome to contribute your template! +# These templates let you ditch the real custom_model_data on the server side. +# Instead, we use client side components sent via packets to control how items look. +templates#client_bound_model: + default:item/client_bound_custom_model_data: + custom-model-data: "${custom_model_data}" + data: + remove-components: + - minecraft:custom_model_data + client-bound-data: + custom-model-data: "${custom_model_data}" + default:item/client_bound_item_model: + item-model: "${item_model}" + data: + remove-components: + - minecraft:item_model + client-bound-data: + item-model: "${item_model}" + # blocks templates#models#block: # template: default:model/cube_all 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 39d2189ef..babf72df8 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 @@ -478,6 +478,10 @@ public abstract class AbstractItemManager extends AbstractModelGenerator impl boolean value = TypeUtils.checkType(obj, Boolean.class); return new UnbreakableModifier<>(value); }, "unbreakable"); + registerDataType((obj) -> { + int customModelData = ResourceConfigUtils.getAsInt(obj, "custom-model-data"); + return new CustomModelDataModifier<>(customModelData); + }, "custom-model-data"); registerDataType((obj) -> { Map data = MiscUtils.castToMap(obj, false); List enchantments = new ArrayList<>(); @@ -494,6 +498,14 @@ public abstract class AbstractItemManager extends AbstractModelGenerator impl String pattern = data.get("pattern").toString().toLowerCase(Locale.ENGLISH); return new TrimModifier<>(material, pattern); }, "trim"); + registerDataType((obj) -> { + Map data = MiscUtils.castToMap(obj, false); + Map arguments = new HashMap<>(); + for (Map.Entry entry : data.entrySet()) { + arguments.put(entry.getKey(), TextProviders.fromString(entry.getValue().toString())); + } + return new ArgumentModifier<>(arguments); + }, "args", "argument", "arguments"); if (VersionHelper.isOrAbove1_20_5()) { registerDataType((obj) -> { Map data = MiscUtils.castToMap(obj, false); @@ -521,21 +533,15 @@ public abstract class AbstractItemManager extends AbstractModelGenerator impl String id = obj.toString(); return new TooltipStyleModifier<>(Key.of(id)); }, "tooltip-style"); - } - if (VersionHelper.isOrAbove1_21_2()) { registerDataType((obj) -> { Map data = MiscUtils.castToMap(obj, false); return new EquippableModifier<>(EquipmentData.fromMap(data)); }, "equippable"); + registerDataType((obj) -> { + String id = obj.toString(); + return new ItemModelModifier<>(Key.of(id)); + }, "item-model"); } - registerDataType((obj) -> { - Map data = MiscUtils.castToMap(obj, false); - Map arguments = new HashMap<>(); - for (Map.Entry entry : data.entrySet()) { - arguments.put(entry.getKey(), TextProviders.fromString(entry.getValue().toString())); - } - return new ArgumentModifier<>(arguments); - }, "args", "argument", "arguments"); } protected void processModelRecursively( 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 7136f8b50..ea6e079d4 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 @@ -36,6 +36,7 @@ public class ItemSettings { Key consumeReplacement = null; Key craftRemainder = null; List invulnerable = List.of(); + boolean canEnchant = true; private ItemSettings() {} @@ -75,6 +76,7 @@ public class ItemSettings { newSettings.consumeReplacement = settings.consumeReplacement; newSettings.craftRemainder = settings.craftRemainder; newSettings.invulnerable = settings.invulnerable; + newSettings.canEnchant = settings.canEnchant; return newSettings; } @@ -118,6 +120,10 @@ public class ItemSettings { return dyeable; } + public boolean canEnchant() { + return canEnchant; + } + public List repairItems() { return anvilRepairItems; } @@ -171,6 +177,11 @@ public class ItemSettings { return this; } + public ItemSettings canEnchant(boolean canEnchant) { + this.canEnchant = canEnchant; + return this; + } + public ItemSettings renameable(boolean renameable) { this.renameable = renameable; return this; @@ -241,6 +252,10 @@ public class ItemSettings { boolean bool = (boolean) value; return settings -> settings.canRepair(bool); })); + registerFactory("enchantable", (value -> { + boolean bool = (boolean) value; + return settings -> settings.canEnchant(bool); + })); registerFactory("renameable", (value -> { boolean bool = (boolean) value; return settings -> settings.renameable(bool); diff --git a/gradle.properties b/gradle.properties index ef3e8ef9d..5dec2ecae 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.57.1 +project_version=0.0.57.2 config_version=37 lang_version=16 project_group=net.momirealms