Skip to content

Commit 351e2bb

Browse files
committed
Fix 64x64 skin rendering
1 parent 9c05e2a commit 351e2bb

5 files changed

Lines changed: 32 additions & 21 deletions

File tree

Minecraft.Client/ClientConnection.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2738,6 +2738,17 @@ void ClientConnection::handleTextureAndGeometry(shared_ptr<TextureAndGeometryPac
27382738
// Add the anim override
27392739
app.SetAnimOverrideBitmask(packet->dwSkinID,packet->uiAnimOverrideBitmask);
27402740

2741+
// Refresh any existing remote players using this skin so slim/classic
2742+
// model selection updates as soon as the geometry metadata arrives.
2743+
for (auto& levelPlayer : level->players)
2744+
{
2745+
shared_ptr<Player> player = dynamic_pointer_cast<Player>(levelPlayer);
2746+
if (player == nullptr) continue;
2747+
if (player->getCustomSkin() != packet->dwSkinID && player->customTextureUrl != packet->textureName) continue;
2748+
2749+
player->setAnimOverrideBitmask(player->getSkinAnimOverrideBitmask(player->getCustomSkin()));
2750+
}
2751+
27412752
// clear out the pending texture request
27422753
Minecraft::GetInstance()->handleClientTextureReceived(packet->textureName);
27432754
}

Minecraft.Client/Common/Consoles_App.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9203,10 +9203,10 @@ void CMinecraftApp::SetAdditionalSkinBoxes(DWORD dwSkinID, SKIN_BOX *SkinBoxA, D
92039203
EntityRenderer *renderer = EntityRenderDispatcher::instance->getRenderer(eTYPE_PLAYER);
92049204
unsigned int m_uiAnimOverrideBitmask = Player::getSkinAnimOverrideBitmask(dwSkinID);
92059205
Model *pModel;
9206-
if (m_uiAnimOverrideBitmask&(1<<HumanoidModel::eAnim_ClassicModel))
9207-
pModel = renderer->getModelClassic();
9208-
else if (m_uiAnimOverrideBitmask&(1<<HumanoidModel::eAnim_SlimModel))
9206+
if (m_uiAnimOverrideBitmask&(1<<HumanoidModel::eAnim_SlimModel))
92099207
pModel = renderer->getModelSlim();
9208+
else if (renderer->getModelClassic() != nullptr)
9209+
pModel = renderer->getModelClassic();
92109210
else
92119211
pModel = renderer->getModel();
92129212
vector<ModelPart *> *pvModelPart = new vector<ModelPart *>;
@@ -9242,10 +9242,10 @@ vector<ModelPart *> * CMinecraftApp::SetAdditionalSkinBoxes(DWORD dwSkinID, vect
92429242
EntityRenderer *renderer = EntityRenderDispatcher::instance->getRenderer(eTYPE_PLAYER);
92439243
unsigned int m_uiAnimOverrideBitmask = Player::getSkinAnimOverrideBitmask(dwSkinID);
92449244
Model *pModel;
9245-
if (m_uiAnimOverrideBitmask&(1<<HumanoidModel::eAnim_ClassicModel))
9246-
pModel = renderer->getModelClassic();
9247-
else if (m_uiAnimOverrideBitmask&(1<<HumanoidModel::eAnim_SlimModel))
9245+
if (m_uiAnimOverrideBitmask&(1<<HumanoidModel::eAnim_SlimModel))
92489246
pModel = renderer->getModelSlim();
9247+
else if (renderer->getModelClassic() != nullptr)
9248+
pModel = renderer->getModelClassic();
92499249
else
92509250
pModel = renderer->getModel();
92519251
vector<ModelPart *> *pvModelPart = new vector<ModelPart *>;

Minecraft.Client/LivingEntityRenderer.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ void LivingEntityRenderer::render(shared_ptr<Entity> _mob, double x, double y, d
7070
glPushMatrix();
7171
glDisable(GL_CULL_FACE);
7272

73-
if (player != nullptr && modelClassic != nullptr && (player->getCustomSkin() == 18 || player->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_ClassicModel))) resModel = modelClassic;
74-
else if (player != nullptr && modelSlim != nullptr && ((player->getCustomSkin() >= 8 && player->getCustomSkin() <= 17) || player->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_SlimModel))) resModel = modelSlim;
73+
if (player != nullptr && modelSlim != nullptr && ((player->getCustomSkin() >= 8 && player->getCustomSkin() <= 17) || player->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_SlimModel))) resModel = modelSlim;
74+
else if (player != nullptr && modelClassic != nullptr) resModel = modelClassic;
7575
else resModel = model;
7676

7777
resModel->attackTime = getAttackAnim(mob, a);
@@ -267,8 +267,8 @@ void LivingEntityRenderer::renderModel(shared_ptr<LivingEntity> mob, float wp, f
267267
shared_ptr<Player> player = dynamic_pointer_cast<Player>(mob);
268268
Model *resModel;
269269

270-
if (player != nullptr && modelClassic != nullptr && (player->getCustomSkin() == 18 || player->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_ClassicModel))) resModel = modelClassic;
271-
else if (player != nullptr && modelSlim != nullptr && ((player->getCustomSkin() >= 8 && player->getCustomSkin() <= 17) || player->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_SlimModel))) resModel = modelSlim;
270+
if (player != nullptr && modelSlim != nullptr && ((player->getCustomSkin() >= 8 && player->getCustomSkin() <= 17) || player->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_SlimModel))) resModel = modelSlim;
271+
else if (player != nullptr && modelClassic != nullptr) resModel = modelClassic;
272272
else resModel = model;
273273

274274
bindTexture(mob);
@@ -345,8 +345,8 @@ void LivingEntityRenderer::renderArrows(shared_ptr<LivingEntity> mob, float a)
345345
shared_ptr<Player> player = dynamic_pointer_cast<Player>(mob);
346346
Model *resModel;
347347

348-
if (player != nullptr && modelClassic != nullptr && (player->getCustomSkin() == 18 || player->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_ClassicModel))) resModel = modelClassic;
349-
else if (player != nullptr && modelSlim != nullptr && ((player->getCustomSkin() >= 8 && player->getCustomSkin() <= 17) || player->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_SlimModel))) resModel = modelSlim;
348+
if (player != nullptr && modelSlim != nullptr && ((player->getCustomSkin() >= 8 && player->getCustomSkin() <= 17) || player->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_SlimModel))) resModel = modelSlim;
349+
else if (player != nullptr && modelClassic != nullptr) resModel = modelClassic;
350350
else resModel = model;
351351

352352
int arrowCount = mob->getArrowCount();
@@ -703,4 +703,4 @@ void LivingEntityRenderer::renderNameTag(shared_ptr<LivingEntity> mob, const wst
703703
glDisable(GL_BLEND);
704704
glColor4f(1, 1, 1, 1);
705705
glPopMatrix();
706-
}
706+
}

Minecraft.Client/MemTexture.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,4 @@ MemTexture::MemTexture(const wstring& _url, PBYTE pbData,DWORD dwBytes, MemTextu
3030
MemTexture::~MemTexture()
3131
{
3232
delete loadedImage;
33-
}
33+
}

Minecraft.Client/PlayerRenderer.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -167,8 +167,8 @@ void PlayerRenderer::render(shared_ptr<Entity> _mob, double x, double y, double
167167
if(mob == nullptr) return;
168168
if(mob->hasInvisiblePrivilege()) return;
169169

170-
if (mob != nullptr && humanoidModelClassic != nullptr && (mob->getCustomSkin() == 18 || mob->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_ClassicModel))) resModel = humanoidModelClassic;
171-
else if (mob != nullptr && humanoidModelSlim != nullptr && ((mob->getCustomSkin() >= 8 && mob->getCustomSkin() <= 17) || mob->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_SlimModel))) resModel = humanoidModelSlim;
170+
if (mob != nullptr && humanoidModelSlim != nullptr && ((mob->getCustomSkin() >= 8 && mob->getCustomSkin() <= 17) || mob->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_SlimModel))) resModel = humanoidModelSlim;
171+
else if (mob != nullptr && humanoidModelClassic != nullptr) resModel = humanoidModelClassic;
172172
else resModel = humanoidModel;
173173

174174
shared_ptr<ItemInstance> item = mob->inventory->getSelected();
@@ -289,8 +289,8 @@ void PlayerRenderer::additionalRendering(shared_ptr<LivingEntity> _mob, float a)
289289
shared_ptr<Player> mob = dynamic_pointer_cast<Player>(_mob);
290290
HumanoidModel *resModel;
291291

292-
if (mob != nullptr && humanoidModelClassic != nullptr && (mob->getCustomSkin() == 18 || mob->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_ClassicModel))) resModel = humanoidModelClassic;
293-
else if (mob != nullptr && humanoidModelSlim != nullptr && ((mob->getCustomSkin() >= 8 && mob->getCustomSkin() <= 17) || mob->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_SlimModel))) resModel = humanoidModelSlim;
292+
if (mob != nullptr && humanoidModelSlim != nullptr && ((mob->getCustomSkin() >= 8 && mob->getCustomSkin() <= 17) || mob->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_SlimModel))) resModel = humanoidModelSlim;
293+
else if (mob != nullptr && humanoidModelClassic != nullptr) resModel = humanoidModelClassic;
294294
else resModel = humanoidModel;
295295

296296
shared_ptr<ItemInstance> headGear = mob->inventory->getArmor(3);
@@ -538,8 +538,8 @@ void PlayerRenderer::renderHand()
538538
shared_ptr<Player> player = dynamic_pointer_cast<Player>(Minecraft::GetInstance()->player);
539539
HumanoidModel *resModel;
540540

541-
if (player != nullptr && humanoidModelClassic != nullptr && (player->getCustomSkin() == 18 || player->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_ClassicModel))) resModel = humanoidModelClassic;
542-
else if (player != nullptr && humanoidModelSlim != nullptr && ((player->getCustomSkin() >= 8 && player->getCustomSkin() <= 17) || player->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_SlimModel))) resModel = humanoidModelSlim;
541+
if (player != nullptr && humanoidModelSlim != nullptr && ((player->getCustomSkin() >= 8 && player->getCustomSkin() <= 17) || player->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_SlimModel))) resModel = humanoidModelSlim;
542+
else if (player != nullptr && humanoidModelClassic != nullptr) resModel = humanoidModelClassic;
543543
else resModel = humanoidModel;
544544

545545
float brightness = 1;
@@ -653,4 +653,4 @@ ResourceLocation *PlayerRenderer::getTextureLocation(shared_ptr<Entity> entity)
653653
{
654654
shared_ptr<Player> player = dynamic_pointer_cast<Player>(entity);
655655
return new ResourceLocation(static_cast<_TEXTURE_NAME>(player->getTexture()));
656-
}
656+
}

0 commit comments

Comments
 (0)