From 45859fd661b917cc88994a68bc3f840fbf461718 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Sat, 15 Mar 2025 22:50:57 +0800 Subject: [PATCH] fix trim --- .../resources/default/configuration/items.yml | 117 ++++++++++++++++-- .../models/block/custom/fairy_flower_1.json | 1 - .../minecraft/models/item/custom/bench.json | 4 +- .../models/item/custom/table_lamp.json | 4 +- .../models/item/custom/wooden_chair.json | 111 ++++++++--------- .../bukkit/item/BukkitItemManager.java | 51 +++++--- .../select/TrimMaterialSelectProperty.java | 12 +- 7 files changed, 211 insertions(+), 89 deletions(-) diff --git a/bukkit-loader/src/main/resources/resources/default/configuration/items.yml b/bukkit-loader/src/main/resources/resources/default/configuration/items.yml index b5db59a86..54c02a507 100644 --- a/bukkit-loader/src/main/resources/resources/default/configuration/items.yml +++ b/bukkit-loader/src/main/resources/resources/default/configuration/items.yml @@ -153,19 +153,122 @@ templates: data: display-name: "<#FF8C00>" tooltip-style: minecraft:topaz - model: - type: minecraft:model - path: "minecraft:item/custom/topaz_{part}" - generation: - parent: "minecraft:item/generated" - textures: - "layer0": "minecraft:item/custom/topaz_{part}" settings: equippable: slot: "{slot}" asset-id: topaz humanoid: "minecraft:topaz" humanoid-leggings: "minecraft:topaz" + model: + type: minecraft:select + property: minecraft:trim_material + fallback: + type: minecraft:model + path: "minecraft:item/custom/topaz_{part}" + generation: + parent: "minecraft:item/generated" + textures: + "layer0": "minecraft:item/custom/topaz_{part}" + cases: + - when: minecraft:quartz + model: + type: minecraft:model + path: "minecraft:item/custom/topaz_{part}_quartz_trim" + generation: + parent: "minecraft:item/generated" + textures: + "layer0": "minecraft:item/custom/topaz_{part}" + "layer1": "minecraft:trims/items/{part}_trim_quartz" + - when: minecraft:iron + model: + type: minecraft:model + path: "minecraft:item/custom/topaz_{part}_iron_trim" + generation: + parent: "minecraft:item/generated" + textures: + "layer0": "minecraft:item/custom/topaz_{part}" + "layer1": "minecraft:trims/items/{part}_trim_iron" + - when: minecraft:netherite + model: + type: minecraft:model + path: "minecraft:item/custom/topaz_{part}_netherite_trim" + generation: + parent: "minecraft:item/generated" + textures: + "layer0": "minecraft:item/custom/topaz_{part}" + "layer1": "minecraft:trims/items/{part}_trim_netherite" + - when: minecraft:redstone + model: + type: minecraft:model + path: "minecraft:item/custom/topaz_{part}_redstone_trim" + generation: + parent: "minecraft:item/generated" + textures: + "layer0": "minecraft:item/custom/topaz_{part}" + "layer1": "minecraft:trims/items/{part}_trim_redstone" + - when: minecraft:copper + model: + type: minecraft:model + path: "minecraft:item/custom/topaz_{part}_copper_trim" + generation: + parent: "minecraft:item/generated" + textures: + "layer0": "minecraft:item/custom/topaz_{part}" + "layer1": "minecraft:trims/items/{part}_trim_copper" + - when: minecraft:gold + model: + type: minecraft:model + path: "minecraft:item/custom/topaz_{part}_gold_trim" + generation: + parent: "minecraft:item/generated" + textures: + "layer0": "minecraft:item/custom/topaz_{part}" + "layer1": "minecraft:trims/items/{part}_trim_gold" + - when: minecraft:emerald + model: + type: minecraft:model + path: "minecraft:item/custom/topaz_{part}_emerald_trim" + generation: + parent: "minecraft:item/generated" + textures: + "layer0": "minecraft:item/custom/topaz_{part}" + "layer1": "minecraft:trims/items/{part}_trim_emerald" + - when: minecraft:diamond + model: + type: minecraft:model + path: "minecraft:item/custom/topaz_{part}_diamond_trim" + generation: + parent: "minecraft:item/generated" + textures: + "layer0": "minecraft:item/custom/topaz_{part}" + "layer1": "minecraft:trims/items/{part}_trim_diamond" + - when: minecraft:lapis + model: + type: minecraft:model + path: "minecraft:item/custom/topaz_{part}_lapis_trim" + generation: + parent: "minecraft:item/generated" + textures: + "layer0": "minecraft:item/custom/topaz_{part}" + "layer1": "minecraft:trims/items/{part}_trim_lapis" + - when: minecraft:amethyst + model: + type: minecraft:model + path: "minecraft:item/custom/topaz_{part}_amethyst_trim" + generation: + parent: "minecraft:item/generated" + textures: + "layer0": "minecraft:item/custom/topaz_{part}" + "layer1": "minecraft:trims/items/{part}_trim_amethyst" + - when: minecraft:resin + model: + type: minecraft:model + path: "minecraft:item/custom/topaz_{part}_resin_trim" + generation: + parent: "minecraft:item/generated" + textures: + "layer0": "minecraft:item/custom/topaz_{part}" + "layer1": "minecraft:trims/items/{part}_trim_resin" recipes#11: default:topaz_shovel: diff --git a/bukkit-loader/src/main/resources/resources/default/resourcepack/assets/minecraft/models/block/custom/fairy_flower_1.json b/bukkit-loader/src/main/resources/resources/default/resourcepack/assets/minecraft/models/block/custom/fairy_flower_1.json index fd7176e69..44c9adbde 100644 --- a/bukkit-loader/src/main/resources/resources/default/resourcepack/assets/minecraft/models/block/custom/fairy_flower_1.json +++ b/bukkit-loader/src/main/resources/resources/default/resourcepack/assets/minecraft/models/block/custom/fairy_flower_1.json @@ -1,5 +1,4 @@ { - "credit": "XiaoMoMi", "textures": { "0": "block/custom/fairy_flower_1", "particle": "block/custom/fairy_flower_1" diff --git a/bukkit-loader/src/main/resources/resources/default/resourcepack/assets/minecraft/models/item/custom/bench.json b/bukkit-loader/src/main/resources/resources/default/resourcepack/assets/minecraft/models/item/custom/bench.json index 7d88139de..563e589db 100644 --- a/bukkit-loader/src/main/resources/resources/default/resourcepack/assets/minecraft/models/item/custom/bench.json +++ b/bukkit-loader/src/main/resources/resources/default/resourcepack/assets/minecraft/models/item/custom/bench.json @@ -1,9 +1,7 @@ { - "credit": "MadewithBlockbench", "texture_size": [64, 64], "textures": { - "0": "item/custom/bench", - "particle": "item/custom/bench" + "0": "item/custom/bench" }, "elements": [ { diff --git a/bukkit-loader/src/main/resources/resources/default/resourcepack/assets/minecraft/models/item/custom/table_lamp.json b/bukkit-loader/src/main/resources/resources/default/resourcepack/assets/minecraft/models/item/custom/table_lamp.json index 31bb35cfa..bb2e8fdf6 100644 --- a/bukkit-loader/src/main/resources/resources/default/resourcepack/assets/minecraft/models/item/custom/table_lamp.json +++ b/bukkit-loader/src/main/resources/resources/default/resourcepack/assets/minecraft/models/item/custom/table_lamp.json @@ -1,9 +1,7 @@ { - "credit": "Made with Blockbench", "texture_size": [32, 32], "textures": { - "0": "item/custom/table_lamp", - "particle": "item/custom/table_lamp" + "0": "item/custom/table_lamp" }, "elements": [ { diff --git a/bukkit-loader/src/main/resources/resources/default/resourcepack/assets/minecraft/models/item/custom/wooden_chair.json b/bukkit-loader/src/main/resources/resources/default/resourcepack/assets/minecraft/models/item/custom/wooden_chair.json index dd4fac5a3..ca279830c 100644 --- a/bukkit-loader/src/main/resources/resources/default/resourcepack/assets/minecraft/models/item/custom/wooden_chair.json +++ b/bukkit-loader/src/main/resources/resources/default/resourcepack/assets/minecraft/models/item/custom/wooden_chair.json @@ -1,8 +1,7 @@ { - "credit": "Made with Blockbench", "texture_size": [32, 32], "textures": { - "1": "item/custom/wooden_chair" + "0": "item/custom/wooden_chair" }, "elements": [ { @@ -10,12 +9,12 @@ "to": [5.25, 7.25, 5.25], "rotation": {"angle": 0, "axis": "y", "origin": [4.5, 4, 4.5]}, "faces": { - "north": {"uv": [15.5, 0.5, 16, 4], "texture": "#1"}, - "east": {"uv": [15, 0.5, 15.5, 4], "texture": "#1"}, - "south": {"uv": [15, 0.5, 15.5, 4], "texture": "#1"}, - "west": {"uv": [15.5, 0.5, 16, 4], "texture": "#1"}, - "up": {"uv": [16, 0.5, 15.5, 0], "texture": "#1"}, - "down": {"uv": [15.5, 0, 15, 0.5], "texture": "#1"} + "north": {"uv": [15.5, 0.5, 16, 4], "texture": "#0"}, + "east": {"uv": [15, 0.5, 15.5, 4], "texture": "#0"}, + "south": {"uv": [15, 0.5, 15.5, 4], "texture": "#0"}, + "west": {"uv": [15.5, 0.5, 16, 4], "texture": "#0"}, + "up": {"uv": [16, 0.5, 15.5, 0], "texture": "#0"}, + "down": {"uv": [15.5, 0, 15, 0.5], "texture": "#0"} } }, { @@ -23,12 +22,12 @@ "to": [12.25, 7.25, 5.25], "rotation": {"angle": 0, "axis": "y", "origin": [11.5, 3.5, 4.5]}, "faces": { - "north": {"uv": [16, 0.5, 15.5, 4], "texture": "#1"}, - "east": {"uv": [16, 0.5, 15.5, 4], "texture": "#1"}, - "south": {"uv": [15.5, 0.5, 15, 4], "texture": "#1"}, - "west": {"uv": [15.5, 0.5, 15, 4], "texture": "#1"}, - "up": {"uv": [15.5, 0.5, 16, 0], "texture": "#1"}, - "down": {"uv": [15, 0, 15.5, 0.5], "texture": "#1"} + "north": {"uv": [16, 0.5, 15.5, 4], "texture": "#0"}, + "east": {"uv": [16, 0.5, 15.5, 4], "texture": "#0"}, + "south": {"uv": [15.5, 0.5, 15, 4], "texture": "#0"}, + "west": {"uv": [15.5, 0.5, 15, 4], "texture": "#0"}, + "up": {"uv": [15.5, 0.5, 16, 0], "texture": "#0"}, + "down": {"uv": [15, 0, 15.5, 0.5], "texture": "#0"} } }, { @@ -36,12 +35,12 @@ "to": [12.25, 7.25, 12.25], "rotation": {"angle": 0, "axis": "y", "origin": [11.5, 4, 11.5]}, "faces": { - "north": {"uv": [15, 0.5, 15.5, 4], "texture": "#1"}, - "east": {"uv": [15.5, 0.5, 16, 4], "texture": "#1"}, - "south": {"uv": [15.5, 0.5, 16, 4], "texture": "#1"}, - "west": {"uv": [15, 0.5, 15.5, 4], "texture": "#1"}, - "up": {"uv": [15.5, 0, 16, 0.5], "texture": "#1"}, - "down": {"uv": [15, 0.5, 15.5, 0], "texture": "#1"} + "north": {"uv": [15, 0.5, 15.5, 4], "texture": "#0"}, + "east": {"uv": [15.5, 0.5, 16, 4], "texture": "#0"}, + "south": {"uv": [15.5, 0.5, 16, 4], "texture": "#0"}, + "west": {"uv": [15, 0.5, 15.5, 4], "texture": "#0"}, + "up": {"uv": [15.5, 0, 16, 0.5], "texture": "#0"}, + "down": {"uv": [15, 0.5, 15.5, 0], "texture": "#0"} } }, { @@ -49,12 +48,12 @@ "to": [5.25, 7.25, 12.25], "rotation": {"angle": 0, "axis": "y", "origin": [4.5, 4, 11.5]}, "faces": { - "north": {"uv": [15.5, 0.5, 15, 4], "texture": "#1"}, - "east": {"uv": [15.5, 0.5, 15, 4], "texture": "#1"}, - "south": {"uv": [16, 0.5, 15.5, 4], "texture": "#1"}, - "west": {"uv": [16, 0.5, 15.5, 4], "texture": "#1"}, - "up": {"uv": [16, 0, 15.5, 0.5], "texture": "#1"}, - "down": {"uv": [15.5, 0.5, 15, 0], "texture": "#1"} + "north": {"uv": [15.5, 0.5, 15, 4], "texture": "#0"}, + "east": {"uv": [15.5, 0.5, 15, 4], "texture": "#0"}, + "south": {"uv": [16, 0.5, 15.5, 4], "texture": "#0"}, + "west": {"uv": [16, 0.5, 15.5, 4], "texture": "#0"}, + "up": {"uv": [16, 0, 15.5, 0.5], "texture": "#0"}, + "down": {"uv": [15.5, 0.5, 15, 0], "texture": "#0"} } }, { @@ -62,12 +61,12 @@ "to": [12, 17, 12], "rotation": {"angle": 0, "axis": "y", "origin": [4, 9, 14]}, "faces": { - "north": {"uv": [4, 5, 0, 9], "texture": "#1"}, - "east": {"uv": [0, 0, 0, 4], "texture": "#1"}, - "south": {"uv": [0, 5, 4, 9], "texture": "#1"}, - "west": {"uv": [0, 0, 0, 4], "texture": "#1"}, - "up": {"uv": [4, 0, 0, 0], "texture": "#1"}, - "down": {"uv": [4, 0, 0, 0], "texture": "#1"} + "north": {"uv": [4, 5, 0, 9], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 4], "texture": "#0"}, + "south": {"uv": [0, 5, 4, 9], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 4], "texture": "#0"}, + "up": {"uv": [4, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [4, 0, 0, 0], "texture": "#0"} } }, { @@ -75,12 +74,12 @@ "to": [12, 18.5, 12.5], "rotation": {"angle": 0, "axis": "y", "origin": [4, 17, 14]}, "faces": { - "north": {"uv": [8, 5, 4, 6], "texture": "#1"}, - "east": {"uv": [8, 5, 8.5, 6], "texture": "#1"}, - "south": {"uv": [4, 5, 8, 6], "texture": "#1"}, - "west": {"uv": [8, 5, 8.5, 6], "texture": "#1"}, - "up": {"uv": [8, 7, 4, 6.5], "texture": "#1"}, - "down": {"uv": [8, 6, 4, 6.5], "texture": "#1"} + "north": {"uv": [8, 5, 4, 6], "texture": "#0"}, + "east": {"uv": [8, 5, 8.5, 6], "texture": "#0"}, + "south": {"uv": [4, 5, 8, 6], "texture": "#0"}, + "west": {"uv": [8, 5, 8.5, 6], "texture": "#0"}, + "up": {"uv": [8, 7, 4, 6.5], "texture": "#0"}, + "down": {"uv": [8, 6, 4, 6.5], "texture": "#0"} } }, { @@ -88,12 +87,12 @@ "to": [4, 19, 13], "rotation": {"angle": 0, "axis": "y", "origin": [3, 9, 13]}, "faces": { - "north": {"uv": [0.5, 11, 1, 16], "texture": "#1"}, - "east": {"uv": [2, 11, 3, 16], "texture": "#1"}, - "south": {"uv": [0, 11, 0.5, 16], "texture": "#1"}, - "west": {"uv": [1, 11, 2, 16], "texture": "#1"}, - "up": {"uv": [2, 11, 1, 10.5], "rotation": 90, "texture": "#1"}, - "down": {"uv": [2, 11, 3, 10.5], "rotation": 90, "texture": "#1"} + "north": {"uv": [0.5, 11, 1, 16], "texture": "#0"}, + "east": {"uv": [2, 11, 3, 16], "texture": "#0"}, + "south": {"uv": [0, 11, 0.5, 16], "texture": "#0"}, + "west": {"uv": [1, 11, 2, 16], "texture": "#0"}, + "up": {"uv": [2, 11, 1, 10.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [2, 11, 3, 10.5], "rotation": 90, "texture": "#0"} } }, { @@ -101,12 +100,12 @@ "to": [13, 19, 13], "rotation": {"angle": 0, "axis": "y", "origin": [13, 9, 13]}, "faces": { - "north": {"uv": [1, 11, 0.5, 16], "texture": "#1"}, - "east": {"uv": [2, 11, 1, 16], "texture": "#1"}, - "south": {"uv": [0.5, 11, 0, 16], "texture": "#1"}, - "west": {"uv": [3, 11, 2, 16], "texture": "#1"}, - "up": {"uv": [2, 10.5, 1, 11], "rotation": 90, "texture": "#1"}, - "down": {"uv": [2, 10.5, 3, 11], "rotation": 90, "texture": "#1"} + "north": {"uv": [1, 11, 0.5, 16], "texture": "#0"}, + "east": {"uv": [2, 11, 1, 16], "texture": "#0"}, + "south": {"uv": [0.5, 11, 0, 16], "texture": "#0"}, + "west": {"uv": [3, 11, 2, 16], "texture": "#0"}, + "up": {"uv": [2, 10.5, 1, 11], "rotation": 90, "texture": "#0"}, + "down": {"uv": [2, 10.5, 3, 11], "rotation": 90, "texture": "#0"} } }, { @@ -114,12 +113,12 @@ "to": [13, 9, 13], "rotation": {"angle": 0, "axis": "y", "origin": [3, 7, 5]}, "faces": { - "north": {"uv": [10, 2, 15, 3], "texture": "#1"}, - "east": {"uv": [10, 0, 15, 1], "texture": "#1"}, - "south": {"uv": [10, 1, 15, 2], "texture": "#1"}, - "west": {"uv": [15, 0, 10, 1], "texture": "#1"}, - "up": {"uv": [5, 5, 0, 0], "texture": "#1"}, - "down": {"uv": [10, 0, 5, 5], "texture": "#1"} + "north": {"uv": [10, 2, 15, 3], "texture": "#0"}, + "east": {"uv": [10, 0, 15, 1], "texture": "#0"}, + "south": {"uv": [10, 1, 15, 2], "texture": "#0"}, + "west": {"uv": [15, 0, 10, 1], "texture": "#0"}, + "up": {"uv": [5, 5, 0, 0], "texture": "#0"}, + "down": {"uv": [10, 0, 5, 5], "texture": "#0"} } } ], diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java index 84fa5ecc2..9aaf2eb05 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java @@ -21,6 +21,8 @@ import net.momirealms.craftengine.core.pack.Pack; import net.momirealms.craftengine.core.pack.misc.EquipmentGeneration; import net.momirealms.craftengine.core.pack.model.*; import net.momirealms.craftengine.core.pack.model.generation.ModelGeneration; +import net.momirealms.craftengine.core.pack.model.select.ChargeTypeSelectProperty; +import net.momirealms.craftengine.core.pack.model.select.TrimMaterialSelectProperty; import net.momirealms.craftengine.core.plugin.config.ConfigManager; import net.momirealms.craftengine.core.registry.BuiltInRegistries; import net.momirealms.craftengine.core.registry.Holder; @@ -454,13 +456,19 @@ public class BukkitItemManager extends AbstractItemManager { for (Map.Entry>, ItemModel> entry : model.whenMap().entrySet()) { List cases = entry.getKey().fallbackOrMapPrimary(List::of); for (String caseValue : cases) { + Number legacyValue = predicate.toLegacyValue(caseValue); + if (predicate instanceof TrimMaterialSelectProperty property && property.isArmor(materialId)) { + if (legacyValue.floatValue() > 1f) { + continue; + } + } Map merged = mergePredicates( parentPredicates, predicateId, - predicate.toLegacyValue(caseValue) + legacyValue ); // Additional check for crossbow - if (materialId.equals(ItemKeys.CROSSBOW)) { + if (predicate instanceof ChargeTypeSelectProperty && materialId.equals(ItemKeys.CROSSBOW)) { merged = mergePredicates( merged, "charged", @@ -477,19 +485,32 @@ public class BukkitItemManager extends AbstractItemManager { } } // Additional check for crossbow - if (model.fallBack() != null && materialId.equals(ItemKeys.CROSSBOW)) { - Map merged = mergePredicates( - parentPredicates, - "charged", - 0 - ); - processModelRecursively( - model.fallBack(), - merged, - resultList, - materialId, - customModelData - ); + if (model.fallBack() != null) { + if (predicate instanceof ChargeTypeSelectProperty && materialId.equals(ItemKeys.CROSSBOW)) { + processModelRecursively( + model.fallBack(), + mergePredicates( + parentPredicates, + "charged", + 0 + ), + resultList, + materialId, + customModelData + ); + } else if (predicate instanceof TrimMaterialSelectProperty property && property.isArmor(materialId)) { + processModelRecursively( + model.fallBack(), + mergePredicates( + parentPredicates, + "trim_type", + 0f + ), + resultList, + materialId, + customModelData + ); + } } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/TrimMaterialSelectProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/TrimMaterialSelectProperty.java index ce658ffff..ea17d87f9 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/TrimMaterialSelectProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/TrimMaterialSelectProperty.java @@ -22,7 +22,7 @@ public class TrimMaterialSelectProperty implements SelectProperty, LegacyModelPr LEGACY_TRIM_DATA.put("minecraft:lapis", 0.9f); LEGACY_TRIM_DATA.put("minecraft:amethyst", 1.0f); // INVALID - LEGACY_TRIM_DATA.put("minecraft:resin", 0F); + LEGACY_TRIM_DATA.put("minecraft:resin", 1.1F); } @Override @@ -37,9 +37,8 @@ public class TrimMaterialSelectProperty implements SelectProperty, LegacyModelPr @Override public String legacyPredicateId(Key material) { - String s = material.toString(); - if (s.contains("helmet") || s.contains("chestplate") || s.contains("leggings") || s.contains("boots")) { - return "trim"; + if (isArmor(material)) { + return "trim_type"; } return null; } @@ -53,6 +52,11 @@ public class TrimMaterialSelectProperty implements SelectProperty, LegacyModelPr return f; } + public boolean isArmor(Key material) { + String s = material.toString(); + return s.contains("helmet") || s.contains("chestplate") || s.contains("leggings") || s.contains("boots"); + } + public static class Factory implements SelectPropertyFactory { @Override