diff --git a/pom.xml b/pom.xml index d820ae1..72ed4ef 100644 --- a/pom.xml +++ b/pom.xml @@ -35,7 +35,7 @@ me.clip placeholderapi - 2.10.6 + 2.11.6 provided diff --git a/src/main/java/com/extendedclip/papi/bungeeexpansion/BungeeExpansion.java b/src/main/java/com/extendedclip/papi/bungeeexpansion/BungeeExpansion.java index e53cb4e..76e24ce 100644 --- a/src/main/java/com/extendedclip/papi/bungeeexpansion/BungeeExpansion.java +++ b/src/main/java/com/extendedclip/papi/bungeeexpansion/BungeeExpansion.java @@ -10,6 +10,7 @@ import me.clip.placeholderapi.expansion.Taskable; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; +import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; import org.bukkit.plugin.messaging.PluginMessageListener; import org.bukkit.scheduler.BukkitTask; @@ -33,10 +34,12 @@ public final class BungeeExpansion extends PlaceholderExpansion implements Plugi private static final Splitter SPLITTER = Splitter.on(",").trimResults(); - - private final Map counts = new HashMap<>(); + private final Map counts = new HashMap<>(); private final AtomicReference cached = new AtomicReference<>(); + private String online = "Online"; + private String offline = "Offline"; + private static Field inputField; static { @@ -60,12 +63,16 @@ public String getAuthor() { @Override public String getVersion() { - return "2.3"; + return "2.4"; } @Override public Map getDefaults() { - return Collections.singletonMap(CONFIG_INTERVAL, 30); + Map defaults = new HashMap<>(); + defaults.put(CONFIG_INTERVAL, 30); + defaults.put("online", "Online"); + defaults.put("offline", "Offline"); + return defaults; } @@ -73,6 +80,11 @@ public Map getDefaults() { public String onRequest(final OfflinePlayer player, String identifier) { final int value; + if (identifier.startsWith("online_")) { + final String server = identifier.substring(7).toLowerCase(); + return counts.containsKey(server) ? online : offline; + } + switch (identifier.toLowerCase()) { case "all": case "total": @@ -88,12 +100,14 @@ public String onRequest(final OfflinePlayer player, String identifier) { @Override public void start() { + this.online = getString("online", "Online"); + this.offline = getString("offline", "Offline"); + final BukkitTask task = Bukkit.getScheduler().runTaskTimer(getPlaceholderAPI(), () -> { if (counts.isEmpty()) { sendServersChannelMessage(); - } - else { + } else { counts.keySet().forEach(this::sendPlayersChannelMessage); } @@ -135,13 +149,13 @@ public void onPluginMessageReceived(final String channel, final Player player, f try { DataInputStream stream = (DataInputStream) inputField.get(in); switch (in.readUTF()) { - case PLAYERS_CHANNEL: - if (stream.available() == 0) return; // how ? - final String server = in.readUTF(); - if (stream.available() == 0) { // how ? x2 - getPlaceholderAPI().getLogger().log(Level.SEVERE, String.format("[%s] Could not get the player count from server %s.", getName(), server)); - counts.put(server.toLowerCase(), 0); - } else counts.put(server.toLowerCase(), in.readInt()); + case PLAYERS_CHANNEL: + if (stream.available() == 0) return; // how ? + final String server = in.readUTF(); + if (stream.available() == 0) { // how ? x2 + getPlaceholderAPI().getLogger().log(Level.SEVERE, String.format("[%s] Could not get the player count from server %s.", getName(), server)); + counts.put(server.toLowerCase(), 0); + } else counts.put(server.toLowerCase(), in.readInt()); break; case SERVERS_CHANNEL: SPLITTER.split(in.readUTF()).forEach(serverName -> counts.putIfAbsent(serverName.toLowerCase(), 0)); @@ -154,7 +168,8 @@ public void onPluginMessageReceived(final String channel, final Player player, f private void sendServersChannelMessage() { - sendMessage(SERVERS_CHANNEL, out -> { }); + sendMessage(SERVERS_CHANNEL, out -> { + }); } private void sendPlayersChannelMessage(final String serverName) {