diff --git a/pom.xml b/pom.xml index d5d59e8..661e74b 100644 --- a/pom.xml +++ b/pom.xml @@ -41,7 +41,7 @@ org.bukkit - bukkit + craftbukkit 1.8.8-R0.1-SNAPSHOT diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/announcer/Announcer.java b/src/main/java/me/StevenLawson/TotalFreedomMod/announcer/Announcer.java index 47a7532..b948c19 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/announcer/Announcer.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/announcer/Announcer.java @@ -89,7 +89,7 @@ public class Announcer current = 0; } - Utilities.bcastMsg(prefix + ANNOUNCEMENTS.get(current)); + Utilities.bcastMsg(prefix + ANNOUNCEMENTS.get(current), false); } }; diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/bridge/DiscordBridge.java b/src/main/java/me/StevenLawson/TotalFreedomMod/bridge/DiscordBridge.java index a561202..89014de 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/bridge/DiscordBridge.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/bridge/DiscordBridge.java @@ -1,18 +1,20 @@ package me.StevenLawson.TotalFreedomMod.bridge; +import com.earth2me.essentials.User; import me.StevenLawson.TotalFreedomMod.Log; import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; import me.StevenLawson.TotalFreedomMod.config.MainConfig; +import me.StevenLawson.TotalFreedomMod.player.PlayerList; import me.StevenLawson.TotalFreedomMod.player.PlayerRank; import org.bukkit.Bukkit; +import org.bukkit.entity.Player; import org.javacord.api.DiscordApi; import org.javacord.api.DiscordApiBuilder; import org.javacord.api.entity.channel.TextChannel; import org.javacord.api.entity.message.MessageAuthor; import org.javacord.api.entity.message.embed.EmbedBuilder; -import java.util.ArrayList; -import java.util.Optional; +import java.util.*; import java.util.regex.Pattern; public class DiscordBridge { @@ -47,76 +49,33 @@ public class DiscordBridge { if (author.isBotUser() || content.isEmpty()) return; if (content.equalsIgnoreCase(String.format("%sl", MainConfig.getString(ConfigurationEntry.DISCORD_PREFIX)))) { - // TODO: Make this shitty code better (I was very tired from a blood test whilst writing this) - EmbedBuilder builder = new EmbedBuilder() .setTitle(String.format("Player List - %s", MainConfig.getString(ConfigurationEntry.SERVER_NAME))) .setDescription(String.format("There are %s / %s online players", Bukkit.getOnlinePlayers().size(), Bukkit.getMaxPlayers())); - ArrayList seniorAdmins = new ArrayList<>(); - ArrayList developers = new ArrayList<>(); - ArrayList impostors = new ArrayList<>(); - ArrayList deopped = new ArrayList<>(); - ArrayList operators = new ArrayList<>(); - ArrayList superAdmins = new ArrayList<>(); - ArrayList superTelnetAdmins = new ArrayList<>(); - ArrayList owners = new ArrayList<>(); - for (org.bukkit.entity.Player player : Bukkit.getOnlinePlayers()) { + List inGameRanks = new ArrayList<>(); + + for (Player player : Bukkit.getOnlinePlayers()) { + User essentialsUser = EssentialsBridge.getEssentialsUser(player.getDisplayName()); + + if(essentialsUser != null) { + if(essentialsUser.isVanished()) continue; + } + PlayerRank rank = PlayerRank.fromSender(player); - if (EssentialsBridge.getEssentialsUser(player.getName()).isVanished()) { - continue; + if(!inGameRanks.contains(rank)) inGameRanks.add(rank); + } + + Collections.sort(inGameRanks); + Collections.reverse(inGameRanks); + + for (PlayerRank inGameRank : inGameRanks) { + List inGame = inGameRank.getInGameUsernames(); + + if(inGame.size() > 0) { + builder.addField(String.format("%s (%s)", inGameRank.getPlural(), inGame.size()), String.join(", ", inGame)); } - - if (rank.equals(PlayerRank.IMPOSTOR)) { - impostors.add(player.getName()); - } else if (rank.equals(PlayerRank.DEVELOPER)) { - developers.add(player.getName()); - } else if (rank.equals(PlayerRank.NON_OP)) { - deopped.add(player.getName()); - } else if (rank.equals(PlayerRank.SENIOR)) { - seniorAdmins.add(player.getName()); - } else if (rank.equals(PlayerRank.OWNER)) { - owners.add(player.getName()); - } else if (rank.equals(PlayerRank.OP)) { - operators.add(player.getName()); - } else if (rank.equals(PlayerRank.SUPER)) { - superAdmins.add(player.getName()); - } else if (rank.equals(PlayerRank.TELNET)) { - superTelnetAdmins.add(player.getName()); - } - } - - if (owners.size() > 0) { - builder.addField(String.format("Owners (%s)", owners.size()), String.join(", ", owners)); - } - - if (seniorAdmins.size() > 0) { - builder.addField(String.format("Senior Admins (%s)", seniorAdmins.size()), String.join(", ", seniorAdmins)); - } - - if (developers.size() > 0) { - builder.addField(String.format("Developers (%s)", developers.size()), String.join(", ", developers)); - } - - if (superTelnetAdmins.size() > 0) { - builder.addField(String.format("Super Telnet Admins (%s)", superTelnetAdmins.size()), String.join(", ", superTelnetAdmins)); - } - - if (superAdmins.size() > 0) { - builder.addField(String.format("Super Admins (%s)", superAdmins.size()), String.join(", ", seniorAdmins)); - } - - if (operators.size() > 0) { - builder.addField(String.format("Operators (%s)", operators.size()), String.join(", ", operators)); - } - - if (deopped.size() > 0) { - builder.addField(String.format("Non-Operators (%s)", deopped.size()), String.join(", ", deopped)); - } - - if (impostors.size() > 0) { - builder.addField(String.format("Impostors (%s)", impostors.size()), String.join(", ", impostors)); } CHANNEL.sendMessage(builder); diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/player/PlayerRank.java b/src/main/java/me/StevenLawson/TotalFreedomMod/player/PlayerRank.java index b6e4f10..1661f4b 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/player/PlayerRank.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/player/PlayerRank.java @@ -1,33 +1,53 @@ package me.StevenLawson.TotalFreedomMod.player; +import com.google.common.collect.ImmutableList; import me.StevenLawson.TotalFreedomMod.admin.Admin; import me.StevenLawson.TotalFreedomMod.admin.AdminList; import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; import me.StevenLawson.TotalFreedomMod.util.Utilities; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import static me.StevenLawson.TotalFreedomMod.util.Utilities.DEVELOPERS; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; -public enum PlayerRank +import static me.StevenLawson.TotalFreedomMod.util.Utilities.DEVELOPERS; +import static me.StevenLawson.TotalFreedomMod.util.Utilities.getPluginFile; + +public enum PlayerRank implements Comparator, Comparable { - DEVELOPER("a " + ChatColor.DARK_PURPLE + "Developer", ChatColor.DARK_PURPLE + "[Dev]"), - IMPOSTOR("an " + ChatColor.YELLOW + ChatColor.UNDERLINE + "Impostor", ChatColor.YELLOW.toString() + ChatColor.UNDERLINE + "[IMP]"), - NON_OP("a " + ChatColor.GREEN + "Non-OP", ChatColor.GREEN.toString()), - OP("an " + ChatColor.RED + "OP", ChatColor.RED + "[OP]"), - SUPER("a " + ChatColor.GOLD + "Super Admin", ChatColor.GOLD + "[SA]"), - TELNET("a " + ChatColor.DARK_GREEN + "Super Telnet Admin", ChatColor.DARK_GREEN + "[STA]"), - SENIOR("a " + ChatColor.LIGHT_PURPLE + "Senior Admin", ChatColor.LIGHT_PURPLE + "[SrA]"), - OWNER("the " + ChatColor.BLUE + "Owner", ChatColor.BLUE + "[Owner]"), - CONSOLE("The " + ChatColor.DARK_PURPLE + "Console", ChatColor.DARK_PURPLE + "[Console]"); + IMPOSTOR("an " + ChatColor.YELLOW + ChatColor.UNDERLINE + "Impostor", ChatColor.YELLOW.toString() + ChatColor.UNDERLINE + "[IMP]", "Impostors", 0), + NON_OP("a " + ChatColor.GREEN + "Non-OP", ChatColor.GREEN.toString(), "Non-Operators", 1), + OP("an " + ChatColor.RED + "OP", ChatColor.RED + "[OP]", "Operators" ,2), + SUPER("a " + ChatColor.GOLD + "Super Admin", ChatColor.GOLD + "[SA]", "Super Admins", 3), + TELNET("a " + ChatColor.DARK_GREEN + "Super Telnet Admin", ChatColor.DARK_GREEN + "[STA]", "Super Telnet Admins", 4), + SENIOR("a " + ChatColor.LIGHT_PURPLE + "Senior Admin", ChatColor.LIGHT_PURPLE + "[SrA]", "Senior Admins", 5), + DEVELOPER("a " + ChatColor.DARK_PURPLE + "Developer", ChatColor.DARK_PURPLE + "[Dev]", "Developers", 6), + OWNER("the " + ChatColor.BLUE + "Owner", ChatColor.BLUE + "[Owner]", "Owners", 7), + CONSOLE("The " + ChatColor.DARK_PURPLE + "Console", ChatColor.DARK_PURPLE + "[Console]", 8); private final String loginMessage; private final String prefix; - private PlayerRank(String loginMessage, String prefix) + private final String plural; + private final int ordinal; + + + PlayerRank(String loginMessage, String prefix, int ordinal) { + this.loginMessage = loginMessage; + this.prefix = prefix; + this.plural = ""; + this.ordinal = ordinal; + } + + PlayerRank(String loginMessage, String prefix, String plural, int ordinal) { this.loginMessage = loginMessage; this.prefix = prefix; + this.plural = plural; + this.ordinal = ordinal; } public static String getLoginMessage(CommandSender sender) @@ -122,4 +142,39 @@ public enum PlayerRank { return loginMessage; } + + + public String getPlural() { + return plural; + } + + public int getOrdinal() { + return ordinal; + } + + public List getWithRank() { + List inGame = new ArrayList<>(); + + for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { + if(fromSender(onlinePlayer).equals(this)) inGame.add(onlinePlayer); + } + + return ImmutableList.copyOf(inGame); + } + + public List getInGameUsernames() { + List inGame = new ArrayList<>(); + + for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { + if(fromSender(onlinePlayer).equals(this)) inGame.add(onlinePlayer.getName()); + } + + return ImmutableList.copyOf(inGame); + + } + + @Override + public int compare(PlayerRank o1, PlayerRank o2) { + return o1.ordinal - o2.ordinal; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/util/Utilities.java b/src/main/java/me/StevenLawson/TotalFreedomMod/util/Utilities.java index b2a0218..07965e1 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/util/Utilities.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/util/Utilities.java @@ -84,14 +84,24 @@ public class Utilities throw new AssertionError(); } - public static void bcastMsg(String message, ChatColor color) { + public static void bcastMsg(String message, ChatColor color, boolean transmitToDiscord) { Log.info(message, true); for (org.bukkit.entity.Player player : Bukkit.getOnlinePlayers()) { player.sendMessage((color == null ? "" : color) + message); } - DiscordBridge.transmitMessage(message); + if(transmitToDiscord) { + DiscordBridge.transmitMessage(message); + } + } + + public static void bcastMsg(String message, ChatColor color) { + bcastMsg(message, color, true); + } + + public static void bcastMsg(String message, boolean transmitToDiscord) { + bcastMsg(message, null, transmitToDiscord); } public static void bcastMsg(String message)