diff options
author | Linnea Gräf <nea@nea.moe> | 2024-07-30 19:18:19 +0200 |
---|---|---|
committer | Linnea Gräf <nea@nea.moe> | 2024-07-30 19:18:19 +0200 |
commit | 95c1b75a14d41b070c4e23addb3ac4788a014365 (patch) | |
tree | 7fdc8cf94df1df100b06a60f4b0aad7c36d2ebd0 | |
parent | df29eccdcc1184b3d9ac116192442a359b8185bd (diff) | |
download | Firmament-95c1b75a14d41b070c4e23addb3ac4788a014365.tar.gz Firmament-95c1b75a14d41b070c4e23addb3ac4788a014365.tar.bz2 Firmament-95c1b75a14d41b070c4e23addb3ac4788a014365.zip |
Fix top skin layers not being rendered in mob drop recipes
-rw-r--r-- | src/main/kotlin/moe/nea/firmament/gui/entity/GuiPlayer.kt | 4 | ||||
-rw-r--r-- | src/main/kotlin/moe/nea/firmament/gui/entity/ModifyPlayerSkin.kt | 22 | ||||
-rw-r--r-- | src/main/resources/firmament.accesswidener | 2 |
3 files changed, 27 insertions, 1 deletions
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 } diff --git a/src/main/resources/firmament.accesswidener b/src/main/resources/firmament.accesswidener index f5ede98..b69b99d 100644 --- a/src/main/resources/firmament.accesswidener +++ b/src/main/resources/firmament.accesswidener @@ -19,3 +19,5 @@ accessible method net/minecraft/client/gui/DrawContext drawTexturedQuad (Lnet/mi mutable field net/minecraft/screen/slot/Slot x I mutable field net/minecraft/screen/slot/Slot y I +accessible field net/minecraft/entity/player/PlayerEntity PLAYER_MODEL_PARTS Lnet/minecraft/entity/data/TrackedData; + |