fix: armorstand head now renders correctly

This commit is contained in:
Lord_Cambion
2026-04-18 14:06:44 +02:00
parent ab469e6330
commit 88b00755de
4 changed files with 12 additions and 165 deletions

View File

@@ -86,10 +86,8 @@ unsigned int PlayerRenderer::getNametagColour(int index)
int PlayerRenderer::prepareArmor(shared_ptr<LivingEntity> _player, int layer, float a)
{
// 4J - dynamic cast required because we aren't using templates/generics in our version
shared_ptr<Player> player = dynamic_pointer_cast<Player>(_player);
// 4J-PB - need to disable rendering armour for some special skins (Daleks)
unsigned int uiAnimOverrideBitmask=player->getAnimOverrideBitmask();
if(uiAnimOverrideBitmask&(1<<HumanoidModel::eAnim_DontRenderArmour))
{
@@ -105,7 +103,6 @@ int PlayerRenderer::prepareArmor(shared_ptr<LivingEntity> _player, int layer, fl
ArmorItem *armorItem = dynamic_cast<ArmorItem *>(item);
bindTexture(HumanoidMobRenderer::getArmorLocation(armorItem, layer));
SkullItem* skullItem = dynamic_cast<SkullItem*>(item);
HumanoidModel *armor = layer == 2 ? armorParts2 : armorParts1;
armor->head->visible = layer == 0;
@@ -143,53 +140,10 @@ int PlayerRenderer::prepareArmor(shared_ptr<LivingEntity> _player, int layer, fl
return 1;
}
else if (dynamic_cast<SkullItem*>(item)) {
SkullItem* skullItem = dynamic_cast<SkullItem*>(item);
HumanoidModel* armor = armorParts3;
auto t = new SkeletonHeadModel(0, 0, 64, 64, 1);
//armor->head->_init();
armor->head = t->head;
//armor->head->addHumanoidBox(-4, -8, -4, 8, 8, 8, 0.5); // Head
armor->head->visible = layer == 0;
armor->hair->visible = false;
armor->body->visible = false;
armor->arm0->visible = false;
armor->arm1->visible = false;
armor->leg0->visible = false;
armor->leg1->visible = false;
switch (itemInstance->getAuxValue())
{
case SkullTileEntity::TYPE_WITHER:
bindTexture(&WITHER_SKELETON_LOCATION);
break;
case SkullTileEntity::TYPE_ZOMBIE:
bindTexture(&ZOMBIE_LOCATION);
break;
case SkullTileEntity::TYPE_CREEPER:
bindTexture(&CREEPER_LOCATION);
break;
case SkullTileEntity::TYPE_CHAR:
{
bindTexture(&PlayerRenderer::DEFAULT_LOCATION);
break;
}
case SkullTileEntity::TYPE_SKELETON:
default:
bindTexture(&SKELETON_LOCATION);
break;
}
setArmor(armor);
if (armor != nullptr) armor->attackTime = model->attackTime;
if (armor != nullptr) armor->riding = model->riding;
if (armor != nullptr) armor->young = model->young;
return 1;
return -1;
}
}
return -1;
}
void PlayerRenderer::prepareSecondPassArmor(shared_ptr<LivingEntity> _player, int layer, float a)