From a2dad85bb1e51e335b78ef00df444c36d691056c Mon Sep 17 00:00:00 2001 From: piebot Date: Sun, 13 Sep 2026 14:09:32 +0100 Subject: [PATCH] chore/fix: clean up NetworkSocketLayer, fix console compile errors --- .../Common/Network/NetworkSocketLayer.cpp | 327 +++--------------- .../Common/Network/NetworkSocketLayer.h | 1 + .../Common/Network/PlatformNetworkManager.cpp | 6 +- .../CPlatformSocketManagerPS3.cpp | 93 +++++ .../CPlatformSocketManagerPS4.cpp | 86 +++++ .../CPlatformSocketManagerPSVita.cpp | 85 +++++ .../CPlatformSocketManagerWindows64.cpp | 92 +++++ .../CPlatformSocketManagerXbox.cpp | 78 +++++ .../SocketManagers/NetworkSocketManager.h | 23 ++ Minecraft.Client/Extrax64Stubs.cpp | 3 +- Minecraft.Client/LivingEntityRenderer.cpp | 2 +- Minecraft.Client/Minecraft.Client.vcxproj | 241 ++++++++++++- .../Minecraft.Client.vcxproj.filters | 24 ++ Minecraft.Client/MinecraftServer.cpp | 8 + Minecraft.Client/PendingConnection.cpp | 4 +- Minecraft.World/Minecraft.World.vcxproj | 4 +- 16 files changed, 781 insertions(+), 296 deletions(-) create mode 100644 Minecraft.Client/Common/Network/SocketManagers/CPlatformSocketManagerPS3.cpp create mode 100644 Minecraft.Client/Common/Network/SocketManagers/CPlatformSocketManagerPS4.cpp create mode 100644 Minecraft.Client/Common/Network/SocketManagers/CPlatformSocketManagerPSVita.cpp create mode 100644 Minecraft.Client/Common/Network/SocketManagers/CPlatformSocketManagerWindows64.cpp create mode 100644 Minecraft.Client/Common/Network/SocketManagers/CPlatformSocketManagerXbox.cpp create mode 100644 Minecraft.Client/Common/Network/SocketManagers/NetworkSocketManager.h diff --git a/Minecraft.Client/Common/Network/NetworkSocketLayer.cpp b/Minecraft.Client/Common/Network/NetworkSocketLayer.cpp index af499760..e15842ed 100644 --- a/Minecraft.Client/Common/Network/NetworkSocketLayer.cpp +++ b/Minecraft.Client/Common/Network/NetworkSocketLayer.cpp @@ -4,6 +4,7 @@ #include "NetworkSocketLayer.h" #include "..\..\Common\Network\PlatformNetworkManager.h" #include "..\..\..\Minecraft.World\Socket.h" +#include "SocketManagers\NetworkSocketManager.h" #if defined(MINECRAFT_SERVER_BUILD) #include "..\..\..\Minecraft.Server\Access\Access.h" #include "..\..\..\Minecraft.Server\ServerLogManager.h" @@ -13,6 +14,7 @@ static bool TryGetNumericRemoteIp(const sockaddr_in &remoteAddress, std::string *outIp); #endif +NetworkSocketManager *NetworkSocketLayer::s_pPlatformSocketManager; SOCKET NetworkSocketLayer::s_listenSocket = INVALID_SOCKET; SOCKET NetworkSocketLayer::s_hostConnectionSocket = INVALID_SOCKET; SOCKET NetworkSocketLayer::s_advertiseSock = INVALID_SOCKET; @@ -90,6 +92,8 @@ bool NetworkSocketLayer::Initialize() { if (s_initialized) return true; + s_pPlatformSocketManager = new NetworkSocketManager(); + // Create the locks before touching the platform network stack. if (!s_locksCreated) { @@ -111,42 +115,7 @@ bool NetworkSocketLayer::Initialize() s_locksCreated = true; } -#if defined _WINDOWS64 || defined _XBOX - WSADATA wsaData; - int result = WSAStartup(MAKEWORD(2, 2), &wsaData); - if (result != 0) - { - app.DebugPrintf("WSAStartup failed: %d\n", result); - return false; - } -#elif defined __PS3__ - int result = sys_net_initialize_network(); - if (result != 0) { - app.DebugPrintf("sys_net_initialize_network failed: %d\n", result); - return false; - } - - result = cellNetCtlInit(); - if (result < 0) { - app.DebugPrintf("cellNetCtlInit failed: %d\n", result); - sys_net_finalize_network(); - return false; - } -#elif defined __PSVITA__ - SceNetInitParam param; - static char memory[16 * 1024]; - - param.memory = memory; - param.size = sizeof(memory); - param.flags = 0; - - int result = sceNetInit(¶m); - // libnet is brought up before us by the platform layer, which reports EBUSY here. - if (result < 0 && result != SCE_NET_ERROR_EBUSY) { - app.DebugPrintf("sceNetInit failed: 0x%08x\n", result); - return false; - } -#endif + s_pPlatformSocketManager->InitNetwork(); s_initialized = true; @@ -166,44 +135,26 @@ void NetworkSocketLayer::Shutdown() s_active = false; s_connected = false; -#if defined _WINDOWS64 || defined _XBOX - if (s_listenSocket != INVALID_SOCKET) + if (s_pPlatformSocketManager->IsSocketValid(s_listenSocket)) { - closesocket(s_listenSocket); + s_pPlatformSocketManager->CloseSocket(s_listenSocket); s_listenSocket = INVALID_SOCKET; } - if (s_hostConnectionSocket != INVALID_SOCKET) + if (s_pPlatformSocketManager->IsSocketValid(s_hostConnectionSocket)) { - closesocket(s_hostConnectionSocket); + s_pPlatformSocketManager->CloseSocket(s_hostConnectionSocket); s_hostConnectionSocket = INVALID_SOCKET; } -#elif defined __PS3__ || defined __ORBIS__ || defined __PSVITA__ - if (s_listenSocket >= 0) - { - socketclose(s_listenSocket); - s_listenSocket = -1; - } - - if (s_hostConnectionSocket >= 0) - { - socketclose(s_hostConnectionSocket); - s_hostConnectionSocket = -1; - } -#endif EnterCriticalSection(&s_connectionsLock); for (int i = 0; i < NETWORK_LAN_MAX_CLIENTS + 1; i++) { s_connections[i].active = false; -#if defined _WINDOWS64 || defined _XBOX - if (s_connections[i].tcpSocket != INVALID_SOCKET) -#elif defined __PS3__ || defined __ORBIS__ || defined __PSVITA__ - if (s_connections[i].tcpSocket >= 0) -#endif + if (s_pPlatformSocketManager->IsSocketValid(s_connections[i].tcpSocket)) { - closesocket(s_connections[i].tcpSocket); + s_pPlatformSocketManager->CloseSocket(s_connections[i].tcpSocket); s_connections[i].tcpSocket = INVALID_SOCKET; } if (s_connections[i].recvThread != NULL) @@ -256,9 +207,9 @@ bool NetworkSocketLayer::HostGame(int port) s_connected = false; s_active = false; - if (s_hostConnectionSocket != INVALID_SOCKET) + if (s_pPlatformSocketManager->IsSocketValid(s_hostConnectionSocket)) { - closesocket(s_hostConnectionSocket); + s_pPlatformSocketManager->CloseSocket(s_hostConnectionSocket); s_hostConnectionSocket = INVALID_SOCKET; } s_nextSmallId = 1; @@ -268,129 +219,10 @@ bool NetworkSocketLayer::HostGame(int port) s_freeSmallIds.clear(); LeaveCriticalSection(&s_freeSmallIdLock); - int iResult; -#if defined _WINDOWS64 - struct addrinfo hints = {}; - struct addrinfo *result = NULL; + s_listenSocket = s_pPlatformSocketManager->MakeHostSocket(port); - hints.ai_family = AF_INET; - hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = IPPROTO_TCP; - hints.ai_flags = AI_PASSIVE; - - char portStr[16]; - sprintf_s(portStr, "%d", port); - - iResult = getaddrinfo(NULL, portStr, &hints, &result); - if (iResult != 0) - { - app.DebugPrintf("getaddrinfo failed: %d\n", iResult); - return false; - } - - s_listenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol); if (s_listenSocket == INVALID_SOCKET) - { - app.DebugPrintf("socket() failed: %d\n", WSAGetLastError()); - freeaddrinfo(result); return false; - } -#elif defined _XBOX - struct sockaddr_in addr = {}; - addr.sin_family = AF_INET; - addr.sin_addr.s_addr = htonl(INADDR_ANY); - addr.sin_port = htons((WORD)port); - - s_listenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); - if (s_listenSocket == INVALID_SOCKET) - { - app.DebugPrintf("socket() failed: %d\n", WSAGetLastError()); - return false; - } -#elif defined __PS3__ || defined __ORBIS__ || defined __PSVITA__ -#ifdef __PSVITA__ - SceNetSockaddrIn addr = {}; -#else - struct sockaddr_in addr = {}; -#endif -#ifdef __PSVITA__ - addr.sin_len = sizeof(addr); -#endif - addr.sin_family = AF_INET; - addr.sin_addr.s_addr = htonl(INADDR_ANY); - addr.sin_port = htons((uint16_t)port); - - s_listenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); - if (s_listenSocket < 0) - { - app.DebugPrintf("socket() failed: %d\n", s_listenSocket); - return false; - } -#endif - - int opt = 1; - setsockopt(s_listenSocket, SOL_SOCKET, SO_REUSEADDR, (const char *)&opt, sizeof(opt)); - -#if defined _WINDOWS64 - iResult = ::bind(s_listenSocket, result->ai_addr, (int)result->ai_addrlen); - freeaddrinfo(result); - if (iResult == SOCKET_ERROR) - { - app.DebugPrintf("bind() failed: %d\n", WSAGetLastError()); - closesocket(s_listenSocket); - s_listenSocket = INVALID_SOCKET; - return false; - } - - iResult = listen(s_listenSocket, SOMAXCONN); - if (iResult == SOCKET_ERROR) - { - app.DebugPrintf("listen() failed: %d\n", WSAGetLastError()); - closesocket(s_listenSocket); - s_listenSocket = INVALID_SOCKET; - return false; - } -#elif defined _XBOX - iResult = ::bind(s_listenSocket, (struct sockaddr*)&addr, sizeof(addr)); - if (iResult == SOCKET_ERROR) - { - app.DebugPrintf("bind() failed: %d\n", WSAGetLastError()); - closesocket(s_listenSocket); - s_listenSocket = INVALID_SOCKET; - return false; - } - - iResult = listen(s_listenSocket, SOMAXCONN); - if (iResult == SOCKET_ERROR) - { - app.DebugPrintf("listen() failed: %d\n", WSAGetLastError()); - closesocket(s_listenSocket); - s_listenSocket = INVALID_SOCKET; - return false; - } -#elif defined __PS3__ || defined __ORBIS__ || defined __PSVITA__ -#ifdef __PSVITA__ - iResult = ::bind(s_listenSocket, (const sockaddr*)&addr, sizeof(addr)); -#else - iResult = ::bind(s_listenSocket, (struct sockaddr*)&addr, sizeof(addr)); -#endif - if (iResult < 0) - { - app.DebugPrintf("bind() failed: %d\n", iResult); - closesocket(s_listenSocket); - s_listenSocket = -1; - return false; - } - - iResult = listen(s_listenSocket, 5); - if (iResult < 0) - { - app.DebugPrintf("listen() failed: %d\n", iResult); - closesocket(s_listenSocket); - s_listenSocket = -1; - return false; - } -#endif s_active = true; s_connected = true; @@ -852,11 +684,7 @@ bool NetworkSocketLayer::SendOnSocket(SOCKET sock, const void *data, int dataSiz while (totalSent < toSend) { int sent = send(sock, (const char *)header + totalSent, toSend - totalSent, 0); -#if defined _WINDOWS64 || defined _XBOX - if (sent == SOCKET_ERROR || sent == 0) -#elif defined __PS3__ || defined __ORBIS__ || defined __PSVITA__ - if (sent < 0 || sent == 0) -#endif + if (!s_pPlatformSocketManager->IsSentValid(sent) || sent == 0) return false; totalSent += sent; } @@ -866,11 +694,7 @@ bool NetworkSocketLayer::SendOnSocket(SOCKET sock, const void *data, int dataSiz { int sent = send(sock, (const char *)data + totalSent, dataSize - totalSent, 0); -#if defined _WINDOWS64 || defined _XBOX - if (sent == SOCKET_ERROR || sent == 0) -#elif defined __PS3__ || defined __ORBIS__ || defined __PSVITA__ - if (sent < 0 || sent == 0) -#endif + if (!s_pPlatformSocketManager->IsSentValid(sent) || sent == 0) return false; totalSent += sent; } @@ -918,11 +742,7 @@ SOCKET NetworkSocketLayer::GetSocketForSmallId(BYTE smallId) return sock; } LeaveCriticalSection(&s_connectionsLock); -#if defined _WINDOWS64 || defined _XBOX return INVALID_SOCKET; -#elif defined __PS3__ || defined __ORBIS__ || defined __PSVITA__ - return -1; -#endif } // Send reject handshake: sentinel 0xFF + DisconnectPacket wire format (1 byte id 255 + 4 byte big-endian reason). Then caller closes socket. @@ -977,14 +797,6 @@ void NetworkSocketLayer::HandleDataReceived(BYTE fromSmallId, BYTE toSmallId, un INetworkPlayer *pPlayerFrom = g_NetworkManager.GetPlayerBySmallId(fromSmallId); INetworkPlayer *pPlayerTo = g_NetworkManager.GetPlayerBySmallId(toSmallId); - if (pPlayerFrom == NULL || pPlayerTo == NULL) - { - // dropping here is silent and looks identical to the peer never sending - app.DebugPrintf("LAN: DROPPED %u bytes - from smallId=%d(%s) to smallId=%d(%s)\n", - dataSize, fromSmallId, pPlayerFrom ? "ok" : "NULL", toSmallId, pPlayerTo ? "ok" : "NULL"); - return; - } - if (s_isHost) { ::Socket *pSocket = pPlayerFrom->GetSocket(); @@ -1011,24 +823,19 @@ int NetworkSocketLayer::AcceptThreadProc(LPVOID param) #else sockaddr_in remoteAddress; ZeroMemory(&remoteAddress, sizeof(remoteAddress)); +#ifdef __PS3__ + socklen_t remoteAddressLength = sizeof(remoteAddress); +#else int remoteAddressLength = sizeof(remoteAddress); +#endif SOCKET clientSocket = accept(s_listenSocket, (sockaddr*)&remoteAddress, &remoteAddressLength); #endif -#if defined _WINDOWS64 || defined _XBOX - if (clientSocket == INVALID_SOCKET) + if (!s_pPlatformSocketManager->IsSocketValid(clientSocket)) { if (s_active) - app.DebugPrintf("accept() failed: %d\n", WSAGetLastError()); + app.DebugPrintf("accept() failed: %d\n",s_pPlatformSocketManager->getSocketError(clientSocket)); break; } -#elif __PS3__ || defined __ORBIS__ || defined __PSVITA__ - if (clientSocket < 0) - { - if (s_active) - app.DebugPrintf("accept() failed: %d\n", clientSocket); - break; - } -#endif int noDelay = 1; setsockopt(clientSocket, IPPROTO_TCP, TCP_NODELAY, (const char *)&noDelay, sizeof(noDelay)); @@ -1055,7 +862,7 @@ int NetworkSocketLayer::AcceptThreadProc(LPVOID param) #else app.DebugPrintf("Win64 LAN: Rejecting connection, game not ready\n"); #endif - closesocket(clientSocket); + s_pPlatformSocketManager->CloseSocket(clientSocket); continue; } @@ -1078,7 +885,7 @@ int NetworkSocketLayer::AcceptThreadProc(LPVOID param) #else app.DebugPrintf("Win64 LAN: Server full, rejecting connection\n"); #endif - closesocket(clientSocket); + s_pPlatformSocketManager->CloseSocket(clientSocket); continue; } LeaveCriticalSection(&s_freeSmallIdLock); @@ -1088,7 +895,7 @@ int NetworkSocketLayer::AcceptThreadProc(LPVOID param) if (sent != 1) { app.DebugPrintf("Failed to send small ID to client\n"); - closesocket(clientSocket); + s_pPlatformSocketManager->CloseSocket(clientSocket); continue; } @@ -1193,7 +1000,7 @@ int NetworkSocketLayer::RecvThreadProc(LPVOID param) s_connections[clientSmallId].active = false; if (s_connections[clientSmallId].tcpSocket != INVALID_SOCKET) { - closesocket(s_connections[clientSmallId].tcpSocket); + s_pPlatformSocketManager->CloseSocket(s_connections[clientSmallId].tcpSocket); s_connections[clientSmallId].tcpSocket = INVALID_SOCKET; } LeaveCriticalSection(&s_connectionsLock); @@ -1237,7 +1044,7 @@ void NetworkSocketLayer::CloseConnectionBySmallId(BYTE smallId) EnterCriticalSection(&s_connectionsLock); if (smallId < NETWORK_LAN_MAX_CLIENTS + 1 && s_connections[smallId].active && s_connections[smallId].tcpSocket != INVALID_SOCKET) { - closesocket(s_connections[smallId].tcpSocket); + s_pPlatformSocketManager->CloseSocket(s_connections[smallId].tcpSocket); s_connections[smallId].tcpSocket = INVALID_SOCKET; app.DebugPrintf("Win64 LAN: Force-closed TCP connection for smallId=%d\n", smallId); } @@ -1249,11 +1056,7 @@ int NetworkSocketLayer::ClientRecvThreadProc(LPVOID param) std::vector recvBuf; recvBuf.resize(NETWORK_LAN_RECV_BUFFER_SIZE); -#if defined _WINDOWS64 || defined _XBOX - while (s_active && s_hostConnectionSocket != INVALID_SOCKET) -#elif defined __PS3__ || defined __ORBIS__ || defined __PSVITA__ - while (s_active && s_hostConnectionSocket >= 0) -#endif + while (s_active && s_pPlatformSocketManager->IsSocketValid(s_hostConnectionSocket)) { BYTE header[4]; if (!RecvExact(s_hostConnectionSocket, header, 4)) @@ -1317,19 +1120,11 @@ bool NetworkSocketLayer::StartAdvertising(int gamePort, const wchar_t *hostName, LeaveCriticalSection(&s_advertiseLock); s_advertiseSock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); -#if defined _WINDOWS64 || defined _XBOX - if (s_advertiseSock == INVALID_SOCKET) + if (!s_pPlatformSocketManager->IsSocketValid(s_advertiseSock)) { - app.DebugPrintf("Win64 LAN: Failed to create advertise socket: %d\n", WSAGetLastError()); + app.DebugPrintf("LAN: Failed to create advertise socket: %d\n", s_pPlatformSocketManager->getSocketError(s_advertiseSock)); return false; } -#elif defined __PS3__ || defined __ORBIS__ || defined __PSVITA__ - if (s_advertiseSock < 0) - { - app.DebugPrintf("PS3 LAN: Failed to create advertise socket: %d\n", s_advertiseSock); - return false; - } -#endif BOOL broadcast = TRUE; setsockopt(s_advertiseSock, SOL_SOCKET, SO_BROADCAST, (const char *)&broadcast, sizeof(broadcast)); @@ -1337,7 +1132,7 @@ bool NetworkSocketLayer::StartAdvertising(int gamePort, const wchar_t *hostName, s_advertising = true; s_advertiseThread = new C4JThread(AdvertiseThreadProc, NULL, "AdvertiseThreadProc"); s_advertiseThread->Run(); - app.DebugPrintf("Win64 LAN: Started advertising on UDP port %d\n", NETWORK_LAN_DISCOVERY_PORT); + app.DebugPrintf("LAN: Started advertising on UDP port %d\n", NETWORK_LAN_DISCOVERY_PORT); return true; } @@ -1345,19 +1140,11 @@ void NetworkSocketLayer::StopAdvertising() { s_advertising = false; -#if defined _WINDOWS64 - if (s_advertiseSock != INVALID_SOCKET) + if (s_pPlatformSocketManager->IsSocketValid(s_advertiseSock)) { - closesocket(s_advertiseSock); + s_pPlatformSocketManager->CloseSocket(s_advertiseSock); s_advertiseSock = INVALID_SOCKET; } -#elif defined __PS3__ || defined __ORBIS__ || defined __PSVITA__ - if (s_advertiseSock >= 0) - { - closesocket(s_advertiseSock); - s_advertiseSock = -1; - } -#endif if (s_advertiseThread != NULL) { @@ -1461,17 +1248,10 @@ int NetworkSocketLayer::AdvertiseThreadProc(LPVOID param) (struct sockaddr *)&broadcastAddr, sizeof(broadcastAddr)); #endif -#if defined _WINDOWS64 || defined _XBOX - if (sent == SOCKET_ERROR && s_advertising) + if (!s_pPlatformSocketManager->IsSentValid(sent) && s_advertising) { - app.DebugPrintf("Win64 LAN: Broadcast sendto failed: %d\n", WSAGetLastError()); + app.DebugPrintf("LAN: Broadcast sendto failed: %d\n", s_pPlatformSocketManager->getSocketError(s_advertising)); } -#elif defined __PS3__ || defined __ORBIS__ || defined __PSVITA__ - if (sent < 0 && s_advertising) - { - app.DebugPrintf("PS3 LAN: Broadcast sendto failed: %d\n", sent); - } -#endif C4JThread::Sleep(1000); } @@ -1485,21 +1265,11 @@ bool NetworkSocketLayer::StartDiscovery() if (!s_initialized) return false; s_discoverySock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); -#if defined _WINDOWS64 || defined _XBOX - if (s_discoverySock == INVALID_SOCKET) + if (!s_pPlatformSocketManager->IsSocketValid(s_discoverySock)) { - app.DebugPrintf("Win64 LAN: Failed to create discovery socket: %d\n", WSAGetLastError()); + app.DebugPrintf("LAN: Failed to create discovery socket: %d\n", s_pPlatformSocketManager->getSocketError(s_discoverySock)); return false; } -#elif defined __PS3__ || defined __ORBIS__ || defined __PSVITA__ - app.DebugPrintf("Discovery socket: %d\n", s_discoverySock); - if (s_discoverySock < 0) - { - app.DebugPrintf("PS3 LAN: Failed to create discovery socket: %d\n", s_discoverySock); - terminate_networking(); - return false; - } -#endif BOOL reuseAddr = TRUE; setsockopt(s_discoverySock, SOL_SOCKET, SO_REUSEADDR, (const char *)&reuseAddr, sizeof(reuseAddr)); @@ -1522,7 +1292,7 @@ bool NetworkSocketLayer::StartDiscovery() if (::bind(s_discoverySock, (struct sockaddr *)&bindAddr, sizeof(bindAddr)) == SOCKET_ERROR) { app.DebugPrintf("Win64 LAN: Discovery bind failed: %d\n", WSAGetLastError()); - closesocket(s_discoverySock); + s_pPlatformSocketManager->CloseSocket(s_discoverySock); s_discoverySock = INVALID_SOCKET; return false; } @@ -1566,19 +1336,11 @@ void NetworkSocketLayer::StopDiscovery() { s_discovering = false; -#if defined _WINDOWS64 || defined _XBOX - if (s_discoverySock != INVALID_SOCKET) + if (s_pPlatformSocketManager->IsSocketValid(s_discoverySock)) { - closesocket(s_discoverySock); + s_pPlatformSocketManager->CloseSocket(s_discoverySock); s_discoverySock = INVALID_SOCKET; } -#elif defined __PS3__ || defined __ORBIS__ || defined __PSVITA__ - if (s_discoverySock >= 0) - { - socketclose(s_discoverySock); - s_discoverySock = -1; - } -#endif if (s_discoveryThread != NULL) { @@ -1629,17 +1391,10 @@ int NetworkSocketLayer::DiscoveryThreadProc(LPVOID param) (struct sockaddr *)&senderAddr, &senderLen); #endif -#ifdef _WINDOWS64 - if (recvLen == SOCKET_ERROR) + if (!s_pPlatformSocketManager->IsSentValid(recvLen)) { continue; } -#elif defined __PS3__ || defined __ORBIS__ || defined __PSVITA__ - if (recvLen < 0) - { - continue; - } -#endif if (recvLen < (int)sizeof(LANBroadcast)) continue; diff --git a/Minecraft.Client/Common/Network/NetworkSocketLayer.h b/Minecraft.Client/Common/Network/NetworkSocketLayer.h index bb798905..b4e95893 100644 --- a/Minecraft.Client/Common/Network/NetworkSocketLayer.h +++ b/Minecraft.Client/Common/Network/NetworkSocketLayer.h @@ -194,6 +194,7 @@ private: static int AdvertiseThreadProc(void* param); static int DiscoveryThreadProc(void* param); + static NetworkSocketManager *s_pPlatformSocketManager; static SOCKET s_listenSocket; static SOCKET s_hostConnectionSocket; static C4JThread* s_acceptThread; diff --git a/Minecraft.Client/Common/Network/PlatformNetworkManager.cpp b/Minecraft.Client/Common/Network/PlatformNetworkManager.cpp index 84d51204..aab08a09 100644 --- a/Minecraft.Client/Common/Network/PlatformNetworkManager.cpp +++ b/Minecraft.Client/Common/Network/PlatformNetworkManager.cpp @@ -235,7 +235,7 @@ void CPlatformNetworkManagerStub::DoWork() while (NetworkSocketLayer::PopDisconnectedSmallId(&disconnectedSmallId)) { IQNetPlayer* qnetPlayer = m_pIQNet->GetPlayerBySmallId(disconnectedSmallId); - if (qnetPlayer != nullptr && qnetPlayer->m_smallId == disconnectedSmallId) + if (qnetPlayer != NULL && qnetPlayer->m_smallId == disconnectedSmallId) { NotifyPlayerLeaving(qnetPlayer); qnetPlayer->m_smallId = 0; @@ -278,7 +278,11 @@ void CPlatformNetworkManagerStub::DoWork() if (!m_bLeaveGameOnTick) { m_bLeaveGameOnTick = true; +#if defined __PS3__ || defined __PSVITA__ || defined __ORBIS__ + g_NetworkManager.HandleDisconnect(false, false); +#else g_NetworkManager.HandleDisconnect(false); +#endif } } else diff --git a/Minecraft.Client/Common/Network/SocketManagers/CPlatformSocketManagerPS3.cpp b/Minecraft.Client/Common/Network/SocketManagers/CPlatformSocketManagerPS3.cpp new file mode 100644 index 00000000..a7143d66 --- /dev/null +++ b/Minecraft.Client/Common/Network/SocketManagers/CPlatformSocketManagerPS3.cpp @@ -0,0 +1,93 @@ +#include "stdafx.h" + +#include "NetworkSocketManager.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// PIEBOT: Adding this because Sony systems uses BSD apis +// which uses socketclose instead of closesocket. +int NetworkSocketManager::CloseSocket(SOCKET sock) +{ + return socketclose(sock); +} + +int NetworkSocketManager::getSocketError(SOCKET socket) +{ + return socket; +} + +bool NetworkSocketManager::IsSocketValid(SOCKET sock) +{ + return sock >= 0; +} + +bool NetworkSocketManager::IsSentValid(int sent) +{ + return sent >= 0; +} + +bool NetworkSocketManager::InitNetwork() +{ + int result = sys_net_initialize_network(); + if (result != 0) { + app.DebugPrintf("sys_net_initialize_network failed: %d\n", result); + return false; + } + + result = cellNetCtlInit(); + if (result < 0) { + app.DebugPrintf("cellNetCtlInit failed: %d\n", result); + sys_net_finalize_network(); + return false; + } +} + +SOCKET NetworkSocketManager::MakeHostSocket(int port) +{ + SOCKET s_listenSocket; + + struct sockaddr_in addr = {}; + + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = htonl(INADDR_ANY); + addr.sin_port = htons((uint16_t)port); + + s_listenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + if (s_listenSocket < 0) + { + app.DebugPrintf("socket() failed: %d\n", s_listenSocket); + return INVALID_SOCKET; + } + + // PIEBOT: time for part 2, binding and listening. + int opt = 1; + setsockopt(s_listenSocket, SOL_SOCKET, SO_REUSEADDR, (const char *)&opt, sizeof(opt)); + + int iResult = ::bind(s_listenSocket, (struct sockaddr*)&addr, sizeof(addr)); + + if (iResult < 0) + { + app.DebugPrintf("bind() failed: %d\n", iResult); + CloseSocket(s_listenSocket); + return INVALID_SOCKET; + } + + iResult = listen(s_listenSocket, 5); + if (iResult < 0) + { + app.DebugPrintf("listen() failed: %d\n", iResult); + CloseSocket(s_listenSocket); + return INVALID_SOCKET; + } + + return s_listenSocket; +} \ No newline at end of file diff --git a/Minecraft.Client/Common/Network/SocketManagers/CPlatformSocketManagerPS4.cpp b/Minecraft.Client/Common/Network/SocketManagers/CPlatformSocketManagerPS4.cpp new file mode 100644 index 00000000..165ec987 --- /dev/null +++ b/Minecraft.Client/Common/Network/SocketManagers/CPlatformSocketManagerPS4.cpp @@ -0,0 +1,86 @@ +#include "stdafx.h" + +#include "NetworkSocketManager.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +// PIEBOT: Adding this because Sony systems uses BSD apis +// which uses socketclose instead of closesocket. +int NetworkSocketManager::CloseSocket(SOCKET sock) +{ + return socketclose(sock); +} + +int NetworkSocketManager::getSocketError(SOCKET socket) +{ + return socket; +} + +bool NetworkSocketManager::IsSocketValid(SOCKET sock) +{ + return sock >= 0; +} + +bool NetworkSocketManager::IsSentValid(int sent) +{ + return sent >= 0; +} + +bool NetworkSocketManager::InitNetwork() +{ + WSADATA wsaData; + int result = WSAStartup(MAKEWORD(2, 2), &wsaData); + if (result != 0) + { + app.DebugPrintf("WSAStartup failed: %d\n", result); + return false; + } +} + +SOCKET NetworkSocketManager::MakeHostSocket(int port) +{ + SOCKET s_listenSocket = NULL; + + struct sockaddr_in addr = {}; + + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = htonl(INADDR_ANY); + addr.sin_port = htons((uint16_t)port); + + s_listenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + if (s_listenSocket < 0) + { + app.DebugPrintf("socket() failed: %d\n", s_listenSocket); + return NULL; + } + + // PIEBOT: time for part 2, binding and listening. + int opt = 1; + setsockopt(s_listenSocket, SOL_SOCKET, SO_REUSEADDR, (const char *)&opt, sizeof(opt)); + + int iResult = ::bind(s_listenSocket, (struct sockaddr*)&addr, sizeof(addr)); + + if (iResult < 0) + { + app.DebugPrintf("bind() failed: %d\n", iResult); + closesocket(s_listenSocket); + return INVALID_SOCKET; + } + + iResult = listen(s_listenSocket, 5); + if (iResult < 0) + { + app.DebugPrintf("listen() failed: %d\n", iResult); + closesocket(s_listenSocket); + return INVALID_SOCKET; + } + + return s_listenSocket; +} \ No newline at end of file diff --git a/Minecraft.Client/Common/Network/SocketManagers/CPlatformSocketManagerPSVita.cpp b/Minecraft.Client/Common/Network/SocketManagers/CPlatformSocketManagerPSVita.cpp new file mode 100644 index 00000000..f329ac91 --- /dev/null +++ b/Minecraft.Client/Common/Network/SocketManagers/CPlatformSocketManagerPSVita.cpp @@ -0,0 +1,85 @@ +#include "stdafx.h" + +#include "NetworkSocketManager.h" + +#include + +// PIEBOT: Adding this because Sony systems uses BSD apis +// which uses socketclose instead of closesocket. +int NetworkSocketManager::CloseSocket(SOCKET sock) +{ + return socketclose(sock); +} + +int NetworkSocketManager::getSocketError(SOCKET socket) +{ + return socket; +} + +bool NetworkSocketManager::IsSocketValid(SOCKET sock) +{ + return sock >= 0; +} + +bool NetworkSocketManager::IsSentValid(int sent) +{ + return sent >= 0; +} + +bool NetworkSocketManager::InitNetwork() +{ + SceNetInitParam param; + static char memory[16 * 1024]; + + param.memory = memory; + param.size = sizeof(memory); + param.flags = 0; + + int result = sceNetInit(¶m); + // libnet is brought up before us by the platform layer, which reports EBUSY here. + if (result < 0 && result != SCE_NET_ERROR_EBUSY) { + app.DebugPrintf("sceNetInit failed: 0x%08x\n", result); + return false; + } +} + +SOCKET NetworkSocketManager::MakeHostSocket(int port) +{ + SOCKET s_listenSocket = NULL; + + SceNetSockaddrIn addr = {}; + addr.sin_len = sizeof(addr); + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = htonl(INADDR_ANY); + addr.sin_port = htons((uint16_t)port); + + s_listenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + if (s_listenSocket < 0) + { + app.DebugPrintf("socket() failed: %d\n", s_listenSocket); + return INVALID_SOCKET; + } + + // PIEBOT: time for part 2, binding and listening. + int opt = 1; + setsockopt(s_listenSocket, SOL_SOCKET, SO_REUSEADDR, (const char *)&opt, sizeof(opt)); + + int iResult = ::bind(s_listenSocket, (const sockaddr*)&addr, sizeof(addr)); + + if (iResult < 0) + { + app.DebugPrintf("bind() failed: %d\n", iResult); + closesocket(s_listenSocket); + return INVALID_SOCKET; + } + + iResult = listen(s_listenSocket, 5); + if (iResult < 0) + { + app.DebugPrintf("listen() failed: %d\n", iResult); + closesocket(s_listenSocket); + return INVALID_SOCKET; + } + + return s_listenSocket; +} \ No newline at end of file diff --git a/Minecraft.Client/Common/Network/SocketManagers/CPlatformSocketManagerWindows64.cpp b/Minecraft.Client/Common/Network/SocketManagers/CPlatformSocketManagerWindows64.cpp new file mode 100644 index 00000000..eaa09e8f --- /dev/null +++ b/Minecraft.Client/Common/Network/SocketManagers/CPlatformSocketManagerWindows64.cpp @@ -0,0 +1,92 @@ +#include "stdafx.h" + +#include "NetworkSocketManager.h" + +#include +#include + +// PIEBOT: Adding this because Sony systems uses BSD apis +// which uses socketclose instead of closesocket. +int NetworkSocketManager::CloseSocket(SOCKET sock) +{ + return closesocket(sock); +} + +int NetworkSocketManager::getSocketError(SOCKET socket) +{ + return WSAGetLastError(); +} + +bool NetworkSocketManager::IsSocketValid(SOCKET sock) +{ + return sock != INVALID_SOCKET; +} + +bool NetworkSocketManager::IsSentValid(int sent) +{ + return sent != SOCKET_ERROR; +} + +bool NetworkSocketManager::InitNetwork() +{ + WSADATA wsaData; + int result = WSAStartup(MAKEWORD(2, 2), &wsaData); + if (result != 0) + { + app.DebugPrintf("WSAStartup failed: %d\n", result); + return false; + } +} + +SOCKET NetworkSocketManager::MakeHostSocket(int port) +{ + SOCKET s_listenSocket = NULL; + struct addrinfo hints = {}; + struct addrinfo *result = NULL; + + hints.ai_family = AF_INET; + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = IPPROTO_TCP; + hints.ai_flags = AI_PASSIVE; + + char portStr[16]; + sprintf_s(portStr, "%d", port); + + int iResult = getaddrinfo(NULL, portStr, &hints, &result); + if (iResult != 0) + { + app.DebugPrintf("getaddrinfo failed: %d\n", iResult); + return INVALID_SOCKET; + } + + s_listenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol); + if (s_listenSocket == INVALID_SOCKET) + { + app.DebugPrintf("socket() failed: %d\n", WSAGetLastError()); + freeaddrinfo(result); + return INVALID_SOCKET; + } + + // PIEBOT: time for part 2, binding and listening. + int opt = 1; + setsockopt(s_listenSocket, SOL_SOCKET, SO_REUSEADDR, (const char *)&opt, sizeof(opt)); + + iResult = ::bind(s_listenSocket, result->ai_addr, (int)result->ai_addrlen); + freeaddrinfo(result); + if (iResult == SOCKET_ERROR) + { + app.DebugPrintf("bind() failed: %d\n", WSAGetLastError()); + closesocket(s_listenSocket); + return INVALID_SOCKET; + } + + iResult = listen(s_listenSocket, SOMAXCONN); + if (iResult == SOCKET_ERROR) + { + app.DebugPrintf("listen() failed: %d\n", WSAGetLastError()); + closesocket(s_listenSocket); + return INVALID_SOCKET; + } + + return s_listenSocket; +} \ No newline at end of file diff --git a/Minecraft.Client/Common/Network/SocketManagers/CPlatformSocketManagerXbox.cpp b/Minecraft.Client/Common/Network/SocketManagers/CPlatformSocketManagerXbox.cpp new file mode 100644 index 00000000..4950a2b4 --- /dev/null +++ b/Minecraft.Client/Common/Network/SocketManagers/CPlatformSocketManagerXbox.cpp @@ -0,0 +1,78 @@ +#include "stdafx.h" + +#include "NetworkSocketManager.h" + +#include +#include +#include + +// PIEBOT: Adding this because Sony systems uses BSD apis +// which uses socketclose instead of closesocket. +int NetworkSocketManager::CloseSocket(SOCKET sock) +{ + return closesocket(sock); +} + +int NetworkSocketManager::getSocketError(SOCKET socket) +{ + return WSAGetLastError(); +} + +bool NetworkSocketManager::IsSocketValid(SOCKET sock) +{ + return sock != INVALID_SOCKET; +} + +bool NetworkSocketManager::IsSentValid(int sent) +{ + return sent != SOCKET_ERROR; +} + +bool NetworkSocketManager::InitNetwork() +{ + WSADATA wsaData; + int result = WSAStartup(MAKEWORD(2, 2), &wsaData); + if (result != 0) + { + app.DebugPrintf("WSAStartup failed: %d\n", result); + return false; + } +} + +SOCKET NetworkSocketManager::MakeListenSocket(int port) +{ + SOCKET s_listenSocket = NULL; + struct sockaddr_in addr = {}; + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = htonl(INADDR_ANY); + addr.sin_port = htons((WORD)port); + + s_listenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + if (s_listenSocket == INVALID_SOCKET) + { + app.DebugPrintf("socket() failed: %d\n", WSAGetLastError()); + return INVALID_SOCKET; + } + + // PIEBOT: time for part 2, binding and listening. + int opt = 1; + setsockopt(s_listenSocket, SOL_SOCKET, SO_REUSEADDR, (const char *)&opt, sizeof(opt)); + + iResult = ::bind(s_listenSocket, (struct sockaddr*)&addr, sizeof(addr)); + if (iResult == SOCKET_ERROR) + { + app.DebugPrintf("bind() failed: %d\n", WSAGetLastError()); + closesocket(s_listenSocket); + return INVALID_SOCKET; + } + + iResult = listen(s_listenSocket, SOMAXCONN); + if (iResult == SOCKET_ERROR) + { + app.DebugPrintf("listen() failed: %d\n", WSAGetLastError()); + closesocket(s_listenSocket); + return INVALID_SOCKET; + } + + return s_listenSocket; +} \ No newline at end of file diff --git a/Minecraft.Client/Common/Network/SocketManagers/NetworkSocketManager.h b/Minecraft.Client/Common/Network/SocketManagers/NetworkSocketManager.h new file mode 100644 index 00000000..f41fb49d --- /dev/null +++ b/Minecraft.Client/Common/Network/SocketManagers/NetworkSocketManager.h @@ -0,0 +1,23 @@ +#pragma once + +#include "stdafx.h" + +#ifdef _WINDOWS64 +#include +#elif defined _XBOX +#include +#else +typedef int SOCKET; +#define INVALID_SOCKET -1 +#endif + +class NetworkSocketManager { +public: + bool IsSocketValid(SOCKET sock); + bool IsSentValid(int sent); + int getSocketError(SOCKET sock); + int CloseSocket(SOCKET sock); + int TCPaddrinfo(PCSTR ip, int port); + bool InitNetwork(); + SOCKET MakeHostSocket(int port); +}; \ No newline at end of file diff --git a/Minecraft.Client/Extrax64Stubs.cpp b/Minecraft.Client/Extrax64Stubs.cpp index c6b2d1b3..5c013c5e 100644 --- a/Minecraft.Client/Extrax64Stubs.cpp +++ b/Minecraft.Client/Extrax64Stubs.cpp @@ -32,7 +32,7 @@ #include "Xbox\Sentient\SentientManager.h" #include "StatsCounter.h" #include "Xbox\Social\SocialManager.h" -#include "Xbox\Sentient\DynamicConfigurations.h"x +#include "Xbox\Sentient\DynamicConfigurations.h" #include "Common\Network\IQNet.h" #else #include "Orbis\Sentient\SentientManager.h" @@ -47,7 +47,6 @@ #endif #ifndef _DISABLE_XBLIVE -#if !defined(__PS3__) && !defined(__ORBIS__) && !defined(__PSVITA__) #ifdef _WINDOWS64 wchar_t fakeGamerTagW[32] = L"PlayerName"; #endif diff --git a/Minecraft.Client/LivingEntityRenderer.cpp b/Minecraft.Client/LivingEntityRenderer.cpp index a4d0ecb1..35acb0fd 100644 --- a/Minecraft.Client/LivingEntityRenderer.cpp +++ b/Minecraft.Client/LivingEntityRenderer.cpp @@ -561,7 +561,7 @@ void LivingEntityRenderer::renderNameTag(shared_ptr mob, const wst playerName=name; break; case Player::ePlayerNameValid_False: - memset(wchName,0,sizeof(wchName)d); + memset(wchName,0,sizeof(wchName)); swprintf(wchName, 2, L"%d",player->getPlayerIndex()+1); playerName=wchName; break; diff --git a/Minecraft.Client/Minecraft.Client.vcxproj b/Minecraft.Client/Minecraft.Client.vcxproj index 5464006f..4a2ed048 100644 --- a/Minecraft.Client/Minecraft.Client.vcxproj +++ b/Minecraft.Client/Minecraft.Client.vcxproj @@ -261,6 +261,7 @@ true WithExceptsWithRtti NoTocRestore2 + SNC Application @@ -4069,6 +4070,39 @@ xcopy /q /y /i /s /e $(ProjectDir)Durango\CU $(LayoutDir)Image\Loose\CUtrue + + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + + true true @@ -4116,6 +4150,7 @@ xcopy /q /y /i /s /e $(ProjectDir)Durango\CU $(LayoutDir)Image\Loose\CUtrue true true + true true @@ -21620,6 +21655,170 @@ xcopy /q /y /i /s /e $(ProjectDir)Durango\CU $(LayoutDir)Image\Loose\CUtrue true + + true + false + true + true + true + true + false + true + true + true + true + false + true + true + true + true + false + true + true + true + true + false + true + true + true + true + false + true + true + true + false + + + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + + + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + + + true + true + true + false + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + + + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + + + true + true true @@ -21667,6 +21866,7 @@ xcopy /q /y /i /s /e $(ProjectDir)Durango\CU $(LayoutDir)Image\Loose\CUtrue true true + true true @@ -28719,7 +28919,44 @@ xcopy /q /y /i /s /e $(ProjectDir)Durango\CU $(LayoutDir)Image\Loose\CUtrue true - + + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true true @@ -29909,7 +30146,7 @@ xcopy /q /y /i /s /e $(ProjectDir)Durango\CU $(LayoutDir)Image\Loose\CUtrue false false - true + false true true false diff --git a/Minecraft.Client/Minecraft.Client.vcxproj.filters b/Minecraft.Client/Minecraft.Client.vcxproj.filters index 4eeb12f9..8bd9fe1d 100644 --- a/Minecraft.Client/Minecraft.Client.vcxproj.filters +++ b/Minecraft.Client/Minecraft.Client.vcxproj.filters @@ -732,6 +732,9 @@ {7a457cb8-28b7-4bbc-8209-e2ed3adeb8fd} + + {3977f528-165f-4612-8fe6-bfb3f9a6983d} + @@ -3808,6 +3811,12 @@ Windows64\Windows64Extras + + Header Files + + + Common\Source Files\Network\SocketManager + @@ -5958,6 +5967,21 @@ Windows64\Windows64Extras + + Common\Source Files\Network\SocketManager + + + Common\Source Files\Network\SocketManager + + + Common\Source Files\Network\SocketManager + + + Common\Source Files\Network\SocketManager + + + Common\Source Files\Network\SocketManager + diff --git a/Minecraft.Client/MinecraftServer.cpp b/Minecraft.Client/MinecraftServer.cpp index afb81c02..63318b62 100644 --- a/Minecraft.Client/MinecraftServer.cpp +++ b/Minecraft.Client/MinecraftServer.cpp @@ -88,6 +88,7 @@ bool MinecraftServer::s_slowQueuePacketSent = false; unordered_map MinecraftServer::ironTimers; +#ifdef MINECRAFT_SERVER_BUILD static bool ShouldUseDedicatedServerProperties() { #if defined(MINECRAFT_SERVER_BUILD) @@ -543,6 +544,7 @@ static bool ExecuteConsoleCommand(MinecraftServer *server, const wstring &rawCom server->warn(L"Unknown command: " + command); return false; } +#endif MinecraftServer::MinecraftServer() { @@ -616,10 +618,12 @@ bool MinecraftServer::initServer(__int64 seed, NetworkGameInitData *initData, DW logger.info("Loading properties"); #endif settings = new Settings(new File(L"server.properties")); +#ifdef MINECRAFT_SERVER_BUILD // Dedicated-only: spawn-protection radius in blocks; 0 disables protection. m_spawnProtectionRadius = GetDedicatedServerInt(settings, L"spawn-protection", 0); if (m_spawnProtectionRadius < 0) m_spawnProtectionRadius = 0; if (m_spawnProtectionRadius > 256) m_spawnProtectionRadius = 256; +#endif app.DebugPrintf("\n*** SERVER SETTINGS ***\n"); app.DebugPrintf("ServerSettings: host-friends-only is %s\n",(app.GetGameHostOption(eGameHostOption_FriendsOfFriends)>0)?"on":"off"); @@ -1647,9 +1651,13 @@ Level *MinecraftServer::getCommandSenderWorld() int MinecraftServer::getSpawnProtectionRadius() { +#ifdef MINECRAFT_SERVER_BUILD // Client-host mode must never apply dedicated-server spawn protection settings. if (!ShouldUseDedicatedServerProperties()) return 0; return m_spawnProtectionRadius; +#else + return 16; +#endif } bool MinecraftServer::isUnderSpawnProtection(Level *level, int x, int y, int z, shared_ptr player) diff --git a/Minecraft.Client/PendingConnection.cpp b/Minecraft.Client/PendingConnection.cpp index e6949949..e3c38f34 100644 --- a/Minecraft.Client/PendingConnection.cpp +++ b/Minecraft.Client/PendingConnection.cpp @@ -240,13 +240,13 @@ void PendingConnection::handleLogin(shared_ptr packet) if (loginXuid == INVALID_XUID) loginXuid = packet->m_onlineXuid; bool duplicateXuid = false; - if (loginXuid != INVALID_XUID && server->getPlayers()->getPlayer(loginXuid) != nullptr) + if (loginXuid != INVALID_XUID && server->getPlayers()->getPlayer(loginXuid) != NULL) { duplicateXuid = true; } else if (packet->m_onlineXuid != INVALID_XUID && packet->m_onlineXuid != loginXuid && - server->getPlayers()->getPlayer(packet->m_onlineXuid) != nullptr) + server->getPlayers()->getPlayer(packet->m_onlineXuid) != NULL) { duplicateXuid = true; } diff --git a/Minecraft.World/Minecraft.World.vcxproj b/Minecraft.World/Minecraft.World.vcxproj index ae8f6e35..1b978266 100644 --- a/Minecraft.World/Minecraft.World.vcxproj +++ b/Minecraft.World/Minecraft.World.vcxproj @@ -208,7 +208,7 @@ MultiByte WithExceptsWithRtti NoTocRestore2 - v110 + SNC StaticLibrary @@ -263,7 +263,7 @@ MultiByte WithExceptsWithRtti NoTocRestore2 - v110 + SNC StaticLibrary