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;