Fix leaderboards & fix override locale bug

Fixes #4493 Fixes #4492
This commit is contained in:
nossr50
2021-04-16 09:55:44 -07:00
parent 8027b4741e
commit 04459f1ea7
5 changed files with 73 additions and 6 deletions

View File

@ -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<PrimarySkillType, Integer> readRank(String playerName) {
public @NotNull HashMap<PrimarySkillType, Integer> readRank(String playerName) {
updateLeaderboards();
Map<PrimarySkillType, Integer> skills = new EnumMap<PrimarySkillType, Integer>(PrimarySkillType.class);
HashMap<PrimarySkillType, Integer> 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;

View File

@ -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() {

View File

@ -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<PrimarySkillType, Integer> rankGirlPositions = db.readRank(rankGirlName);
Map<PrimarySkillType, Integer> 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;