Skip to content

Commit

Permalink
Update a server's placeholders upon a state change
Browse files Browse the repository at this point in the history
  • Loading branch information
ME1312 committed Jul 5, 2020
1 parent 69fad52 commit 5ad6b49
Showing 1 changed file with 47 additions and 23 deletions.
Expand Up @@ -42,6 +42,8 @@ public PlaceholderImpl(SubPlugin plugin) {
if (plugin.config.get().getMap("Settings").getBoolean("PlaceholderAPI-Ready", false)) init();
}



@Override
public String getIdentifier() {
return "subservers";
Expand All @@ -66,18 +68,20 @@ private void init() {
if (!init) {
init = true;
Bukkit.getPluginManager().registerEvents(cache.events, plugin);
Bukkit.getScheduler().runTaskLater(plugin, this::start, 120L);
Bukkit.getScheduler().runTaskLater(plugin, () -> {
if (task == null) {
int interval = plugin.config.get().getMap("Settings").getInt("PlaceholderAPI-Cache-Interval", 300);
int start = interval - new Random().nextInt((interval / 3) + 1); // Don't have all servers request at the same time
task = Bukkit.getScheduler().runTaskTimer(plugin, cache::refresh, 20L * start, 20L * interval);
cache.refresh();
}
}, 120L);
}
}

@Override
public void start() {
if (task == null) {
int interval = plugin.config.get().getMap("Settings").getInt("PlaceholderAPI-Cache-Interval", 300);
int start = interval - new Random().nextInt((interval / 3) + 1); // Don't have all servers request at the same time
task = Bukkit.getScheduler().runTaskTimer(plugin, cache::refresh, 20L * start, 20L * interval);
cache.refresh();
}
// do nothing
}

@Override
Expand Down Expand Up @@ -356,11 +360,11 @@ private String run(String method, String... args) {
}
}

private static final class Cache {
private static HashMap<String, Proxy> proxies = new HashMap<String, Proxy>();
private static HashMap<String, Host> hosts = new HashMap<String, Host>();
private static HashMap<String, Server> servers = new HashMap<String, Server>();
private static Proxy master = null;
private final class Cache {
private HashMap<String, Proxy> proxies = new HashMap<String, Proxy>();
private HashMap<String, Host> hosts = new HashMap<String, Host>();
private HashMap<String, Server> servers = new HashMap<String, Server>();
private Proxy master = null;
private Listener events = new Events();

private void reset() {
Expand All @@ -373,52 +377,71 @@ private void reset() {
private void refresh() {
if (SubAPI.getInstance().getSubDataNetwork()[0] != null) {
SubAPI.getInstance().getProxies(proxies -> {
Cache.proxies = new HashMap<>(proxies);
this.proxies = new HashMap<>(proxies);
});
SubAPI.getInstance().getMasterProxy(master -> {
Cache.master = master;
this.master = master;
});
SubAPI.getInstance().getHosts(hosts -> {
Cache.hosts = new HashMap<>(hosts);
this.hosts = new HashMap<>(hosts);
});
SubAPI.getInstance().getServers(servers -> {
Cache.servers = new HashMap<>(servers);
this.servers = new HashMap<>(servers);
});
}
}

private final class Events implements Listener {
private HashMap<String, BukkitTask> edits = new HashMap<String, BukkitTask>();

@EventHandler
public void add(SubAddProxyEvent e) {
SubAPI.getInstance().getProxy(e.getProxy(), proxy -> {
proxies.put(proxy.getName().toLowerCase(), proxy);
if (proxy != null) proxies.put(proxy.getName().toLowerCase(), proxy);
});
}

@EventHandler
public void add(SubAddHostEvent e) {
SubAPI.getInstance().getHost(e.getHost(), host -> {
hosts.put(host.getName().toLowerCase(), host);
if (host != null) hosts.put(host.getName().toLowerCase(), host);
});
}

@EventHandler
public void add(SubAddServerEvent e) {
SubAPI.getInstance().getServer(e.getServer(), server -> {
servers.put(server.getName().toLowerCase(), server);
add(e.getServer());
}

public void add(String s) {
SubAPI.getInstance().getServer(s, server -> {
if (server != null) servers.put(server.getName().toLowerCase(), server);
});
}

@EventHandler
public void edit(SubEditServerEvent e) {
String s = e.getServer().toLowerCase();
if (edits.keySet().contains(s)) edits.get(s).cancel();
edits.put(s, Bukkit.getScheduler().runTaskLater(plugin, () -> add(s), 120L));
}

@EventHandler
public void start(SubStartEvent e) {
Server server = getServer(e.getServer());
if (server != null) Util.isException(() -> Util.<ObjectMap<String>>reflect(Server.class.getDeclaredField("raw"), server).set("running", true));
if (server != null) {
Util.isException(() -> Util.<ObjectMap<String>>reflect(Server.class.getDeclaredField("raw"), server).set("running", true));
add(e.getServer());
}
}

@EventHandler
public void started(SubStartedEvent e) {
Server server = getServer(e.getServer());
if (server != null) Util.isException(() -> Util.<ObjectMap<String>>reflect(Server.class.getDeclaredField("raw"), server).set("online", true));
if (server != null) {
Util.isException(() -> Util.<ObjectMap<String>>reflect(Server.class.getDeclaredField("raw"), server).set("online", true));
add(e.getServer());
}
}

@EventHandler
Expand All @@ -428,6 +451,7 @@ public void stopped(SubStoppedEvent e) {
ObjectMap<String> raw = Util.reflect(Server.class.getDeclaredField("raw"), server);
raw.set("online", false);
raw.set("running", false);
add(e.getServer());
});
}
}
Expand Down Expand Up @@ -467,7 +491,7 @@ public Server getServer(String name) {

public Map<String, SubServer> getSubServers() {
TreeMap<String, SubServer> servers = new TreeMap<String, SubServer>();
for (Map.Entry<String, Server> server : Cache.servers.entrySet()) {
for (Map.Entry<String, Server> server : this.servers.entrySet()) {
if (server.getValue() instanceof SubServer) servers.put(server.getKey(), (SubServer) server.getValue());
}
return servers;
Expand Down

0 comments on commit 5ad6b49

Please sign in to comment.