Optimized a few things with our FFS leaderboards.

This commit is contained in:
GJ 2013-03-14 10:25:54 -04:00
parent 1313e3fe4b
commit 3a26194a71

View File

@ -60,79 +60,79 @@ public final class LeaderboardManager {
ArrayList<String> players = new ArrayList<String>(); ArrayList<String> players = new ArrayList<String>();
while ((line = in.readLine()) != null) { while ((line = in.readLine()) != null) {
String[] character = line.split(":"); String[] data = line.split(":");
String p = character[0]; String playerName = data[0];
int powerLevel = 0; int powerLevel = 0;
// Prevent the same player from being added multiple times (I'd like to note that this shouldn't happen...) // Prevent the same player from being added multiple times (I'd like to note that this shouldn't happen...)
if (players.contains(p)) { if (players.contains(playerName)) {
continue; continue;
} }
players.add(p); players.add(playerName);
if (character.length > 1 && StringUtils.isInt(character[1])) { if (data.length > 1 && StringUtils.isInt(data[1])) {
mining.add(new PlayerStat(p, Integer.parseInt(character[1]))); mining.add(new PlayerStat(playerName, Integer.parseInt(data[1])));
powerLevel += Integer.parseInt(character[1]); powerLevel += Integer.parseInt(data[1]);
} }
if (character.length > 5 && StringUtils.isInt(character[5])) { if (data.length > 5 && StringUtils.isInt(data[5])) {
woodcutting.add(new PlayerStat(p, Integer.parseInt(character[5]))); woodcutting.add(new PlayerStat(playerName, Integer.parseInt(data[5])));
powerLevel += Integer.parseInt(character[5]); powerLevel += Integer.parseInt(data[5]);
} }
if (character.length > 7 && StringUtils.isInt(character[7])) { if (data.length > 7 && StringUtils.isInt(data[7])) {
repair.add(new PlayerStat(p, Integer.parseInt(character[7]))); repair.add(new PlayerStat(playerName, Integer.parseInt(data[7])));
powerLevel += Integer.parseInt(character[7]); powerLevel += Integer.parseInt(data[7]);
} }
if (character.length > 8 && StringUtils.isInt(character[8])) { if (data.length > 8 && StringUtils.isInt(data[8])) {
unarmed.add(new PlayerStat(p, Integer.parseInt(character[8]))); unarmed.add(new PlayerStat(playerName, Integer.parseInt(data[8])));
powerLevel += Integer.parseInt(character[8]); powerLevel += Integer.parseInt(data[8]);
} }
if (character.length > 9 && StringUtils.isInt(character[9])) { if (data.length > 9 && StringUtils.isInt(data[9])) {
herbalism.add(new PlayerStat(p, Integer.parseInt(character[9]))); herbalism.add(new PlayerStat(playerName, Integer.parseInt(data[9])));
powerLevel += Integer.parseInt(character[9]); powerLevel += Integer.parseInt(data[9]);
} }
if (character.length > 10 && StringUtils.isInt(character[10])) { if (data.length > 10 && StringUtils.isInt(data[10])) {
excavation.add(new PlayerStat(p, Integer.parseInt(character[10]))); excavation.add(new PlayerStat(playerName, Integer.parseInt(data[10])));
powerLevel += Integer.parseInt(character[10]); powerLevel += Integer.parseInt(data[10]);
} }
if (character.length > 11 && StringUtils.isInt(character[11])) { if (data.length > 11 && StringUtils.isInt(data[11])) {
archery.add(new PlayerStat(p, Integer.parseInt(character[11]))); archery.add(new PlayerStat(playerName, Integer.parseInt(data[11])));
powerLevel += Integer.parseInt(character[11]); powerLevel += Integer.parseInt(data[11]);
} }
if (character.length > 12 && StringUtils.isInt(character[12])) { if (data.length > 12 && StringUtils.isInt(data[12])) {
swords.add(new PlayerStat(p, Integer.parseInt(character[12]))); swords.add(new PlayerStat(playerName, Integer.parseInt(data[12])));
powerLevel += Integer.parseInt(character[12]); powerLevel += Integer.parseInt(data[12]);
} }
if (character.length > 13 && StringUtils.isInt(character[13])) { if (data.length > 13 && StringUtils.isInt(data[13])) {
axes.add(new PlayerStat(p, Integer.parseInt(character[13]))); axes.add(new PlayerStat(playerName, Integer.parseInt(data[13])));
powerLevel += Integer.parseInt(character[13]); powerLevel += Integer.parseInt(data[13]);
} }
if (character.length > 14 && StringUtils.isInt(character[14])) { if (data.length > 14 && StringUtils.isInt(data[14])) {
acrobatics.add(new PlayerStat(p, Integer.parseInt(character[14]))); acrobatics.add(new PlayerStat(playerName, Integer.parseInt(data[14])));
powerLevel += Integer.parseInt(character[14]); powerLevel += Integer.parseInt(data[14]);
} }
if (character.length > 24 && StringUtils.isInt(character[24])) { if (data.length > 24 && StringUtils.isInt(data[24])) {
taming.add(new PlayerStat(p, Integer.parseInt(character[24]))); taming.add(new PlayerStat(playerName, Integer.parseInt(data[24])));
powerLevel += Integer.parseInt(character[24]); powerLevel += Integer.parseInt(data[24]);
} }
if (character.length > 34 && StringUtils.isInt(character[34])) { if (data.length > 34 && StringUtils.isInt(data[34])) {
fishing.add(new PlayerStat(p, Integer.parseInt(character[34]))); fishing.add(new PlayerStat(playerName, Integer.parseInt(data[34])));
powerLevel += Integer.parseInt(character[34]); powerLevel += Integer.parseInt(data[34]);
} }
powerLevels.add(new PlayerStat(p, powerLevel)); powerLevels.add(new PlayerStat(playerName, powerLevel));
} }
in.close(); in.close();
} }
@ -188,72 +188,22 @@ public final class LeaderboardManager {
statsList = playerStatHash.get(SkillType.getSkill(skillType)); statsList = playerStatHash.get(SkillType.getSkill(skillType));
} }
int destination; int destination = (pageNumber - 1) * 10;
// How many lines to skip through for (int i = 0; i < 10; i++) {
if (pageNumber == 1) { PlayerStat ps = statsList.get(destination + i);
destination = 0; info[i] = ps.name + ":" + ps.statVal;
}
else {
destination = (pageNumber * 10) - 9;
}
int currentPos = 0;
for (PlayerStat ps : statsList) {
if (currentPos == 10) {
break;
}
if (destination > 1) {
destination--;
continue;
}
info[currentPos] = ps.name + ":" + ps.statVal;
currentPos++;
} }
return info; return info;
} }
public static int[] getPlayerRank(String playerName) { public static int[] getPlayerRank(String playerName) {
int currentPos = 1; return getPlayerRank(playerName, powerLevels);
if (powerLevels != null) {
for (PlayerStat stat : powerLevels) {
if (stat.name.equalsIgnoreCase(playerName)) {
return new int[] {currentPos, stat.statVal};
}
currentPos++;
continue;
}
return new int[] {0, 0};
}
return new int[] {0, 0};
} }
public static int[] getPlayerRank(String playerName, SkillType skillType) { public static int[] getPlayerRank(String playerName, SkillType skillType) {
int currentPos = 1; return getPlayerRank(playerName, playerStatHash.get(skillType));
List<PlayerStat> statsList = playerStatHash.get(skillType);
if (statsList != null) {
for (PlayerStat stat : statsList) {
if (stat.name.equalsIgnoreCase(playerName)) {
return new int[] {currentPos, stat.statVal};
}
currentPos++;
continue;
}
return new int[] {0, 0};
}
return new int[] {0, 0};
} }
public static boolean removeFlatFileUser(String playerName) { public static boolean removeFlatFileUser(String playerName) {
@ -315,8 +265,9 @@ public final class LeaderboardManager {
mcMMO.p.getLogger().info("Purging powerless users..."); mcMMO.p.getLogger().info("Purging powerless users...");
int purgedUsers = 0; int purgedUsers = 0;
for (PlayerStat stat : powerLevels) { for (PlayerStat stat : powerLevels) {
if (stat.statVal == 0 && removeFlatFileUser(stat.name) && !mcMMO.p.getServer().getOfflinePlayer(stat.name).isOnline()) { if (stat.statVal == 0 && !mcMMO.p.getServer().getOfflinePlayer(stat.name).isOnline() && removeFlatFileUser(stat.name)) {
purgedUsers++; purgedUsers++;
} }
} }
@ -394,6 +345,24 @@ public final class LeaderboardManager {
return removedPlayers; return removedPlayers;
} }
private static int[] getPlayerRank(String playerName, List<PlayerStat> statsList) {
int currentPos = 1;
if (statsList == null) {
return new int[] {0, 0};
}
for (PlayerStat stat : statsList) {
if (stat.name.equalsIgnoreCase(playerName)) {
return new int[] {currentPos, stat.statVal};
}
currentPos++;
}
return new int[] {0, 0};
}
private static class SkillComparator implements Comparator<PlayerStat> { private static class SkillComparator implements Comparator<PlayerStat> {
@Override @Override
public int compare(PlayerStat o1, PlayerStat o2) { public int compare(PlayerStat o1, PlayerStat o2) {