From 8a5a0cdc4bdced214edeeea29e358f5fabbb47b7 Mon Sep 17 00:00:00 2001 From: ME1312 Date: Tue, 10 Jan 2023 00:57:31 -0500 Subject: [PATCH] Fixes to ping adjustment for global player count --- .../ME1312/SubServers/Bungee/SubProxy.java | 35 ++++++++++--------- .../Bukkit/Graphic/DefaultUIRenderer.java | 4 +-- .../Network/Packet/PacketInExRunEvent.java | 10 +++--- .../Network/Packet/PacketInExRunEvent.java | 10 +++--- .../Network/Packet/PacketInExRunEvent.java | 10 +++--- .../net/ME1312/SubServers/Sync/ExProxy.java | 32 +++++++++-------- .../Network/Packet/PacketInExRunEvent.java | 10 +++--- .../Network/Packet/PacketInExRunEvent.java | 10 +++--- 8 files changed, 69 insertions(+), 52 deletions(-) diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubProxy.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubProxy.java index b02a7205..d289150e 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubProxy.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubProxy.java @@ -947,21 +947,26 @@ public final class SubProxy extends BungeeCommon implements Listener { } } + @SuppressWarnings({"AssignmentUsedAsCondition", "deprecation"}) @EventHandler(priority = Byte.MIN_VALUE) public void ping_passthrough(ProxyPingEvent e) { - boolean dynamic; - ServerInfo override; - if ((dynamic = SmartFallback.getForcedHost(e.getConnection()) == null) && getReconnectHandler() instanceof SmartFallback && (override = SmartFallback.getDNS(e.getConnection())) != null) { + final boolean dynamic; + if ((dynamic = SmartFallback.getForcedHost(e.getConnection()) == null) || !e.getConnection().getListener().isPingPassthrough()) { + e.getResponse().getPlayers().setOnline(rPlayers.size()); + } + + final ServerInfo override; + if (dynamic && getReconnectHandler() instanceof SmartFallback && (override = SmartFallback.getDNS(e.getConnection())) != null) { if (!(override instanceof SubServer) || ((SubServer) override).isRunning()) { if (!e.getConnection().getListener().isPingPassthrough()) { - e.setResponse(new ServerPing(e.getResponse().getVersion(), e.getResponse().getPlayers(), new TextComponent(override.getMotd()), e.getResponse().getFaviconObject())); + e.getResponse().setDescription(override.getMotd()); } else { - Container lock = new Container<>(true); - boolean mode = plugin != null; - if (mode) e.registerIntent(plugin); + final boolean mode; + final Container lock = new Container<>(true); + if (mode = plugin != null) e.registerIntent(plugin); ((BungeeServerInfo) override).ping((ping, error) -> { if (error != null) { - e.setResponse(new ServerPing(e.getResponse().getVersion(), e.getResponse().getPlayers(), new TextComponent(getTranslation("ping_cannot_connect")), e.getResponse().getFaviconObject())); + e.getResponse().setDescription(getTranslation("ping_cannot_connect")); } else e.setResponse(ping); lock.value = false; if (mode) e.completeIntent(plugin); @@ -969,28 +974,26 @@ public final class SubProxy extends BungeeCommon implements Listener { if (!mode) while (lock.value) Try.all.run(() -> Thread.sleep(4)); } } - } else if (dynamic) { - e.getResponse().getPlayers().setOnline(rPlayers.size()); } } + @SuppressWarnings("deprecation") @EventHandler(priority = Byte.MAX_VALUE) public void ping(ProxyPingEvent e) { ServerInfo override; - if ((override = SmartFallback.getForcedHost(e.getConnection())) != null || (override = SmartFallback.getDNS(e.getConnection())) != null) { + if ((override = SmartFallback.getForcedHost(e.getConnection())) != null || (getReconnectHandler() instanceof SmartFallback && (override = SmartFallback.getDNS(e.getConnection())) != null)) { if (override instanceof SubServer && !((SubServer) override).isRunning()) { - e.setResponse(new ServerPing(e.getResponse().getVersion(), e.getResponse().getPlayers(), new TextComponent(api.getLang("SubServers", "Bungee.Ping.Offline")), e.getResponse().getFaviconObject())); + e.getResponse().setDescription(api.getLang("SubServers", "Bungee.Ping.Offline")); } } else { int offline = 0; for (String name : e.getConnection().getListener().getServerPriority()) { - ServerInfo server = api.getServer(name.toLowerCase()); - if (server == null) server = getServerInfo(name); - if (server == null || (server instanceof SubServer && !((SubServer) server).isRunning())) offline++; + ServerInfo server = getServerInfo(name); + if (server instanceof SubServer && !((SubServer) server).isRunning()) ++offline; } if (offline >= e.getConnection().getListener().getServerPriority().size()) { - e.setResponse(new ServerPing(e.getResponse().getVersion(), e.getResponse().getPlayers(), new TextComponent(api.getLang("SubServers", "Bungee.Ping.Offline")), e.getResponse().getFaviconObject())); + e.getResponse().setDescription(api.getLang("SubServers", "Bungee.Ping.Offline")); } } } 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 47806f81..4e486c3c 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 @@ -26,8 +26,8 @@ import static net.ME1312.SubServers.Client.Bukkit.Library.ObjectPermission.permi * Default GUI Renderer Class */ public class DefaultUIRenderer extends UIRenderer { - private static int MAX_VISITED_OBJECTS = 2; - private List windowHistory = new LinkedList(); + private static final int MAX_VISITED_OBJECTS = 2; + private final List windowHistory = new LinkedList(); Object[] lastVisitedObjects = new Object[MAX_VISITED_OBJECTS]; int lastPage = 1; Runnable lastMenu = null; diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/Packet/PacketInExRunEvent.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/Packet/PacketInExRunEvent.java index 4f4ca53f..0fc626fd 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/Packet/PacketInExRunEvent.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/Packet/PacketInExRunEvent.java @@ -20,7 +20,7 @@ import java.util.function.Consumer; * Run Event Packet */ public class PacketInExRunEvent implements PacketObjectIn { - private static HashMap>>> callbacks = new HashMap>>>(); + private static final HashMap>>> callbacks = new HashMap>>>(); /** * New PacketInRunEvent @@ -159,9 +159,11 @@ public class PacketInExRunEvent implements PacketObjectIn { @SuppressWarnings("unchecked") @Override public void receive(SubDataSender client, ObjectMap data) { - if (callbacks.containsKey(data.getString(0x0000))) { - for (Consumer> callback : PacketInExRunEvent.callbacks.remove(data.getString(0x0000))) { - callback.accept(new ObjectMap<>((Map) data.getObject(0x0001))); + synchronized (callbacks) { + if (callbacks.containsKey(data.getString(0x0000))) { + for (Consumer> callback : PacketInExRunEvent.callbacks.remove(data.getString(0x0000))) { + callback.accept(new ObjectMap<>((Map) data.getObject(0x0001))); + } } } } diff --git a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Network/Packet/PacketInExRunEvent.java b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Network/Packet/PacketInExRunEvent.java index c5d00e2d..5bf4e0a9 100644 --- a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Network/Packet/PacketInExRunEvent.java +++ b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Network/Packet/PacketInExRunEvent.java @@ -20,7 +20,7 @@ import java.util.function.Consumer; * Run Event Packet */ public class PacketInExRunEvent implements PacketObjectIn { - private static HashMap>>> callbacks = new HashMap>>>(); + private static final HashMap>>> callbacks = new HashMap>>>(); /** * New PacketInRunEvent @@ -131,9 +131,11 @@ public class PacketInExRunEvent implements PacketObjectIn { @SuppressWarnings("unchecked") @Override public void receive(SubDataSender client, ObjectMap data) { - if (callbacks.containsKey(data.getString(0x0000))) { - for (Consumer> callback : PacketInExRunEvent.callbacks.remove(data.getString(0x0000))) { - callback.accept(new ObjectMap<>((Map) data.getObject(0x0001))); + synchronized (callbacks) { + if (callbacks.containsKey(data.getString(0x0000))) { + for (Consumer> callback : PacketInExRunEvent.callbacks.remove(data.getString(0x0000))) { + callback.accept(new ObjectMap<>((Map) data.getObject(0x0001))); + } } } } diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketInExRunEvent.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketInExRunEvent.java index a4adab21..eb8e8f17 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketInExRunEvent.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketInExRunEvent.java @@ -17,7 +17,7 @@ import java.util.function.Consumer; * Run Event Packet */ public class PacketInExRunEvent implements PacketObjectIn { - private static HashMap>>> callbacks = new HashMap>>>(); + private static final HashMap>>> callbacks = new HashMap>>>(); /** * New PacketInRunEvent @@ -128,9 +128,11 @@ public class PacketInExRunEvent implements PacketObjectIn { @SuppressWarnings("unchecked") @Override public void receive(SubDataSender client, ObjectMap data) { - if (callbacks.containsKey(data.getString(0x0000))) { - for (Consumer> callback : PacketInExRunEvent.callbacks.remove(data.getString(0x0000))) { - callback.accept(new ObjectMap<>((Map) data.getObject(0x0001))); + synchronized (callbacks) { + if (callbacks.containsKey(data.getString(0x0000))) { + for (Consumer> callback : PacketInExRunEvent.callbacks.remove(data.getString(0x0000))) { + callback.accept(new ObjectMap<>((Map) data.getObject(0x0001))); + } } } } diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/ExProxy.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/ExProxy.java index 77cd3b7d..6d187a83 100644 --- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/ExProxy.java +++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/ExProxy.java @@ -437,21 +437,26 @@ public final class ExProxy extends BungeeCommon implements Listener { super.stopListeners(); } + @SuppressWarnings({"AssignmentUsedAsCondition", "deprecation"}) @EventHandler(priority = Byte.MIN_VALUE) public void ping_passthrough(ProxyPingEvent e) { - boolean dynamic; - ServerInfo override; - if ((dynamic = SmartFallback.getForcedHost(e.getConnection()) == null) && getReconnectHandler() instanceof SmartFallback && (override = SmartFallback.getDNS(e.getConnection())) != null) { + final boolean dynamic; + if ((dynamic = SmartFallback.getForcedHost(e.getConnection()) == null) || !e.getConnection().getListener().isPingPassthrough()) { + e.getResponse().getPlayers().setOnline(rPlayers.size()); + } + + final ServerInfo override; + if (dynamic && getReconnectHandler() instanceof SmartFallback && (override = SmartFallback.getDNS(e.getConnection())) != null) { if (!(override instanceof SubServerImpl) || ((SubServerImpl) override).isRunning()) { if (!e.getConnection().getListener().isPingPassthrough()) { - e.setResponse(new ServerPing(e.getResponse().getVersion(), e.getResponse().getPlayers(), new TextComponent(override.getMotd()), e.getResponse().getFaviconObject())); + e.getResponse().setDescription(override.getMotd()); } else { - Container lock = new Container<>(true); - boolean mode = plugin != null; - if (mode) e.registerIntent(plugin); + final boolean mode; + final Container lock = new Container<>(true); + if (mode = plugin != null) e.registerIntent(plugin); ((BungeeServerInfo) override).ping((ping, error) -> { if (error != null) { - e.setResponse(new ServerPing(e.getResponse().getVersion(), e.getResponse().getPlayers(), new TextComponent(getTranslation("ping_cannot_connect")), e.getResponse().getFaviconObject())); + e.getResponse().setDescription(getTranslation("ping_cannot_connect")); } else e.setResponse(ping); lock.value = false; if (mode) e.completeIntent(plugin); @@ -459,27 +464,26 @@ public final class ExProxy extends BungeeCommon implements Listener { if (!mode) while (lock.value) Try.all.run(() -> Thread.sleep(4)); } } - } else if (dynamic) { - e.getResponse().getPlayers().setOnline(rPlayers.size()); } } + @SuppressWarnings("deprecation") @EventHandler(priority = Byte.MAX_VALUE) public void ping(ProxyPingEvent e) { ServerInfo override; - if ((override = SmartFallback.getForcedHost(e.getConnection())) != null || (override = SmartFallback.getDNS(e.getConnection())) != null) { + if ((override = SmartFallback.getForcedHost(e.getConnection())) != null || (getReconnectHandler() instanceof SmartFallback && (override = SmartFallback.getDNS(e.getConnection())) != null)) { if (override instanceof SubServerImpl && !((SubServerImpl) override).isRunning()) { - e.setResponse(new ServerPing(e.getResponse().getVersion(), e.getResponse().getPlayers(), new TextComponent(api.getLang("SubServers", "Bungee.Ping.Offline")), e.getResponse().getFaviconObject())); + e.getResponse().setDescription(api.getLang("SubServers", "Bungee.Ping.Offline")); } } else { int offline = 0; for (String name : e.getConnection().getListener().getServerPriority()) { ServerInfo server = getServerInfo(name); - if (server instanceof SubServerImpl && !((SubServerImpl) server).isRunning()) offline++; + if (server instanceof SubServerImpl && !((SubServerImpl) server).isRunning()) ++offline; } if (offline >= e.getConnection().getListener().getServerPriority().size()) { - e.setResponse(new ServerPing(e.getResponse().getVersion(), e.getResponse().getPlayers(), new TextComponent(api.getLang("SubServers", "Bungee.Ping.Offline")), e.getResponse().getFaviconObject())); + e.getResponse().setDescription(api.getLang("SubServers", "Bungee.Ping.Offline")); } } } diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketInExRunEvent.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketInExRunEvent.java index 1b3a9bed..3496b0ec 100644 --- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketInExRunEvent.java +++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketInExRunEvent.java @@ -19,7 +19,7 @@ import java.util.function.Consumer; * Run Event Packet */ public class PacketInExRunEvent implements PacketObjectIn { - private static HashMap>>> callbacks = new HashMap>>>(); + private static final HashMap>>> callbacks = new HashMap>>>(); /** * New PacketInExRunEvent @@ -130,9 +130,11 @@ public class PacketInExRunEvent implements PacketObjectIn { @SuppressWarnings("unchecked") @Override public void receive(SubDataSender client, ObjectMap data) { - if (callbacks.containsKey(data.getString(0x0000))) { - for (Consumer> callback : PacketInExRunEvent.callbacks.remove(data.getString(0x0000))) { - callback.accept(new ObjectMap<>((Map) data.getObject(0x0001))); + synchronized (callbacks) { + if (callbacks.containsKey(data.getString(0x0000))) { + for (Consumer> callback : PacketInExRunEvent.callbacks.remove(data.getString(0x0000))) { + callback.accept(new ObjectMap<>((Map) data.getObject(0x0001))); + } } } } diff --git a/SubServers.Sync/velocity/src/net/ME1312/SubServers/Velocity/Network/Packet/PacketInExRunEvent.java b/SubServers.Sync/velocity/src/net/ME1312/SubServers/Velocity/Network/Packet/PacketInExRunEvent.java index 59f8611b..675f3e8a 100644 --- a/SubServers.Sync/velocity/src/net/ME1312/SubServers/Velocity/Network/Packet/PacketInExRunEvent.java +++ b/SubServers.Sync/velocity/src/net/ME1312/SubServers/Velocity/Network/Packet/PacketInExRunEvent.java @@ -17,7 +17,7 @@ import java.util.function.Consumer; * Run Event Packet */ public class PacketInExRunEvent implements PacketObjectIn { - private static HashMap>>> callbacks = new HashMap>>>(); + private static final HashMap>>> callbacks = new HashMap>>>(); /** * New PacketInExRunEvent @@ -128,9 +128,11 @@ public class PacketInExRunEvent implements PacketObjectIn { @SuppressWarnings("unchecked") @Override public void receive(SubDataSender client, ObjectMap data) { - if (callbacks.containsKey(data.getString(0x0000))) { - for (Consumer> callback : PacketInExRunEvent.callbacks.remove(data.getString(0x0000))) { - callback.accept(new ObjectMap<>((Map) data.getObject(0x0001))); + synchronized (callbacks) { + if (callbacks.containsKey(data.getString(0x0000))) { + for (Consumer> callback : PacketInExRunEvent.callbacks.remove(data.getString(0x0000))) { + callback.accept(new ObjectMap<>((Map) data.getObject(0x0001))); + } } } }