Allow ungrouped servers to be listed

This commit is contained in:
ME1312 2021-06-11 18:16:05 -04:00
parent 34c9effa6f
commit 51e83f4fb0
No known key found for this signature in database
GPG Key ID: FEFFE2F698E88FA8
8 changed files with 83 additions and 41 deletions

View File

@ -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");

View File

@ -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<Integer>, PacketO
ObjectMap<Integer> data = new ObjectMap<Integer>();
if (tracker != null) data.set(0x0000, tracker);
ObjectMap<String> groups = new ObjectMap<String>();
for (Map.Entry<String, List<Server>> group : plugin.api.getGroups().entrySet()) {
if (this.groups == null || this.groups.length <= 0 || Arrays.binarySearch(this.groups, group.getKey().toLowerCase()) >= 0) {
ObjectMap<String> servers = new ObjectMap<String>();
for (Server server : group.getValue()) {
servers.set(server.getName(), server.forSubData());
if (this.groups == null || this.groups.length > 0) {
ObjectMap<String> groups = new ObjectMap<String>();
for (Map.Entry<String, List<Server>> group : plugin.api.getGroups().entrySet()) {
if (this.groups == null || Arrays.binarySearch(this.groups, group.getKey().toLowerCase()) >= 0) {
ObjectMap<String> servers = new ObjectMap<String>();
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<String> ungrouped = new ObjectMap<String>();
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;
}

View File

@ -61,7 +61,9 @@ public class PacketDownloadProxyInfo implements PacketObjectIn<Integer>, 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;
}

View File

@ -321,7 +321,7 @@ public final class SubAPI implements BungeeAPI {
} else {
conflitresolver.put(name.toLowerCase(), name);
}
List<Server> list = (groups.keySet().contains(group))?groups.get(group):new ArrayList<Server>();
List<Server> list = (groups.keySet().contains(group))?groups.get(group):new LinkedList<Server>();
list.add(server);
groups.put(group, list);
}

View File

@ -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();

View File

@ -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<String, List<Server>> groups = new TreeMap<String, List<Server>>();
List<Server> ungrouped = new ArrayList<Server>();
{
HashMap<String, String> conflitresolver = new HashMap<String, String>();
for (Server server : servers.values()) {
List<String> 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<Server> list = (groups.keySet().contains(group))? groups.get(group) : new ArrayList<Server>();
list.add(server);
groups.put(group, list);
}
}
}
}
List<String> index = new LinkedList<String>();
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<String> lore = new LinkedList<String>();
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<String> hostname = new Container<String>(host);
Value<List<Server>> servercontainer = new Container<List<Server>>(new LinkedList<Server>());
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 {

View File

@ -130,13 +130,13 @@ public final class SimplifiedData {
* @param callback a Server Group
*/
public static void requestGroup(DataClient client, String name, Callback<Pair<String, List<Server>>> 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<String, List<Server>> group = null;
if (data.getKeys().size() > 0) {
String key = new LinkedList<String>(data.getKeys()).getFirst();
List<Server> servers = new ArrayList<Server>();
List<Server> servers = new LinkedList<Server>();
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)));

View File

@ -50,7 +50,13 @@ public class PacketDownloadGroupInfo implements PacketObjectIn<Integer>, PacketO
@SuppressWarnings("unchecked")
@Override
public void receive(SubDataSender client, ObjectMap<Integer> data) {
for (Callback<ObjectMap<String>> callback : callbacks.get(data.getUUID(0x0000))) callback.run(new ObjectMap<String>((Map<String, ?>) data.getObject(0x0001)));
for (Callback<ObjectMap<String>> callback : callbacks.get(data.getUUID(0x0000))) {
ObjectMap<String> map = new ObjectMap<String>((Map<String, ?>) data.getObject(0x0001));
ObjectMap<String> ungrouped = (data.contains(0x0002))?new ObjectMap<String>((Map<String, ?>) data.getObject(0x0002)):null;
if (ungrouped != null) map.set("", ungrouped);
callback.run(map);
}
callbacks.remove(data.getUUID(0x0000));
}