From 3aeb023869c2dde7c2c70b7e0d392200fd670519 Mon Sep 17 00:00:00 2001 From: notmatthewbeshay <92357869+NotMachow@users.noreply.github.com> Date: Tue, 10 Mar 2026 07:46:02 +1100 Subject: [PATCH] Remove Win32 types from prelogin packets --- .../Network/PendingConnection.cpp | 9 ++--- .../Network/Packets/PreLoginPacket.cpp | 34 +++++++++++-------- .../Network/Packets/PreLoginPacket.h | 16 ++++----- 3 files changed, 33 insertions(+), 26 deletions(-) diff --git a/Minecraft.Client/Network/PendingConnection.cpp b/Minecraft.Client/Network/PendingConnection.cpp index dec6b1f15..80bc0f043 100644 --- a/Minecraft.Client/Network/PendingConnection.cpp +++ b/Minecraft.Client/Network/PendingConnection.cpp @@ -1,4 +1,5 @@ #include "../Platform/stdafx.h" +#include #include "PendingConnection.h" #include "PlayerConnection.h" #include "ServerConnection.h" @@ -94,9 +95,9 @@ void PendingConnection::sendPreLoginResponse() { // 4J Stu - Calculate the players with UGC privileges set PlayerUID *ugcXuids = new PlayerUID[MINECRAFT_NET_MAX_PLAYERS]; - DWORD ugcXuidCount = 0; - DWORD hostIndex = 0; - BYTE ugcFriendsOnlyBits = 0; + std::uint8_t ugcXuidCount = 0; + std::uint8_t hostIndex = 0; + std::uint8_t ugcFriendsOnlyBits = 0; char szUniqueMapName[14]; StorageManager.GetSaveUniqueFilename(szUniqueMapName); @@ -267,4 +268,4 @@ std::wstring PendingConnection::getName() bool PendingConnection::isServerPacketListener() { return true; -} \ No newline at end of file +} diff --git a/Minecraft.World/Network/Packets/PreLoginPacket.cpp b/Minecraft.World/Network/Packets/PreLoginPacket.cpp index 8c51cd463..030c3e88e 100644 --- a/Minecraft.World/Network/Packets/PreLoginPacket.cpp +++ b/Minecraft.World/Network/Packets/PreLoginPacket.cpp @@ -34,7 +34,7 @@ PreLoginPacket::PreLoginPacket(std::wstring userName) m_netcodeVersion = 0; } -PreLoginPacket::PreLoginPacket(std::wstring userName, PlayerUID *playerXuids, DWORD playerCount, BYTE friendsOnlyBits, DWORD ugcPlayersVersion,char *pszUniqueSaveName, DWORD serverSettings, BYTE hostIndex, std::uint32_t texturePackId) +PreLoginPacket::PreLoginPacket(std::wstring userName, PlayerUID *playerXuids, std::uint8_t playerCount, std::uint8_t friendsOnlyBits, std::uint32_t ugcPlayersVersion, const char *pszUniqueSaveName, std::uint32_t serverSettings, std::uint8_t hostIndex, std::uint32_t texturePackId) { this->loginKey = userName; m_playerXuids = playerXuids; @@ -59,23 +59,25 @@ void PreLoginPacket::read(DataInputStream *dis) //throws IOException loginKey = readUtf(dis, 32); - m_friendsOnlyBits = dis->readByte(); - m_ugcPlayersVersion = dis->readInt(); - m_dwPlayerCount = dis->readByte(); + m_friendsOnlyBits = static_cast(dis->readByte()); + std::int32_t ugcPlayersVersion = dis->readInt(); + std::memcpy(&m_ugcPlayersVersion, &ugcPlayersVersion, sizeof(m_ugcPlayersVersion)); + m_dwPlayerCount = static_cast(dis->readByte()); if( m_dwPlayerCount > 0 ) { m_playerXuids = new PlayerUID[m_dwPlayerCount]; - for(DWORD i = 0; i < m_dwPlayerCount; ++i) + for(std::uint32_t i = 0; i < m_dwPlayerCount; ++i) { m_playerXuids[i] = dis->readPlayerUID(); } } - for(DWORD i = 0; i < m_iSaveNameLen; ++i) + for(int i = 0; i < m_iSaveNameLen; ++i) { - m_szUniqueSaveName[i]=dis->readByte(); + m_szUniqueSaveName[i] = static_cast(dis->readByte()); } - m_serverSettings = dis->readInt(); - m_hostIndex = dis->readByte(); + std::int32_t serverSettings = dis->readInt(); + std::memcpy(&m_serverSettings, &serverSettings, sizeof(m_serverSettings)); + m_hostIndex = static_cast(dis->readByte()); std::int32_t texturePackId = dis->readInt(); std::memcpy(&m_texturePackId, &texturePackId, sizeof(m_texturePackId)); @@ -91,19 +93,23 @@ void PreLoginPacket::write(DataOutputStream *dos) //throws IOException writeUtf(loginKey, dos); dos->writeByte(m_friendsOnlyBits); - dos->writeInt(m_ugcPlayersVersion); + std::int32_t ugcPlayersVersion = 0; + std::memcpy(&ugcPlayersVersion, &m_ugcPlayersVersion, sizeof(m_ugcPlayersVersion)); + dos->writeInt(ugcPlayersVersion); dos->writeByte((uint8_t)m_dwPlayerCount); - for(DWORD i = 0; i < m_dwPlayerCount; ++i) + for(std::uint32_t i = 0; i < m_dwPlayerCount; ++i) { dos->writePlayerUID( m_playerXuids[i] ); } app.DebugPrintf("*** PreLoginPacket::write - %s\n",m_szUniqueSaveName); - for(DWORD i = 0; i < m_iSaveNameLen; ++i) + for(int i = 0; i < m_iSaveNameLen; ++i) { - dos->writeByte(m_szUniqueSaveName[i]); + dos->writeByte(static_cast(m_szUniqueSaveName[i])); } - dos->writeInt(m_serverSettings); + std::int32_t serverSettings = 0; + std::memcpy(&serverSettings, &m_serverSettings, sizeof(m_serverSettings)); + dos->writeInt(serverSettings); dos->writeByte(m_hostIndex); std::int32_t texturePackId = 0; std::memcpy(&texturePackId, &m_texturePackId, sizeof(texturePackId)); diff --git a/Minecraft.World/Network/Packets/PreLoginPacket.h b/Minecraft.World/Network/Packets/PreLoginPacket.h index ea3c34758..637cb34dd 100644 --- a/Minecraft.World/Network/Packets/PreLoginPacket.h +++ b/Minecraft.World/Network/Packets/PreLoginPacket.h @@ -13,20 +13,20 @@ public: // join, and so that we can inform the server if we have that privilege set. Anyone with UGC turned off completely // can't play the game online at all, so we only need to specify players with friends only set PlayerUID *m_playerXuids; - DWORD m_dwPlayerCount; - BYTE m_friendsOnlyBits; - DWORD m_ugcPlayersVersion; - BYTE m_szUniqueSaveName[m_iSaveNameLen]; // added for checking if the level is in the ban list - DWORD m_serverSettings; // A bitfield of server settings constructed with the MAKE_SERVER_SETTINGS macro - BYTE m_hostIndex; // Rather than sending the xuid of the host again, send an index into the m_playerXuids array + std::uint8_t m_dwPlayerCount; + std::uint8_t m_friendsOnlyBits; + std::uint32_t m_ugcPlayersVersion; + char m_szUniqueSaveName[m_iSaveNameLen]; // added for checking if the level is in the ban list + std::uint32_t m_serverSettings; // A bitfield of server settings constructed with the MAKE_SERVER_SETTINGS macro + std::uint8_t m_hostIndex; // Rather than sending the xuid of the host again, send an index into the m_playerXuids array std::uint32_t m_texturePackId; - SHORT m_netcodeVersion; + std::int16_t m_netcodeVersion; std::wstring loginKey; PreLoginPacket(); PreLoginPacket(std::wstring userName); - PreLoginPacket(std::wstring userName, PlayerUID *playerXuids, DWORD playerCount, BYTE friendsOnlyBits, DWORD ugcPlayersVersion,char *pszUniqueSaveName, DWORD serverSettings, BYTE hostIndex, std::uint32_t texturePackId); + PreLoginPacket(std::wstring userName, PlayerUID *playerXuids, std::uint8_t playerCount, std::uint8_t friendsOnlyBits, std::uint32_t ugcPlayersVersion, const char *pszUniqueSaveName, std::uint32_t serverSettings, std::uint8_t hostIndex, std::uint32_t texturePackId); ~PreLoginPacket(); virtual void read(DataInputStream *dis);