From 51e83f4fb07cd300976c78c9261227ec06c70eef Mon Sep 17 00:00:00 2001 From: ME1312 Date: Fri, 11 Jun 2021 18:16:05 -0400 Subject: [PATCH] Allow ungrouped servers to be listed --- .../Bungee/Library/ConfigUpdater.java | 5 +- .../Packet/PacketDownloadGroupInfo.java | 31 ++++++---- .../Packet/PacketDownloadProxyInfo.java | 4 +- .../net/ME1312/SubServers/Bungee/SubAPI.java | 2 +- .../Bukkit/Graphic/DefaultUIHandler.java | 10 +++- .../Bukkit/Graphic/DefaultUIRenderer.java | 58 +++++++++++++------ .../Common/Network/API/SimplifiedData.java | 6 +- .../Packet/PacketDownloadGroupInfo.java | 8 ++- 8 files changed, 83 insertions(+), 41 deletions(-) diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/ConfigUpdater.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/ConfigUpdater.java index 9ca8ef74..0d0b50c8 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/ConfigUpdater.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/ConfigUpdater.java @@ -318,7 +318,7 @@ public class ConfigUpdater { existing = updated.clone(); i++; - } if (was.compareTo(new Version("20w34c")) <= 0) { + } if (was.compareTo(new Version("21w24h")) <= 0) { //existing = updated.clone(); i++; @@ -498,9 +498,10 @@ public class ConfigUpdater { def.put("Interface.Host-SubServer.Title", "Host/$str$/SubServers"); def.put("Interface.Group-Menu.Title", "Group Menu"); def.put("Interface.Group-Menu.Group-Server-Count", "&9$int$ Server(s)"); - def.put("Interface.Group-Menu.No-Groups", "&c&oThere are No Groups"); + def.put("Interface.Group-Menu.Ungrouped", "&7(ungrouped)"); def.put("Interface.Group-Menu.Server-Menu", "&a&lView All Servers"); def.put("Interface.Group-SubServer.Title", "Group/$str$/Servers"); + def.put("Interface.Group-SubServer.Title-Ungrouped", "Ungrouped Server Menu"); def.put("Interface.Server-Menu.Title", "Server Menu"); def.put("Interface.Server-Menu.Server-Player-Count", "&2$int$ Player(s) Online"); def.put("Interface.Server-Menu.Server-External", "&7External Server"); diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadGroupInfo.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadGroupInfo.java index a13b1e93..5c2d74f1 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadGroupInfo.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadGroupInfo.java @@ -8,10 +8,7 @@ import net.ME1312.SubData.Server.SubDataClient; import net.ME1312.SubServers.Bungee.Host.Server; import net.ME1312.SubServers.Bungee.SubProxy; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.UUID; +import java.util.*; /** * Download Group Info Packet @@ -55,17 +52,27 @@ public class PacketDownloadGroupInfo implements PacketObjectIn, PacketO ObjectMap data = new ObjectMap(); if (tracker != null) data.set(0x0000, tracker); - ObjectMap groups = new ObjectMap(); - for (Map.Entry> group : plugin.api.getGroups().entrySet()) { - if (this.groups == null || this.groups.length <= 0 || Arrays.binarySearch(this.groups, group.getKey().toLowerCase()) >= 0) { - ObjectMap servers = new ObjectMap(); - for (Server server : group.getValue()) { - servers.set(server.getName(), server.forSubData()); + if (this.groups == null || this.groups.length > 0) { + ObjectMap groups = new ObjectMap(); + for (Map.Entry> group : plugin.api.getGroups().entrySet()) { + if (this.groups == null || Arrays.binarySearch(this.groups, group.getKey().toLowerCase()) >= 0) { + ObjectMap servers = new ObjectMap(); + for (Server server : group.getValue()) { + servers.set(server.getName(), server.forSubData()); + } + groups.set(group.getKey(), servers); } - groups.set(group.getKey(), servers); } + data.set(0x0001, groups); + } else { + ObjectMap ungrouped = new ObjectMap(); + for (Server server : plugin.api.getServers().values()) { + if (server.getGroups().size() <= 0) ungrouped.set(server.getName(), server.forSubData()); + } + + data.set(0x0001, Collections.emptyMap()); + data.set(0x0002, ungrouped); } - data.set(0x0001, groups); return data; } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadProxyInfo.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadProxyInfo.java index 99ea942e..f941f392 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadProxyInfo.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadProxyInfo.java @@ -61,7 +61,9 @@ public class PacketDownloadProxyInfo implements PacketObjectIn, PacketO } } data.set(0x0001, proxies); - if (this.proxies != null && plugin.api.getMasterProxy() != null && (this.proxies.length <= 0 || Arrays.binarySearch(this.proxies, plugin.api.getMasterProxy().getName().toLowerCase()) >= 0)) data.set(0x0002, plugin.api.getMasterProxy().forSubData()); + if (this.proxies != null && plugin.api.getMasterProxy() != null && (this.proxies.length <= 0 || Arrays.binarySearch(this.proxies, plugin.api.getMasterProxy().getName().toLowerCase()) >= 0)) { + data.set(0x0002, plugin.api.getMasterProxy().forSubData()); + } return data; } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubAPI.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubAPI.java index 4204e3c7..42027e4f 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubAPI.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubAPI.java @@ -321,7 +321,7 @@ public final class SubAPI implements BungeeAPI { } else { conflitresolver.put(name.toLowerCase(), name); } - List list = (groups.keySet().contains(group))?groups.get(group):new ArrayList(); + List list = (groups.keySet().contains(group))?groups.get(group):new LinkedList(); list.add(server); groups.put(group, list); } diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/DefaultUIHandler.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/DefaultUIHandler.java index 7756dec5..04630543 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/DefaultUIHandler.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/DefaultUIHandler.java @@ -241,7 +241,7 @@ public class DefaultUIHandler implements UIHandler, Listener { } } - } else if (title.equals(plugin.api.getLang("SubServers", "Interface.Group-Menu.Title"))) { // Host Menu + } else if (title.equals(plugin.api.getLang("SubServers", "Interface.Group-Menu.Title"))) { // Group Menu if (event.getCurrentItem() != null && event.getCurrentItem().getType() != Material.AIR && event.getCurrentItem().hasItemMeta()) { String item = event.getCurrentItem().getItemMeta().getDisplayName(); @@ -254,7 +254,10 @@ public class DefaultUIHandler implements UIHandler, Listener { } else if (item.equals(plugin.api.getLang("SubServers", "Interface.Group-Menu.Server-Menu"))) { player.closeInventory(); gui.serverMenu(1, null, null); - } else if ((item.length() != 0 && !item.equals(ChatColor.RESET.toString())) && !item.equals(plugin.api.getLang("SubServers", "Interface.Group-Menu.No-Groups"))) { + } else if (item.equals(plugin.api.getLang("SubServers", "Interface.Group-Menu.Ungrouped"))) { + player.closeInventory(); + gui.serverMenu(1, null, ""); + } else if (item.length() != 0 && !item.equals(ChatColor.RESET.toString())) { player.closeInventory(); gui.serverMenu(1, null, ChatColor.stripColor(item)); } @@ -265,7 +268,8 @@ public class DefaultUIHandler implements UIHandler, Listener { title.endsWith(plugin.api.getLang("SubServers", "Interface.Host-SubServer.Title").split("\\$str\\$")[1])) || title.startsWith(plugin.api.getLang("SubServers", "Interface.Group-SubServer.Title").split("\\$str\\$")[0]) && (plugin.api.getLang("SubServers", "Interface.Group-SubServer.Title").split("\\$str\\$").length == 1 || - title.endsWith(plugin.api.getLang("SubServers", "Interface.Group-SubServer.Title").split("\\$str\\$")[1]))) { + title.endsWith(plugin.api.getLang("SubServers", "Interface.Group-SubServer.Title").split("\\$str\\$")[1])) || + title.equals(plugin.api.getLang("SubServers", "Interface.Group-SubServer.Title-Ungrouped"))) { if (event.getCurrentItem() != null && event.getCurrentItem().getType() != Material.AIR && event.getCurrentItem().hasItemMeta()) { String item = event.getCurrentItem().getItemMeta().getDisplayName(); diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/DefaultUIRenderer.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/DefaultUIRenderer.java index ef918304..839ec5dd 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/DefaultUIRenderer.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/DefaultUIRenderer.java @@ -2,7 +2,6 @@ package net.ME1312.SubServers.Client.Bukkit.Graphic; import net.ME1312.Galaxi.Library.Container.Container; import net.ME1312.Galaxi.Library.Container.Value; -import net.ME1312.Galaxi.Library.Version.Version; import net.ME1312.SubServers.Client.Bukkit.SubPlugin; import net.ME1312.SubServers.Client.Common.Network.API.Host; import net.ME1312.SubServers.Client.Common.Network.API.Server; @@ -695,13 +694,39 @@ public class DefaultUIRenderer extends UIRenderer { public void groupMenu(final int page) { setDownloading(ChatColor.stripColor(plugin.api.getLang("SubServers", "Interface.Group-Menu.Title"))); - plugin.api.getGroups(groups -> { + plugin.api.getServers(servers -> { setDownloading(null); lastVisitedObjects[0] = null; lastPage = page; lastMenu = () -> groupMenu(1); windowHistory.add(() -> groupMenu(page)); + + TreeMap> groups = new TreeMap>(); + List ungrouped = new ArrayList(); + { + HashMap conflitresolver = new HashMap(); + for (Server server : servers.values()) { + List sgl = server.getGroups(); + if (sgl.size() == 0) { + ungrouped.add(server); + } else { + for (String name : sgl) { + String group = name; + if (conflitresolver.keySet().contains(name.toLowerCase())) { + group = conflitresolver.get(name.toLowerCase()); + } else { + conflitresolver.put(name.toLowerCase(), name); + } + List list = (groups.keySet().contains(group))? groups.get(group) : new ArrayList(); + list.add(server); + groups.put(group, list); + } + } + } + } + List index = new LinkedList(); + if (ungrouped.size() != 0) index.add(null); index.addAll(groups.keySet()); ItemStack block; @@ -737,9 +762,16 @@ public class DefaultUIRenderer extends UIRenderer { block = color(color); blockMeta = block.getItemMeta(); - blockMeta.setDisplayName(ChatColor.GOLD + group); + int size; + if (group == null) { + blockMeta.setDisplayName(plugin.api.getLang("SubServers", "Interface.Group-Menu.Ungrouped")); + size = ungrouped.size(); + } else { + blockMeta.setDisplayName(ChatColor.GOLD + group); + size = groups.get(group).size(); + } LinkedList lore = new LinkedList(); - lore.add(plugin.api.getLang("SubServers", "Interface.Group-Menu.Group-Server-Count").replace("$int$", new DecimalFormat("#,###").format(groups.get(group).size()))); + lore.add(plugin.api.getLang("SubServers", "Interface.Group-Menu.Group-Server-Count").replace("$int$", new DecimalFormat("#,###").format(size))); blockMeta.setLore(lore); block.setItemMeta(blockMeta); inv.setItem(i, block); @@ -754,16 +786,6 @@ public class DefaultUIRenderer extends UIRenderer { } } - if (index.size() == 0) { - block = color(14); - blockMeta = block.getItemMeta(); - blockMeta.setDisplayName(plugin.api.getLang("SubServers", "Interface.Group-Menu.No-Groups")); - block.setItemMeta(blockMeta); - inv.setItem(12, block); - inv.setItem(13, block); - inv.setItem(14, block); - } - i = inv.getSize() - 18; while (i < inv.getSize()) { inv.setItem(i, div); @@ -803,7 +825,7 @@ public class DefaultUIRenderer extends UIRenderer { } public void serverMenu(final int page, final String host, final String group) { - setDownloading(ChatColor.stripColor((host == null)?((group == null)?plugin.api.getLang("SubServers", "Interface.Server-Menu.Title"):plugin.api.getLang("SubServers", "Interface.Group-SubServer.Title").replace("$str$", group)):plugin.api.getLang("SubServers", "Interface.Host-SubServer.Title").replace("$str$", host))); + setDownloading(ChatColor.stripColor((host == null)?((group == null)?plugin.api.getLang("SubServers", "Interface.Server-Menu.Title"):((group.length() == 0)?plugin.api.getLang("SubServers", "Interface.Group-SubServer.Title-Ungrouped"):plugin.api.getLang("SubServers", "Interface.Group-SubServer.Title").replace("$str$", group))):plugin.api.getLang("SubServers", "Interface.Host-SubServer.Title").replace("$str$", host))); Value hostname = new Container(host); Value> servercontainer = new Container>(new LinkedList()); Runnable renderer = () -> { @@ -828,7 +850,7 @@ public class DefaultUIRenderer extends UIRenderer { int count = (servers.size() == 0)?27:((servers.size() - min >= max)?36:servers.size() - min); int area = (count % 9 == 0) ? count : ((count / 9) + 1) * 9; - Inventory inv = Bukkit.createInventory(null, 18 + area, (host == null)?((group == null)?plugin.api.getLang("SubServers", "Interface.Server-Menu.Title"):plugin.api.getLang("SubServers", "Interface.Group-SubServer.Title").replace("$str$", group)):plugin.api.getLang("SubServers", "Interface.Host-SubServer.Title").replace("$str$", hostname.value())); + Inventory inv = Bukkit.createInventory(null, 18 + area, (host == null)?((group == null)?plugin.api.getLang("SubServers", "Interface.Server-Menu.Title"):((group.length() == 0)?plugin.api.getLang("SubServers", "Interface.Group-SubServer.Title-Ungrouped"):plugin.api.getLang("SubServers", "Interface.Group-SubServer.Title").replace("$str$", group))):plugin.api.getLang("SubServers", "Interface.Host-SubServer.Title").replace("$str$", hostname.value())); block = color(7); block.setItemMeta(divMeta); while (i < area) { @@ -977,8 +999,8 @@ public class DefaultUIRenderer extends UIRenderer { renderer.run(); } }); - } else if (group != null && group.length() > 0) { - plugin.api.getGroup(group, servers -> { + } else if (group != null) { + plugin.api.getGroup((group.length() == 0)?null:group, servers -> { if (servers == null) { if (hasHistory()) back(); } else { diff --git a/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/API/SimplifiedData.java b/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/API/SimplifiedData.java index 2e748799..ad8aa3ff 100644 --- a/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/API/SimplifiedData.java +++ b/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/API/SimplifiedData.java @@ -130,13 +130,13 @@ public final class SimplifiedData { * @param callback a Server Group */ public static void requestGroup(DataClient client, String name, Callback>> callback) { - if (Util.isNull(name, callback)) throw new NullPointerException(); + if (Util.isNull(callback)) throw new NullPointerException(); StackTraceElement[] origin = new Exception().getStackTrace(); - client(client).sendPacket(new PacketDownloadGroupInfo(Collections.singletonList(name), data -> { + client(client).sendPacket(new PacketDownloadGroupInfo((name == null)?Collections.emptyList():Collections.singletonList(name), data -> { Pair> group = null; if (data.getKeys().size() > 0) { String key = new LinkedList(data.getKeys()).getFirst(); - List servers = new ArrayList(); + List servers = new LinkedList(); for (String server : data.getMap(key).getKeys()) { if (data.getMap(key).getMap(server).getRawString("type", "Server").equals("SubServer")) { servers.add(new SubServer(client, data.getMap(key).getMap(server))); diff --git a/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/Packet/PacketDownloadGroupInfo.java b/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/Packet/PacketDownloadGroupInfo.java index 06db6e2d..48f8426c 100644 --- a/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/Packet/PacketDownloadGroupInfo.java +++ b/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/Packet/PacketDownloadGroupInfo.java @@ -50,7 +50,13 @@ public class PacketDownloadGroupInfo implements PacketObjectIn, PacketO @SuppressWarnings("unchecked") @Override public void receive(SubDataSender client, ObjectMap data) { - for (Callback> callback : callbacks.get(data.getUUID(0x0000))) callback.run(new ObjectMap((Map) data.getObject(0x0001))); + for (Callback> callback : callbacks.get(data.getUUID(0x0000))) { + ObjectMap map = new ObjectMap((Map) data.getObject(0x0001)); + ObjectMap ungrouped = (data.contains(0x0002))?new ObjectMap((Map) data.getObject(0x0002)):null; + + if (ungrouped != null) map.set("", ungrouped); + callback.run(map); + } callbacks.remove(data.getUUID(0x0000)); }