From 2a939117ac5f7d0e44d18b9aee6b07b2d0669404 Mon Sep 17 00:00:00 2001 From: ME1312 Date: Fri, 10 May 2019 00:04:10 -0400 Subject: [PATCH] Fixes for Multi-Channel SubData --- SubServers.Bungee/pom.xml | 4 +-- .../Bungee/Host/External/ExternalHost.java | 8 +++--- .../ME1312/SubServers/Bungee/Host/Proxy.java | 13 +++++++--- .../Bungee/Host/ServerContainer.java | 25 +++++++++++-------- .../ME1312/SubServers/Bungee/SubCommand.java | 2 +- SubServers.Client/Bukkit/pom.xml | 4 +-- .../Client/Bukkit/Network/API/Host.java | 2 +- .../Client/Bukkit/Network/SubProtocol.java | 14 ++++++++--- .../SubServers/Client/Bukkit/SubCommand.java | 2 +- .../SubServers/Client/Bukkit/SubPlugin.java | 1 + 10 files changed, 45 insertions(+), 30 deletions(-) diff --git a/SubServers.Bungee/pom.xml b/SubServers.Bungee/pom.xml index 70e9966b..43abfc17 100644 --- a/SubServers.Bungee/pom.xml +++ b/SubServers.Bungee/pom.xml @@ -30,13 +30,13 @@ net.ME1312.Galaxi GalaxiUtil - 19w19b + 19w19c compile net.ME1312.SubData Server - 19w19c + 19w19d compile diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalHost.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalHost.java index dfc696fb..64e72e39 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalHost.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalHost.java @@ -76,13 +76,13 @@ public class ExternalHost extends Host implements ClientHandler { public void setSubData(DataClient client, int channel) { if (channel < 0) throw new IllegalArgumentException("Subchannel ID cannot be less than zero"); - if (!subdata.keySet().contains(channel) || (channel == 0 && subdata.get(channel) == null)) { - if (client != null || channel == 0) { + if (client != null || channel == 0) { + if (!subdata.keySet().contains(channel) || (channel == 0 && (client == null || subdata.get(channel) == null))) { subdata.put(channel, (SubDataClient) client); if (client != null && (client.getHandler() == null || !equals(client.getHandler()))) ((SubDataClient) client).setHandler(this); - } else { - subdata.remove(channel); } + } else { + subdata.remove(channel); } } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Proxy.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Proxy.java index 39b4c684..0094ddbc 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Proxy.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Proxy.java @@ -50,15 +50,20 @@ public class Proxy implements ClientHandler, ExtraDataHandler { @SuppressWarnings("deprecation") public void setSubData(DataClient client, int channel) { + boolean update = false; if (channel < 0) throw new IllegalArgumentException("Subchannel ID cannot be less than zero"); - if (!subdata.keySet().contains(channel) || (channel == 0 && subdata.get(channel) == null)) { - if (client != null || channel == 0) { + if (client != null || channel == 0) { + if (!subdata.keySet().contains(channel) || (channel == 0 && (client == null || subdata.get(channel) == null))) { + update = true; subdata.put(channel, (SubDataClient) client); if (client != null && (client.getHandler() == null || !equals(client.getHandler()))) ((SubDataClient) client).setHandler(this); - } else { - subdata.remove(channel); } + } else { + update = true; + subdata.remove(channel); + } + if (update) { DataClient[] subdata = getSubData(); if (subdata[0] == null && subdata.length <= 1 && !persistent) { ProxyServer.getInstance().getPluginManager().callEvent(new SubRemoveProxyEvent(this)); diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/ServerContainer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/ServerContainer.java index bd9af029..8a3d950e 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/ServerContainer.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/ServerContainer.java @@ -54,22 +54,25 @@ public class ServerContainer extends BungeeServerInfo implements Server { } public void setSubData(DataClient client, int channel) { + boolean update = false; if (channel < 0) throw new IllegalArgumentException("Subchannel ID cannot be less than zero"); - if (!subdata.keySet().contains(channel) || (channel == 0 && subdata.get(channel) == null)) { - if (client != null || channel == 0) { + if (client != null || channel == 0) { + if (!subdata.keySet().contains(channel) || (channel == 0 && (client == null || subdata.get(channel) == null))) { + update = true; subdata.put(channel, (SubDataClient) client); if (client != null && (client.getHandler() == null || !equals(client.getHandler()))) ((SubDataClient) client).setHandler(this); - } else { - subdata.remove(channel); } + } else { + update = true; + subdata.remove(channel); + } - for (Proxy proxy : SubAPI.getInstance().getProxies().values()) if (proxy.getSubData()[0] != null) { - ObjectMap args = new ObjectMap(); - args.set("server", getName()); - args.set("channel", channel); - if (client != null) args.set("address", client.getAddress().toString()); - ((SubDataClient) proxy.getSubData()[0]).sendPacket(new PacketOutExRunEvent((client != null)?SubNetworkConnectEvent.class:SubNetworkDisconnectEvent.class, args)); - } + if (update) for (Proxy proxy : SubAPI.getInstance().getProxies().values()) if (proxy.getSubData()[0] != null) { + ObjectMap args = new ObjectMap(); + args.set("server", getName()); + args.set("channel", channel); + if (client != null) args.set("address", client.getAddress().toString()); + ((SubDataClient) proxy.getSubData()[0]).sendPacket(new PacketOutExRunEvent((client != null)?SubNetworkConnectEvent.class:SubNetworkDisconnectEvent.class, args)); } } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubCommand.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubCommand.java index a08dc4da..83a7a0e8 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubCommand.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubCommand.java @@ -325,7 +325,7 @@ public final class SubCommand extends CommandX { sender.sendMessage(" -> Available: " + ((host.isAvailable())?ChatColor.GREEN+"yes":ChatColor.RED+"no")); sender.sendMessage(" -> Enabled: " + ((host.isEnabled())?ChatColor.GREEN+"yes":ChatColor.RED+"no")); sender.sendMessage(" -> Address: " + ChatColor.WHITE + host.getAddress().getHostAddress()); - if (host instanceof ClientHandler && ((ClientHandler) host).getSubData()[0] != null) sender.sendMessage(" -> Connected: " + ChatColor.GREEN + "yes" + ((((ClientHandler) host).getSubData().length > 1)?ChatColor.AQUA+" +"+(((ClientHandler) host).getSubData().length-1):"")); + if (host instanceof ClientHandler) sender.sendMessage(" -> Connected: " + ((((ClientHandler) host).getSubData()[0] != null)?ChatColor.GREEN+"yes"+((((ClientHandler) host).getSubData().length > 1)?ChatColor.AQUA+" +"+(((ClientHandler) host).getSubData().length-1):""):ChatColor.RED+"no")); sender.sendMessage(" -> SubServers: " + ((host.getSubServers().keySet().size() <= 0)?ChatColor.GRAY + "(none)":ChatColor.AQUA.toString() + host.getSubServers().keySet().size())); for (SubServer subserver : host.getSubServers().values()) sender.sendMessage(" - " + ((subserver.isEnabled())?ChatColor.WHITE:ChatColor.GRAY) + subserver.getDisplayName() + ((subserver.getName().equals(subserver.getDisplayName()))?"":" ("+subserver.getName()+')')); sender.sendMessage(" -> Templates: " + ((host.getCreator().getTemplates().keySet().size() <= 0)?ChatColor.GRAY + "(none)":ChatColor.AQUA.toString() + host.getCreator().getTemplates().keySet().size())); diff --git a/SubServers.Client/Bukkit/pom.xml b/SubServers.Client/Bukkit/pom.xml index 8017fc0d..c3661ba4 100644 --- a/SubServers.Client/Bukkit/pom.xml +++ b/SubServers.Client/Bukkit/pom.xml @@ -48,13 +48,13 @@ net.ME1312.Galaxi GalaxiUtil - 19w19b + 19w19c compile net.ME1312.SubData Client - 19w19c + 19w19d compile diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/Host.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/Host.java index bd5c1c5a..de8ecc16 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/Host.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/Host.java @@ -55,7 +55,7 @@ public class Host { /** * Gets the SubData Client Channel IDs * - * @return SubData Client Channel ID Array + * @return SubData Client Channel ID Array (may be empty if unsupported) */ public UUID[] getSubData() { return raw.getUUIDList("subdata", Collections.emptyList()).toArray(new UUID[0]); diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/SubProtocol.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/SubProtocol.java index b5b640de..31a8344a 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/SubProtocol.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/SubProtocol.java @@ -28,6 +28,9 @@ public class SubProtocol extends SubDataProtocol { @SuppressWarnings("deprecation") public static SubProtocol get() { if (instance == null) { + instance = new SubProtocol(); + SubPlugin plugin = SubAPI.getInstance().getInternals(); + log = Logger.getAnonymousLogger(); log.setUseParentHandlers(false); log.addHandler(new Handler() { @@ -35,8 +38,13 @@ public class SubProtocol extends SubDataProtocol { @Override public void publish(LogRecord record) { - if (open) - Bukkit.getLogger().log(record.getLevel(), "SubData > " + record.getMessage(), record.getParameters()); + if (open) { + if (plugin.isEnabled()) { + Bukkit.getScheduler().runTask(plugin, () -> Bukkit.getLogger().log(record.getLevel(), "SubData > " + record.getMessage(), record.getParameters())); + } else { + Bukkit.getLogger().log(record.getLevel(), "SubData > " + record.getMessage(), record.getParameters()); + } + } } @Override @@ -49,8 +57,6 @@ public class SubProtocol extends SubDataProtocol { open = false; } }); - instance = new SubProtocol(); - SubPlugin plugin = SubAPI.getInstance().getInternals(); instance.setName("SubServers 2"); instance.addVersion(new Version("2.14a+")); diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubCommand.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubCommand.java index 95c73f68..6aece529 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubCommand.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubCommand.java @@ -280,7 +280,7 @@ public final class SubCommand extends BukkitCommand { sender.sendMessage(plugin.api.getLang("SubServers", "Command.Info.Format").replace("$str$", "Available") + ((host.isAvailable())?ChatColor.GREEN+"yes":ChatColor.RED+"no")); sender.sendMessage(plugin.api.getLang("SubServers", "Command.Info.Format").replace("$str$", "Enabled") + ((host.isEnabled())?ChatColor.GREEN+"yes":ChatColor.RED+"no")); if (plugin.config.get().getMap("Settings").getBoolean("Show-Addresses", false)) sender.sendMessage(plugin.api.getLang("SubServers", "Command.Info.Format").replace("$str$", "Address") + ChatColor.WHITE + host.getAddress().getHostAddress()); - if (host.getSubData()[0] != null) sender.sendMessage(plugin.api.getLang("SubServers", "Command.Info.Format").replace("$str$", "Connected") + ChatColor.GREEN + "yes" + ((host.getSubData().length > 1)?ChatColor.AQUA+" +"+(host.getSubData().length-1):"")); + if (host.getSubData().length > 0) sender.sendMessage(plugin.api.getLang("SubServers", "Command.Info.Format").replace("$str$", "Connected") + ((host.getSubData()[0] != null)?ChatColor.GREEN+"yes"+((host.getSubData().length > 1)?ChatColor.AQUA+" +"+(host.getSubData().length-1):""):ChatColor.RED+"no")); sender.sendMessage(plugin.api.getLang("SubServers", "Command.Info.Format").replace("$str$", "SubServers") + ((host.getSubServers().keySet().size() <= 0)?ChatColor.GRAY + "(none)":ChatColor.AQUA.toString() + host.getSubServers().keySet().size())); for (SubServer subserver : host.getSubServers().values()) sender.sendMessage(" " + plugin.api.getLang("SubServers", "Command.Info.List") + ((subserver.isEnabled())?ChatColor.WHITE:ChatColor.GRAY) + subserver.getDisplayName() + ((subserver.getName().equals(subserver.getDisplayName()))?"":" ("+subserver.getName()+')')); sender.sendMessage(plugin.api.getLang("SubServers", "Command.Info.Format").replace("$str$", "Templates") + ((host.getCreator().getTemplates().keySet().size() <= 0)?ChatColor.GRAY + "(none)":ChatColor.AQUA.toString() + host.getCreator().getTemplates().keySet().size())); 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 3f3f0606..e0d7c289 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 @@ -47,6 +47,7 @@ public final class SubPlugin extends JavaPlugin { public SubPlugin() { super(); version = Version.fromString(getDescription().getVersion()); + subdata.put(0, null); } /**