From 95c1b75a14d41b070c4e23addb3ac4788a014365 Mon Sep 17 00:00:00 2001 From: Linnea Gräf Date: Tue, 30 Jul 2024 19:18:19 +0200 Subject: Fix top skin layers not being rendered in mob drop recipes --- .../moe/nea/firmament/gui/entity/GuiPlayer.kt | 4 ++++ .../nea/firmament/gui/entity/ModifyPlayerSkin.kt | 22 +++++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) (limited to 'src/main/kotlin/moe/nea') diff --git a/src/main/kotlin/moe/nea/firmament/gui/entity/GuiPlayer.kt b/src/main/kotlin/moe/nea/firmament/gui/entity/GuiPlayer.kt index 5f88098..6b1fc67 100644 --- a/src/main/kotlin/moe/nea/firmament/gui/entity/GuiPlayer.kt +++ b/src/main/kotlin/moe/nea/firmament/gui/entity/GuiPlayer.kt @@ -39,6 +39,10 @@ class GuiPlayer(world: ClientWorld?, profile: GameProfile?) : AbstractClientPlay return false } + override fun shouldRenderName(): Boolean { + return false + } + var skinTexture: Identifier = DefaultSkinHelper.getSkinTextures(this.getUuid()).texture var capeTexture: Identifier? = null var model: Model = Model.WIDE diff --git a/src/main/kotlin/moe/nea/firmament/gui/entity/ModifyPlayerSkin.kt b/src/main/kotlin/moe/nea/firmament/gui/entity/ModifyPlayerSkin.kt index b382fe2..f2de698 100644 --- a/src/main/kotlin/moe/nea/firmament/gui/entity/ModifyPlayerSkin.kt +++ b/src/main/kotlin/moe/nea/firmament/gui/entity/ModifyPlayerSkin.kt @@ -7,11 +7,17 @@ package moe.nea.firmament.gui.entity import com.google.gson.JsonObject +import com.google.gson.JsonPrimitive +import kotlin.experimental.and +import kotlin.experimental.or import net.minecraft.client.util.SkinTextures import net.minecraft.entity.LivingEntity +import net.minecraft.entity.player.PlayerEntity +import net.minecraft.entity.player.PlayerModelPart import net.minecraft.util.Identifier object ModifyPlayerSkin : EntityModifier { + val playerModelPartIndex = PlayerModelPart.entries.associateBy { it.getName() } override fun apply(entity: LivingEntity, info: JsonObject): LivingEntity { require(entity is GuiPlayer) info["cape"]?.let { @@ -24,7 +30,21 @@ object ModifyPlayerSkin : EntityModifier { entity.model = if (it.asBoolean) SkinTextures.Model.SLIM else SkinTextures.Model.WIDE } info["parts"]?.let { - // TODO: support parts + var trackedData = entity.dataTracker.get(PlayerEntity.PLAYER_MODEL_PARTS) + if (it is JsonPrimitive && it.isBoolean) { + trackedData = (if (it.asBoolean) -1 else 0).toByte() + } else { + val obj = it.asJsonObject + for ((k, v) in obj.entrySet()) { + val part = playerModelPartIndex[k]!! + trackedData = if (v.asBoolean) { + trackedData and (part.bitFlag.inv().toByte()) + } else { + trackedData or (part.bitFlag.toByte()) + } + } + } + entity.dataTracker.set(PlayerEntity.PLAYER_MODEL_PARTS, trackedData) } return entity } -- cgit