From efa02242b00b116db0ac7fb925926db03bc9d50a Mon Sep 17 00:00:00 2001 From: Spyeedy Date: Tue, 13 May 2025 21:20:07 +0800 Subject: [PATCH 1/2] Fix wrong model layer used for openable armor items with no timer This commit fix is for armor renderers that set different model layers for "default" and "open" states, with 0 open timer. The bug fixed is, in the open state, the "default" model layer is used instead of the "open" model layer --- .../renderer/item/armor/ArmorModelData.java | 3 ++- .../item/armor/ArmorRendererConditions.java | 20 ++++++++++++------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/common/src/main/java/net/threetag/palladium/client/renderer/item/armor/ArmorModelData.java b/common/src/main/java/net/threetag/palladium/client/renderer/item/armor/ArmorModelData.java index d1ccbb111..46417e125 100644 --- a/common/src/main/java/net/threetag/palladium/client/renderer/item/armor/ArmorModelData.java +++ b/common/src/main/java/net/threetag/palladium/client/renderer/item/armor/ArmorModelData.java @@ -28,8 +28,9 @@ public ArmorModelData add(String key, SkinTypedValue texture @Nullable public HumanoidModel get(String key, LivingEntity entity, boolean hasConditions) { + // If the armor is openable, shouldn't it still use the key param? So we pass key instead of ArmorRendererConditions.BASE_TEXTURE if (!hasConditions) { - var fallback = this.generatedByKey.get(ArmorRendererConditions.BASE_TEXTURE); + var fallback = this.generatedByKey.get(key); return fallback != null ? fallback.get(entity) : null; } diff --git a/common/src/main/java/net/threetag/palladium/client/renderer/item/armor/ArmorRendererConditions.java b/common/src/main/java/net/threetag/palladium/client/renderer/item/armor/ArmorRendererConditions.java index 3863db43a..c2c78dd8d 100644 --- a/common/src/main/java/net/threetag/palladium/client/renderer/item/armor/ArmorRendererConditions.java +++ b/common/src/main/java/net/threetag/palladium/client/renderer/item/armor/ArmorRendererConditions.java @@ -55,16 +55,22 @@ public String getTexture(DataContext context, ArmorTextureData textures) { public String getModelLayer(DataContext context, ArmorModelData models) { String key = BASE_TEXTURE; - if (context.has(DataContextType.ITEM) && context.getItem().getItem() instanceof Openable openable && openable.getOpeningProgress(context.getItem()) > 0) { - if (openable.getOpeningTime(context.getItem()) <= 0) { - key = OPENED_TEXTURE; - } else { - key = OPENED_TEXTURE + "_" + openable.getOpeningProgress(context.getItem()); - - if (!models.has(key)) { + var stack = context.getItem(); + if (context.has(DataContextType.ITEM) && stack.getItem() instanceof Openable openable) { + if (openable.getOpeningProgress(context.getItem()) > 0) { + if (openable.getOpeningTime(context.getItem()) <= 0) { key = OPENED_TEXTURE; + } else { + key = OPENED_TEXTURE + "_" + openable.getOpeningProgress(stack); + + if (!models.has(key)) { + key = OPENED_TEXTURE; + } } } + else if (openable.isOpen(stack)) { + key = OPENED_TEXTURE; + } } if (!models.has(key)) { From a51ecdc2a9293e40c7a335f0315441043f592fc6 Mon Sep 17 00:00:00 2001 From: Spyeedy Date: Tue, 13 May 2025 23:01:49 +0800 Subject: [PATCH 2/2] Fix wrong texture for unopened armor with timer Added an item, openable_test_chestplate, to test, to test and ensure the correct texture and model layer are selected --- .../item/armor/ArmorRendererConditions.java | 23 ++++++++++------- .../test/items/openable_test_chestplate.json | 8 ++++++ .../Test Pack/assets/test/lang/en_us.json | 3 ++- .../models/item/openable_test_chestplate.json | 6 +++++ .../openable_test_chestplate.json | 24 ++++++++++++++++++ .../item/openable_test_chestplate.png | Bin 0 -> 605 bytes 6 files changed, 54 insertions(+), 10 deletions(-) create mode 100644 run/addonpacks/Test Pack/addon/test/items/openable_test_chestplate.json create mode 100644 run/addonpacks/Test Pack/assets/test/models/item/openable_test_chestplate.json create mode 100644 run/addonpacks/Test Pack/assets/test/palladium/armor_renderers/openable_test_chestplate.json create mode 100644 run/addonpacks/Test Pack/assets/test/textures/item/openable_test_chestplate.png diff --git a/common/src/main/java/net/threetag/palladium/client/renderer/item/armor/ArmorRendererConditions.java b/common/src/main/java/net/threetag/palladium/client/renderer/item/armor/ArmorRendererConditions.java index c2c78dd8d..9b55ea75a 100644 --- a/common/src/main/java/net/threetag/palladium/client/renderer/item/armor/ArmorRendererConditions.java +++ b/common/src/main/java/net/threetag/palladium/client/renderer/item/armor/ArmorRendererConditions.java @@ -4,6 +4,7 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import net.minecraft.util.GsonHelper; +import net.threetag.palladium.Palladium; import net.threetag.palladium.condition.Condition; import net.threetag.palladium.condition.ConditionEnvironment; import net.threetag.palladium.condition.ConditionSerializer; @@ -27,16 +28,20 @@ public String getTexture(DataContext context, ArmorTextureData textures) { var stack = context.getItem(); if (!stack.isEmpty() && stack.getItem() instanceof Openable openable) { - var max = openable.getOpeningTime(stack); - if (max <= 0 && openable.isOpen(stack)) { - key = OPENED_TEXTURE; - } else if (max > 0) { - key = OPENED_TEXTURE + "_" + openable.getOpeningProgress(context.getItem()); - - if (!textures.has(key)) { + if (openable.getOpeningProgress(stack) > 0) { + if (openable.getOpeningTime(stack) <= 0) { key = OPENED_TEXTURE; + } else { + key = OPENED_TEXTURE + "_" + openable.getOpeningProgress(stack); + + if (!textures.has(key)) { + key = OPENED_TEXTURE; + } } } + else if (openable.isOpen(stack)) { + key = OPENED_TEXTURE; + } } if (!textures.has(key)) { @@ -57,8 +62,8 @@ public String getModelLayer(DataContext context, ArmorModelData models) { var stack = context.getItem(); if (context.has(DataContextType.ITEM) && stack.getItem() instanceof Openable openable) { - if (openable.getOpeningProgress(context.getItem()) > 0) { - if (openable.getOpeningTime(context.getItem()) <= 0) { + if (openable.getOpeningProgress(stack) > 0) { + if (openable.getOpeningTime(stack) <= 0) { key = OPENED_TEXTURE; } else { key = OPENED_TEXTURE + "_" + openable.getOpeningProgress(stack); diff --git a/run/addonpacks/Test Pack/addon/test/items/openable_test_chestplate.json b/run/addonpacks/Test Pack/addon/test/items/openable_test_chestplate.json new file mode 100644 index 000000000..075c33c49 --- /dev/null +++ b/run/addonpacks/Test Pack/addon/test/items/openable_test_chestplate.json @@ -0,0 +1,8 @@ +{ + "type": "palladium:armor", + "slot": "chest", + "armor_material": "test:dirt", + "creative_mode_tab": "test:test_tab", + "openable": true, + "opening_time": 16 +} \ No newline at end of file diff --git a/run/addonpacks/Test Pack/assets/test/lang/en_us.json b/run/addonpacks/Test Pack/assets/test/lang/en_us.json index 96a5dffcc..f9ed14271 100644 --- a/run/addonpacks/Test Pack/assets/test/lang/en_us.json +++ b/run/addonpacks/Test Pack/assets/test/lang/en_us.json @@ -15,5 +15,6 @@ "accessory_slot.test.render_layer_switch_test": "Render Layer Switch Test", "accessory.test.wood": "Oak Chestplate", "accessory.test.birch": "Birch Chestplate", - "accessory_slot.test.accessory_variable_test": "Accessory Variable Test" + "accessory_slot.test.accessory_variable_test": "Accessory Variable Test", + "item.test.openable_test_chestplate": "Openable Test Chestplate" } \ No newline at end of file diff --git a/run/addonpacks/Test Pack/assets/test/models/item/openable_test_chestplate.json b/run/addonpacks/Test Pack/assets/test/models/item/openable_test_chestplate.json new file mode 100644 index 000000000..dc37d8a9c --- /dev/null +++ b/run/addonpacks/Test Pack/assets/test/models/item/openable_test_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "test:item/openable_test_chestplate" + } +} diff --git a/run/addonpacks/Test Pack/assets/test/palladium/armor_renderers/openable_test_chestplate.json b/run/addonpacks/Test Pack/assets/test/palladium/armor_renderers/openable_test_chestplate.json new file mode 100644 index 000000000..04351affe --- /dev/null +++ b/run/addonpacks/Test Pack/assets/test/palladium/armor_renderers/openable_test_chestplate.json @@ -0,0 +1,24 @@ +{ + "textures": { + "default": "test:textures/models/armor/dirt.png", + "open": { + "base": "test:textures/models/iron_man_suit.png", + "transformers": [ + { + "type": "palladium:alpha_mask", + "mask": "test:textures/models/alpha_masks/iron_man_suit/transformation_#TIMER.png" + } + ], + "variables": { + "TIMER": { + "type": "palladium:openable_equipment_progress" + } + }, + "output": "test:textures/models/iron_man_suit_#TIMER.png" + } + }, + "model_layers": { + "default": "test:player#thick_armor", + "open": "palladium:humanoid#suit" + } +} \ No newline at end of file diff --git a/run/addonpacks/Test Pack/assets/test/textures/item/openable_test_chestplate.png b/run/addonpacks/Test Pack/assets/test/textures/item/openable_test_chestplate.png new file mode 100644 index 0000000000000000000000000000000000000000..1a04bbe6550e9854cd3adbdca4b9d7d8f838e577 GIT binary patch literal 605 zcmV-j0;2tiP)z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy24YJ`L;(K){{a7>y{D4^000SaNLh0L02dMf02dMgXP?qi0005B zNklgG=SD^E>Cf&-=XRdCvI}{dZ^}V8m`#Fh_1PG|^+B z?c*q|d(RjX@wEmy)QzpUHM!WN^-VNmD<=0rke>1ixzTUYX*E+MaZf!hCUWnea7hk6 z+N7V(V<`qahZi*5->Rwt-fgK?jI|YXN+u?ub}tbBY#>eqP+wKbz?%1rvc43I-9U_U zw}(4CLxrKdh}UcZ8zd3MRtHTxoisOOXGI8DTX1=4dw!JHhRPBOM{hnA1jBLC-p81r zi+UIkM5wxq->K5ESl#f@Tjt|HR^YozYqEoe6B(t!VpbanVpnqmk;l&}-M(YB9))~~ zB0{NWi7f6z*aPTj(toAM4FC$?;{$E%6)Hpy>!XDH#F7Gl@GSgeE^qEtb5P_9JxU7r z4!&Dho*krxr7futuY#!2=2Ph5Ma87w71?%UnbK!#WcdjAhjdt)Ty%jfaeg!asZLj* r;H2yHD@}FOaHCCsl5by<^%t9WeW}QK60St200000NkvXXu0mjfFMIrt literal 0 HcmV?d00001