我使用
从文件夹中的每个文件中获取双打if(label.equalsIgnoreCase("baltop")){
if(!(sender instanceof Player)){
CommandUtils.invalidCommandSender(sender);
return true;
}
File[] files = new File(ServerCore.getPlugin().getDataFolder(), File.separator + "PlayerData").listFiles();
for(File file : files){
FileConfiguration playerData = YamlConfiguration.loadConfiguration(file);
double bal = playerData.getDouble("Money");
ChatUtils.sendRawMessage(sender, Bukkit.getOfflinePlayer(UUID.fromString(file.getName().replace(".yml", ""))).getName() + ": " + bal);
}
return true;
}
它按文件的顺序显示所有价格,但我想从最高到最低的余额订购它们,如果两个玩家的金额相同,会发生什么?
答案 0 :(得分:1)
您应首先阅读所有内容,并将它们存储在TreeSet中,如下所示:
if(label.equalsIgnoreCase("baltop")){
if(!(sender instanceof Player)){
CommandUtils.invalidCommandSender(sender);
return true;
}
TreeSet<Balance> set = new TreeSet<>();
set = set.descendingSet();
File[] files = new File(ServerCore.getPlugin().getDataFolder(), File.separator + "PlayerData").listFiles();
for (File file : files){
FileConfiguration playerData = YamlConfiguration.loadConfiguration(file);
double bal = playerData.getDouble("Money");
UUID uuid = UUID.fromString(file.getName().replace(".yml", ""));
set.add(new Balance( Bukkit.getOfflinePlayer(uuid).getName(), uuid, bal));
}
for (Balance b : set) {
ChatUtils.sendRawMessage(sender, b.name + ": " + b.balance);
}
return true;
}
private static class Balance implements Comparable<Balance> {
public String name;
public UUID uuid;
public double balance;
public Balance(String n, UUID u, double b) {
name = n;
uuid = u;
balance = b;
}
@Override
public int compareTo(Balance b) {
double d = balance - b.balance;
if (d<-0.001||d>0.001)
return (int) Math.signum(d);
int e = -name.compareToIgnoreCase(b.name);
if (e != 0)
return e;
return -uuid.compareTo(b.uuid);
}
}
此实施将按余额的降序显示余额,如果两个玩家具有相同的余额,则按其名称的升序显示,无论情况如何。 UUID比较只是名称冲突的最后手段,因为我不知道bukkit是否允许多名玩家的名字只有不同的情况。