aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/ClientConnection.cpp
diff options
context:
space:
mode:
authorSlenderman <ssimulpong@outlook.com>2026-03-03 16:50:28 -0500
committerGitHub <noreply@github.com>2026-03-04 04:50:28 +0700
commitac480f674500e15c3cdb1633bcc17278cc08337e (patch)
tree91113b1a5c668a0dc91ea30be81175babe6c8a05 /Minecraft.Client/ClientConnection.cpp
parent30ecc8025019fddd7c87a25ad19634ab008f1637 (diff)
Update username logic and implement latest LCEMP changes (#311)
* Update username logic and implement latest LCEMP changes * Update old reference * Fix tutorial world crash * Restore deleted comment
Diffstat (limited to 'Minecraft.Client/ClientConnection.cpp')
-rw-r--r--Minecraft.Client/ClientConnection.cpp65
1 files changed, 62 insertions, 3 deletions
diff --git a/Minecraft.Client/ClientConnection.cpp b/Minecraft.Client/ClientConnection.cpp
index f3510d33..8123a2f0 100644
--- a/Minecraft.Client/ClientConnection.cpp
+++ b/Minecraft.Client/ClientConnection.cpp
@@ -55,6 +55,12 @@
#endif
#include "DLCTexturePack.h"
+#ifdef _WINDOWS64
+#include "Xbox\Network\NetworkPlayerXbox.h"
+#include "Common\Network\PlatformNetworkManagerStub.h"
+#endif
+
+
#ifdef _DURANGO
#include "..\Minecraft.World\DurangoStats.h"
#include "..\Minecraft.World\GenericStats.h"
@@ -421,7 +427,6 @@ void ClientConnection::handleAddEntity(shared_ptr<AddEntityPacket> packet)
{
case AddEntityPacket::MINECART:
e = Minecart::createMinecart(level, x, y, z, packet->data);
- break;
case AddEntityPacket::FISH_HOOK:
{
// 4J Stu - Brought forward from 1.4 to be able to drop XP from fishing
@@ -444,7 +449,7 @@ void ClientConnection::handleAddEntity(shared_ptr<AddEntityPacket> packet)
}
}
- if (owner->instanceof(eTYPE_PLAYER))
+ if (owner != NULL && owner->instanceof(eTYPE_PLAYER))
{
shared_ptr<Player> player = dynamic_pointer_cast<Player>(owner);
shared_ptr<FishingHook> hook = shared_ptr<FishingHook>( new FishingHook(level, x, y, z, player) );
@@ -793,7 +798,28 @@ void ClientConnection::handleAddPlayer(shared_ptr<AddPlayerPacket> packet)
if (networkPlayer != NULL) player->m_displayName = networkPlayer->GetDisplayName();
#else
// On all other platforms display name is just gamertag so don't check with the network manager
- player->m_displayName = player->name;
+ player->m_displayName = player->getName();
+#endif
+
+#ifdef _WINDOWS64
+ {
+ PlayerUID pktXuid = player->getXuid();
+ const PlayerUID WIN64_XUID_BASE = (PlayerUID)0xe000d45248242f2e;
+ if (pktXuid >= WIN64_XUID_BASE && pktXuid < WIN64_XUID_BASE + MINECRAFT_NET_MAX_PLAYERS)
+ {
+ BYTE smallId = (BYTE)(pktXuid - WIN64_XUID_BASE);
+ INetworkPlayer* np = g_NetworkManager.GetPlayerBySmallId(smallId);
+ if (np != NULL)
+ {
+ NetworkPlayerXbox* npx = (NetworkPlayerXbox*)np;
+ IQNetPlayer* qp = npx->GetQNetPlayer();
+ if (qp != NULL && qp->m_gamertag[0] == 0)
+ {
+ wcsncpy_s(qp->m_gamertag, 32, packet->name.c_str(), _TRUNCATE);
+ }
+ }
+ }
+ }
#endif
// printf("\t\t\t\t%d: Add player\n",packet->id,packet->yRot);
@@ -938,6 +964,39 @@ void ClientConnection::handleMoveEntitySmall(shared_ptr<MoveEntityPacketSmall> p
void ClientConnection::handleRemoveEntity(shared_ptr<RemoveEntitiesPacket> packet)
{
+#ifdef _WINDOWS64
+ if (!g_NetworkManager.IsHost())
+ {
+ for (int i = 0; i < packet->ids.length; i++)
+ {
+ shared_ptr<Entity> entity = getEntity(packet->ids[i]);
+ if (entity != NULL && entity->GetType() == eTYPE_PLAYER)
+ {
+ shared_ptr<Player> player = dynamic_pointer_cast<Player>(entity);
+ if (player != NULL)
+ {
+ PlayerUID xuid = player->getXuid();
+ INetworkPlayer* np = g_NetworkManager.GetPlayerByXuid(xuid);
+ if (np != NULL)
+ {
+ NetworkPlayerXbox* npx = (NetworkPlayerXbox*)np;
+ IQNetPlayer* qp = npx->GetQNetPlayer();
+ if (qp != NULL)
+ {
+ extern CPlatformNetworkManagerStub* g_pPlatformNetworkManager;
+ g_pPlatformNetworkManager->NotifyPlayerLeaving(qp);
+ qp->m_smallId = 0;
+ qp->m_isRemote = false;
+ qp->m_isHostPlayer = false;
+ qp->m_gamertag[0] = 0;
+ qp->SetCustomDataValue(0);
+ }
+ }
+ }
+ }
+ }
+ }
+#endif
for (int i = 0; i < packet->ids.length; i++)
{
level->removeEntity(packet->ids[i]);