From 253b460676f4270e4cc1cf84b2ed2e6193c65675 Mon Sep 17 00:00:00 2001 From: Langtanium <94726057+Langtanium@users.noreply.github.com> Date: Tue, 2 Jun 2026 11:42:13 -0700 Subject: [PATCH] Fixed skin offset leak and removed skin item offset Fixed DLC skin offset leak causing offsets from one skin to leak onto another skin. Removed skin item offset as the location it was previously added to did not have the desired result. --- Minecraft.Client/HumanoidModel.cpp | 432 ++++++++++++++---------- Minecraft.Client/HumanoidModel.h | 1 + Minecraft.Client/ItemInHandRenderer.cpp | 20 -- 3 files changed, 256 insertions(+), 197 deletions(-) diff --git a/Minecraft.Client/HumanoidModel.cpp b/Minecraft.Client/HumanoidModel.cpp index 75d4a7c8..bd362789 100644 --- a/Minecraft.Client/HumanoidModel.cpp +++ b/Minecraft.Client/HumanoidModel.cpp @@ -126,6 +126,8 @@ void HumanoidModel::_init(float g, float yOffset, int texWidth, int texHeight, b this->texWidth = texWidth; this->texHeight = texHeight; + m_is64x64 = texHeight == 64; + jacket = nullptr; sleeve0 = nullptr; sleeve1 = nullptr; @@ -172,7 +174,7 @@ void HumanoidModel::_init(float g, float yOffset, int texWidth, int texHeight, b body->addHumanoidBox(-4, 0, -2, 8, 12, 4, g); // Body body->setPos(0, 0 + yOffset, 0); - if (texHeight == 64) + if (m_is64x64) { arm0 = new ModelPart(this, 24 + 16, 16); arm1 = new ModelPart(this, 16 + 16, 48); @@ -232,7 +234,7 @@ void HumanoidModel::_init(float g, float yOffset, int texWidth, int texHeight, b boot1->addHumanoidBox(0, 0, 0, 0, 0, 0, g); // Boot1 boot1->setPos(1.9, 12 + yOffset, 0); } - else if (texHeight == 32) + else if (!m_is64x64) { arm0 = new ModelPart(this, 24 + 16, 16); arm1 = new ModelPart(this, 24 + 16, 16); @@ -254,7 +256,7 @@ void HumanoidModel::_init(float g, float yOffset, int texWidth, int texHeight, b arm1->setPos(5, 2 + yOffset, 0); leg0 = new ModelPart(this, 0, 16); - if (texHeight == 64) + if (m_is64x64) { leg1 = new ModelPart(this, 16, 48); @@ -266,7 +268,7 @@ void HumanoidModel::_init(float g, float yOffset, int texWidth, int texHeight, b pants1->addHumanoidBox(-2, 0, -2, 4, 12, 4, g + 0.25f); // Pants1 pants1->setPos(1.9, 12 + yOffset, 0); } - else if (texHeight == 32) + else if (!m_is64x64) { leg1 = new ModelPart(this, 0, 16); leg1->bMirror = true; @@ -292,38 +294,25 @@ void HumanoidModel::_init(float g, float yOffset, int texWidth, int texHeight, b leg1->compile(1.0f/16.0f); hair->compile(1.0f/16.0f); - if (jacket) + if (m_is64x64) + { jacket->compile(1.0f/16.0f); - if (sleeve0) sleeve0->compile(1.0f/16.0f); - if (sleeve1) sleeve1->compile(1.0f/16.0f); - if (pants0) pants0->compile(1.0f/16.0f); - if (pants1) pants1->compile(1.0f/16.0f); - if (waist) waist->compile(1.0f/16.0f); - if (belt) belt->compile(1.0f/16.0f); - if (bodyArmor) bodyArmor->compile(1.0f/16.0f); - if (armArmor0) armArmor0->compile(1.0f/16.0f); - if (armArmor1) armArmor1->compile(1.0f/16.0f); - if (legging0) legging0->compile(1.0f/16.0f); - if (legging1) legging1->compile(1.0f/16.0f); - if (sock0) sock0->compile(1.0f/16.0f); - if (sock1) sock1->compile(1.0f/16.0f); - if (boot0) boot0->compile(1.0f/16.0f); - if (boot1) boot1->compile(1.0f/16.0f); + } holdingLeftHand=0; holdingRightHand=0; @@ -380,6 +369,80 @@ void HumanoidModel::render(shared_ptr entity, float time, float r, float { m_uiAnimOverrideBitmask=entity->getAnimOverrideBitmask(); + // Reset offsets so they don't leak onto other skins - Langtanium + head->translateX = 0; + head->translateY = 0; + head->translateZ = 0; + hair->translateX = 0; + hair->translateY = 0; + hair->translateZ = 0; + body->translateX = 0; + body->translateY = 0; + body->translateZ = 0; + arm0->translateX = 0; + arm0->translateY = 0; + arm0->translateZ = 0; + arm1->translateX = 0; + arm1->translateY = 0; + arm1->translateZ = 0; + leg0->translateX = 0; + leg0->translateY = 0; + leg0->translateZ = 0; + leg1->translateX = 0; + leg1->translateY = 0; + leg1->translateZ = 0; + if (m_is64x64) + { + jacket->translateX = 0; + jacket->translateY = 0; + jacket->translateZ = 0; + sleeve0->translateX = 0; + sleeve0->translateY = 0; + sleeve0->translateZ = 0; + sleeve1->translateX = 0; + sleeve1->translateY = 0; + sleeve1->translateZ = 0; + pants0->translateX = 0; + pants0->translateY = 0; + pants0->translateZ = 0; + pants1->translateX = 0; + pants1->translateY = 0; + pants1->translateZ = 0; + bodyArmor->translateX = 0; + bodyArmor->translateY = 0; + bodyArmor->translateZ = 0; + waist->translateX = 0; + waist->translateY = 0; + waist->translateZ = 0; + belt->translateX = 0; + belt->translateY = 0; + belt->translateZ = 0; + armArmor0->translateX = 0; + armArmor0->translateY = 0; + armArmor0->translateZ = 0; + armArmor1->translateX = 0; + armArmor1->translateY = 0; + armArmor1->translateZ = 0; + legging0->translateX = 0; + legging0->translateY = 0; + legging0->translateZ = 0; + legging1->translateX = 0; + legging1->translateY = 0; + legging1->translateZ = 0; + sock0->translateX = 0; + sock0->translateY = 0; + sock0->translateZ = 0; + sock1->translateX = 0; + sock1->translateY = 0; + sock1->translateZ = 0; + boot0->translateX = 0; + boot0->translateY = 0; + boot0->translateZ = 0; + boot1->translateX = 0; + boot1->translateY = 0; + boot1->translateZ = 0; + } + shared_ptr player = dynamic_pointer_cast(entity); vector* pSkinOffsets = nullptr; if (player != nullptr) @@ -414,40 +477,37 @@ void HumanoidModel::render(shared_ptr entity, float time, float r, float if (pSkinOffset->fD == 1 && body->translateX == 0) { body->translateX = pSkinOffset->fO / 16.0f; - if (jacket) + if (m_is64x64) + { jacket->translateX = pSkinOffset->fO / 16.0f; - if (bodyArmor) bodyArmor->translateX = pSkinOffset->fO / 16.0f; - if (waist) waist->translateX = pSkinOffset->fO / 16.0f; - if (belt) belt->translateX = pSkinOffset->fO / 16.0f; + } bodyOffsets[0] = pSkinOffset->fO / 16.0f; } else if (pSkinOffset->fD == 2 && body->translateY == 0) { body->translateY = pSkinOffset->fO / 16.0f; - if (jacket) + if (m_is64x64) + { jacket->translateY = pSkinOffset->fO / 16.0f; - if (bodyArmor) bodyArmor->translateY = pSkinOffset->fO / 16.0f; - if (waist) waist->translateY = pSkinOffset->fO / 16.0f; - if (belt) belt->translateY = pSkinOffset->fO / 16.0f; + } bodyOffsets[1] = pSkinOffset->fO / 16.0f; } else if (pSkinOffset->fD == 3 && body->translateZ == 0) { body->translateZ = pSkinOffset->fO / 16.0f; - if (jacket) + if (m_is64x64) + { jacket->translateZ = pSkinOffset->fO / 16.0f; - if (bodyArmor) bodyArmor->translateZ = pSkinOffset->fO / 16.0f; - if (waist) waist->translateZ = pSkinOffset->fO / 16.0f; - if (belt) belt->translateZ = pSkinOffset->fO / 16.0f; + } bodyOffsets[2] = pSkinOffset->fO / 16.0f; } break; @@ -455,28 +515,31 @@ void HumanoidModel::render(shared_ptr entity, float time, float r, float if (pSkinOffset->fD == 1 && arm0->translateX == 0) { arm0->translateX = pSkinOffset->fO / 16.0f; - if (sleeve0) + if (m_is64x64) + { sleeve0->translateX = pSkinOffset->fO / 16.0f; - if (armArmor0) armArmor0->translateX = pSkinOffset->fO / 16.0f; + } arm0Offsets[0] = pSkinOffset->fO / 16.0f; } else if (pSkinOffset->fD == 2 && arm0->translateY == 0) { arm0->translateY = pSkinOffset->fO / 16.0f; - if (sleeve0) + if (m_is64x64) + { sleeve0->translateY = pSkinOffset->fO / 16.0f; - if (armArmor0) armArmor0->translateY = pSkinOffset->fO / 16.0f; + } arm0Offsets[1] = pSkinOffset->fO / 16.0f; } else if (pSkinOffset->fD == 3 && arm0->translateZ == 0) { arm0->translateZ = pSkinOffset->fO / 16.0f; - if (sleeve0) + if (m_is64x64) + { sleeve0->translateZ = pSkinOffset->fO / 16.0f; - if (armArmor0) armArmor0->translateZ = pSkinOffset->fO / 16.0f; + } arm0Offsets[2] = pSkinOffset->fO / 16.0f; } break; @@ -484,28 +547,31 @@ void HumanoidModel::render(shared_ptr entity, float time, float r, float if (pSkinOffset->fD == 1 && arm1->translateX == 0) { arm1->translateX = pSkinOffset->fO / 16.0f; - if (sleeve1) + if (m_is64x64) + { sleeve1->translateX = pSkinOffset->fO / 16.0f; - if (armArmor1) armArmor1->translateX = pSkinOffset->fO / 16.0f; + } arm1Offsets[0] = pSkinOffset->fO / 16.0f; } else if (pSkinOffset->fD == 2 && arm1->translateY == 0) { arm1->translateY = pSkinOffset->fO / 16.0f; - if (sleeve1) + if (m_is64x64) + { sleeve1->translateY = pSkinOffset->fO / 16.0f; - if (armArmor1) armArmor1->translateY = pSkinOffset->fO / 16.0f; + } arm1Offsets[1] = pSkinOffset->fO / 16.0f; } else if (pSkinOffset->fD == 3 && arm1->translateZ == 0) { arm1->translateZ = pSkinOffset->fO / 16.0f; - if (sleeve1) + if (m_is64x64) + { sleeve1->translateZ = pSkinOffset->fO / 16.0f; - if (armArmor1) armArmor1->translateZ = pSkinOffset->fO / 16.0f; + } arm1Offsets[2] = pSkinOffset->fO / 16.0f; } break; @@ -513,40 +579,37 @@ void HumanoidModel::render(shared_ptr entity, float time, float r, float if (pSkinOffset->fD == 1 && leg0->translateX == 0) { leg0->translateX = pSkinOffset->fO / 16.0f; - if (pants0) + if (m_is64x64) + { pants0->translateX = pSkinOffset->fO / 16.0f; - if (legging0) legging0->translateX = pSkinOffset->fO / 16.0f; - if (sock0) sock0->translateX = pSkinOffset->fO / 16.0f; - if (boot0) boot0->translateX = pSkinOffset->fO / 16.0f; + } leg0Offsets[0] = pSkinOffset->fO / 16.0f; } else if (pSkinOffset->fD == 2 && leg0->translateY == 0) { leg0->translateY = pSkinOffset->fO / 16.0f; - if (pants0) + if (m_is64x64) + { pants0->translateY = pSkinOffset->fO / 16.0f; - if (legging0) legging0->translateY = pSkinOffset->fO / 16.0f; - if (sock0) sock0->translateY = pSkinOffset->fO / 16.0f; - if (boot0) boot0->translateY = pSkinOffset->fO / 16.0f; + } leg0Offsets[1] = pSkinOffset->fO / 16.0f; } else if (pSkinOffset->fD == 3 && leg0->translateZ == 0) { leg0->translateZ = pSkinOffset->fO / 16.0f; - if (pants0) + if (m_is64x64) + { pants0->translateZ = pSkinOffset->fO / 16.0f; - if (legging0) legging0->translateZ = pSkinOffset->fO / 16.0f; - if (sock0) sock0->translateZ = pSkinOffset->fO / 16.0f; - if (boot0) boot0->translateZ = pSkinOffset->fO / 16.0f; + } leg0Offsets[2] = pSkinOffset->fO / 16.0f; } break; @@ -554,40 +617,37 @@ void HumanoidModel::render(shared_ptr entity, float time, float r, float if (pSkinOffset->fD == 1 && leg1->translateX == 0) { leg1->translateX = pSkinOffset->fO / 16.0f; - if (pants1) + if (m_is64x64) + { pants1->translateX = pSkinOffset->fO / 16.0f; - if (legging1) legging1->translateX = pSkinOffset->fO / 16.0f; - if (sock1) sock1->translateX = pSkinOffset->fO / 16.0f; - if (boot1) boot1->translateX = pSkinOffset->fO / 16.0f; + } leg1Offsets[0] = pSkinOffset->fO / 16.0f; } else if (pSkinOffset->fD == 2 && leg1->translateY == 0) { leg1->translateY = pSkinOffset->fO / 16.0f; - if (pants1) + if (m_is64x64) + { pants1->translateY = pSkinOffset->fO / 16.0f; - if (legging1) legging1->translateY = pSkinOffset->fO / 16.0f; - if (sock1) sock1->translateY = pSkinOffset->fO / 16.0f; - if (boot1) boot1->translateY = pSkinOffset->fO / 16.0f; + } leg1Offsets[1] = pSkinOffset->fO / 16.0f; } else if (pSkinOffset->fD == 3 && leg1->translateZ == 0) { leg1->translateZ = pSkinOffset->fO / 16.0f; - if (pants1) + if (m_is64x64) + { pants1->translateZ = pSkinOffset->fO / 16.0f; - if (legging1) legging1->translateZ = pSkinOffset->fO / 16.0f; - if (sock1) sock1->translateZ = pSkinOffset->fO / 16.0f; - if (boot1) boot1->translateZ = pSkinOffset->fO / 16.0f; + } leg1Offsets[2] = pSkinOffset->fO / 16.0f; } break; @@ -724,16 +784,14 @@ void HumanoidModel::render(shared_ptr entity, float time, float r, float leg1->render(scale, usecompiled); hair->render(scale, usecompiled); - if (jacket) + if (m_is64x64) + { jacket->render(scale, usecompiled); - if (sleeve0) sleeve0->render(scale, usecompiled); - if (sleeve1) sleeve1->render(scale, usecompiled); - if (pants0) pants0->render(scale, usecompiled); - if (pants1) pants1->render(scale, usecompiled); + } glPopMatrix(); } @@ -746,50 +804,104 @@ void HumanoidModel::render(shared_ptr entity, float time, float r, float leg0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0&&(!(m_uiAnimOverrideBitmask&(1<0||!m_isArmor)); leg1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0&&(!(m_uiAnimOverrideBitmask&(1<0||!m_isArmor)); hair->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0); - if (jacket != 0) + if (m_is64x64) + { jacket->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0); - if (sleeve0 != 0) sleeve0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0); - if (sleeve1 != 0) sleeve1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0); - if (pants0 != 0) pants0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0); - if (pants1 != 0) pants1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0); - if (waist != 0) waist->render(scale, usecompiled); - if (belt != 0) belt->render(scale, usecompiled); - if (bodyArmor != 0) bodyArmor->render(scale, usecompiled); - if (armArmor0 != 0) armArmor0->render(scale, usecompiled); - if (armArmor1 != 0) armArmor1->render(scale, usecompiled); - if (legging0 != 0) legging0->render(scale, usecompiled); - if (legging1 != 0) legging1->render(scale, usecompiled); - if (sock0 != 0) sock0->render(scale, usecompiled); - if (sock1 != 0) sock1->render(scale, usecompiled); - if (boot0 != 0) boot0->render(scale, usecompiled); - if (boot1 != 0) boot1->render(scale, usecompiled); + } } } // This code is similar to what's above, but allows skin offsets to work in the skin select menu - Langtanium void HumanoidModel::renderUI(float time, float r, float bob, float yRot, float xRot, float scale, bool usecompiled, vector *skinOffsets) { - float headOffsets[3] = {0}; - float bodyOffsets[3] = {0}; - float arm0Offsets[3] = {0}; - float arm1Offsets[3] = {0}; - float leg0Offsets[3] = {0}; - float leg1Offsets[3] = {0}; + // Reset offsets so they don't leak onto other skins - Langtanium + head->translateX = 0; + head->translateY = 0; + head->translateZ = 0; + hair->translateX = 0; + hair->translateY = 0; + hair->translateZ = 0; + body->translateX = 0; + body->translateY = 0; + body->translateZ = 0; + arm0->translateX = 0; + arm0->translateY = 0; + arm0->translateZ = 0; + arm1->translateX = 0; + arm1->translateY = 0; + arm1->translateZ = 0; + leg0->translateX = 0; + leg0->translateY = 0; + leg0->translateZ = 0; + leg1->translateX = 0; + leg1->translateY = 0; + leg1->translateZ = 0; + if (m_is64x64) + { + jacket->translateX = 0; + jacket->translateY = 0; + jacket->translateZ = 0; + sleeve0->translateX = 0; + sleeve0->translateY = 0; + sleeve0->translateZ = 0; + sleeve1->translateX = 0; + sleeve1->translateY = 0; + sleeve1->translateZ = 0; + pants0->translateX = 0; + pants0->translateY = 0; + pants0->translateZ = 0; + pants1->translateX = 0; + pants1->translateY = 0; + pants1->translateZ = 0; + bodyArmor->translateX = 0; + bodyArmor->translateY = 0; + bodyArmor->translateZ = 0; + waist->translateX = 0; + waist->translateY = 0; + waist->translateZ = 0; + belt->translateX = 0; + belt->translateY = 0; + belt->translateZ = 0; + armArmor0->translateX = 0; + armArmor0->translateY = 0; + armArmor0->translateZ = 0; + armArmor1->translateX = 0; + armArmor1->translateY = 0; + armArmor1->translateZ = 0; + legging0->translateX = 0; + legging0->translateY = 0; + legging0->translateZ = 0; + legging1->translateX = 0; + legging1->translateY = 0; + legging1->translateZ = 0; + sock0->translateX = 0; + sock0->translateY = 0; + sock0->translateZ = 0; + sock1->translateX = 0; + sock1->translateY = 0; + sock1->translateZ = 0; + boot0->translateX = 0; + boot0->translateY = 0; + boot0->translateZ = 0; + boot1->translateX = 0; + boot1->translateY = 0; + boot1->translateZ = 0; + } if (skinOffsets != nullptr) { @@ -802,200 +914,179 @@ void HumanoidModel::renderUI(float time, float r, float bob, float yRot, float x { head->translateX = pSkinOffset->fO / 16.0f; hair->translateX = pSkinOffset->fO / 16.0f; - headOffsets[0] = pSkinOffset->fO / 16.0f; } else if (pSkinOffset->fD == 2 && head->translateY == 0) { head->translateY = pSkinOffset->fO / 16.0f; hair->translateY = pSkinOffset->fO / 16.0f; - headOffsets[1] = pSkinOffset->fO / 16.0f; } else if (pSkinOffset->fD == 3 && head->translateZ == 0) { head->translateZ = pSkinOffset->fO / 16.0f; hair->translateZ = pSkinOffset->fO / 16.0f; - headOffsets[2] = pSkinOffset->fO / 16.0f; } break; case eBodyOffset_Body: if (pSkinOffset->fD == 1 && body->translateX == 0) { body->translateX = pSkinOffset->fO / 16.0f; - if (jacket) + if (m_is64x64) + { jacket->translateX = pSkinOffset->fO / 16.0f; - if (bodyArmor) bodyArmor->translateX = pSkinOffset->fO / 16.0f; - if (waist) waist->translateX = pSkinOffset->fO / 16.0f; - if (belt) belt->translateX = pSkinOffset->fO / 16.0f; - bodyOffsets[0] = pSkinOffset->fO / 16.0f; + } } else if (pSkinOffset->fD == 2 && body->translateY == 0) { body->translateY = pSkinOffset->fO / 16.0f; - if (jacket) + if (m_is64x64) + { jacket->translateY = pSkinOffset->fO / 16.0f; - if (bodyArmor) bodyArmor->translateY = pSkinOffset->fO / 16.0f; - if (waist) waist->translateY = pSkinOffset->fO / 16.0f; - if (belt) belt->translateY = pSkinOffset->fO / 16.0f; - bodyOffsets[1] = pSkinOffset->fO / 16.0f; + } } else if (pSkinOffset->fD == 3 && body->translateZ == 0) { body->translateZ = pSkinOffset->fO / 16.0f; - if (jacket) + if (m_is64x64) + { jacket->translateZ = pSkinOffset->fO / 16.0f; - if (bodyArmor) bodyArmor->translateZ = pSkinOffset->fO / 16.0f; - if (waist) waist->translateZ = pSkinOffset->fO / 16.0f; - if (belt) belt->translateZ = pSkinOffset->fO / 16.0f; - bodyOffsets[2] = pSkinOffset->fO / 16.0f; + } } break; case eBodyOffset_Arm0: if (pSkinOffset->fD == 1 && arm0->translateX == 0) { arm0->translateX = pSkinOffset->fO / 16.0f; - if (sleeve0) + if (m_is64x64) + { sleeve0->translateX = pSkinOffset->fO / 16.0f; - if (armArmor0) armArmor0->translateX = pSkinOffset->fO / 16.0f; - arm0Offsets[0] = pSkinOffset->fO / 16.0f; + } } else if (pSkinOffset->fD == 2 && arm0->translateY == 0) { arm0->translateY = pSkinOffset->fO / 16.0f; - if (sleeve0) + if (m_is64x64) + { sleeve0->translateY = pSkinOffset->fO / 16.0f; - if (armArmor0) armArmor0->translateY = pSkinOffset->fO / 16.0f; - arm0Offsets[1] = pSkinOffset->fO / 16.0f; + } } else if (pSkinOffset->fD == 3 && arm0->translateZ == 0) { arm0->translateZ = pSkinOffset->fO / 16.0f; - if (sleeve0) + if (m_is64x64) + { sleeve0->translateZ = pSkinOffset->fO / 16.0f; - if (armArmor0) armArmor0->translateZ = pSkinOffset->fO / 16.0f; - arm0Offsets[2] = pSkinOffset->fO / 16.0f; + } } break; case eBodyOffset_Arm1: if (pSkinOffset->fD == 1 && arm1->translateX == 0) { arm1->translateX = pSkinOffset->fO / 16.0f; - if (sleeve1) + if (m_is64x64) + { sleeve1->translateX = pSkinOffset->fO / 16.0f; - if (armArmor1) armArmor1->translateX = pSkinOffset->fO / 16.0f; - arm1Offsets[0] = pSkinOffset->fO / 16.0f; + } } else if (pSkinOffset->fD == 2 && arm1->translateY == 0) { arm1->translateY = pSkinOffset->fO / 16.0f; - if (sleeve1) + if (m_is64x64) + { sleeve1->translateY = pSkinOffset->fO / 16.0f; - if (armArmor1) armArmor1->translateY = pSkinOffset->fO / 16.0f; - arm1Offsets[1] = pSkinOffset->fO / 16.0f; + } } else if (pSkinOffset->fD == 3 && arm1->translateZ == 0) { arm1->translateZ = pSkinOffset->fO / 16.0f; - if (sleeve1) + if (m_is64x64) + { sleeve1->translateZ = pSkinOffset->fO / 16.0f; - if (armArmor1) armArmor1->translateZ = pSkinOffset->fO / 16.0f; - arm1Offsets[2] = pSkinOffset->fO / 16.0f; + } } break; case eBodyOffset_Leg0: if (pSkinOffset->fD == 1 && leg0->translateX == 0) { leg0->translateX = pSkinOffset->fO / 16.0f; - if (pants0) + if (m_is64x64) + { pants0->translateX = pSkinOffset->fO / 16.0f; - if (legging0) legging0->translateX = pSkinOffset->fO / 16.0f; - if (sock0) sock0->translateX = pSkinOffset->fO / 16.0f; - if (boot0) boot0->translateX = pSkinOffset->fO / 16.0f; - leg0Offsets[0] = pSkinOffset->fO / 16.0f; + } } else if (pSkinOffset->fD == 2 && leg0->translateY == 0) { leg0->translateY = pSkinOffset->fO / 16.0f; - if (pants0) + if (m_is64x64) + { pants0->translateY = pSkinOffset->fO / 16.0f; - if (legging0) legging0->translateY = pSkinOffset->fO / 16.0f; - if (sock0) sock0->translateY = pSkinOffset->fO / 16.0f; - if (boot0) boot0->translateY = pSkinOffset->fO / 16.0f; - leg0Offsets[1] = pSkinOffset->fO / 16.0f; + } } else if (pSkinOffset->fD == 3 && leg0->translateZ == 0) { leg0->translateZ = pSkinOffset->fO / 16.0f; - if (pants0) + if (m_is64x64) + { pants0->translateZ = pSkinOffset->fO / 16.0f; - if (legging0) legging0->translateZ = pSkinOffset->fO / 16.0f; - if (sock0) sock0->translateZ = pSkinOffset->fO / 16.0f; - if (boot0) boot0->translateZ = pSkinOffset->fO / 16.0f; - leg0Offsets[2] = pSkinOffset->fO / 16.0f; + } } break; case eBodyOffset_Leg1: if (pSkinOffset->fD == 1 && leg1->translateX == 0) { leg1->translateX = pSkinOffset->fO / 16.0f; - if (pants1) + if (m_is64x64) + { pants1->translateX = pSkinOffset->fO / 16.0f; - if (legging1) legging1->translateX = pSkinOffset->fO / 16.0f; - if (sock1) sock1->translateX = pSkinOffset->fO / 16.0f; - if (boot1) boot1->translateX = pSkinOffset->fO / 16.0f; - leg1Offsets[0] = pSkinOffset->fO / 16.0f; + } } else if (pSkinOffset->fD == 2 && leg1->translateY == 0) { leg1->translateY = pSkinOffset->fO / 16.0f; - if (pants1) + if (m_is64x64) + { pants1->translateY = pSkinOffset->fO / 16.0f; - if (legging1) legging1->translateY = pSkinOffset->fO / 16.0f; - if (sock1) sock1->translateY = pSkinOffset->fO / 16.0f; - if (boot1) boot1->translateY = pSkinOffset->fO / 16.0f; - leg1Offsets[1] = pSkinOffset->fO / 16.0f; + } } else if (pSkinOffset->fD == 3 && leg1->translateZ == 0) { leg1->translateZ = pSkinOffset->fO / 16.0f; - if (pants1) + if (m_is64x64) + { pants1->translateZ = pSkinOffset->fO / 16.0f; - if (legging1) legging1->translateZ = pSkinOffset->fO / 16.0f; - if (sock1) sock1->translateZ = pSkinOffset->fO / 16.0f; - if (boot1) boot1->translateZ = pSkinOffset->fO / 16.0f; - leg1Offsets[2] = pSkinOffset->fO / 16.0f; + } } break; } @@ -1011,38 +1102,25 @@ void HumanoidModel::renderUI(float time, float r, float bob, float yRot, float x leg0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0&&(!(m_uiAnimOverrideBitmask&(1<0||!m_isArmor)); leg1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0&&(!(m_uiAnimOverrideBitmask&(1<0||!m_isArmor)); hair->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0); - if (jacket != 0) + if (m_is64x64) + { jacket->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0); - if (sleeve0 != 0) sleeve0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0); - if (sleeve1 != 0) sleeve1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0); - if (pants0 != 0) pants0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0); - if (pants1 != 0) pants1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0); - if (waist != 0) waist->render(scale, usecompiled); - if (belt != 0) belt->render(scale, usecompiled); - if (bodyArmor != 0) bodyArmor->render(scale, usecompiled); - if (armArmor0 != 0) armArmor0->render(scale, usecompiled); - if (armArmor1 != 0) armArmor1->render(scale, usecompiled); - if (legging0 != 0) legging0->render(scale, usecompiled); - if (legging1 != 0) legging1->render(scale, usecompiled); - if (sock0 != 0) sock0->render(scale, usecompiled); - if (sock1 != 0) sock1->render(scale, usecompiled); - if (boot0 != 0) boot0->render(scale, usecompiled); - if (boot1 != 0) boot1->render(scale, usecompiled); + } } void HumanoidModel::setupAnim(float time, float r, float bob, float yRot, float xRot, float scale, shared_ptr entity, unsigned int uiBitmaskOverrideAnim) diff --git a/Minecraft.Client/HumanoidModel.h b/Minecraft.Client/HumanoidModel.h index 424509a7..8980be15 100644 --- a/Minecraft.Client/HumanoidModel.h +++ b/Minecraft.Client/HumanoidModel.h @@ -18,6 +18,7 @@ public: bool elytraFlying; bool elytraCrouching; bool m_isArmor; + bool m_is64x64; unsigned int m_uiAnimOverrideBitmask; float m_fYOffset; enum animbits diff --git a/Minecraft.Client/ItemInHandRenderer.cpp b/Minecraft.Client/ItemInHandRenderer.cpp index e04945c5..4d91b4f0 100644 --- a/Minecraft.Client/ItemInHandRenderer.cpp +++ b/Minecraft.Client/ItemInHandRenderer.cpp @@ -407,26 +407,6 @@ void ItemInHandRenderer::render(float a) return; } - vector* pSkinOffsets = nullptr; - pSkinOffsets = player->GetSkinOffsets(); - if (pSkinOffsets != nullptr) - { - for( SKIN_OFFSET *pSkinOffset : *pSkinOffsets ) - { - switch (pSkinOffset->ePart) - { - case eBodyOffset_Arm0: - if (pSkinOffset->fD == 2) - h += pSkinOffset->fO / 16.0f; - break; - case eBodyOffset_Tool0: - if (pSkinOffset->fD == 2) - h += pSkinOffset->fO / 16.0f; - break; - } - } - } - // 4J - added so we can adjust the position of the hands for horizontal & vertical split screens float fudgeX = 0.0f; float fudgeY = 0.0f;