Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 7 additions & 9 deletions Minecraft.Client/ClientConnection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2726,20 +2726,13 @@ void ClientConnection::handleTextureAndGeometry(shared_ptr<TextureAndGeometryPac
{
if(pDLCSkinFile)
{
if(pDLCSkinFile->getAdditionalBoxesCount()!=0)
{
send(std::make_shared<TextureAndGeometryPacket>(packet->textureName, pbData, dwBytes, pDLCSkinFile));
}
else
{
send(std::make_shared<TextureAndGeometryPacket>(packet->textureName, pbData, dwBytes));
}
send(std::make_shared<TextureAndGeometryPacket>(packet->textureName, pbData, dwBytes, pDLCSkinFile));
}
else
{
unsigned int uiAnimOverrideBitmask= app.GetAnimOverrideBitmask(packet->dwSkinID);

send(std::make_shared<TextureAndGeometryPacket>(packet->textureName, pbData, dwBytes, app.GetAdditionalSkinBoxes(packet->dwSkinID), uiAnimOverrideBitmask));
send(std::make_shared<TextureAndGeometryPacket>(packet->textureName, pbData, dwBytes, app.GetAdditionalSkinBoxes(packet->dwSkinID), app.GetModelOffsets(packet->dwSkinID), uiAnimOverrideBitmask));
}
}
}
Expand All @@ -2756,6 +2749,11 @@ void ClientConnection::handleTextureAndGeometry(shared_ptr<TextureAndGeometryPac
{
app.SetAdditionalSkinBoxes(packet->dwSkinID,packet->BoxDataA,packet->dwBoxC);
}
// Add the offet data
if(packet->dwOffsetC!=0)
{
app.SetSkinOffsets(packet->dwSkinID,packet->OffsetDataA,packet->dwOffsetC);
}
// Add the anim override
app.SetAnimOverrideBitmask(packet->dwSkinID,packet->uiAnimOverrideBitmask);

Expand Down
74 changes: 72 additions & 2 deletions Minecraft.Client/Common/Consoles_App.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,7 @@ CMinecraftApp::CMinecraftApp()
InitializeCriticalSection(&csTMSPPDownloadQueue);
InitializeCriticalSection(&csAdditionalModelParts);
InitializeCriticalSection(&csAdditionalSkinBoxes);
InitializeCriticalSection(&csModelOffsets);
InitializeCriticalSection(&csAnimOverrideBitmask);
InitializeCriticalSection(&csMemFilesLock);
InitializeCriticalSection(&csMemTPDLock);
Expand Down Expand Up @@ -9282,7 +9283,14 @@ bool CMinecraftApp::DLCContentRetrieved(eDLCMarketplaceType eType)
void CMinecraftApp::SetAdditionalSkinBoxes(DWORD dwSkinID, SKIN_BOX *SkinBoxA, DWORD dwSkinBoxC)
{
EntityRenderer *renderer = EntityRenderDispatcher::instance->getRenderer(eTYPE_PLAYER);
Model *pModel = renderer->getModel();
unsigned int m_uiAnimOverrideBitmask = GetAnimOverrideBitmask(dwSkinID);
Model *pModel;
if (m_uiAnimOverrideBitmask&(1<<HumanoidModel::eAnim_ClassicModel))
pModel = renderer->getModelClassic();
else if (m_uiAnimOverrideBitmask&(1<<HumanoidModel::eAnim_SlimModel))
pModel = renderer->getModelSlim();
else
pModel = renderer->getModel();
vector<ModelPart *> *pvModelPart = new vector<ModelPart *>;
vector<SKIN_BOX *> *pvSkinBoxes = new vector<SKIN_BOX *>;

Expand Down Expand Up @@ -9311,10 +9319,37 @@ void CMinecraftApp::SetAdditionalSkinBoxes(DWORD dwSkinID, SKIN_BOX *SkinBoxA, D

}

void CMinecraftApp::SetSkinOffsets(DWORD dwSkinID, SKIN_OFFSET *SkinOffsetA, DWORD dwSkinOffsetC)
{
vector<SKIN_OFFSET *> *pvSkinOffset = new vector<SKIN_OFFSET *>;

EnterCriticalSection( &csModelOffsets );

app.DebugPrintf("*** SetAdditionalSkinBoxes - Inserting model parts for skin %d from array of Skin Boxes\n",dwSkinID&0x0FFFFFFF);

for(unsigned int i=0;i<dwSkinOffsetC;i++)
{
pvSkinOffset->push_back(&SkinOffsetA[i]);
}


m_SkinOffsets.insert( std::pair<DWORD, vector<SKIN_OFFSET *> *>(dwSkinID, pvSkinOffset) );

LeaveCriticalSection( &csModelOffsets );

}

vector<ModelPart *> * CMinecraftApp::SetAdditionalSkinBoxes(DWORD dwSkinID, vector<SKIN_BOX *> *pvSkinBoxA)
{
EntityRenderer *renderer = EntityRenderDispatcher::instance->getRenderer(eTYPE_PLAYER);
Model *pModel = renderer->getModel();
unsigned int m_uiAnimOverrideBitmask = GetAnimOverrideBitmask(dwSkinID);
Model *pModel;
if (m_uiAnimOverrideBitmask&(1<<HumanoidModel::eAnim_ClassicModel))
pModel = renderer->getModelClassic();
else if (m_uiAnimOverrideBitmask&(1<<HumanoidModel::eAnim_SlimModel))
pModel = renderer->getModelSlim();
else
pModel = renderer->getModel();
vector<ModelPart *> *pvModelPart = new vector<ModelPart *>;

EnterCriticalSection( &csAdditionalModelParts );
Expand All @@ -9339,6 +9374,24 @@ vector<ModelPart *> * CMinecraftApp::SetAdditionalSkinBoxes(DWORD dwSkinID, vect
return pvModelPart;
}

vector<SKIN_OFFSET *> * CMinecraftApp::SetSkinOffsets(DWORD dwSkinID, vector<SKIN_OFFSET *> *pvSkinOffsetA)
{
vector<SKIN_OFFSET *> *pvModelOffset = new vector<SKIN_OFFSET *>;

EnterCriticalSection( &csModelOffsets );
app.DebugPrintf("*** SetSkinOffsets - Inserting model offsets for skin %d from array of Skin Offsets\n",dwSkinID&0x0FFFFFFF);

for( auto& it : *pvSkinOffsetA )
{
pvModelOffset->push_back(it);
}

m_SkinOffsets.emplace(dwSkinID, pvSkinOffsetA);

LeaveCriticalSection( &csModelOffsets );
return pvModelOffset;
}


vector<ModelPart *> *CMinecraftApp::GetAdditionalModelParts(DWORD dwSkinID)
{
Expand Down Expand Up @@ -9374,6 +9427,23 @@ vector<SKIN_BOX *> *CMinecraftApp::GetAdditionalSkinBoxes(DWORD dwSkinID)
return pvSkinBoxes;
}

vector<SKIN_OFFSET *> *CMinecraftApp::GetModelOffsets(DWORD dwSkinID)
{
EnterCriticalSection( &csModelOffsets );
vector<SKIN_OFFSET *> *pvModelOffsets=nullptr;
if(m_SkinOffsets.size()>0)
{
auto it = m_SkinOffsets.find(dwSkinID);
if(it!=m_SkinOffsets.end())
{
pvModelOffsets = (*it).second;
}
}

LeaveCriticalSection( &csModelOffsets );
return pvModelOffsets;
}

unsigned int CMinecraftApp::GetAnimOverrideBitmask(DWORD dwSkinID)
{
EnterCriticalSection( &csAnimOverrideBitmask );
Expand Down
6 changes: 6 additions & 0 deletions Minecraft.Client/Common/Consoles_App.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ using namespace std;
#include "./GameRules/ConsoleGameRulesConstants.h"
#include "./GameRules/GameRuleManager.h"
#include "../SkinBox.h"
#include "../SkinOffset.h"
#include "../ArchiveFile.h"

typedef struct _JoinFromInviteData
Expand Down Expand Up @@ -826,6 +827,7 @@ class CMinecraftApp
CRITICAL_SECTION csTMSPPDownloadQueue;
CRITICAL_SECTION csAdditionalModelParts;
CRITICAL_SECTION csAdditionalSkinBoxes;
CRITICAL_SECTION csModelOffsets;
CRITICAL_SECTION csAnimOverrideBitmask;
bool m_bCorruptSaveDeleted;

Expand All @@ -847,6 +849,9 @@ class CMinecraftApp
vector<ModelPart *> * SetAdditionalSkinBoxes(DWORD dwSkinID, vector<SKIN_BOX *> *pvSkinBoxA);
vector<ModelPart *> *GetAdditionalModelParts(DWORD dwSkinID);
vector<SKIN_BOX *> *GetAdditionalSkinBoxes(DWORD dwSkinID);
void SetSkinOffsets(DWORD dwSkinID, SKIN_OFFSET *SkinOffsetA, DWORD dwSkinOffsetC);
vector<SKIN_OFFSET *> * SetSkinOffsets(DWORD dwSkinID, vector<SKIN_OFFSET *> *pvSkinOffsetA);
vector<SKIN_OFFSET *> *GetModelOffsets(DWORD dwSkinID);
void SetAnimOverrideBitmask(DWORD dwSkinID,unsigned int uiAnimOverrideBitmask);
unsigned int GetAnimOverrideBitmask(DWORD dwSkinID);

Expand Down Expand Up @@ -877,6 +882,7 @@ class CMinecraftApp
// vector of additional skin model parts, indexed by the skin texture id
unordered_map<DWORD, vector<ModelPart *> *> m_AdditionalModelParts;
unordered_map<DWORD, vector<SKIN_BOX *> *> m_AdditionalSkinBoxes;
unordered_map<DWORD, vector<SKIN_OFFSET *> *> m_SkinOffsets;
unordered_map<DWORD, unsigned int> m_AnimOverrides;


Expand Down
1 change: 1 addition & 0 deletions Minecraft.Client/Common/DLC/DLCManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ const WCHAR *DLCManager::wchTypeNamesA[]=
L"ENCHANTTEXTFOCUSCOLOUR",
L"DATAPATH",
L"PACKVERSION",
L"OFFSET",
};

DLCManager::DLCManager()
Expand Down
1 change: 1 addition & 0 deletions Minecraft.Client/Common/DLC/DLCManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ class DLCManager
e_DLCParamType_EnchantmentTextFocusColour,
e_DLCParamType_DataPath,
e_DLCParamType_PackVersion,
e_DLCParamType_Offset,

e_DLCParamType_Max,

Expand Down
Loading