package me.StevenLawson.BukkitTelnet; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import me.StevenLawson.BukkitTelnet.api.TelnetRequestDataTagsEvent; import org.apache.commons.lang.StringUtils; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerKickEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; import org.json.simple.JSONArray; import org.json.simple.JSONObject; public class PlayerEventListener implements Listener { public PlayerEventListener() { } @EventHandler(priority = EventPriority.MONITOR) public void onPlayerJoin(PlayerJoinEvent event) { triggerPlayerListUpdates(); } @EventHandler(priority = EventPriority.MONITOR) public void onPlayerKick(PlayerKickEvent event) { triggerPlayerListUpdates(); } @EventHandler(priority = EventPriority.MONITOR) public void onPlayerQuit(PlayerQuitEvent event) { triggerPlayerListUpdates(); } private static BukkitTask updateTask = null; public static void triggerPlayerListUpdates() { if (updateTask != null) { updateTask.cancel(); } updateTask = new BukkitRunnable() { @Override public void run() { final SocketListener socketListener = TelnetServer.getInstance().getSocketListener(); if (socketListener != null) { final TelnetRequestDataTagsEvent event = new TelnetRequestDataTagsEvent(); Bukkit.getServer().getPluginManager().callEvent(event); socketListener.triggerPlayerListUpdates(generatePlayerList(event.getDataTags())); } } }.runTaskLater(BukkitTelnet.plugin, 20L * 2L); } @SuppressWarnings("unchecked") private static String generatePlayerList(final Map> dataTags) { final JSONArray players = new JSONArray(); final Iterator>> dataTagsIt = dataTags.entrySet().iterator(); while (dataTagsIt.hasNext()) { final HashMap info = new HashMap(); final Map.Entry> dataTagsEntry = dataTagsIt.next(); final Player player = dataTagsEntry.getKey(); final Map playerTags = dataTagsEntry.getValue(); info.put("name", player.getName()); info.put("ip", player.getAddress().getAddress().getHostAddress()); info.put("displayName", StringUtils.trimToEmpty(player.getDisplayName())); info.put("uuid", player.getUniqueId().toString()); final Iterator> playerTagsIt = playerTags.entrySet().iterator(); while (playerTagsIt.hasNext()) { final Map.Entry playerTagsEntry = playerTagsIt.next(); final Object value = playerTagsEntry.getValue(); info.put(playerTagsEntry.getKey(), value != null ? value.toString() : "null"); } players.add(info); } final JSONObject response = new JSONObject(); response.put("players", players); return response.toJSONString(); } }