Make BungeeServerTracker and BungeeChannel not static

This commit is contained in:
filoghost 2021-03-15 19:48:12 +01:00
parent 4d3ccd1a2e
commit f474684693
5 changed files with 61 additions and 43 deletions

View File

@ -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

View File

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

View File

@ -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<String, BungeeServerInfo> trackedServers;
private static final Map<String, BungeeServerInfo> 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<String, BungeeServerInfo> getTrackedServers() {
public Map<String, BungeeServerInfo> 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());

View File

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

View File

@ -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<Entry<String, BungeeServerInfo>> iter = BungeeServerTracker.getTrackedServers().entrySet().iterator();
Iterator<Entry<String, BungeeServerInfo>> iter = bungeeServerTracker.getTrackedServers().entrySet().iterator();
while (iter.hasNext()) {
Entry<String, BungeeServerInfo> next = iter.next();