mirror of
https://github.com/filoghost/HolographicDisplays.git
synced 2025-02-21 14:31:23 +01:00
Make BungeeServerTracker and BungeeChannel not static
This commit is contained in:
parent
4d3ccd1a2e
commit
f474684693
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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());
|
||||
|
@ -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);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
|
Loading…
Reference in New Issue
Block a user