Fix top skin layers not being rendered in mob drop recipes
This commit is contained in:
@@ -39,6 +39,10 @@ class GuiPlayer(world: ClientWorld?, profile: GameProfile?) : AbstractClientPlay
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun shouldRenderName(): Boolean {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
var skinTexture: Identifier = DefaultSkinHelper.getSkinTextures(this.getUuid()).texture
|
var skinTexture: Identifier = DefaultSkinHelper.getSkinTextures(this.getUuid()).texture
|
||||||
var capeTexture: Identifier? = null
|
var capeTexture: Identifier? = null
|
||||||
var model: Model = Model.WIDE
|
var model: Model = Model.WIDE
|
||||||
|
|||||||
@@ -7,11 +7,17 @@
|
|||||||
package moe.nea.firmament.gui.entity
|
package moe.nea.firmament.gui.entity
|
||||||
|
|
||||||
import com.google.gson.JsonObject
|
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.client.util.SkinTextures
|
||||||
import net.minecraft.entity.LivingEntity
|
import net.minecraft.entity.LivingEntity
|
||||||
|
import net.minecraft.entity.player.PlayerEntity
|
||||||
|
import net.minecraft.entity.player.PlayerModelPart
|
||||||
import net.minecraft.util.Identifier
|
import net.minecraft.util.Identifier
|
||||||
|
|
||||||
object ModifyPlayerSkin : EntityModifier {
|
object ModifyPlayerSkin : EntityModifier {
|
||||||
|
val playerModelPartIndex = PlayerModelPart.entries.associateBy { it.getName() }
|
||||||
override fun apply(entity: LivingEntity, info: JsonObject): LivingEntity {
|
override fun apply(entity: LivingEntity, info: JsonObject): LivingEntity {
|
||||||
require(entity is GuiPlayer)
|
require(entity is GuiPlayer)
|
||||||
info["cape"]?.let {
|
info["cape"]?.let {
|
||||||
@@ -24,7 +30,21 @@ object ModifyPlayerSkin : EntityModifier {
|
|||||||
entity.model = if (it.asBoolean) SkinTextures.Model.SLIM else SkinTextures.Model.WIDE
|
entity.model = if (it.asBoolean) SkinTextures.Model.SLIM else SkinTextures.Model.WIDE
|
||||||
}
|
}
|
||||||
info["parts"]?.let {
|
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
|
return entity
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 x I
|
||||||
mutable field net/minecraft/screen/slot/Slot y 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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user