diff --git a/src/main/java/me/libraryaddict/disguise/commands/LibsDisguisesCommand.java b/src/main/java/me/libraryaddict/disguise/commands/LibsDisguisesCommand.java index 6164e46a..c25a6826 100644 --- a/src/main/java/me/libraryaddict/disguise/commands/LibsDisguisesCommand.java +++ b/src/main/java/me/libraryaddict/disguise/commands/LibsDisguisesCommand.java @@ -4,8 +4,7 @@ import com.comphenix.protocol.wrappers.nbt.NbtFactory; import me.libraryaddict.disguise.DisguiseAPI; import me.libraryaddict.disguise.DisguiseConfig; import me.libraryaddict.disguise.LibsDisguises; -import me.libraryaddict.disguise.disguisetypes.DisguiseType; -import me.libraryaddict.disguise.disguisetypes.MetaIndex; +import me.libraryaddict.disguise.disguisetypes.*; import me.libraryaddict.disguise.utilities.DisguiseUtilities; import me.libraryaddict.disguise.utilities.LibsPremium; import me.libraryaddict.disguise.utilities.UpdateChecker; @@ -15,6 +14,7 @@ import me.libraryaddict.disguise.utilities.parser.DisguisePermissions; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import me.libraryaddict.disguise.utilities.reflection.ReflectionManager; import me.libraryaddict.disguise.utilities.translations.LibsMsg; +import me.libraryaddict.disguise.utilities.translations.TranslateType; import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.ComponentBuilder; import net.md_5.bungee.api.chat.HoverEvent; @@ -32,10 +32,7 @@ import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scoreboard.Scoreboard; import org.bukkit.scoreboard.Team; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; +import java.util.*; public class LibsDisguisesCommand implements CommandExecutor, TabCompleter { protected ArrayList filterTabs(ArrayList list, String[] origArgs) { @@ -120,6 +117,61 @@ public class LibsDisguisesCommand implements CommandExecutor, TabCompleter { DisguiseConfig.loadConfig(); sender.sendMessage(LibsMsg.RELOADED_CONFIG.get()); return true; + } else if (args[0].equalsIgnoreCase("count")) { + if (!sender.hasPermission("libsdisguises.count")) { + sender.sendMessage(LibsMsg.NO_PERM.get()); + return true; + } + + HashMap counts = new HashMap<>(); + + for (Set disguises : DisguiseUtilities.getDisguises().values()) { + for (Disguise disguise : disguises) { + if (disguise.isPlayerDisguise() && DisguiseConfig.isScoreboardDisguiseNames()) { + if (((PlayerDisguise) disguise).hasScoreboardName()) { + for (Player player : Bukkit.getOnlinePlayers()) { + Scoreboard board = player.getScoreboard(); + + if (board.getEntryTeam(((PlayerDisguise) disguise).getProfileName()) == null) { + DisguiseUtilities.getLogger().warning( + "The player disguise " + ((PlayerDisguise) disguise).getName() + + " is missing a scoreboard team on " + player.getName() + + " and possibly more players!"); + + break; + } + } + } + } + + counts.compute(disguise.getType(), (a, b) -> (b != null ? b : 0) + 1); + } + } + + if (counts.isEmpty()) { + sender.sendMessage(LibsMsg.NO_DISGUISES_IN_USE.get()); + } else { + sender.sendMessage( + LibsMsg.ACTIVE_DISGUISES_COUNT.get(counts.values().stream().reduce(Integer::sum))); + + ArrayList types = new ArrayList<>(counts.keySet()); + types.sort((d1, d2) -> String.CASE_INSENSITIVE_ORDER + .compare(TranslateType.DISGUISES.get(d1.toReadable()), + TranslateType.DISGUISES.get(d2.toReadable()))); + + StringBuilder builder = new StringBuilder(); + + for (int i = 0; i < types.size(); i++) { + builder.append(LibsMsg.ACTIVE_DISGUISES_DISGUISE + .get(TranslateType.DISGUISES.get(types.get(i).toReadable()), counts.get(types.get(i)))); + + if (i + 1 < types.size()) { + builder.append(LibsMsg.ACTIVE_DISGUISES_SEPERATOR.get()); + } + } + + sender.sendMessage(LibsMsg.ACTIVE_DISGUISES.get(builder.toString())); + } } else if (args[0].equalsIgnoreCase("mods")) { if (!sender.hasPermission("libsdisguises.mods")) { sender.sendMessage(LibsMsg.NO_PERM.get()); @@ -467,7 +519,8 @@ public class LibsDisguisesCommand implements CommandExecutor, TabCompleter { if (args.length == 0) tabs.addAll( - Arrays.asList("reload", "scoreboard", "permtest", "json", "metainfo", "config", "mods", "update")); + Arrays.asList("reload", "scoreboard", "permtest", "json", "metainfo", "config", "mods", "update", + "count")); return filterTabs(tabs, origArgs); } diff --git a/src/main/java/me/libraryaddict/disguise/utilities/translations/LibsMsg.java b/src/main/java/me/libraryaddict/disguise/utilities/translations/LibsMsg.java index 41026b03..cd174dc0 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/translations/LibsMsg.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/translations/LibsMsg.java @@ -8,6 +8,11 @@ import org.bukkit.ChatColor; * Created by libraryaddict on 15/06/2017. */ public enum LibsMsg { + NO_DISGUISES_IN_USE(ChatColor.RED + "There are no disguises in use!"), + ACTIVE_DISGUISES_COUNT(ChatColor.DARK_GREEN + "There are %s disguises active"), + ACTIVE_DISGUISES_DISGUISE(ChatColor.GREEN + "%s: " + ChatColor.AQUA + "%s"), + ACTIVE_DISGUISES(ChatColor.DARK_GREEN + "The disguises in use are: %s"), + ACTIVE_DISGUISES_SEPERATOR(ChatColor.RED + ", " + ChatColor.GREEN), BLOWN_DISGUISE(ChatColor.RED + "Your disguise was blown!"), EXPIRED_DISGUISE(ChatColor.RED + "Your disguise has expired!"), CAN_USE_DISGS(ChatColor.DARK_GREEN + "You can use the disguises:" + ChatColor.GREEN + " %s"), diff --git a/src/main/java/me/libraryaddict/disguise/utilities/translations/TranslateType.java b/src/main/java/me/libraryaddict/disguise/utilities/translations/TranslateType.java index 7807c26d..2204ba70 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/translations/TranslateType.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/translations/TranslateType.java @@ -37,11 +37,11 @@ public enum TranslateType { type.loadTranslations(); } + TranslateFiller.fillConfigs(); + if (!LibsPremium.isPremium() && DisguiseConfig.isUseTranslations()) { DisguiseUtilities.getLogger().severe("You must purchase the plugin to use translations!"); } - - TranslateFiller.fillConfigs(); } protected void saveTranslations() { diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index ea8493a2..39158977 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -88,6 +88,8 @@ commands: permissions: libsdisguises.reload: description: Allows the user to reload LibsDisguises. + libsdisguises.count: + description: Allows the user to see how many disguises are active libsdisguises.mods: description: Allows the user to see mods in use. libsdisguises.seethrough: