mirror of
https://github.com/filoghost/HolographicDisplays.git
synced 2024-10-03 01:57:34 +02: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 ConfigManager configManager;
|
||||||
private InternalHologramManager internalHologramManager;
|
private InternalHologramManager internalHologramManager;
|
||||||
private APIHologramManager apiHologramManager;
|
private APIHologramManager apiHologramManager;
|
||||||
|
private BungeeServerTracker bungeeServerTracker;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCheckedEnable() throws PluginEnableException {
|
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.");
|
throw new PluginEnableException(e, "Couldn't initialize the NMS manager.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bungeeServerTracker = new BungeeServerTracker(this);
|
||||||
configManager = new ConfigManager(getDataFolder().toPath());
|
configManager = new ConfigManager(getDataFolder().toPath());
|
||||||
internalHologramManager = new InternalHologramManager(nmsManager);
|
internalHologramManager = new InternalHologramManager(nmsManager);
|
||||||
apiHologramManager = new APIHologramManager(nmsManager);
|
apiHologramManager = new APIHologramManager(nmsManager);
|
||||||
@ -105,8 +107,8 @@ public class HolographicDisplays extends FCommonsPlugin implements ProtocolPacke
|
|||||||
ProtocolLibHook.setup(this, nmsManager, this, errorCollector);
|
ProtocolLibHook.setup(this, nmsManager, this, errorCollector);
|
||||||
|
|
||||||
// Start repeating tasks.
|
// Start repeating tasks.
|
||||||
PlaceholdersManager.startRefreshTask(this);
|
PlaceholdersManager.startRefreshTask(this, bungeeServerTracker);
|
||||||
Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new BungeeCleanupTask(), 5 * 60 * 20, 5 * 60 * 20);
|
Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new BungeeCleanupTask(bungeeServerTracker), 5 * 60 * 20, 5 * 60 * 20);
|
||||||
Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new WorldPlayerCounterTask(), 0L, 3 * 20);
|
Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new WorldPlayerCounterTask(), 0L, 3 * 20);
|
||||||
|
|
||||||
HologramCommandManager commandManager = new HologramCommandManager(configManager, internalHologramManager, nmsManager);
|
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) {
|
public void load(boolean deferHologramsCreation, ErrorCollector errorCollector) {
|
||||||
PlaceholdersManager.untrackAll();
|
PlaceholdersManager.untrackAll();
|
||||||
internalHologramManager.clearAll();
|
internalHologramManager.clearAll();
|
||||||
BungeeServerTracker.resetTrackedServers();
|
bungeeServerTracker.resetTrackedServers();
|
||||||
|
|
||||||
configManager.reloadCustomPlaceholders(errorCollector);
|
configManager.reloadCustomPlaceholders(errorCollector);
|
||||||
configManager.reloadMainConfig(errorCollector);
|
configManager.reloadMainConfig(errorCollector);
|
||||||
@ -147,7 +149,7 @@ public class HolographicDisplays extends FCommonsPlugin implements ProtocolPacke
|
|||||||
errorCollector.add(e, "failed to load animation files");
|
errorCollector.add(e, "failed to load animation files");
|
||||||
}
|
}
|
||||||
|
|
||||||
BungeeServerTracker.restartTask(Configuration.bungeeRefreshSeconds);
|
bungeeServerTracker.restartTask(Configuration.bungeeRefreshSeconds);
|
||||||
|
|
||||||
if (deferHologramsCreation) {
|
if (deferHologramsCreation) {
|
||||||
// For the initial load: holograms are loaded later, when the worlds are ready
|
// For the initial load: holograms are loaded later, when the worlds are ready
|
||||||
|
@ -26,16 +26,13 @@ public class BungeeChannel implements PluginMessageListener {
|
|||||||
private static final String BUNGEECORD_CHANNEL = "BungeeCord";
|
private static final String BUNGEECORD_CHANNEL = "BungeeCord";
|
||||||
private static final String REDISBUNGEE_CHANNEL = "legacy:redisbungee";
|
private static final String REDISBUNGEE_CHANNEL = "legacy:redisbungee";
|
||||||
|
|
||||||
private static BungeeChannel instance;
|
private final BungeeServerTracker bungeeServerTracker;
|
||||||
|
|
||||||
public static BungeeChannel getInstance() {
|
public BungeeChannel(BungeeServerTracker bungeeServerTracker) {
|
||||||
if (instance == null) {
|
this.bungeeServerTracker = bungeeServerTracker;
|
||||||
instance = new BungeeChannel(HolographicDisplays.getInstance());
|
|
||||||
}
|
|
||||||
return instance;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private BungeeChannel(Plugin plugin) {
|
public void register(Plugin plugin) {
|
||||||
Bukkit.getMessenger().registerOutgoingPluginChannel(plugin, BUNGEECORD_CHANNEL);
|
Bukkit.getMessenger().registerOutgoingPluginChannel(plugin, BUNGEECORD_CHANNEL);
|
||||||
Bukkit.getMessenger().registerIncomingPluginChannel(plugin, BUNGEECORD_CHANNEL, this);
|
Bukkit.getMessenger().registerIncomingPluginChannel(plugin, BUNGEECORD_CHANNEL, this);
|
||||||
|
|
||||||
@ -65,7 +62,7 @@ public class BungeeChannel implements PluginMessageListener {
|
|||||||
if (in.available() > 0) {
|
if (in.available() > 0) {
|
||||||
int online = in.readInt();
|
int online = in.readInt();
|
||||||
|
|
||||||
BungeeServerInfo serverInfo = BungeeServerTracker.getOrCreateServerInfo(server);
|
BungeeServerInfo serverInfo = bungeeServerTracker.getOrCreateServerInfo(server);
|
||||||
serverInfo.setOnlinePlayers(online);
|
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.Configuration;
|
||||||
import me.filoghost.holographicdisplays.disk.ServerAddress;
|
import me.filoghost.holographicdisplays.disk.ServerAddress;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.SocketTimeoutException;
|
import java.net.SocketTimeoutException;
|
||||||
@ -23,26 +24,34 @@ public class BungeeServerTracker {
|
|||||||
|
|
||||||
private static final String PINGER_NOT_ENABLED_ERROR = "[Please enable pinger]";
|
private static final String PINGER_NOT_ENABLED_ERROR = "[Please enable pinger]";
|
||||||
|
|
||||||
private static final Map<String, BungeeServerInfo> trackedServers = new ConcurrentHashMap<>();
|
private final BungeeChannel bungeeChannel;
|
||||||
private static int taskID = -1;
|
private final Map<String, BungeeServerInfo> trackedServers;
|
||||||
|
|
||||||
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();
|
trackedServers.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void track(String server) {
|
public void track(String server) {
|
||||||
if (!trackedServers.containsKey(server)) {
|
if (!trackedServers.containsKey(server)) {
|
||||||
BungeeServerInfo info = new BungeeServerInfo();
|
BungeeServerInfo info = new BungeeServerInfo();
|
||||||
info.setMotd(Configuration.pingerOfflineMotd);
|
info.setMotd(Configuration.pingerOfflineMotd);
|
||||||
trackedServers.put(server, info);
|
trackedServers.put(server, info);
|
||||||
|
|
||||||
if (!Configuration.pingerEnabled) {
|
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);
|
BungeeServerInfo info = trackedServers.get(server);
|
||||||
if (info == null) {
|
if (info == null) {
|
||||||
info = new BungeeServerInfo();
|
info = new BungeeServerInfo();
|
||||||
@ -53,7 +62,7 @@ public class BungeeServerTracker {
|
|||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getPlayersOnline(String server) {
|
public int getPlayersOnline(String server) {
|
||||||
BungeeServerInfo info = trackedServers.get(server);
|
BungeeServerInfo info = trackedServers.get(server);
|
||||||
if (info != null) {
|
if (info != null) {
|
||||||
info.updateLastRequest();
|
info.updateLastRequest();
|
||||||
@ -65,7 +74,7 @@ public class BungeeServerTracker {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getMaxPlayers(String server) {
|
public String getMaxPlayers(String server) {
|
||||||
if (!Configuration.pingerEnabled) {
|
if (!Configuration.pingerEnabled) {
|
||||||
return PINGER_NOT_ENABLED_ERROR;
|
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) {
|
if (!Configuration.pingerEnabled) {
|
||||||
return PINGER_NOT_ENABLED_ERROR;
|
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) {
|
if (!Configuration.pingerEnabled) {
|
||||||
return PINGER_NOT_ENABLED_ERROR;
|
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) {
|
if (!Configuration.pingerEnabled) {
|
||||||
return PINGER_NOT_ENABLED_ERROR;
|
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;
|
return trackedServers;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void restartTask(int refreshSeconds) {
|
public void restartTask(int refreshSeconds) {
|
||||||
if (taskID != -1) {
|
if (taskID != -1) {
|
||||||
Bukkit.getScheduler().cancelTask(taskID);
|
Bukkit.getScheduler().cancelTask(taskID);
|
||||||
}
|
}
|
||||||
@ -143,14 +152,14 @@ public class BungeeServerTracker {
|
|||||||
runAsyncPinger();
|
runAsyncPinger();
|
||||||
} else {
|
} else {
|
||||||
for (String server : trackedServers.keySet()) {
|
for (String server : trackedServers.keySet()) {
|
||||||
BungeeChannel.getInstance().askPlayerCount(server);
|
bungeeChannel.askPlayerCount(server);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}, 1, refreshSeconds * 20L);
|
}, 1, refreshSeconds * 20L);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void runAsyncPinger() {
|
private void runAsyncPinger() {
|
||||||
Bukkit.getScheduler().runTaskAsynchronously(HolographicDisplays.getInstance(), () -> {
|
Bukkit.getScheduler().runTaskAsynchronously(HolographicDisplays.getInstance(), () -> {
|
||||||
for (ServerAddress serverAddress : Configuration.pingerServers) {
|
for (ServerAddress serverAddress : Configuration.pingerServers) {
|
||||||
BungeeServerInfo serverInfo = getOrCreateServerInfo(serverAddress.getName());
|
BungeeServerInfo serverInfo = getOrCreateServerInfo(serverAddress.getName());
|
||||||
|
@ -37,6 +37,8 @@ public class PlaceholdersManager {
|
|||||||
private static final Pattern ANIMATION_PATTERN = makePlaceholderWithArgsPattern("animation");
|
private static final Pattern ANIMATION_PATTERN = makePlaceholderWithArgsPattern("animation");
|
||||||
private static final Pattern WORLD_PATTERN = makePlaceholderWithArgsPattern("world");
|
private static final Pattern WORLD_PATTERN = makePlaceholderWithArgsPattern("world");
|
||||||
|
|
||||||
|
private static BungeeServerTracker bungeeServerTracker;
|
||||||
|
|
||||||
private static Pattern makePlaceholderWithArgsPattern(String prefix) {
|
private static Pattern makePlaceholderWithArgsPattern(String prefix) {
|
||||||
return Pattern.compile("(\\{" + Pattern.quote(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, () -> {
|
Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, () -> {
|
||||||
|
|
||||||
for (Placeholder placeholder : PlaceholdersRegistry.getPlaceholders()) {
|
for (Placeholder placeholder : PlaceholdersRegistry.getPlaceholders()) {
|
||||||
@ -167,7 +171,7 @@ public class PlaceholdersManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final String serverName = extractArgumentFromPlaceholder(matcher);
|
final String serverName = extractArgumentFromPlaceholder(matcher);
|
||||||
BungeeServerTracker.track(serverName); // Track this server.
|
bungeeServerTracker.track(serverName); // Track this server.
|
||||||
|
|
||||||
if (serverName.contains(",")) {
|
if (serverName.contains(",")) {
|
||||||
String[] split = serverName.split(",");
|
String[] split = serverName.split(",");
|
||||||
@ -181,14 +185,14 @@ public class PlaceholdersManager {
|
|||||||
bungeeReplacers.put(matcher.group(), () -> {
|
bungeeReplacers.put(matcher.group(), () -> {
|
||||||
int count = 0;
|
int count = 0;
|
||||||
for (String serverToTrack : serversToTrack) {
|
for (String serverToTrack : serversToTrack) {
|
||||||
count += BungeeServerTracker.getPlayersOnline(serverToTrack);
|
count += bungeeServerTracker.getPlayersOnline(serverToTrack);
|
||||||
}
|
}
|
||||||
return String.valueOf(count);
|
return String.valueOf(count);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
// Normal, single tracked server.
|
// Normal, single tracked server.
|
||||||
bungeeReplacers.put(matcher.group(), () -> {
|
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);
|
final String serverName = extractArgumentFromPlaceholder(matcher);
|
||||||
BungeeServerTracker.track(serverName); // Track this server.
|
bungeeServerTracker.track(serverName); // Track this server.
|
||||||
|
|
||||||
// Add it to tracked servers.
|
// Add it to tracked servers.
|
||||||
bungeeReplacers.put(matcher.group(), () -> {
|
bungeeReplacers.put(matcher.group(), () -> {
|
||||||
return BungeeServerTracker.getMaxPlayers(serverName);
|
return bungeeServerTracker.getMaxPlayers(serverName);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -217,11 +221,11 @@ public class PlaceholdersManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final String serverName = extractArgumentFromPlaceholder(matcher);
|
final String serverName = extractArgumentFromPlaceholder(matcher);
|
||||||
BungeeServerTracker.track(serverName); // Track this server.
|
bungeeServerTracker.track(serverName); // Track this server.
|
||||||
|
|
||||||
// Add it to tracked servers.
|
// Add it to tracked servers.
|
||||||
bungeeReplacers.put(matcher.group(), () -> {
|
bungeeReplacers.put(matcher.group(), () -> {
|
||||||
return BungeeServerTracker.getMotd1(serverName);
|
return bungeeServerTracker.getMotd1(serverName);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -233,11 +237,11 @@ public class PlaceholdersManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final String serverName = extractArgumentFromPlaceholder(matcher);
|
final String serverName = extractArgumentFromPlaceholder(matcher);
|
||||||
BungeeServerTracker.track(serverName); // Track this server.
|
bungeeServerTracker.track(serverName); // Track this server.
|
||||||
|
|
||||||
// Add it to tracked servers.
|
// Add it to tracked servers.
|
||||||
bungeeReplacers.put(matcher.group(), () -> {
|
bungeeReplacers.put(matcher.group(), () -> {
|
||||||
return BungeeServerTracker.getMotd2(serverName);
|
return bungeeServerTracker.getMotd2(serverName);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -249,11 +253,11 @@ public class PlaceholdersManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final String serverName = extractArgumentFromPlaceholder(matcher);
|
final String serverName = extractArgumentFromPlaceholder(matcher);
|
||||||
BungeeServerTracker.track(serverName); // Track this server.
|
bungeeServerTracker.track(serverName); // Track this server.
|
||||||
|
|
||||||
// Add it to tracked servers.
|
// Add it to tracked servers.
|
||||||
bungeeReplacers.put(matcher.group(), () -> {
|
bungeeReplacers.put(matcher.group(), () -> {
|
||||||
return BungeeServerTracker.getOnlineStatus(serverName);
|
return bungeeServerTracker.getOnlineStatus(serverName);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,10 +20,16 @@ public class BungeeCleanupTask implements Runnable {
|
|||||||
|
|
||||||
private static final long MAX_INACTIVITY = TimeUnit.MINUTES.toMillis(10);
|
private static final long MAX_INACTIVITY = TimeUnit.MINUTES.toMillis(10);
|
||||||
|
|
||||||
|
private final BungeeServerTracker bungeeServerTracker;
|
||||||
|
|
||||||
|
public BungeeCleanupTask(BungeeServerTracker bungeeServerTracker) {
|
||||||
|
this.bungeeServerTracker = bungeeServerTracker;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
long now = System.currentTimeMillis();
|
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()) {
|
while (iter.hasNext()) {
|
||||||
Entry<String, BungeeServerInfo> next = iter.next();
|
Entry<String, BungeeServerInfo> next = iter.next();
|
||||||
|
Loading…
Reference in New Issue
Block a user