From 8a6d21779d72a9dbc69bc3a1e08c523f8fe62d38 Mon Sep 17 00:00:00 2001 From: str1k3r <115313679+S1l3ntStr1ke87@users.noreply.github.com> Date: Sat, 20 Jun 2026 03:01:29 -0400 Subject: [PATCH] Fix Sending Auth Token Over Header & Update Leaderboard --- .../WindowsLeaderboardManager.cpp | 119 +++++------------- .../Leaderboards/WindowsLeaderboardManager.h | 1 + .../Windows64/Windows64_Launcher.cpp | 3 +- .../Windows64/Windows64_Minecraft.cpp | 4 +- 4 files changed, 34 insertions(+), 93 deletions(-) diff --git a/Minecraft.Client/Windows64/Leaderboards/WindowsLeaderboardManager.cpp b/Minecraft.Client/Windows64/Leaderboards/WindowsLeaderboardManager.cpp index 1b1e7665..d3a47ea8 100644 --- a/Minecraft.Client/Windows64/Leaderboards/WindowsLeaderboardManager.cpp +++ b/Minecraft.Client/Windows64/Leaderboards/WindowsLeaderboardManager.cpp @@ -165,78 +165,38 @@ LeaderboardManager* LeaderboardManager::m_instance = new WindowsLeaderboardManag bool WindowsLeaderboardManager::WriteStats(unsigned int viewCount, ViewIn views) { - if (views == nullptr || viewCount == 0) - return true; + return false; // Since WriteStats is useless we just do this, exact same thing is done in DurangoLeaderboardManager +} - for (unsigned int i = 0; i < viewCount; ++i) +bool WindowsLeaderboardManager::SendStats(EStatsType type, int diff) +{ + if (!Windows64Launcher::IsInOfflineMode || Windows64Minecraft::IsOfflineMode) { - const RegisterScore& src = views[i]; - - int diff = ClampDifficulty(src.m_difficulty); - if (src.m_commentData.m_statsType == eStatsType_Kills && diff == 0) - diff = 1; - - int type = static_cast(src.m_commentData.m_statsType); - if (type < 0 || type >= static_cast(eStatsType_MAX)) continue; - - json statsArr = json::array(); - unsigned long long total = 0; - - switch (src.m_commentData.m_statsType) + Minecraft* mc = Minecraft::GetInstance(); + const int pad = ProfileManager.GetPrimaryPad(); + if (mc && pad >= 0 && pad < XUSER_MAX_COUNT) { - case eStatsType_Travelling: - statsArr = { src.m_commentData.m_travelling.m_walked, - src.m_commentData.m_travelling.m_fallen, - src.m_commentData.m_travelling.m_minecart, - src.m_commentData.m_travelling.m_boat }; - break; - case eStatsType_Mining: - statsArr = { src.m_commentData.m_mining.m_dirt, - src.m_commentData.m_mining.m_cobblestone, - src.m_commentData.m_mining.m_sand, - src.m_commentData.m_mining.m_stone, - src.m_commentData.m_mining.m_gravel, - src.m_commentData.m_mining.m_clay, - src.m_commentData.m_mining.m_obsidian }; - break; - case eStatsType_Farming: - statsArr = { src.m_commentData.m_farming.m_eggs, - src.m_commentData.m_farming.m_wheat, - src.m_commentData.m_farming.m_mushroom, - src.m_commentData.m_farming.m_sugarcane, - src.m_commentData.m_farming.m_milk, - src.m_commentData.m_farming.m_pumpkin }; - break; - case eStatsType_Kills: - statsArr = { src.m_commentData.m_kills.m_zombie, - src.m_commentData.m_kills.m_skeleton, - src.m_commentData.m_kills.m_creeper, - src.m_commentData.m_kills.m_spider, - src.m_commentData.m_kills.m_spiderJockey, - src.m_commentData.m_kills.m_zombiePigman, - src.m_commentData.m_kills.m_slime }; - break; - default: - continue; + StatsCounter* stats = mc->stats[pad]; + if (stats) + { + LeaderboardManager::ReadScore localScore = {}; + if (BuildLocalScore(localScore, stats, type, diff)) + { + json statsArr = json::array(); + for (unsigned int i = 0; i < localScore.m_statsSize; ++i) + statsArr.push_back(localScore.m_statsData[i]); + + json submitBody; + submitBody["type"] = static_cast(type); + submitBody["difficulty"] = static_cast(diff); + submitBody["stats"] = statsArr; + submitBody["totalScore"] = static_cast(localScore.m_totalScore); + + sendScores(submitBody.dump()); + } + } } - - for (auto& v : statsArr) total += v.get(); - - unsigned long long serverTotal = total; - if (src.m_score > 0 && static_cast(src.m_score) > serverTotal) - serverTotal = static_cast(src.m_score); - - json body; - body["type"] = type; - body["difficulty"] = diff; - body["stats"] = statsArr; - body["totalScore"] = serverTotal; - - sendScores(body.dump()); } - - delete[] views; - return true; } bool WindowsLeaderboardManager::ReadStats_Friends(LeaderboardReadListener* callback, @@ -278,30 +238,7 @@ bool WindowsLeaderboardManager::ReadNetworkStats(LeaderboardReadListener* callba // Submit live score only when authenticated. if (!Windows64Launcher::IsInOfflineMode || Windows64Minecraft::IsOfflineMode) { - Minecraft* mc = Minecraft::GetInstance(); - const int pad = ProfileManager.GetPrimaryPad(); - if (mc && pad >= 0 && pad < XUSER_MAX_COUNT) - { - StatsCounter* stats = mc->stats[pad]; - if (stats) - { - LeaderboardManager::ReadScore localScore = {}; - if (BuildLocalScore(localScore, stats, type, diff)) - { - json statsArr = json::array(); - for (unsigned int i = 0; i < localScore.m_statsSize; ++i) - statsArr.push_back(localScore.m_statsData[i]); - - json submitBody; - submitBody["type"] = static_cast(type); - submitBody["difficulty"] = static_cast(diff); - submitBody["stats"] = statsArr; - submitBody["totalScore"] = static_cast(localScore.m_totalScore); - - sendScores(submitBody.dump()); - } - } - } + WindowsLeaderboardManager::SendStats(type, diff); } std::vector allRows; diff --git a/Minecraft.Client/Windows64/Leaderboards/WindowsLeaderboardManager.h b/Minecraft.Client/Windows64/Leaderboards/WindowsLeaderboardManager.h index 8e21e1ed..8c2f59ef 100644 --- a/Minecraft.Client/Windows64/Leaderboards/WindowsLeaderboardManager.h +++ b/Minecraft.Client/Windows64/Leaderboards/WindowsLeaderboardManager.h @@ -9,6 +9,7 @@ public: virtual void CloseSession() override {} virtual void DeleteSession() override {} + virtual bool SendStats(EStatsType type, int diff); virtual bool WriteStats(unsigned int viewCount, ViewIn views) override; virtual bool ReadStats_Friends( diff --git a/Minecraft.Client/Windows64/Windows64_Launcher.cpp b/Minecraft.Client/Windows64/Windows64_Launcher.cpp index ac24dd80..b0e30e12 100644 --- a/Minecraft.Client/Windows64/Windows64_Launcher.cpp +++ b/Minecraft.Client/Windows64/Windows64_Launcher.cpp @@ -658,7 +658,8 @@ std::vector split(const std::string& str, char delimiter) { int Windows64Launcher::API_GetAccountInfo(const std::string token) { std::vector headers; - headers.push_back(L"Authorization: " + token); + std::wstring authtoken(token.begin(), token.end()); + headers.push_back(L"Authorization:" + authtoken); headers.push_back(L"Content-Type: text/plain"); HttpResponse response = WinsockNetLayer::DoWinHttpRequest(g_Win64AuthURL, L"/accountinfo", L"POST", "", headers); diff --git a/Minecraft.Client/Windows64/Windows64_Minecraft.cpp b/Minecraft.Client/Windows64/Windows64_Minecraft.cpp index b62e3324..59357856 100644 --- a/Minecraft.Client/Windows64/Windows64_Minecraft.cpp +++ b/Minecraft.Client/Windows64/Windows64_Minecraft.cpp @@ -146,7 +146,9 @@ std::string Windows64Minecraft::GetAuthenticationTicket() { static bool FetchSessionInfo() { std::vector headers; - headers.push_back(L"Authorization:" + Windows64Minecraft::GetAuthenticationTicket()) + std::string token = Windows64Minecraft::GetAuthenticationTicket(); + std::wstring authtoken(token.begin(), token.end()); + headers.push_back(L"Authorization:" + authtoken); headers.push_back(L"Content-Type: text/plain"); HttpResponse response = WinsockNetLayer::DoWinHttpRequest(L"auth.mclegacyedition.xyz", L"/accountinfo", L"POST", "", headers);