From 2665ebfd50a3962ae16740e9ba4d4ea9ba57fe17 Mon Sep 17 00:00:00 2001 From: Botch Date: Thu, 26 Mar 2026 03:50:14 -0600 Subject: [PATCH 1/2] Update PlayerRenderer.cpp --- Minecraft.Client/PlayerRenderer.cpp | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/Minecraft.Client/PlayerRenderer.cpp b/Minecraft.Client/PlayerRenderer.cpp index a9b945440b..2019b6bcc4 100644 --- a/Minecraft.Client/PlayerRenderer.cpp +++ b/Minecraft.Client/PlayerRenderer.cpp @@ -519,6 +519,29 @@ void PlayerRenderer::renderHand() { humanoidModel->arm0->render(1 / 16.0f,true); } + + + //Render custom skin boxes on viewmodel - Botch + vector* mdlprts = Minecraft::GetInstance()->player->GetAdditionalModelParts(); + vector armchildren = humanoidModel->arm0->children; + + std::unordered_set mdlSet(mdlprts->begin(), mdlprts->end()); + for (const auto& x : armchildren) { + if (x) { + if (mdlSet.find(x) != mdlSet.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 _mob, double x, double y, double z) @@ -580,4 +603,4 @@ ResourceLocation *PlayerRenderer::getTextureLocation(shared_ptr entity) { shared_ptr player = dynamic_pointer_cast(entity); return new ResourceLocation(static_cast<_TEXTURE_NAME>(player->getTexture())); -} \ No newline at end of file +} From 77c235ee67b03b1ecbe7ac17a7e8922c84430b50 Mon Sep 17 00:00:00 2001 From: Botch Date: Thu, 26 Mar 2026 20:03:30 -0600 Subject: [PATCH 2/2] Fix fatal bug where skins with no additional boxes would crash the game --- Minecraft.Client/PlayerRenderer.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Minecraft.Client/PlayerRenderer.cpp b/Minecraft.Client/PlayerRenderer.cpp index 2019b6bcc4..23dff77f8e 100644 --- a/Minecraft.Client/PlayerRenderer.cpp +++ b/Minecraft.Client/PlayerRenderer.cpp @@ -522,13 +522,13 @@ void PlayerRenderer::renderHand() //Render custom skin boxes on viewmodel - Botch - vector* mdlprts = Minecraft::GetInstance()->player->GetAdditionalModelParts(); + vector* 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 armchildren = humanoidModel->arm0->children; - - std::unordered_set mdlSet(mdlprts->begin(), mdlprts->end()); + std::unordered_set additionalModelPartSet(additionalModelParts->begin(), additionalModelParts->end()); for (const auto& x : armchildren) { if (x) { - if (mdlSet.find(x) != mdlSet.end()) { //This is to verify box is still actually on current skin - Botch + 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);