Skip to content

Commit ff8441b

Browse files
committed
-Fixed stats counter using stats IDs instead of UUIDs from the AchievementMap
1 parent 68ebecc commit ff8441b

4 files changed

Lines changed: 14 additions & 5 deletions

File tree

source/client/app/Minecraft.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -686,7 +686,8 @@ void Minecraft::tick()
686686

687687
tickInput();
688688

689-
m_pStatsCounter->tick();
689+
if (m_pStatsCounter)
690+
m_pStatsCounter->tick();
690691
m_gui.tick();
691692

692693
if (m_async.empty())
@@ -834,7 +835,6 @@ void Minecraft::init()
834835
m_pGameRenderer = new GameRenderer(this);
835836
m_pParticleEngine = new ParticleEngine(m_pLevel, m_pTextures);
836837
m_pUser = new User(getOptions()->m_playerName.get(), "");
837-
m_pStatsCounter = new StatsCounter(m_pUser, m_externalStorageDir);
838838

839839
setScreen(new IntroScreen);
840840
m_async.emplace_back(std::bind(&Minecraft::initAssets, this));
@@ -848,6 +848,8 @@ void Minecraft::initAssets()
848848
FoliageColor::init(m_pPlatform->loadTexture("misc/foliagecolor.png", true));
849849
Language::getInstance()->init(getOptions());
850850
AchievementMap::getInstance()->init();
851+
SAFE_DELETE(m_pStatsCounter);
852+
m_pStatsCounter = new StatsCounter(m_pUser, m_externalStorageDir);
851853
}
852854

853855
Minecraft::~Minecraft()

source/stats/AchievementMap.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@ AchievementMap::AchievementMap()
66
{
77
}
88

9+
//@NOTE: This will make sure that stats/achievements without a mapping won't crash the game and will have the same behavior as the original, which used StringBuilder.append and allowed null String values
10+
//Certainly every stat should have a mapping in the original (tall grass mine block stat doesn't have one tho), so that isn't really an intentional behavior
911
const std::string& AchievementMap::get(int id) const
1012
{
11-
return m_map.at(id);
13+
auto it = m_map.find(id);
14+
return it == m_map.end() ? NULL_UUID : it->second;
1215
}
1316

1417
void AchievementMap::init()
@@ -47,6 +50,8 @@ void AchievementMap::init()
4750

4851
AchievementMap* AchievementMap::instance = new AchievementMap();
4952

53+
std::string AchievementMap::NULL_UUID = "null";
54+
5055
AchievementMap* AchievementMap::getInstance()
5156
{
5257
return instance;

source/stats/AchievementMap.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,6 @@ class AchievementMap
1818
std::unordered_map<int, std::string> m_map;
1919

2020
static AchievementMap* instance;
21+
22+
static std::string NULL_UUID;
2123
};

source/stats/StatsCounter.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ std::unordered_map<Stat*, int> StatsCounter::parseStatsJson(const std::string& j
134134
continue;
135135

136136

137-
checksumBuilder += std::to_string(statId) + "," + std::to_string(amount) + ",";
137+
checksumBuilder += stat->getUUID() + "," + std::to_string(amount) + ",";
138138

139139
result[stat] = amount;
140140
}
@@ -177,7 +177,7 @@ std::string StatsCounter::generateStatsJson(const std::string& username, const s
177177
entry[std::to_string(stat->m_id)] = std::to_string(value);
178178
statsChange.push_back(entry);
179179

180-
checksumBuilder += std::to_string(stat->m_id) + "," + std::to_string(value) + ",";
180+
checksumBuilder += stat->getUUID() + "," + std::to_string(value) + ",";
181181
}
182182

183183
json["stats-change"] = statsChange;

0 commit comments

Comments
 (0)