aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSlenderman <ssimulpong@outlook.com>2026-03-03 11:58:22 -0500
committerGitHub <noreply@github.com>2026-03-03 23:58:22 +0700
commit515f91cad8e0625334954acd4024c6bfefcc89e8 (patch)
tree5245636194a1fce9ad559f7e9bdfd86be167b104
parent5c91c2608690872aabba4f62d5ceb02c934f5f32 (diff)
Fix player save data issue & multiple username implementations (#257)
* fix saving issue & multiple username implementations * Update README.md Updated the method for overriding in-game username from '-name' to 'username.txt'. * remove unused include i forgot to get rid of while testing
-rw-r--r--Minecraft.Client/Common/Network/GameNetworkManager.cpp2
-rw-r--r--Minecraft.Client/Common/Network/GameNetworkManager.h2
-rw-r--r--Minecraft.Client/Extrax64Stubs.cpp17
-rw-r--r--Minecraft.Client/Windows64/4JLibs/inc/4J_Profile.h2
-rw-r--r--Minecraft.Client/Windows64/Windows64_App.h1
-rw-r--r--Minecraft.Client/Windows64/Windows64_Minecraft.cpp38
-rw-r--r--README.md8
7 files changed, 20 insertions, 50 deletions
diff --git a/Minecraft.Client/Common/Network/GameNetworkManager.cpp b/Minecraft.Client/Common/Network/GameNetworkManager.cpp
index b3fb5cd7..a65a61aa 100644
--- a/Minecraft.Client/Common/Network/GameNetworkManager.cpp
+++ b/Minecraft.Client/Common/Network/GameNetworkManager.cpp
@@ -1978,7 +1978,7 @@ bool CGameNetworkManager::AllowedToPlayMultiplayer(int playerIdx)
return ProfileManager.AllowedToPlayMultiplayer(playerIdx);
}
-char *CGameNetworkManager::GetOnlineName(int playerIdx)
+const char *CGameNetworkManager::GetOnlineName(int playerIdx)
{
return ProfileManager.GetGamertag(playerIdx);
}
diff --git a/Minecraft.Client/Common/Network/GameNetworkManager.h b/Minecraft.Client/Common/Network/GameNetworkManager.h
index 01db2724..bb7633c2 100644
--- a/Minecraft.Client/Common/Network/GameNetworkManager.h
+++ b/Minecraft.Client/Common/Network/GameNetworkManager.h
@@ -196,7 +196,7 @@ private:
int GetLockedProfile();
bool IsSignedInLive(int playerIdx);
bool AllowedToPlayMultiplayer(int playerIdx);
- char *GetOnlineName(int playerIdx);
+ const char *GetOnlineName(int playerIdx);
C4JThread::Event* m_hServerStoppedEvent;
C4JThread::Event* m_hServerReadyEvent;
diff --git a/Minecraft.Client/Extrax64Stubs.cpp b/Minecraft.Client/Extrax64Stubs.cpp
index 3a86cbea..22ad578f 100644
--- a/Minecraft.Client/Extrax64Stubs.cpp
+++ b/Minecraft.Client/Extrax64Stubs.cpp
@@ -589,8 +589,21 @@ char fakeGamerTag[32] = "PlayerName";
void SetFakeGamertag(char* name) { strcpy_s(fakeGamerTag, name); }
char* C_4JProfile::GetGamertag(int iPad) { return fakeGamerTag; }
#else
-char* C_4JProfile::GetGamertag(int iPad) { extern char g_Win64Username[17]; return g_Win64Username; }
-wstring C_4JProfile::GetDisplayName(int iPad) { extern wchar_t g_Win64UsernameW[17]; return g_Win64UsernameW; }
+#include <windows.h>
+
+const char* C_4JProfile::GetGamertag(int iPad)
+{
+ static std::string narrowName;
+ const wchar_t* wideName = g_playerName.c_str();
+
+ int sizeNeeded = WideCharToMultiByte(CP_UTF8, 0, wideName, -1, nullptr, 0, nullptr, nullptr);
+
+ narrowName.resize(sizeNeeded);
+ WideCharToMultiByte(CP_UTF8, 0, wideName, -1, &narrowName[0], sizeNeeded, nullptr, nullptr);
+
+ return narrowName.c_str();
+}
+wstring C_4JProfile::GetDisplayName(int iPad) { return g_playerName; }
#endif
bool C_4JProfile::IsFullVersion() { return s_bProfileIsFullVersion; }
void C_4JProfile::SetSignInChangeCallback(void (*Func)(LPVOID, bool, unsigned int), LPVOID lpParam) {}
diff --git a/Minecraft.Client/Windows64/4JLibs/inc/4J_Profile.h b/Minecraft.Client/Windows64/4JLibs/inc/4J_Profile.h
index f1bd85bb..f7718a83 100644
--- a/Minecraft.Client/Windows64/4JLibs/inc/4J_Profile.h
+++ b/Minecraft.Client/Windows64/4JLibs/inc/4J_Profile.h
@@ -75,7 +75,7 @@ public:
// SYS
int GetPrimaryPad();
void SetPrimaryPad(int iPad);
- char* GetGamertag(int iPad);
+ const char* GetGamertag(int iPad);
wstring GetDisplayName(int iPad);
bool IsFullVersion();
void SetSignInChangeCallback(void ( *Func)(LPVOID, bool, unsigned int),LPVOID lpParam);
diff --git a/Minecraft.Client/Windows64/Windows64_App.h b/Minecraft.Client/Windows64/Windows64_App.h
index bff916ec..32d204ad 100644
--- a/Minecraft.Client/Windows64/Windows64_App.h
+++ b/Minecraft.Client/Windows64/Windows64_App.h
@@ -33,6 +33,7 @@ public:
virtual void TemporaryCreateGameStart();
bool m_bShutdown;
+ wstring g_playerName;
};
extern CConsoleMinecraftApp app;
diff --git a/Minecraft.Client/Windows64/Windows64_Minecraft.cpp b/Minecraft.Client/Windows64/Windows64_Minecraft.cpp
index b49af853..78ab76fe 100644
--- a/Minecraft.Client/Windows64/Windows64_Minecraft.cpp
+++ b/Minecraft.Client/Windows64/Windows64_Minecraft.cpp
@@ -85,8 +85,6 @@ BOOL g_bWidescreen = TRUE;
int g_iScreenWidth = 1920;
int g_iScreenHeight = 1080;
-char g_Win64Username[17] = { 0 };
-wchar_t g_Win64UsernameW[17] = { 0 };
UINT g_ScreenWidth = 1920;
UINT g_ScreenHeight = 1080;
@@ -764,42 +762,8 @@ int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
//g_iScreenWidth = 960;
//g_iScreenHeight = 544;
}
-
- char cmdLineA[1024];
- strncpy_s(cmdLineA, sizeof(cmdLineA), lpCmdLine, _TRUNCATE);
-
- char* nameArg = strstr(cmdLineA, "-name ");
- if (nameArg)
- {
- nameArg += 6;
- while (*nameArg == ' ') nameArg++;
- char nameBuf[17];
- int n = 0;
- while (nameArg[n] && nameArg[n] != ' ' && n < 16) { nameBuf[n] = nameArg[n]; n++; }
- nameBuf[n] = 0;
- strncpy_s(g_Win64Username, 17, nameBuf, _TRUNCATE);
- }
}
- if (g_Win64Username[0] == 0)
- {
- DWORD sz = 17;
- static bool seeded = false;
- if (!seeded)
- {
- seeded = true;
- srand((unsigned int)time(NULL));
- }
-
- int r = rand() % 10000; // 0�9999
-
- snprintf(g_Win64Username, 17, "Player%04d", r);
-
- g_Win64Username[16] = 0;
- }
-
- MultiByteToWideChar(CP_ACP, 0, g_Win64Username, -1, g_Win64UsernameW, 17);
-
// Initialize global strings
MyRegisterClass(hInstance);
@@ -971,8 +935,6 @@ int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
IQNet::m_player[i].m_isHostPlayer = (i == 0);
swprintf_s(IQNet::m_player[i].m_gamertag, 32, L"Player%d", i);
}
- extern wchar_t g_Win64UsernameW[17];
- wcscpy_s(IQNet::m_player[0].m_gamertag, 32, g_Win64UsernameW);
WinsockNetLayer::Initialize();
diff --git a/README.md b/README.md
index 999626e9..bc45ef22 100644
--- a/README.md
+++ b/README.md
@@ -33,13 +33,7 @@ Basic LAN multiplayer is available on the Windows build
- Other players on the same LAN can discover the session from the in-game Join Game menu
- Game connections use TCP port `25565` by default
- LAN discovery uses UDP port `25566`
-- You can override your in-game username at launch with `-name`
-
-Example:
-
-```powershell
-Minecraft.Client.exe -name Steve
-```
+- You can override your in-game username at launch with `username.txt`
This feature is based on [LCEMP](https://github.com/LCEMP/LCEMP/)