Remove Win32 types from login packets

This commit is contained in:
notmatthewbeshay 2026-03-10 07:22:47 +11:00
parent a3e09a5fd9
commit 62a1aea3fc
2 changed files with 31 additions and 22 deletions

View file

@ -1,4 +1,5 @@
#include "../../Platform/stdafx.h"
#include <cstring>
#include <iostream>
#include "../../IO/Streams/InputOutputStream.h"
#include "../../Headers/net.minecraft.world.entity.player.h"
@ -36,7 +37,7 @@ LoginPacket::LoginPacket()
}
// Client -> Server
LoginPacket::LoginPacket(const std::wstring& userName, int clientVersion, PlayerUID offlineXuid, PlayerUID onlineXuid, bool friendsOnlyUGC, DWORD ugcPlayersVersion, DWORD skinId, DWORD capeId, bool isGuest)
LoginPacket::LoginPacket(const std::wstring& userName, int clientVersion, PlayerUID offlineXuid, PlayerUID onlineXuid, bool friendsOnlyUGC, std::uint32_t ugcPlayersVersion, std::uint32_t skinId, std::uint32_t capeId, bool isGuest)
{
this->userName = userName;
this->clientVersion = clientVersion;
@ -65,7 +66,7 @@ LoginPacket::LoginPacket(const std::wstring& userName, int clientVersion, Player
}
// Server -> Client
LoginPacket::LoginPacket(const std::wstring& userName, int clientVersion, LevelType *pLevelType, __int64 seed, int gameType, char dimension, BYTE mapHeight, BYTE maxPlayers, char difficulty, INT multiplayerInstanceId, BYTE playerIndex, bool newSeaLevel, unsigned int uiGamePrivileges, int xzSize, int hellScale)
LoginPacket::LoginPacket(const std::wstring& userName, int clientVersion, LevelType *pLevelType, __int64 seed, int gameType, char dimension, std::uint8_t mapHeight, std::uint8_t maxPlayers, char difficulty, int multiplayerInstanceId, std::uint8_t playerIndex, bool newSeaLevel, unsigned int uiGamePrivileges, int xzSize, int hellScale)
{
this->userName = userName;
this->clientVersion = clientVersion;
@ -106,19 +107,20 @@ void LoginPacket::read(DataInputStream *dis) //throws IOException
seed = dis->readLong();
gameType = dis->readInt();
dimension = (int)dis->readByte();
mapHeight = (int)dis->readByte();
maxPlayers = (int)dis->readByte();
mapHeight = static_cast<std::uint8_t>(dis->readByte());
maxPlayers = static_cast<std::uint8_t>(dis->readByte());
m_offlineXuid = dis->readPlayerUID();
m_onlineXuid = dis->readPlayerUID();
m_friendsOnlyUGC = dis->readBoolean();
m_ugcPlayersVersion = dis->readInt();
int ugcPlayersVersion = dis->readInt();
std::memcpy(&m_ugcPlayersVersion, &ugcPlayersVersion, sizeof(m_ugcPlayersVersion));
difficulty = (int)dis->readByte();
m_multiplayerInstanceId = dis->readInt();
m_playerIndex = (int)dis->readByte();
INT skinId = dis->readInt();
m_playerSkinId = *(DWORD *)&skinId;
INT capeId = dis->readInt();
m_playerCapeId = *(DWORD *)&capeId;
m_playerIndex = static_cast<std::uint8_t>(dis->readByte());
int skinId = dis->readInt();
std::memcpy(&m_playerSkinId, &skinId, sizeof(m_playerSkinId));
int capeId = dis->readInt();
std::memcpy(&m_playerCapeId, &capeId, sizeof(m_playerCapeId));
m_isGuest = dis->readBoolean();
m_newSeaLevel = dis->readBoolean();
m_uiGamePrivileges = dis->readInt();
@ -150,12 +152,18 @@ void LoginPacket::write(DataOutputStream *dos) //throws IOException
dos->writePlayerUID(m_offlineXuid);
dos->writePlayerUID(m_onlineXuid);
dos->writeBoolean(m_friendsOnlyUGC);
dos->writeInt(m_ugcPlayersVersion);
int ugcPlayersVersion = 0;
std::memcpy(&ugcPlayersVersion, &m_ugcPlayersVersion, sizeof(m_ugcPlayersVersion));
dos->writeInt(ugcPlayersVersion);
dos->writeByte((uint8_t)difficulty);
dos->writeInt(m_multiplayerInstanceId);
dos->writeByte((uint8_t)m_playerIndex);
dos->writeInt(m_playerSkinId);
dos->writeInt(m_playerCapeId);
int skinId = 0;
std::memcpy(&skinId, &m_playerSkinId, sizeof(m_playerSkinId));
dos->writeInt(skinId);
int capeId = 0;
std::memcpy(&capeId, &m_playerCapeId, sizeof(m_playerCapeId));
dos->writeInt(capeId);
dos->writeBoolean(m_isGuest);
dos->writeBoolean(m_newSeaLevel);
dos->writeInt(m_uiGamePrivileges);
@ -178,5 +186,5 @@ int LoginPacket::getEstimatedSize()
length = (int)m_pLevelType->getGeneratorName().length();
}
return (int)(sizeof(int) + userName.length() + 4 + 6 + sizeof(__int64) + sizeof(char) + sizeof(int) + (2*sizeof(PlayerUID)) +1 + sizeof(char) + sizeof(BYTE) + sizeof(bool) + sizeof(bool) + length + sizeof(unsigned int));
return (int)(sizeof(int) + userName.length() + 4 + 6 + sizeof(__int64) + sizeof(char) + sizeof(int) + (2*sizeof(PlayerUID)) + 1 + sizeof(char) + sizeof(std::uint8_t) + sizeof(bool) + sizeof(bool) + length + sizeof(unsigned int));
}

View file

@ -1,5 +1,6 @@
#pragma once
#include <cstdint>
#include "Packet.h"
class LevelType;
@ -14,10 +15,10 @@ public:
PlayerUID m_offlineXuid, m_onlineXuid; // 4J Added
char difficulty; // 4J Added
bool m_friendsOnlyUGC; // 4J Added
DWORD m_ugcPlayersVersion; // 4J Added
INT m_multiplayerInstanceId; //4J Added for sentient
BYTE m_playerIndex; // 4J Added
DWORD m_playerSkinId, m_playerCapeId; // 4J Added
std::uint32_t m_ugcPlayersVersion; // 4J Added
int m_multiplayerInstanceId; //4J Added for sentient
std::uint8_t m_playerIndex; // 4J Added
std::uint32_t m_playerSkinId, m_playerCapeId; // 4J Added
bool m_isGuest; // 4J Added
bool m_newSeaLevel; // 4J Added
LevelType *m_pLevelType;
@ -27,12 +28,12 @@ public:
// 1.8.2
int gameType;
BYTE mapHeight;
BYTE maxPlayers;
std::uint8_t mapHeight;
std::uint8_t maxPlayers;
LoginPacket();
LoginPacket(const std::wstring& userName, int clientVersion, LevelType *pLevelType, __int64 seed, int gameType, char dimension, BYTE mapHeight, BYTE maxPlayers, char difficulty, INT m_multiplayerInstanceId, BYTE playerIndex, bool newSeaLevel, unsigned int uiGamePrivileges, int xzSize, int hellScale); // Server -> Client
LoginPacket(const std::wstring& userName, int clientVersion, PlayerUID offlineXuid, PlayerUID onlineXuid, bool friendsOnlyUGC, DWORD ugcPlayersVersion, DWORD skinId, DWORD capeId, bool isGuest); // Client -> Server
LoginPacket(const std::wstring& userName, int clientVersion, LevelType *pLevelType, __int64 seed, int gameType, char dimension, std::uint8_t mapHeight, std::uint8_t maxPlayers, char difficulty, int m_multiplayerInstanceId, std::uint8_t playerIndex, bool newSeaLevel, unsigned int uiGamePrivileges, int xzSize, int hellScale); // Server -> Client
LoginPacket(const std::wstring& userName, int clientVersion, PlayerUID offlineXuid, PlayerUID onlineXuid, bool friendsOnlyUGC, std::uint32_t ugcPlayersVersion, std::uint32_t skinId, std::uint32_t capeId, bool isGuest); // Client -> Server
virtual void read(DataInputStream *dis);
virtual void write(DataOutputStream *dos);