Render custom skin boxes on viewmodel (#1415)

* Update PlayerRenderer.cpp

* Fix fatal bug where skins with no additional boxes would crash the game
This commit is contained in:
Botch 2026-03-28 13:44:27 -06:00 committed by GitHub
parent 7447fabe0d
commit 277d74716e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -519,6 +519,29 @@ void PlayerRenderer::renderHand()
{ {
humanoidModel->arm0->render(1 / 16.0f,true); humanoidModel->arm0->render(1 / 16.0f,true);
} }
//Render custom skin boxes on viewmodel - Botch
vector<ModelPart*>* additionalModelParts = Minecraft::GetInstance()->player->GetAdditionalModelParts();
if (!additionalModelParts) return; //If there are no custom boxes, return. This fixes bug where the game will crash if you select a skin with no additional boxes.
vector<ModelPart*> armchildren = humanoidModel->arm0->children;
std::unordered_set<ModelPart*> additionalModelPartSet(additionalModelParts->begin(), additionalModelParts->end());
for (const auto& x : armchildren) {
if (x) {
if (additionalModelPartSet.find(x) != additionalModelPartSet.end()) { //This is to verify box is still actually on current skin - Botch
glPushMatrix();
//We need to transform to match offset of arm - Botch
glTranslatef(-5 * 0.0625f, 2 * 0.0625f, 0);
glRotatef(0.1 * (180.0f / PI), 0, 0, 1);
x->visible = true;
x->render(1.0f / 16.0f, true);
x->visible = false;
glPopMatrix();
}
}
}
} }
void PlayerRenderer::setupPosition(shared_ptr<LivingEntity> _mob, double x, double y, double z) void PlayerRenderer::setupPosition(shared_ptr<LivingEntity> _mob, double x, double y, double z)
@ -580,4 +603,4 @@ ResourceLocation *PlayerRenderer::getTextureLocation(shared_ptr<Entity> entity)
{ {
shared_ptr<Player> player = dynamic_pointer_cast<Player>(entity); shared_ptr<Player> player = dynamic_pointer_cast<Player>(entity);
return new ResourceLocation(static_cast<_TEXTURE_NAME>(player->getTexture())); return new ResourceLocation(static_cast<_TEXTURE_NAME>(player->getTexture()));
} }