Add '/libsdisguises count'
This commit is contained in:
		| @@ -4,8 +4,7 @@ import com.comphenix.protocol.wrappers.nbt.NbtFactory; | |||||||
| import me.libraryaddict.disguise.DisguiseAPI; | import me.libraryaddict.disguise.DisguiseAPI; | ||||||
| import me.libraryaddict.disguise.DisguiseConfig; | import me.libraryaddict.disguise.DisguiseConfig; | ||||||
| import me.libraryaddict.disguise.LibsDisguises; | import me.libraryaddict.disguise.LibsDisguises; | ||||||
| import me.libraryaddict.disguise.disguisetypes.DisguiseType; | import me.libraryaddict.disguise.disguisetypes.*; | ||||||
| import me.libraryaddict.disguise.disguisetypes.MetaIndex; |  | ||||||
| import me.libraryaddict.disguise.utilities.DisguiseUtilities; | import me.libraryaddict.disguise.utilities.DisguiseUtilities; | ||||||
| import me.libraryaddict.disguise.utilities.LibsPremium; | import me.libraryaddict.disguise.utilities.LibsPremium; | ||||||
| import me.libraryaddict.disguise.utilities.UpdateChecker; | 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.NmsVersion; | ||||||
| import me.libraryaddict.disguise.utilities.reflection.ReflectionManager; | import me.libraryaddict.disguise.utilities.reflection.ReflectionManager; | ||||||
| import me.libraryaddict.disguise.utilities.translations.LibsMsg; | 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.ClickEvent; | ||||||
| import net.md_5.bungee.api.chat.ComponentBuilder; | import net.md_5.bungee.api.chat.ComponentBuilder; | ||||||
| import net.md_5.bungee.api.chat.HoverEvent; | 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.Scoreboard; | ||||||
| import org.bukkit.scoreboard.Team; | import org.bukkit.scoreboard.Team; | ||||||
|  |  | ||||||
| import java.util.ArrayList; | import java.util.*; | ||||||
| import java.util.Arrays; |  | ||||||
| import java.util.Iterator; |  | ||||||
| import java.util.List; |  | ||||||
|  |  | ||||||
| public class LibsDisguisesCommand implements CommandExecutor, TabCompleter { | public class LibsDisguisesCommand implements CommandExecutor, TabCompleter { | ||||||
|     protected ArrayList<String> filterTabs(ArrayList<String> list, String[] origArgs) { |     protected ArrayList<String> filterTabs(ArrayList<String> list, String[] origArgs) { | ||||||
| @@ -120,6 +117,61 @@ public class LibsDisguisesCommand implements CommandExecutor, TabCompleter { | |||||||
|                 DisguiseConfig.loadConfig(); |                 DisguiseConfig.loadConfig(); | ||||||
|                 sender.sendMessage(LibsMsg.RELOADED_CONFIG.get()); |                 sender.sendMessage(LibsMsg.RELOADED_CONFIG.get()); | ||||||
|                 return true; |                 return true; | ||||||
|  |             } else if (args[0].equalsIgnoreCase("count")) { | ||||||
|  |                 if (!sender.hasPermission("libsdisguises.count")) { | ||||||
|  |                     sender.sendMessage(LibsMsg.NO_PERM.get()); | ||||||
|  |                     return true; | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 HashMap<DisguiseType, Integer> counts = new HashMap<>(); | ||||||
|  |  | ||||||
|  |                 for (Set<TargetedDisguise> 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<DisguiseType> 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")) { |             } else if (args[0].equalsIgnoreCase("mods")) { | ||||||
|                 if (!sender.hasPermission("libsdisguises.mods")) { |                 if (!sender.hasPermission("libsdisguises.mods")) { | ||||||
|                     sender.sendMessage(LibsMsg.NO_PERM.get()); |                     sender.sendMessage(LibsMsg.NO_PERM.get()); | ||||||
| @@ -467,7 +519,8 @@ public class LibsDisguisesCommand implements CommandExecutor, TabCompleter { | |||||||
|  |  | ||||||
|         if (args.length == 0) |         if (args.length == 0) | ||||||
|             tabs.addAll( |             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); |         return filterTabs(tabs, origArgs); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -8,6 +8,11 @@ import org.bukkit.ChatColor; | |||||||
|  * Created by libraryaddict on 15/06/2017. |  * Created by libraryaddict on 15/06/2017. | ||||||
|  */ |  */ | ||||||
| public enum LibsMsg { | 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!"), |     BLOWN_DISGUISE(ChatColor.RED + "Your disguise was blown!"), | ||||||
|     EXPIRED_DISGUISE(ChatColor.RED + "Your disguise has expired!"), |     EXPIRED_DISGUISE(ChatColor.RED + "Your disguise has expired!"), | ||||||
|     CAN_USE_DISGS(ChatColor.DARK_GREEN + "You can use the disguises:" + ChatColor.GREEN + " %s"), |     CAN_USE_DISGS(ChatColor.DARK_GREEN + "You can use the disguises:" + ChatColor.GREEN + " %s"), | ||||||
|   | |||||||
| @@ -37,11 +37,11 @@ public enum TranslateType { | |||||||
|             type.loadTranslations(); |             type.loadTranslations(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         TranslateFiller.fillConfigs(); | ||||||
|  |  | ||||||
|         if (!LibsPremium.isPremium() && DisguiseConfig.isUseTranslations()) { |         if (!LibsPremium.isPremium() && DisguiseConfig.isUseTranslations()) { | ||||||
|             DisguiseUtilities.getLogger().severe("You must purchase the plugin to use translations!"); |             DisguiseUtilities.getLogger().severe("You must purchase the plugin to use translations!"); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         TranslateFiller.fillConfigs(); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     protected void saveTranslations() { |     protected void saveTranslations() { | ||||||
|   | |||||||
| @@ -88,6 +88,8 @@ commands: | |||||||
| permissions: | permissions: | ||||||
|     libsdisguises.reload: |     libsdisguises.reload: | ||||||
|       description: Allows the user to reload LibsDisguises. |       description: Allows the user to reload LibsDisguises. | ||||||
|  |     libsdisguises.count: | ||||||
|  |       description: Allows the user to see how many disguises are active | ||||||
|     libsdisguises.mods: |     libsdisguises.mods: | ||||||
|       description: Allows the user to see mods in use. |       description: Allows the user to see mods in use. | ||||||
|     libsdisguises.seethrough: |     libsdisguises.seethrough: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user