aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2024-07-30 19:18:19 +0200
committerLinnea Gräf <nea@nea.moe>2024-07-30 19:18:19 +0200
commit95c1b75a14d41b070c4e23addb3ac4788a014365 (patch)
tree7fdc8cf94df1df100b06a60f4b0aad7c36d2ebd0
parentdf29eccdcc1184b3d9ac116192442a359b8185bd (diff)
downloadfirmament-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.kt4
-rw-r--r--src/main/kotlin/moe/nea/firmament/gui/entity/ModifyPlayerSkin.kt22
-rw-r--r--src/main/resources/firmament.accesswidener2
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;
+