From f474684693fba2a70face19fb155f040ce4a7265 Mon Sep 17 00:00:00 2001 From: filoghost Date: Mon, 15 Mar 2021 19:48:12 +0100 Subject: [PATCH] Make BungeeServerTracker and BungeeChannel not static --- .../HolographicDisplays.java | 10 +++-- .../bridge/bungeecord/BungeeChannel.java | 17 ++++---- .../bungeecord/BungeeServerTracker.java | 41 +++++++++++-------- .../placeholder/PlaceholdersManager.java | 28 +++++++------ .../task/BungeeCleanupTask.java | 8 +++- 5 files changed, 61 insertions(+), 43 deletions(-) diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/HolographicDisplays.java b/plugin/src/main/java/me/filoghost/holographicdisplays/HolographicDisplays.java index 9c267e05..4a2d7fdf 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/HolographicDisplays.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/HolographicDisplays.java @@ -46,6 +46,7 @@ public class HolographicDisplays extends FCommonsPlugin implements ProtocolPacke private ConfigManager configManager; private InternalHologramManager internalHologramManager; private APIHologramManager apiHologramManager; + private BungeeServerTracker bungeeServerTracker; @Override public void onCheckedEnable() throws PluginEnableException { @@ -87,6 +88,7 @@ public class HolographicDisplays extends FCommonsPlugin implements ProtocolPacke throw new PluginEnableException(e, "Couldn't initialize the NMS manager."); } + bungeeServerTracker = new BungeeServerTracker(this); configManager = new ConfigManager(getDataFolder().toPath()); internalHologramManager = new InternalHologramManager(nmsManager); apiHologramManager = new APIHologramManager(nmsManager); @@ -105,8 +107,8 @@ public class HolographicDisplays extends FCommonsPlugin implements ProtocolPacke ProtocolLibHook.setup(this, nmsManager, this, errorCollector); // Start repeating tasks. - PlaceholdersManager.startRefreshTask(this); - Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new BungeeCleanupTask(), 5 * 60 * 20, 5 * 60 * 20); + PlaceholdersManager.startRefreshTask(this, bungeeServerTracker); + Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new BungeeCleanupTask(bungeeServerTracker), 5 * 60 * 20, 5 * 60 * 20); Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new WorldPlayerCounterTask(), 0L, 3 * 20); HologramCommandManager commandManager = new HologramCommandManager(configManager, internalHologramManager, nmsManager); @@ -136,7 +138,7 @@ public class HolographicDisplays extends FCommonsPlugin implements ProtocolPacke public void load(boolean deferHologramsCreation, ErrorCollector errorCollector) { PlaceholdersManager.untrackAll(); internalHologramManager.clearAll(); - BungeeServerTracker.resetTrackedServers(); + bungeeServerTracker.resetTrackedServers(); configManager.reloadCustomPlaceholders(errorCollector); configManager.reloadMainConfig(errorCollector); @@ -147,7 +149,7 @@ public class HolographicDisplays extends FCommonsPlugin implements ProtocolPacke errorCollector.add(e, "failed to load animation files"); } - BungeeServerTracker.restartTask(Configuration.bungeeRefreshSeconds); + bungeeServerTracker.restartTask(Configuration.bungeeRefreshSeconds); if (deferHologramsCreation) { // For the initial load: holograms are loaded later, when the worlds are ready diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/bridge/bungeecord/BungeeChannel.java b/plugin/src/main/java/me/filoghost/holographicdisplays/bridge/bungeecord/BungeeChannel.java index bd9196f0..3f3172bc 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/bridge/bungeecord/BungeeChannel.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/bridge/bungeecord/BungeeChannel.java @@ -25,17 +25,14 @@ public class BungeeChannel implements PluginMessageListener { private static final String BUNGEECORD_CHANNEL = "BungeeCord"; private static final String REDISBUNGEE_CHANNEL = "legacy:redisbungee"; + + private final BungeeServerTracker bungeeServerTracker; - private static BungeeChannel instance; - - public static BungeeChannel getInstance() { - if (instance == null) { - instance = new BungeeChannel(HolographicDisplays.getInstance()); - } - return instance; + public BungeeChannel(BungeeServerTracker bungeeServerTracker) { + this.bungeeServerTracker = bungeeServerTracker; } - - private BungeeChannel(Plugin plugin) { + + public void register(Plugin plugin) { Bukkit.getMessenger().registerOutgoingPluginChannel(plugin, BUNGEECORD_CHANNEL); Bukkit.getMessenger().registerIncomingPluginChannel(plugin, BUNGEECORD_CHANNEL, this); @@ -65,7 +62,7 @@ public class BungeeChannel implements PluginMessageListener { if (in.available() > 0) { int online = in.readInt(); - BungeeServerInfo serverInfo = BungeeServerTracker.getOrCreateServerInfo(server); + BungeeServerInfo serverInfo = bungeeServerTracker.getOrCreateServerInfo(server); serverInfo.setOnlinePlayers(online); } } diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/bridge/bungeecord/BungeeServerTracker.java b/plugin/src/main/java/me/filoghost/holographicdisplays/bridge/bungeecord/BungeeServerTracker.java index 6cc81204..767db7c4 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/bridge/bungeecord/BungeeServerTracker.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/bridge/bungeecord/BungeeServerTracker.java @@ -12,6 +12,7 @@ import me.filoghost.holographicdisplays.bridge.bungeecord.serverpinger.ServerPin import me.filoghost.holographicdisplays.disk.Configuration; import me.filoghost.holographicdisplays.disk.ServerAddress; import org.bukkit.Bukkit; +import org.bukkit.plugin.Plugin; import java.io.IOException; import java.net.SocketTimeoutException; @@ -22,27 +23,35 @@ import java.util.concurrent.ConcurrentHashMap; public class BungeeServerTracker { private static final String PINGER_NOT_ENABLED_ERROR = "[Please enable pinger]"; + + private final BungeeChannel bungeeChannel; + private final Map trackedServers; - private static final Map trackedServers = new ConcurrentHashMap<>(); - private static int taskID = -1; - - public static void resetTrackedServers() { + private int taskID = -1; + + public BungeeServerTracker(Plugin plugin) { + bungeeChannel = new BungeeChannel(this); + bungeeChannel.register(plugin); + trackedServers = new ConcurrentHashMap<>(); + } + + public void resetTrackedServers() { trackedServers.clear(); } - public static void track(String server) { + public void track(String server) { if (!trackedServers.containsKey(server)) { BungeeServerInfo info = new BungeeServerInfo(); info.setMotd(Configuration.pingerOfflineMotd); trackedServers.put(server, info); if (!Configuration.pingerEnabled) { - BungeeChannel.getInstance().askPlayerCount(server); + bungeeChannel.askPlayerCount(server); } } } - protected static BungeeServerInfo getOrCreateServerInfo(String server) { + protected BungeeServerInfo getOrCreateServerInfo(String server) { BungeeServerInfo info = trackedServers.get(server); if (info == null) { info = new BungeeServerInfo(); @@ -53,7 +62,7 @@ public class BungeeServerTracker { return info; } - public static int getPlayersOnline(String server) { + public int getPlayersOnline(String server) { BungeeServerInfo info = trackedServers.get(server); if (info != null) { info.updateLastRequest(); @@ -65,7 +74,7 @@ public class BungeeServerTracker { } } - public static String getMaxPlayers(String server) { + public String getMaxPlayers(String server) { if (!Configuration.pingerEnabled) { return PINGER_NOT_ENABLED_ERROR; } @@ -81,7 +90,7 @@ public class BungeeServerTracker { } } - public static String getMotd1(String server) { + public String getMotd1(String server) { if (!Configuration.pingerEnabled) { return PINGER_NOT_ENABLED_ERROR; } @@ -97,7 +106,7 @@ public class BungeeServerTracker { } } - public static String getMotd2(String server) { + public String getMotd2(String server) { if (!Configuration.pingerEnabled) { return PINGER_NOT_ENABLED_ERROR; } @@ -113,7 +122,7 @@ public class BungeeServerTracker { } } - public static String getOnlineStatus(String server) { + public String getOnlineStatus(String server) { if (!Configuration.pingerEnabled) { return PINGER_NOT_ENABLED_ERROR; } @@ -129,11 +138,11 @@ public class BungeeServerTracker { } } - public static Map getTrackedServers() { + public Map getTrackedServers() { return trackedServers; } - public static void restartTask(int refreshSeconds) { + public void restartTask(int refreshSeconds) { if (taskID != -1) { Bukkit.getScheduler().cancelTask(taskID); } @@ -143,14 +152,14 @@ public class BungeeServerTracker { runAsyncPinger(); } else { for (String server : trackedServers.keySet()) { - BungeeChannel.getInstance().askPlayerCount(server); + bungeeChannel.askPlayerCount(server); } } }, 1, refreshSeconds * 20L); } - private static void runAsyncPinger() { + private void runAsyncPinger() { Bukkit.getScheduler().runTaskAsynchronously(HolographicDisplays.getInstance(), () -> { for (ServerAddress serverAddress : Configuration.pingerServers) { BungeeServerInfo serverInfo = getOrCreateServerInfo(serverAddress.getName()); diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/placeholder/PlaceholdersManager.java b/plugin/src/main/java/me/filoghost/holographicdisplays/placeholder/PlaceholdersManager.java index 63667eaf..628167e9 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/placeholder/PlaceholdersManager.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/placeholder/PlaceholdersManager.java @@ -37,6 +37,8 @@ public class PlaceholdersManager { private static final Pattern ANIMATION_PATTERN = makePlaceholderWithArgsPattern("animation"); private static final Pattern WORLD_PATTERN = makePlaceholderWithArgsPattern("world"); + private static BungeeServerTracker bungeeServerTracker; + private static Pattern makePlaceholderWithArgsPattern(String prefix) { return Pattern.compile("(\\{" + Pattern.quote(prefix) + ":)(.+?)(\\})"); } @@ -46,7 +48,9 @@ public class PlaceholdersManager { } - public static void startRefreshTask(Plugin plugin) { + public static void startRefreshTask(Plugin plugin, BungeeServerTracker bungeeServerTracker) { + PlaceholdersManager.bungeeServerTracker = bungeeServerTracker; + Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, () -> { for (Placeholder placeholder : PlaceholdersRegistry.getPlaceholders()) { @@ -167,7 +171,7 @@ public class PlaceholdersManager { } final String serverName = extractArgumentFromPlaceholder(matcher); - BungeeServerTracker.track(serverName); // Track this server. + bungeeServerTracker.track(serverName); // Track this server. if (serverName.contains(",")) { String[] split = serverName.split(","); @@ -181,14 +185,14 @@ public class PlaceholdersManager { bungeeReplacers.put(matcher.group(), () -> { int count = 0; for (String serverToTrack : serversToTrack) { - count += BungeeServerTracker.getPlayersOnline(serverToTrack); + count += bungeeServerTracker.getPlayersOnline(serverToTrack); } return String.valueOf(count); }); } else { // Normal, single tracked server. bungeeReplacers.put(matcher.group(), () -> { - return String.valueOf(BungeeServerTracker.getPlayersOnline(serverName)); + return String.valueOf(bungeeServerTracker.getPlayersOnline(serverName)); }); } } @@ -201,11 +205,11 @@ public class PlaceholdersManager { } final String serverName = extractArgumentFromPlaceholder(matcher); - BungeeServerTracker.track(serverName); // Track this server. + bungeeServerTracker.track(serverName); // Track this server. // Add it to tracked servers. bungeeReplacers.put(matcher.group(), () -> { - return BungeeServerTracker.getMaxPlayers(serverName); + return bungeeServerTracker.getMaxPlayers(serverName); }); } @@ -217,11 +221,11 @@ public class PlaceholdersManager { } final String serverName = extractArgumentFromPlaceholder(matcher); - BungeeServerTracker.track(serverName); // Track this server. + bungeeServerTracker.track(serverName); // Track this server. // Add it to tracked servers. bungeeReplacers.put(matcher.group(), () -> { - return BungeeServerTracker.getMotd1(serverName); + return bungeeServerTracker.getMotd1(serverName); }); } @@ -233,11 +237,11 @@ public class PlaceholdersManager { } final String serverName = extractArgumentFromPlaceholder(matcher); - BungeeServerTracker.track(serverName); // Track this server. + bungeeServerTracker.track(serverName); // Track this server. // Add it to tracked servers. bungeeReplacers.put(matcher.group(), () -> { - return BungeeServerTracker.getMotd2(serverName); + return bungeeServerTracker.getMotd2(serverName); }); } @@ -249,11 +253,11 @@ public class PlaceholdersManager { } final String serverName = extractArgumentFromPlaceholder(matcher); - BungeeServerTracker.track(serverName); // Track this server. + bungeeServerTracker.track(serverName); // Track this server. // Add it to tracked servers. bungeeReplacers.put(matcher.group(), () -> { - return BungeeServerTracker.getOnlineStatus(serverName); + return bungeeServerTracker.getOnlineStatus(serverName); }); } diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/task/BungeeCleanupTask.java b/plugin/src/main/java/me/filoghost/holographicdisplays/task/BungeeCleanupTask.java index 813f1579..dc8783e6 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/task/BungeeCleanupTask.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/task/BungeeCleanupTask.java @@ -19,11 +19,17 @@ import java.util.concurrent.TimeUnit; public class BungeeCleanupTask implements Runnable { private static final long MAX_INACTIVITY = TimeUnit.MINUTES.toMillis(10); + + private final BungeeServerTracker bungeeServerTracker; + + public BungeeCleanupTask(BungeeServerTracker bungeeServerTracker) { + this.bungeeServerTracker = bungeeServerTracker; + } @Override public void run() { long now = System.currentTimeMillis(); - Iterator> iter = BungeeServerTracker.getTrackedServers().entrySet().iterator(); + Iterator> iter = bungeeServerTracker.getTrackedServers().entrySet().iterator(); while (iter.hasNext()) { Entry next = iter.next();