From 811cc891a02974da195eca9606b5bf85da7ebaf9 Mon Sep 17 00:00:00 2001 From: ME1312 Date: Sun, 12 Aug 2018 17:23:21 -0400 Subject: [PATCH] Make the Client UI API naming scheme a little less confusing --- ...alUIHandler.java => DefaultUIHandler.java} | 22 +-- ...UIRenderer.java => DefaultUIRenderer.java} | 6 +- .../{Renderer.java => PluginRenderer.java} | 4 +- .../Client/Bukkit/Graphic/UIRenderer.java | 17 +- .../Library/Compatibility/BungeeChat.java | 6 +- .../SubServers/Client/Bukkit/SubPlugin.java | 4 +- .../{Renderer.java => PluginRenderer.java} | 4 +- .../Client/Sponge/Graphic/UIRenderer.java | 177 +++++++++++++++++- .../SubServers/Client/Sponge/SubCommand.java | 2 +- 9 files changed, 200 insertions(+), 42 deletions(-) rename SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/{InternalUIHandler.java => DefaultUIHandler.java} (97%) rename SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/{InternalUIRenderer.java => DefaultUIRenderer.java} (99%) rename SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/{Renderer.java => PluginRenderer.java} (88%) rename SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Graphic/{Renderer.java => PluginRenderer.java} (89%) diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/InternalUIHandler.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/DefaultUIHandler.java similarity index 97% rename from SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/InternalUIHandler.java rename to SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/DefaultUIHandler.java index 8c5dc30b..7bea838a 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/InternalUIHandler.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/DefaultUIHandler.java @@ -25,11 +25,11 @@ import java.util.UUID; /** - * Internal GUI Listener + * Default GUI Listener */ -public class InternalUIHandler implements UIHandler, Listener { +public class DefaultUIHandler implements UIHandler, Listener { private HashMap> input = new HashMap>(); - private HashMap gui = new HashMap(); + private HashMap gui = new HashMap(); private boolean enabled = true; private SubPlugin plugin; @@ -38,14 +38,14 @@ public class InternalUIHandler implements UIHandler, Listener { * * @param plugin Event */ - public InternalUIHandler(SubPlugin plugin) { + public DefaultUIHandler(SubPlugin plugin) { if (Util.isNull(plugin)) throw new NullPointerException(); this.plugin = plugin; Bukkit.getPluginManager().registerEvents(this, plugin); } - public InternalUIRenderer getRenderer(Player player) { - if (!gui.keySet().contains(player.getUniqueId())) gui.put(player.getUniqueId(), new InternalUIRenderer(plugin, player.getUniqueId())); + public DefaultUIRenderer getRenderer(Player player) { + if (!gui.keySet().contains(player.getUniqueId())) gui.put(player.getUniqueId(), new DefaultUIRenderer(plugin, player.getUniqueId())); return gui.get(player.getUniqueId()); } @@ -57,7 +57,7 @@ public void disable() { public void click(InventoryClickEvent event) { Player player = (Player) event.getWhoClicked(); if (!event.isCancelled() && enabled && gui.keySet().contains(player.getUniqueId())) { - InternalUIRenderer gui = this.gui.get(player.getUniqueId()); + DefaultUIRenderer gui = this.gui.get(player.getUniqueId()); if (gui.open && event.getClickedInventory() != null && event.getClickedInventory().getTitle() != null) { if (plugin.subdata == null) { new IllegalStateException("SubData is not connected").printStackTrace(); @@ -211,8 +211,8 @@ public void click(InventoryClickEvent event) { gui.back(); } else { player.closeInventory(); - final Container> plugin = new Container>(null); - for (Renderer renderer : InternalUIRenderer.hostPlugins.values()) { + final Container> plugin = new Container>(null); + for (PluginRenderer renderer : DefaultUIRenderer.hostPlugins.values()) { if (item.equals(renderer.getIcon().getItemMeta().getDisplayName())) plugin.set(renderer); } if (plugin.get() == null) { @@ -403,8 +403,8 @@ public void run(YAMLSection json) { gui.back(); } else { player.closeInventory(); - Container> plugin = new Container>(null); - for (Renderer renderer : InternalUIRenderer.subserverPlugins.values()) { + Container> plugin = new Container>(null); + for (PluginRenderer renderer : DefaultUIRenderer.subserverPlugins.values()) { if (item.equals(renderer.getIcon().getItemMeta().getDisplayName())) plugin.set(renderer); } if (plugin.get() == null) { diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/InternalUIRenderer.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/DefaultUIRenderer.java similarity index 99% rename from SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/InternalUIRenderer.java rename to SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/DefaultUIRenderer.java index 56b4cacc..54f2036b 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/InternalUIRenderer.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/DefaultUIRenderer.java @@ -19,9 +19,9 @@ import java.util.*; /** - * Internal GUI Renderer Class + * Default GUI Renderer Class */ -public class InternalUIRenderer extends UIRenderer { +public class DefaultUIRenderer extends UIRenderer { private static int MAX_VISITED_OBJECTS = 2; private List windowHistory = new LinkedList(); protected Object[] lastVisitedObjects = new Object[MAX_VISITED_OBJECTS]; @@ -31,7 +31,7 @@ public class InternalUIRenderer extends UIRenderer { protected final UUID player; private SubPlugin plugin; - protected InternalUIRenderer(SubPlugin plugin, UUID player) { + protected DefaultUIRenderer(SubPlugin plugin, UUID player) { super(plugin, player); this.plugin = plugin; this.player = player; diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/Renderer.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/PluginRenderer.java similarity index 88% rename from SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/Renderer.java rename to SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/PluginRenderer.java index d1b9e59d..c7a1b8a4 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/Renderer.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/PluginRenderer.java @@ -4,9 +4,9 @@ import org.bukkit.inventory.ItemStack; /** - * GUI Renderer Layout Class + * Plugin GUI Renderer Layout Class */ -public interface Renderer { +public interface PluginRenderer { /** * Open the GUI diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/UIRenderer.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/UIRenderer.java index 11003a51..cbfc0aa9 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/UIRenderer.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/UIRenderer.java @@ -1,4 +1,5 @@ package net.ME1312.SubServers.Client.Bukkit.Graphic; + import net.ME1312.SubServers.Client.Bukkit.Library.Container; import net.ME1312.SubServers.Client.Bukkit.Library.NamedContainer; import net.ME1312.SubServers.Client.Bukkit.Library.Util; @@ -19,8 +20,8 @@ * GUI Renderer Layout Class */ public abstract class UIRenderer { - protected static HashMap> hostPlugins = new HashMap>(); - protected static HashMap> subserverPlugins = new HashMap>(); + protected static HashMap> hostPlugins = new HashMap>(); + protected static HashMap> subserverPlugins = new HashMap>(); private NamedContainer tdownload = null; private int download = -1; private final UUID player; @@ -267,7 +268,7 @@ public ItemStack parseItem(String str, ItemStack def) { * @param handle Handle to bind * @param renderer Renderer */ - public static void addHostPlugin(String handle, Renderer renderer) { + public static void addHostPlugin(String handle, PluginRenderer renderer) { if (Util.isNull(handle, renderer)) throw new NullPointerException(); hostPlugins.put(handle, renderer); } @@ -277,8 +278,8 @@ public static void addHostPlugin(String handle, Renderer renderer) { * * @return Host Plugins */ - public static Map getHostPlugins() { - return new HashMap(hostPlugins); + public static Map getHostPlugins() { + return new HashMap(hostPlugins); } /** @@ -297,7 +298,7 @@ public static void removeHostPlugin(String handle) { * @param handle Handle to bind * @param renderer Renderer */ - public static void addSubServerPlugin(String handle, Renderer renderer) { + public static void addSubServerPlugin(String handle, PluginRenderer renderer) { if (Util.isNull(handle, renderer)) throw new NullPointerException(); subserverPlugins.put(handle, renderer); } @@ -307,8 +308,8 @@ public static void addSubServerPlugin(String handle, Renderer rendere * * @return SubServer Plugins */ - public static Map getSubServerPlugins() { - return new HashMap(subserverPlugins); + public static Map getSubServerPlugins() { + return new HashMap(subserverPlugins); } /** diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Compatibility/BungeeChat.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Compatibility/BungeeChat.java index 51f31d6f..1e0046df 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Compatibility/BungeeChat.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Compatibility/BungeeChat.java @@ -112,7 +112,7 @@ public void listCommand(CommandSender sender, String label) { } hover.setColor(ChatColor.WHITE); hoverm.add(hover); - message.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, label + " open SubServer/ " + server)); + message.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, label + " open SubServer/ " + server.getName())); } else { message.setColor(ChatColor.WHITE); hover.setColor(ChatColor.WHITE); @@ -122,9 +122,9 @@ public void listCommand(CommandSender sender, String label) { hover.setColor(ChatColor.GRAY); } hoverm.add(hover); - hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.Server-External")); + hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.Server-External") + '\n'); hoverm.add(hover); - hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.Server-Player-Count").replace("$int$", new DecimalFormat("#,###").format(server.getPlayers().size())) + '\n'); + hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.Server-Player-Count").replace("$int$", new DecimalFormat("#,###").format(server.getPlayers().size()))); hoverm.add(hover); if (plugin.config.get().getSection("Settings").getBoolean("Show-Addresses", false)) { hover = new TextComponent('\n' + server.getAddress().getAddress().getHostAddress() + ':' + server.getAddress().getPort()); diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubPlugin.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubPlugin.java index 4e0508db..205a6f4f 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubPlugin.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubPlugin.java @@ -1,6 +1,6 @@ package net.ME1312.SubServers.Client.Bukkit; -import net.ME1312.SubServers.Client.Bukkit.Graphic.InternalUIHandler; +import net.ME1312.SubServers.Client.Bukkit.Graphic.DefaultUIHandler; import net.ME1312.SubServers.Client.Bukkit.Graphic.UIHandler; import net.ME1312.SubServers.Client.Bukkit.Library.Config.YAMLConfig; import net.ME1312.SubServers.Client.Bukkit.Library.Config.YAMLSection; @@ -78,7 +78,7 @@ public void onEnable() { reload(false); if (config.get().getSection("Settings").getBoolean("Ingame-Access", true)) { - gui = new InternalUIHandler(this); + gui = new DefaultUIHandler(this); SubCommand cmd = new SubCommand(this); getCommand("subservers").setExecutor(cmd); getCommand("subserver").setExecutor(cmd); diff --git a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Graphic/Renderer.java b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Graphic/PluginRenderer.java similarity index 89% rename from SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Graphic/Renderer.java rename to SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Graphic/PluginRenderer.java index 70d0cb43..a88a808e 100644 --- a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Graphic/Renderer.java +++ b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Graphic/PluginRenderer.java @@ -4,9 +4,9 @@ import org.spongepowered.api.item.inventory.ItemStack; /** - * GUI Renderer Layout Class + * Plugin GUI Renderer Layout Class */ -public interface Renderer { +public interface PluginRenderer { /** * Open the GUI diff --git a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Graphic/UIRenderer.java b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Graphic/UIRenderer.java index b0bd93ee..8aae185a 100644 --- a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Graphic/UIRenderer.java +++ b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Graphic/UIRenderer.java @@ -1,21 +1,30 @@ package net.ME1312.SubServers.Client.Sponge.Graphic; + +import net.ME1312.SubServers.Client.Sponge.Library.ChatColor; +import net.ME1312.SubServers.Client.Sponge.Library.Container; import net.ME1312.SubServers.Client.Sponge.Library.NamedContainer; import net.ME1312.SubServers.Client.Sponge.Library.Util; import net.ME1312.SubServers.Client.Sponge.Library.Version.Version; import net.ME1312.SubServers.Client.Sponge.Network.API.Host; import net.ME1312.SubServers.Client.Sponge.Network.API.SubServer; import net.ME1312.SubServers.Client.Sponge.SubPlugin; +import org.spongepowered.api.Sponge; +import org.spongepowered.api.item.ItemType; +import org.spongepowered.api.item.ItemTypes; +import org.spongepowered.api.item.inventory.ItemStack; +import org.spongepowered.api.text.title.Title; import java.util.*; +import java.util.concurrent.TimeUnit; /** * GUI Renderer Layout Class */ public abstract class UIRenderer { - protected static HashMap> hostPlugins = new HashMap>(); - protected static HashMap> subserverPlugins = new HashMap>(); + protected static HashMap> hostPlugins = new HashMap>(); + protected static HashMap> subserverPlugins = new HashMap>(); private NamedContainer tdownload = null; - private int download = -1; + private UUID download = null; private final UUID player; private SubPlugin plugin; @@ -58,7 +67,155 @@ public UIRenderer(SubPlugin plugin, UUID player) { */ public abstract void back(); - // TODO Re-Add GUI API Methods that belong here + /** + * Attempt to send a Title Message + * + * @param str Message + * @return Success Status + */ + public boolean sendTitle(String str) { + return sendTitle(str, -1); + } + + /** + * Attempt to send a Title Message + * + * @param str Message + * @param stay How long the message should stay + * @return Success Status + */ + public boolean sendTitle(String str, int stay) { + return sendTitle(str, -1, stay, -1); + } + + /** + * Attempt to send a Title Message + * + * @param str Message + * @param fadein FadeIn Transition length (in ticks) + * @param stay How long the message should stay (in ticks) + * @param fadeout FadeOut Transition length (in ticks) + * @return Success Status + */ + public boolean sendTitle(String str, int fadein, int stay, int fadeout) { + if (Util.isNull(str, fadein, stay, fadeout)) throw new NullPointerException(); + if (plugin.config.get().getSection("Settings").getBoolean("Use-Title-Messages", true)) { + String line1, line2; + if (!str.startsWith("\n") && str.contains("\n")) { + line1 = str.split("\\n")[0]; + line2 = str.split("\\n")[1]; + } else { + line1 = str.replace("\n", ""); + line2 = ChatColor.RESET.toString(); + } + try { + if (ChatColor.stripColor(line1).length() == 0 && ChatColor.stripColor(line2).length() == 0) { + Sponge.getServer().getPlayer(player).get().resetTitle(); + } else { + Sponge.getServer().getPlayer(player).get().sendTitle(Title.builder().title(ChatColor.convertColor(line1)).subtitle(ChatColor.convertColor(line2)).fadeIn((fadein >= 0)?fadein:10).stay((stay >= 0)?stay:70).fadeOut((fadeout >= 0)?fadeout:20).build()); + } + return true; + } catch (Throwable e) { + return false; + } + } else return false; + } + + /** + * Shows/Hides the Downloading Title Message + * + * @param subtitle Subtitle to display (or null to hide) + */ + public void setDownloading(String subtitle) { + if (subtitle != null && !plugin.config.get().getSection("Settings").getBoolean("Use-Title-Messages", true)) { + if (download != null && Sponge.getScheduler().getTaskById(download).isPresent()) Sponge.getScheduler().getTaskById(download).get().cancel(); + download = Sponge.getScheduler().createTaskBuilder().execute(() -> { + if (tdownload != null) Sponge.getServer().getPlayer(player).get().sendMessage(ChatColor.convertColor(plugin.api.getLang("SubServers", "Interface.Generic.Downloading").replace("$str$", subtitle))); + download = null; + }).delay(2500, TimeUnit.MILLISECONDS).submit(plugin).getUniqueId(); + } if (subtitle != null && tdownload == null) { + tdownload = new NamedContainer(subtitle, 0); + final Container delay = new Container(0); + Sponge.getScheduler().createTaskBuilder().execute(new Runnable() { + @Override + public void run() { + if (tdownload != null) { + String word = ChatColor.stripColor(plugin.api.getLang("SubServers", "Interface.Generic.Downloading.Title")); + int i = 0; + int start = (tdownload.get() - 3 < 0)?0: tdownload.get()-3; + int end = (tdownload.get() >= word.length())?word.length(): tdownload.get(); + String str = plugin.api.getLang("SubServers", (delay.get() > 7 && start == 0)?"Interface.Generic.Downloading.Title-Color-Alt":"Interface.Generic.Downloading.Title-Color"); + delay.set(delay.get() + 1); + if (delay.get() > 7) tdownload.set(tdownload.get() + 1); + if (tdownload.get() >= word.length() + 3) { + tdownload.set(0); + delay.set(0); + } + + for (char c : word.toCharArray()) { + i++; + if (i == start) str += plugin.api.getLang("SubServers", "Interface.Generic.Downloading.Title-Color-Alt"); + str += c; + if (i == end) str += plugin.api.getLang("SubServers", "Interface.Generic.Downloading.Title-Color"); + } + + str += '\n' + plugin.api.getLang("SubServers", "Interface.Generic.Downloading.Title-Color-Alt") + tdownload.name(); + sendTitle(str, 0, 10, 5); + Sponge.getScheduler().createTaskBuilder().execute(this).delay(50, TimeUnit.MILLISECONDS).submit(plugin); + } else { + sendTitle(ChatColor.RESET.toString(), 0, 1, 0); + } + } + }).submit(plugin); + } else if (subtitle != null) { + tdownload.rename(subtitle); + } else { + if (tdownload != null) { + tdownload = null; + } + if (download != null) { + if (Sponge.getScheduler().getTaskById(download).isPresent()) Sponge.getScheduler().getTaskById(download).get().cancel(); + download = null; + } + } + } + + /** + * Parse an ItemStack from a String + * + * @param str String to parse + * @return ItemStack + */ + public ItemStack parseItem(String str) { + return parseItem(str, ItemStack.builder().itemType(ItemTypes.NONE).quantity(1).build()); + } + + /** + * Parse an ItemStack from a String + * + * @param str String to parse + * @param def Default to return if unable to parse + * @return ItemStack + */ + public ItemStack parseItem(String str, ItemStack def) { + final Container item = new Container(str); + // minecraft:name + if (item.get().toLowerCase().startsWith("minecraft:")) { + item.set(item.get().substring(10)); + } else + + // bukkit:name (ignored on sponge) + if (item.get().toLowerCase().startsWith("bukkit:")) { + item.set(item.get().substring(7)); + } + + // material name + if (!Util.isException(() -> ItemTypes.class.getDeclaredField(item.get().toUpperCase()).get(null))) { + return ItemStack.builder().itemType((ItemType) Util.getDespiteException(() -> ItemTypes.class.getDeclaredField(item.get().toUpperCase()).get(null), null)).quantity(1).build(); + } + + return def; + } /** * Add Host Plugin @@ -66,7 +223,7 @@ public UIRenderer(SubPlugin plugin, UUID player) { * @param handle Handle to bind * @param renderer Renderer */ - public static void addHostPlugin(String handle, Renderer renderer) { + public static void addHostPlugin(String handle, PluginRenderer renderer) { if (Util.isNull(handle, renderer)) throw new NullPointerException(); hostPlugins.put(handle, renderer); } @@ -76,8 +233,8 @@ public static void addHostPlugin(String handle, Renderer renderer) { * * @return Host Plugins */ - public static Map> getHostPlugins() { - return new HashMap>(hostPlugins); + public static Map> getHostPlugins() { + return new HashMap>(hostPlugins); } /** @@ -96,7 +253,7 @@ public static void removeHostPlugin(String handle) { * @param handle Handle to bind * @param renderer Renderer */ - public static void addSubServerPlugin(String handle, Renderer renderer) { + public static void addSubServerPlugin(String handle, PluginRenderer renderer) { if (Util.isNull(handle, renderer)) throw new NullPointerException(); subserverPlugins.put(handle, renderer); } @@ -106,8 +263,8 @@ public static void addSubServerPlugin(String handle, Renderer rendere * * @return SubServer Plugins */ - public static Map> getSubServerPlugins() { - return new HashMap>(subserverPlugins); + public static Map> getSubServerPlugins() { + return new HashMap>(subserverPlugins); } /** diff --git a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubCommand.java b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubCommand.java index 9d85b59f..ac679dd5 100644 --- a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubCommand.java +++ b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubCommand.java @@ -225,7 +225,7 @@ public CommandResult execute(CommandSource sender, CommandContext args) throws C hover.append(Text.builder(server.getName() + '\n').color(TextColors.GRAY).build()); } hover.append( - ChatColor.convertColor(plugin.api.getLang("SubServers","Interface.Server-Menu.Server-Player-Count").replace("$int$", new DecimalFormat("#,###").format(server.getPlayers().size())) + '\n') + ChatColor.convertColor(plugin.api.getLang("SubServers","Interface.Server-Menu.Server-Player-Count").replace("$int$", new DecimalFormat("#,###").format(server.getPlayers().size()))) ); } else if (((SubServer) server).isEnabled() && ((SubServer) server).getCurrentIncompatibilities().size() == 0) { message.color(TextColors.YELLOW);