From 1ae6a259609c29d353a2e7856739b6e2047e3ccc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linnea=20Gr=C3=A4f?= Date: Thu, 26 Jun 2025 19:58:00 +0200 Subject: [PATCH] fix: dev capes on people without regular capes not rendering --- .../SaveCapeToPlayerEntityRenderState.java | 2 +- src/main/kotlin/features/misc/CustomCapes.kt | 35 +++++++++++++----- src/main/kotlin/features/misc/Devs.kt | 19 ++++++++++ .../assets/firmament/textures/cape/REUSE.toml | 5 ++- .../firmament/textures/cape/fsr_static.png | Bin 0 -> 21747 bytes 5 files changed, 49 insertions(+), 12 deletions(-) create mode 100644 src/main/resources/assets/firmament/textures/cape/fsr_static.png diff --git a/src/main/java/moe/nea/firmament/mixins/feature/devcosmetics/SaveCapeToPlayerEntityRenderState.java b/src/main/java/moe/nea/firmament/mixins/feature/devcosmetics/SaveCapeToPlayerEntityRenderState.java index 72bb79a..ae9c743 100644 --- a/src/main/java/moe/nea/firmament/mixins/feature/devcosmetics/SaveCapeToPlayerEntityRenderState.java +++ b/src/main/java/moe/nea/firmament/mixins/feature/devcosmetics/SaveCapeToPlayerEntityRenderState.java @@ -14,6 +14,6 @@ public class SaveCapeToPlayerEntityRenderState { @Inject(method = "updateRenderState(Lnet/minecraft/client/network/AbstractClientPlayerEntity;Lnet/minecraft/client/render/entity/state/PlayerEntityRenderState;F)V", at = @At("TAIL")) private void addCustomCape(AbstractClientPlayerEntity abstractClientPlayerEntity, PlayerEntityRenderState playerEntityRenderState, float f, CallbackInfo ci) { -CustomCapes.addCapeData(abstractClientPlayerEntity, playerEntityRenderState); + CustomCapes.addCapeData(abstractClientPlayerEntity, playerEntityRenderState); } } diff --git a/src/main/kotlin/features/misc/CustomCapes.kt b/src/main/kotlin/features/misc/CustomCapes.kt index 5e4764e..a20707e 100644 --- a/src/main/kotlin/features/misc/CustomCapes.kt +++ b/src/main/kotlin/features/misc/CustomCapes.kt @@ -13,6 +13,7 @@ import net.minecraft.client.render.VertexConsumer import net.minecraft.client.render.VertexConsumerProvider import net.minecraft.client.render.entity.state.PlayerEntityRenderState import net.minecraft.client.util.BufferAllocator +import net.minecraft.client.util.SkinTextures import net.minecraft.util.Identifier import moe.nea.firmament.Firmament import moe.nea.firmament.util.MC @@ -109,10 +110,12 @@ object CustomCapes { 110.seconds ) ), -// FURFSKY( -// "FurfSky", -// TexturedCapeRenderer(Firmament.identifier("textures/cape/fsr_static.png")) -// ), + + FURFSKY_STATIC( + "FurfSky", + TexturedCapeRenderer(Firmament.identifier("textures/cape/fsr_static.png")) + ), + FIRMAMENT_STATIC( "Firmament", TexturedCapeRenderer(Firmament.identifier("textures/cape/firm_static.png")) @@ -123,11 +126,15 @@ object CustomCapes { } val byId = AllCapes.entries.associateBy { it.cape.id } - val byUuid = listOf( - Devs.nea to AllCapes.FIRMAMENT_ANIMATED, - Devs.kath to AllCapes.FIRMAMENT_STATIC, - Devs.jani to AllCapes.FIRMAMENT_ANIMATED, - ).flatMap { (dev, cape) -> dev.uuids.map { it to cape.cape } }.toMap() + val byUuid = + listOf( + listOf( + Devs.nea to AllCapes.FIRMAMENT_ANIMATED, + Devs.kath to AllCapes.FIRMAMENT_STATIC, + Devs.jani to AllCapes.FIRMAMENT_ANIMATED, + ), + Devs.FurfSky.all.map { it to AllCapes.FURFSKY_STATIC }, + ).flatten().flatMap { (dev, cape) -> dev.uuids.map { it to cape.cape } }.toMap() @JvmStatic fun render( @@ -157,7 +164,15 @@ object CustomCapes { capeStorage.cape_firmament = null } else { capeStorage.cape_firmament = cape - playerEntityRenderState.capeVisible = true; + playerEntityRenderState.skinTextures = SkinTextures( + playerEntityRenderState.skinTextures.texture, + playerEntityRenderState.skinTextures.textureUrl, + Firmament.identifier("placeholder/fake_cape"), + playerEntityRenderState.skinTextures.elytraTexture, + playerEntityRenderState.skinTextures.model, + playerEntityRenderState.skinTextures.secure, + ) + playerEntityRenderState.capeVisible = true } } diff --git a/src/main/kotlin/features/misc/Devs.kt b/src/main/kotlin/features/misc/Devs.kt index 7a5da2b..c7eff71 100644 --- a/src/main/kotlin/features/misc/Devs.kt +++ b/src/main/kotlin/features/misc/Devs.kt @@ -13,4 +13,23 @@ object Devs { val nea = Dev("d3cb85e2-3075-48a1-b213-a9bfb62360c1", "842204e6-6880-487b-ae5a-0595394f9948") val kath = Dev("add71246-c46e-455c-8345-c129ea6f146c", "b491990d-53fd-4c5f-a61e-19d58cc7eddf") val jani = Dev("8a9f1841-48e9-48ed-b14f-76a124e6c9df") + + object FurfSky { + val smolegit = Dev("02b38b96-eb19-405a-b319-d6bc00b26ab3") + val itsCen = Dev("ada70b5a-ac37-49d2-b18c-1351672f8051") + val webster = Dev("02166f1b-9e8d-4e48-9e18-ea7a4499492d") + val vrachel = Dev("22e98637-ba97-4b6b-a84f-fb57a461ce43") + val cunuduh = Dev("2a15e3b3-c46e-4718-b907-166e1ab2efdc") + val eiiies = Dev("2ae162f2-81a7-4f91-a4b2-104e78a0a7e1") + val june = Dev("2584a4e3-f917-4493-8ced-618391f3b44f") + val denasu = Dev("313cbd25-8ade-4e41-845c-5cab555a30c9") + val libyKiwii = Dev("4265c52e-bd6f-4d3c-9cf6-bdfc8fb58023") + val madeleaan = Dev("bcb119a3-6000-4324-bda1-744f00c44b31") + val turtleSP = Dev("f1ca1934-a582-4723-8283-89921d008657") + val all = listOf( + smolegit, itsCen, webster, vrachel, cunuduh, eiiies, + june, denasu, libyKiwii, madeleaan, turtleSP, + ) + } + } diff --git a/src/main/resources/assets/firmament/textures/cape/REUSE.toml b/src/main/resources/assets/firmament/textures/cape/REUSE.toml index 7cb21f2..ba721f7 100644 --- a/src/main/resources/assets/firmament/textures/cape/REUSE.toml +++ b/src/main/resources/assets/firmament/textures/cape/REUSE.toml @@ -13,4 +13,7 @@ path = ["firm_static.png"] SPDX-License-Identifier = "CC-BY-4.0" SPDX-FileCopyrightText = ["ic22487", "kathund"] - +[[annotations]] +path = ["fsr_static.png"] +SPDX-License-Identifier = "CC-BY-4.0" +SPDX-FileCopyrightText = ["Tendan"] diff --git a/src/main/resources/assets/firmament/textures/cape/fsr_static.png b/src/main/resources/assets/firmament/textures/cape/fsr_static.png new file mode 100644 index 0000000000000000000000000000000000000000..de9cf354fa6af1aaaa578e90e8f4ae8d78185142 GIT binary patch literal 21747 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 tSO@txGA=vXcOqYp(LyZjB