diff --git a/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolVersion.java b/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolVersion.java index bc2ce650b..cde67222d 100644 --- a/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolVersion.java +++ b/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolVersion.java @@ -1,13 +1,16 @@ package us.myles.ViaVersion.api.protocol; -import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.Getter; import lombok.NonNull; import java.util.*; -@Data +@AllArgsConstructor +@Getter public class ProtocolVersion { private static final Map versions = new HashMap<>(); + private static final List versionList = new ArrayList<>(); public static final ProtocolVersion v1_4_6; public static final ProtocolVersion v1_5_1; @@ -52,6 +55,7 @@ public class ProtocolVersion { public static void register(@NonNull ProtocolVersion protocol) { versions.put(protocol.getId(), protocol); + versionList.add(protocol); } public static boolean isRegistered(int id) { @@ -66,7 +70,25 @@ public class ProtocolVersion { } } + public static int getIndex(ProtocolVersion version) { + return versionList.indexOf(version); + } + public static List getProtocols() { return Collections.unmodifiableList(new ArrayList<>(versions.values())); } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + ProtocolVersion that = (ProtocolVersion) o; + return id == that.id; + } + + @Override + public int hashCode() { + return id; + } } diff --git a/src/main/java/us/myles/ViaVersion/commands/defaultsubs/ListSubCmd.java b/src/main/java/us/myles/ViaVersion/commands/defaultsubs/ListSubCmd.java index 289ebbac7..2c85a6de6 100644 --- a/src/main/java/us/myles/ViaVersion/commands/defaultsubs/ListSubCmd.java +++ b/src/main/java/us/myles/ViaVersion/commands/defaultsubs/ListSubCmd.java @@ -27,19 +27,25 @@ public class ListSubCmd extends ViaSubCommand { @Override public boolean execute(CommandSender sender, String[] args) { - Map> playerVersions = new HashMap<>(); + Map> playerVersions = new TreeMap<>(new Comparator() { + @Override + public int compare(ProtocolVersion o1, ProtocolVersion o2) { + return ProtocolVersion.getIndex(o2) - ProtocolVersion.getIndex(o1); + } + }); + for (Player p : Bukkit.getOnlinePlayers()) { int playerVersion = ViaVersion.getInstance().getPlayerVersion(p); - if (!playerVersions.containsKey(playerVersion)) - playerVersions.put(playerVersion, new HashSet()); - playerVersions.get(playerVersion).add(p.getName()); + ProtocolVersion key = ProtocolVersion.getProtocol(playerVersion); + if (!playerVersions.containsKey(key)) + playerVersions.put(key, new HashSet()); + playerVersions.get(key).add(p.getName()); } - Map> sorted = new TreeMap<>(playerVersions); - for (Map.Entry> entry : sorted.entrySet()) - sendMessage(sender, "&8[&6%s&8]: &b%s", ProtocolVersion.getProtocol(entry.getKey()).getName(), entry.getValue()); + for (Map.Entry> entry : playerVersions.entrySet()) + sendMessage(sender, "&8[&6%s&8]: &b%s", entry.getKey().getName(), entry.getValue()); - sorted.clear(); + playerVersions.clear(); return true; } }