Added pagination and sorting of faction list, sorted primarily by which faction has the most users online and secondarily by how many total members the faction has

This commit is contained in:
Brettflan 2011-03-04 21:38:57 -06:00
parent 986461a098
commit 74a823be88

View File

@ -22,7 +22,7 @@ public class Commands {
pageLines = new ArrayList<String>(); pageLines = new ArrayList<String>();
pageLines.add(TextUtil.commandHelp(Conf.aliasHelp, "*[page]", "Display a help page")); pageLines.add(TextUtil.commandHelp(Conf.aliasHelp, "*[page]", "Display a help page"));
pageLines.add(TextUtil.commandHelp(Conf.aliasList, "", "List all factions")); pageLines.add(TextUtil.commandHelp(Conf.aliasList, "*[page]", "List all factions, paginated"));
pageLines.add(TextUtil.commandHelp(Conf.aliasShow, "*[faction name]", "Show faction information")); // TODO display relations! pageLines.add(TextUtil.commandHelp(Conf.aliasShow, "*[faction name]", "Show faction information")); // TODO display relations!
pageLines.add(TextUtil.commandHelp(Conf.aliasMap, "*[on|off]", "Show territory map, set optional auto update.")); pageLines.add(TextUtil.commandHelp(Conf.aliasMap, "*[on|off]", "Show territory map, set optional auto update."));
pageLines.add(TextUtil.commandHelp(Conf.aliasJoin, "[faction name]", "Join a faction")); pageLines.add(TextUtil.commandHelp(Conf.aliasJoin, "[faction name]", "Join a faction"));
@ -191,7 +191,7 @@ public class Commands {
} else if (Conf.aliasChat.contains(command)) { } else if (Conf.aliasChat.contains(command)) {
chat(me, TextUtil.implode(tokens)); chat(me, TextUtil.implode(tokens));
} else if (Conf.aliasList.contains(command)) { } else if (Conf.aliasList.contains(command)) {
list(me); list(me, TextUtil.implode(tokens));
} else if (Conf.aliasShow.contains(command)) { } else if (Conf.aliasShow.contains(command)) {
showFaction(me, TextUtil.implode(tokens)); showFaction(me, TextUtil.implode(tokens));
} else if (Conf.aliasMap.contains(command)) { } else if (Conf.aliasMap.contains(command)) {
@ -349,9 +349,64 @@ public class Commands {
} }
} }
public static void list(Follower me) { public static void list(Follower me, String inPage) {
me.sendMessage(TextUtil.titleize("Faction List"), false); ArrayList<Faction> FactionList = new ArrayList<Faction>(Faction.getAll());
for (Faction faction : Faction.getAll()) {
int page = 1;
try {
page = Integer.parseInt(inPage);
}
catch (NumberFormatException e) {
// wasn't an integer
}
page -= 1;
// Sort by total followers first
Collections.sort(FactionList, new Comparator(){
@Override
public int compare(Object o1, Object o2) {
Faction f1 = (Faction) o1;
Faction f2 = (Faction) o2;
if (f1.id == 0)
return 1;
else if (f2.id == 0)
return -1;
else if (f1.getFollowersAll().size() < f2.getFollowersAll().size())
return 1;
else if (f1.getFollowersAll().size() > f2.getFollowersAll().size())
return -1;
return 0;
}
});
// Then sort by how many members are online now
Collections.sort(FactionList, new Comparator(){
@Override
public int compare(Object o1, Object o2) {
Faction f1 = (Faction) o1;
Faction f2 = (Faction) o2;
if (f1.getFollowersWhereOnline(true).size() < f2.getFollowersWhereOnline(true).size())
return 1;
else if (f1.getFollowersWhereOnline(true).size() > f2.getFollowersWhereOnline(true).size())
return -1;
return 0;
}
});
int maxPage = (int)Math.floor((double)FactionList.size() / 9D);
if (page < 0 || page > maxPage) {
me.sendMessage(Conf.colorSystem+"The faction list is only " + (maxPage+1) + " page(s) long");
return;
}
String header = "Faction List";
if (maxPage > 1) header += " (page " + (page+1) + " of " + (maxPage+1) + ")";
me.sendMessage(TextUtil.titleize(header), false);
int maxPos = (page+1) * 9;
if (maxPos > FactionList.size()) maxPos = FactionList.size();
for (int pos = page * 9; pos < maxPos; pos++) {
Faction faction = FactionList.get(pos);
if (faction.id == 0) { if (faction.id == 0) {
me.sendMessage(faction.getTag(me)+Conf.colorSystem+" "+faction.getFollowersWhereOnline(true).size() + " online"); me.sendMessage(faction.getTag(me)+Conf.colorSystem+" "+faction.getFollowersWhereOnline(true).size() + " online");
} else { } else {