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..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)) { @@ -55,16 +60,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(stack) > 0) { + if (openable.getOpeningTime(stack) <= 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)) { 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 000000000..1a04bbe65 Binary files /dev/null and b/run/addonpacks/Test Pack/assets/test/textures/item/openable_test_chestplate.png differ