From 2be90366ba8a82ffcd1b5377fe8431ff37ac16ca Mon Sep 17 00:00:00 2001 From: ItzSonicFaner <165782267+ItzSonicFaner@users.noreply.github.com> Date: Mon, 30 Mar 2026 17:30:26 +0300 Subject: [PATCH] Patch 3 --- .../Common/UI/UIControl_PlayerSkinPreview.cpp | 24 ++++---- .../Common/UI/UIControl_PlayerSkinPreview.h | 2 +- Minecraft.Client/LivingEntityRenderer.cpp | 46 +++++++------- Minecraft.Client/LivingEntityRenderer.h | 2 +- Minecraft.Client/PlayerRenderer.cpp | 60 ++++++++++++------- Minecraft.Client/PlayerRenderer.h | 2 +- 6 files changed, 78 insertions(+), 58 deletions(-) diff --git a/Minecraft.Client/Common/UI/UIControl_PlayerSkinPreview.cpp b/Minecraft.Client/Common/UI/UIControl_PlayerSkinPreview.cpp index 07bb105e..441adabb 100644 --- a/Minecraft.Client/Common/UI/UIControl_PlayerSkinPreview.cpp +++ b/Minecraft.Client/Common/UI/UIControl_PlayerSkinPreview.cpp @@ -1,13 +1,13 @@ #include "stdafx.h" -#include "../../Minecraft.h" -#include "../../ScreenSizeCalculator.h" -#include "../../EntityRenderDispatcher.h" -#include "../../PlayerRenderer.h" -#include "../../HumanoidModel.h" -#include "../../Lighting.h" -#include "../../ModelPart.h" -#include "../../Options.h" -#include "../../../Minecraft.World/net.minecraft.world.entity.player.h" +#include "..\..\Minecraft.h" +#include "..\..\ScreenSizeCalculator.h" +#include "..\..\EntityRenderDispatcher.h" +#include "..\..\PlayerRenderer.h" +#include "..\..\HumanoidModel.h" +#include "..\..\Lighting.h" +#include "..\..\ModelPart.h" +#include "..\..\Options.h" +#include "..\..\..\Minecraft.World\net.minecraft.world.entity.player.h" #include "Skins.h" #include "UIControl_PlayerSkinPreview.h" #include @@ -259,7 +259,7 @@ void UIControl_PlayerSkinPreview::render(EntityRenderer *renderer, double x, dou glPushMatrix(); glDisable(GL_CULL_FACE); - HumanoidModel *model; + HumanoidModel *model = static_cast(renderer->getModel()); Textures *textures = Minecraft::GetInstance()->textures; int skinId = textures->loadMemTexture(m_customTextureUrl, m_backupTexture) - 37; @@ -267,14 +267,14 @@ void UIControl_PlayerSkinPreview::render(EntityRenderer *renderer, double x, dou { if (textures->getHeight(m_customTextureUrl, m_backupTexture) == 64) model = static_cast(renderer->getNewModelSlim()); - else if (textures->getHeight(m_customTextureUrl, m_backupTexture) == 32) + else model = static_cast(renderer->getModelSlim()); } else { if (textures->getHeight(m_customTextureUrl, m_backupTexture) == 64) model = static_cast(renderer->getNewModel()); - else if (textures->getHeight(m_customTextureUrl, m_backupTexture) == 32) + else model = static_cast(renderer->getModel()); } diff --git a/Minecraft.Client/Common/UI/UIControl_PlayerSkinPreview.h b/Minecraft.Client/Common/UI/UIControl_PlayerSkinPreview.h index 974e5924..a7c3126e 100644 --- a/Minecraft.Client/Common/UI/UIControl_PlayerSkinPreview.h +++ b/Minecraft.Client/Common/UI/UIControl_PlayerSkinPreview.h @@ -1,7 +1,7 @@ #pragma once #include "UIControl.h" -#include "../../Textures.h" +#include "..\..\Textures.h" class ModelPart; class EntityRenderer; diff --git a/Minecraft.Client/LivingEntityRenderer.cpp b/Minecraft.Client/LivingEntityRenderer.cpp index 8128018a..9bfec7fe 100644 --- a/Minecraft.Client/LivingEntityRenderer.cpp +++ b/Minecraft.Client/LivingEntityRenderer.cpp @@ -5,9 +5,9 @@ #include "ModelPart.h" #include "EntityRenderDispatcher.h" #include "MultiPlayerLocalPlayer.h" -#include "../Minecraft.World/Arrow.h" -#include "../Minecraft.World/Mth.h" -#include "../Minecraft.World/Player.h" +#include "..\Minecraft.World\Arrow.h" +#include "..\Minecraft.World\Mth.h" +#include "..\Minecraft.World\Player.h" #include "Skins.h" ResourceLocation LivingEntityRenderer::ENCHANT_GLINT_LOCATION = ResourceLocation(TN__BLUR__MISC_GLINT); @@ -56,13 +56,12 @@ void LivingEntityRenderer::render(shared_ptr _mob, double x, double y, d shared_ptr mob = dynamic_pointer_cast(_mob); shared_ptr player = dynamic_pointer_cast(_mob); - Model *resModel; + Model *resModel = static_cast(model); if (mob == nullptr) { return; } - app.DebugPrintf("LivingEntityRenderer::render called for type %d\n", _mob->GetType()); glPushMatrix(); glDisable(GL_CULL_FACE); @@ -70,26 +69,26 @@ void LivingEntityRenderer::render(shared_ptr _mob, double x, double y, d if (player != nullptr) { Textures *textures = Minecraft::GetInstance()->textures; - int skinId = player->getPlayerDefaultSkin() - 1; - int defaultSkin = player->getPlayerDefaultSkin() + 35; + int skinId = player->getCustomSkin() - 1; + int defaultSkin = player->getCustomSkin() + 35; if (slim[skinId] == true) { if (textures->getHeight(player->customTextureUrl, defaultSkin) == 64) resModel = static_cast(newModelSlim); - else if (textures->getHeight(player->customTextureUrl, defaultSkin) == 32) + else resModel = static_cast(modelSlim); } else { if (textures->getHeight(player->customTextureUrl, defaultSkin) == 64) resModel = static_cast(newModel); - else if (textures->getHeight(player->customTextureUrl, defaultSkin) == 32) + else resModel = static_cast(model); } } else - resModel = model; + resModel = static_cast(model); resModel->attackTime = getAttackAnim(mob, a); if (armor != nullptr) armor->attackTime = resModel->attackTime; @@ -282,31 +281,31 @@ void LivingEntityRenderer::render(shared_ptr _mob, double x, double y, d void LivingEntityRenderer::renderModel(shared_ptr mob, float wp, float ws, float bob, float headRotMinusBodyRot, float headRotx, float scale) { shared_ptr player = dynamic_pointer_cast(mob); - Model *resModel; + Model *resModel = static_cast(model); if (player != nullptr) { Textures *textures = Minecraft::GetInstance()->textures; - int skinId = player->getPlayerDefaultSkin() - 1; - int defaultSkin = player->getPlayerDefaultSkin() + 35; + int skinId = player->getCustomSkin() - 1; + int defaultSkin = player->getCustomSkin() + 35; if (slim[skinId] == true) { if (textures->getHeight(player->customTextureUrl, defaultSkin) == 64) resModel = static_cast(newModelSlim); - else if (textures->getHeight(player->customTextureUrl, defaultSkin) == 32) + else resModel = static_cast(modelSlim); } else { if (textures->getHeight(player->customTextureUrl, defaultSkin) == 64) resModel = static_cast(newModel); - else if (textures->getHeight(player->customTextureUrl, defaultSkin) == 32) + else resModel = static_cast(model); } } else - resModel = model; + resModel = static_cast(model); bindTexture(mob); if (!mob->isInvisible()) @@ -380,31 +379,31 @@ void LivingEntityRenderer::additionalRendering(shared_ptr mob, flo void LivingEntityRenderer::renderArrows(shared_ptr mob, float a) { shared_ptr player = dynamic_pointer_cast(mob); - Model *resModel; + Model *resModel = static_cast(model); if (player != nullptr) { Textures *textures = Minecraft::GetInstance()->textures; - int skinId = player->getPlayerDefaultSkin() - 1; - int defaultSkin = player->getPlayerDefaultSkin() + 35; + int skinId = player->getCustomSkin() - 1; + int defaultSkin = player->getCustomSkin() + 35; if (slim[skinId] == true) { if (textures->getHeight(player->customTextureUrl, defaultSkin) == 64) resModel = static_cast(newModelSlim); - else if (textures->getHeight(player->customTextureUrl, defaultSkin) == 32) + else resModel = static_cast(modelSlim); } else { if (textures->getHeight(player->customTextureUrl, defaultSkin) == 64) resModel = static_cast(newModel); - else if (textures->getHeight(player->customTextureUrl, defaultSkin) == 32) + else resModel = static_cast(model); } } else - resModel = model; + resModel = static_cast(model); int arrowCount = mob->getArrowCount(); @@ -417,7 +416,8 @@ void LivingEntityRenderer::renderArrows(shared_ptr mob, float a) { glPushMatrix(); - ModelPart *modelPart = resModel->getRandomModelPart(random); + ModelPart *modelPart; + modelPart = resModel->getRandomModelPart(random); Cube *cube = modelPart->cubes[random.nextInt(modelPart->cubes.size())]; modelPart->translateTo(1 / 16.0f); diff --git a/Minecraft.Client/LivingEntityRenderer.h b/Minecraft.Client/LivingEntityRenderer.h index ba2aa330..c2848c56 100644 --- a/Minecraft.Client/LivingEntityRenderer.h +++ b/Minecraft.Client/LivingEntityRenderer.h @@ -1,7 +1,7 @@ #pragma once #include "ResourceLocation.h" #include "EntityRenderer.h" -#include "../Minecraft.World/LivingEntity.h" +#include "..\Minecraft.World\LivingEntity.h" class LivingEntity; diff --git a/Minecraft.Client/PlayerRenderer.cpp b/Minecraft.Client/PlayerRenderer.cpp index 9d5ba68b..daf312e5 100644 --- a/Minecraft.Client/PlayerRenderer.cpp +++ b/Minecraft.Client/PlayerRenderer.cpp @@ -6,13 +6,13 @@ #include "ModelPart.h" #include "LocalPlayer.h" #include "MultiPlayerLocalPlayer.h" -#include "EntityRenderDispatcher.h" -#include "../Minecraft.World/net.minecraft.world.entity.h" -#include "../Minecraft.World/net.minecraft.world.entity.player.h" -#include "../Minecraft.World/net.minecraft.world.item.h" -#include "../Minecraft.World/net.minecraft.world.level.tile.h" -#include "../Minecraft.World/net.minecraft.h" -#include "../Minecraft.World/StringHelpers.h" +#include "entityRenderDispatcher.h" +#include "..\Minecraft.World\net.minecraft.world.entity.h" +#include "..\Minecraft.World\net.minecraft.world.entity.player.h" +#include "..\Minecraft.World\net.minecraft.world.item.h" +#include "..\Minecraft.World\net.minecraft.world.level.tile.h" +#include "..\Minecraft.World\net.minecraft.h" +#include "..\Minecraft.World\StringHelpers.h" #include "Skins.h" static unsigned int nametagColorForIndex(int index) @@ -164,7 +164,7 @@ void PlayerRenderer::render(shared_ptr _mob, double x, double y, double // 4J - dynamic cast required because we aren't using templates/generics in our version shared_ptr mob = dynamic_pointer_cast(_mob); - HumanoidModel *resModel; + HumanoidModel *resModel = static_cast(model); if(mob == nullptr) return; if(mob->hasInvisiblePrivilege()) return; @@ -179,19 +179,19 @@ void PlayerRenderer::render(shared_ptr _mob, double x, double y, double { if (textures->getHeight(mob->customTextureUrl, defaultSkin) == 64) resModel = static_cast(newHumanoidModelSlim); - else if (textures->getHeight(mob->customTextureUrl, defaultSkin) == 32) + else resModel = static_cast(humanoidModelSlim); } else { if (textures->getHeight(mob->customTextureUrl, defaultSkin) == 64) resModel = static_cast(newHumanoidModel); - else if (textures->getHeight(mob->customTextureUrl, defaultSkin) == 32) + else resModel = static_cast(humanoidModel); } } else - resModel = humanoidModel; + resModel = static_cast(model); /*if (mob != nullptr && newHumanoidModelSlim != nullptr && (mob->getCustomSkin() >= 10 && mob->getCustomSkin() <= 18)) resModel = newHumanoidModelSlim; else if (mob != nullptr && newHumanoidModel != nullptr && (mob->getCustomSkin() >= 2 && mob->getCustomSkin() <= 9)) resModel = newHumanoidModel; @@ -298,7 +298,7 @@ void PlayerRenderer::additionalRendering(shared_ptr _mob, float a) // 4J - dynamic cast required because we aren't using templates/generics in our version shared_ptr mob = dynamic_pointer_cast(_mob); - HumanoidModel *resModel; + HumanoidModel *resModel = static_cast(model); if (mob != nullptr) { @@ -310,19 +310,19 @@ void PlayerRenderer::additionalRendering(shared_ptr _mob, float a) { if (textures->getHeight(mob->customTextureUrl, defaultSkin) == 64) resModel = static_cast(newHumanoidModelSlim); - else if (textures->getHeight(mob->customTextureUrl, defaultSkin) == 32) + else resModel = static_cast(humanoidModelSlim); } else { if (textures->getHeight(mob->customTextureUrl, defaultSkin) == 64) resModel = static_cast(newHumanoidModel); - else if (textures->getHeight(mob->customTextureUrl, defaultSkin) == 32) + else resModel = static_cast(humanoidModel); } } else - resModel = humanoidModel; + resModel = static_cast(model); /*if (mob != nullptr && newHumanoidModelSlim != nullptr && (mob->getCustomSkin() >= 10 && mob->getCustomSkin() <= 18)) resModel = newHumanoidModelSlim; else if (mob != nullptr && newHumanoidModel != nullptr && (mob->getCustomSkin() >= 2 && mob->getCustomSkin() <= 9)) resModel = newHumanoidModel; @@ -581,7 +581,7 @@ void PlayerRenderer::scale(shared_ptr player, float a) void PlayerRenderer::renderHand() { shared_ptr player = dynamic_pointer_cast(Minecraft::GetInstance()->player); - HumanoidModel *resModel; + HumanoidModel *resModel = static_cast(model); if (player != nullptr) { @@ -593,19 +593,19 @@ void PlayerRenderer::renderHand() { if (textures->getHeight(player->customTextureUrl, defaultSkin) == 64) resModel = static_cast(newHumanoidModelSlim); - else if (textures->getHeight(player->customTextureUrl, defaultSkin) == 32) + else resModel = static_cast(humanoidModelSlim); } else { if (textures->getHeight(player->customTextureUrl, defaultSkin) == 64) resModel = static_cast(newHumanoidModel); - else if (textures->getHeight(player->customTextureUrl, defaultSkin) == 32) + else resModel = static_cast(humanoidModel); } } else - resModel = humanoidModel; + resModel = static_cast(model); /*if (player != nullptr && newHumanoidModelSlim != nullptr && (player->getCustomSkin() >= 10 && player->getCustomSkin() <= 18)) resModel = newHumanoidModelSlim; else if (player != nullptr && newHumanoidModel != nullptr && (player->getCustomSkin() >= 2 && player->getCustomSkin() <= 9)) resModel = newHumanoidModel; @@ -621,6 +621,26 @@ void PlayerRenderer::renderHand() // 4J-PB - does this skin have its arm0 disabled? (Dalek, etc) if((resModel->m_uiAnimOverrideBitmask&(1<arm0->render(1 / 16.0f,true); + + //Render custom skin boxes on viewmodel - Botch + 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 = resModel->arm0->children; + std::unordered_set 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 _mob, double x, double y, double z) @@ -682,4 +702,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 diff --git a/Minecraft.Client/PlayerRenderer.h b/Minecraft.Client/PlayerRenderer.h index 9d559201..0e70b0ae 100644 --- a/Minecraft.Client/PlayerRenderer.h +++ b/Minecraft.Client/PlayerRenderer.h @@ -1,6 +1,6 @@ #pragma once #include "MobRenderer.h" -#include "../Minecraft.World/Player.h" +#include "..\Minecraft.World\Player.h" class HumanoidModel;