From 04459f1ea712c8ae4ca85516bcb47ca40c9fa60b Mon Sep 17 00:00:00 2001 From: nossr50 Date: Fri, 16 Apr 2021 09:55:44 -0700 Subject: [PATCH] Fix leaderboards & fix override locale bug Fixes #4493 Fixes #4492 --- Changelog.txt | 7 ++- pom.xml | 2 +- .../database/FlatFileDatabaseManager.java | 6 +- src/main/java/com/gmail/nossr50/mcMMO.java | 2 + .../database/FlatFileDatabaseManagerTest.java | 62 +++++++++++++++++++ 5 files changed, 73 insertions(+), 6 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index 3361322de..179f32012 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,3 +1,7 @@ +Version 2.1.193 + Fixed another bug where mcrank/mctop/leaderboards weren't loading + Fixed a bug where override locales weren't being loaded (but worked after a reloadlocale command) + (Unit Tests) Added a test to make sure leaderboards were working Version 2.1.192 Removed some debug messages from FlatFileDatabaseManager Fixed another bug where player names could be saved as null for FlatFileDB (they will update on the players next login at the next save interval) @@ -11,9 +15,6 @@ Version 2.1.192 (API) Added com.gmail.nossr50.api.DatabaseAPI.doesPlayerExistInDB(java.lang.String) (Unit Tests) Added some more unit tests to FlatFileDB - NOTES: - I removed a lot of API that should honestly never have been added, this will break some plugins, those plugins will have to update. - Version 2.1.191 Fixed a bug related to our blocktracker Fixed a bug that prevented the leaderboards from working on FlatFile in some circumstances diff --git a/pom.xml b/pom.xml index 320b75d5d..3a19d20e1 100755 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 com.gmail.nossr50.mcMMO mcMMO - 2.1.192 + 2.1.193-SNAPSHOT mcMMO https://github.com/mcMMO-Dev/mcMMO diff --git a/src/main/java/com/gmail/nossr50/database/FlatFileDatabaseManager.java b/src/main/java/com/gmail/nossr50/database/FlatFileDatabaseManager.java index f301777b1..32f327614 100644 --- a/src/main/java/com/gmail/nossr50/database/FlatFileDatabaseManager.java +++ b/src/main/java/com/gmail/nossr50/database/FlatFileDatabaseManager.java @@ -10,6 +10,7 @@ import com.gmail.nossr50.datatypes.skills.PrimarySkillType; import com.gmail.nossr50.datatypes.skills.SuperAbilityType; import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.util.Misc; +import com.gmail.nossr50.util.blockmeta.HashChunkManager; import com.gmail.nossr50.util.skills.SkillTools; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; @@ -484,15 +485,16 @@ public final class FlatFileDatabaseManager implements DatabaseManager { return statsList.subList(Math.min(fromIndex, statsList.size()), Math.min(fromIndex + statsPerPage, statsList.size())); } - public Map readRank(String playerName) { + public @NotNull HashMap readRank(String playerName) { updateLeaderboards(); - Map skills = new EnumMap(PrimarySkillType.class); + HashMap skills = new HashMap<>(); for (PrimarySkillType skill : SkillTools.NON_CHILD_SKILLS) { skills.put(skill, getPlayerRank(playerName, playerStatHash.get(skill))); } + //TODO: Gross skills.put(null, getPlayerRank(playerName, powerLevels)); return skills; diff --git a/src/main/java/com/gmail/nossr50/mcMMO.java b/src/main/java/com/gmail/nossr50/mcMMO.java index 5e08bc34e..a0b7ebf43 100644 --- a/src/main/java/com/gmail/nossr50/mcMMO.java +++ b/src/main/java/com/gmail/nossr50/mcMMO.java @@ -18,6 +18,7 @@ import com.gmail.nossr50.database.DatabaseManagerFactory; import com.gmail.nossr50.datatypes.skills.PrimarySkillType; import com.gmail.nossr50.datatypes.skills.subskills.acrobatics.Roll; import com.gmail.nossr50.listeners.*; +import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.party.PartyManager; import com.gmail.nossr50.runnables.SaveTimerTask; import com.gmail.nossr50.runnables.backups.CleanBackupsTask; @@ -337,6 +338,7 @@ public class mcMMO extends JavaPlugin { transientEntityTracker = new TransientEntityTracker(); setServerShutdown(false); //Reset flag, used to make decisions about async saves + LocaleLoader.reloadLocale(); //Apply override locale } public static PlayerLevelUtils getPlayerLevelUtils() { diff --git a/src/test/java/com/gmail/nossr50/database/FlatFileDatabaseManagerTest.java b/src/test/java/com/gmail/nossr50/database/FlatFileDatabaseManagerTest.java index bfc3c01f5..feb796e9f 100644 --- a/src/test/java/com/gmail/nossr50/database/FlatFileDatabaseManagerTest.java +++ b/src/test/java/com/gmail/nossr50/database/FlatFileDatabaseManagerTest.java @@ -644,6 +644,36 @@ public class FlatFileDatabaseManagerTest { assertEquals(db.getDatabaseType(), DatabaseType.FLATFILE); } + @Test + public void testReadRank() { + //This is an empty DB + assertNotNull(db); + String rankBoyName = "rankBoy"; + UUID rankBoyUUID = new UUID(1337, 1337); + String rankGirlName = "rankGirl"; + UUID rankGirlUUID = new UUID(7331, 7331); + + PlayerProfile rankGirlProfile = addPlayerProfileWithLevelsAndSave(rankGirlName, rankGirlUUID, 100); //Rank 1 + PlayerProfile rankBoyProfile = addPlayerProfileWithLevelsAndSave(rankBoyName, rankBoyUUID, 10); //Rank 2 + + assertEquals(LeaderboardStatus.UPDATED, db.updateLeaderboards()); + Map rankGirlPositions = db.readRank(rankGirlName); + Map rankBoyPositions = db.readRank(rankBoyName); + + for(PrimarySkillType primarySkillType : PrimarySkillType.values()) { + if(primarySkillType.isChildSkill()) { + assertNull(rankBoyPositions.get(primarySkillType)); + assertNull(rankGirlPositions.get(primarySkillType)); + } else { + assertEquals(1, rankGirlPositions.get(primarySkillType)); + assertEquals(2, rankBoyPositions.get(primarySkillType)); + } + } + + assertEquals(1, db.readRank(rankGirlName).get(null)); //Girl should be position 1 + assertEquals(2, db.readRank(rankBoyName).get(null)); //Boy should be position 2 + } + @Test public void testLoadFromFile() { ClassLoader classLoader = getClass().getClassLoader(); @@ -708,6 +738,38 @@ public class FlatFileDatabaseManagerTest { return splitDataList; } + private @NotNull PlayerProfile addPlayerProfileWithLevelsAndSave(String playerName, UUID uuid, int levels) { + assertNotNull(db); + assertFalse(db.loadPlayerProfile(uuid).isLoaded()); + + db.newUser(playerName, uuid); + PlayerProfile leveledProfile = db.loadPlayerProfile(uuid); + + assertTrue(leveledProfile.isLoaded()); + assertEquals(playerName, leveledProfile.getPlayerName()); + assertEquals(uuid, leveledProfile.getUniqueId()); + + for(PrimarySkillType primarySkillType : PrimarySkillType.values()) { + if(SkillTools.isChildSkill(primarySkillType)) + continue; + + leveledProfile.modifySkill(primarySkillType, levels); //TODO: This method also resets XP, not cool + } + + db.saveUser(leveledProfile); + leveledProfile = db.loadPlayerProfile(uuid); + + for(PrimarySkillType primarySkillType : PrimarySkillType.values()) { + if(SkillTools.isChildSkill(primarySkillType)) { + continue; + } + + assertEquals(levels, leveledProfile.getSkillLevel(primarySkillType)); + } + + return leveledProfile; + } + private void replaceDataInFile(@NotNull FlatFileDatabaseManager flatFileDatabaseManager, @NotNull String[] dataEntries) { String filePath = flatFileDatabaseManager.getUsersFile().getAbsolutePath(); BufferedReader in = null;