--- miscJava/bukkit-minecraft-plugins/HoerupUtils/src/dk/thoerup/bukkit/hoeruputils/web/StatusListener.java 2011/12/21 19:19:02 1667 +++ miscJava/bukkit-minecraft-plugins/HoerupUtils/src/main/java/dk/thoerup/bukkit/hoeruputils/web/StatusListener.java 2012/01/27 12:21:27 1684 @@ -5,6 +5,7 @@ import java.util.Date; import java.util.Set; import java.util.Map; +import org.bukkit.Location; import org.bukkit.Server; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; @@ -21,10 +22,15 @@ Server server; Configuration loginConfig; + Configuration homeConfig; - public StatusListener(Server server, Configuration loginConfig) { + long cachedTime = 0; + String cachedXml = ""; + + public StatusListener(Server server, Configuration loginConfig, Configuration homeConfig) { this.server = server; this.loginConfig = loginConfig; + this.homeConfig = homeConfig; } String formatTime(String input) { @@ -40,6 +46,27 @@ if(!event.path[0].equalsIgnoreCase("webstatus")) { return; } + + String xml; + + synchronized(this) { //is this necessary ? + long now = System.currentTimeMillis(); + if ( (now-cachedTime) > 5000) { + xml = buildXML(); + cachedXml = xml; + cachedTime = now; + } else { + xml = cachedXml; + } + } + + + event.setResponse(xml); + event.setActionTaken(true); + } + + private String buildXML() { + StringBuilder sb = new StringBuilder(); sb.append(" \n"); @@ -57,46 +84,69 @@ long now = System.currentTimeMillis(); - sb.append("\n"); - for (Player p : server.getOnlinePlayers()) { - long login = loginConfig.getLong( p.getName() + ".logintime", -1); - long elapsed = (now-login) / 1000; - - sb.append("\n"); - sb.append("" + p.getName() + "\n" ); - sb.append("" + elapsed + "\n" ); - sb.append("\n"); - } - sb.append(""); - - sb.append("\n"); + sb.append("\n"); OfflinePlayer playerList[] = server.getOfflinePlayers(); for (OfflinePlayer player : playerList) { long first = player.getFirstPlayed(); long last = player.getLastPlayed(); - sb.append("\n"); + + sb.append("\n"); sb.append("" + player.getName() + "\n" ); + sb.append("" + formatTime(first) + "\n"); sb.append("" + formatTime(last) + "\n"); - sb.append("\n"); - } - sb.append("\n"); + sb.append("" + (player.isOnline() ? 1 : 0 ) + "\n" ); + + if (player.isOnline() ) { + long login = loginConfig.getLong( player.getName() + ".logintime", -1); + long elapsed = (login>-1 ? (now-login) / 1000 : -1); + + Player p2 = server.getPlayer( player.getName() ); + Location loc = p2.getLocation(); + + sb.append("" + elapsed + "\n" ); + sb.append("" + p2.getAddress().getAddress().toString().replace("/","") + "\n" ); + sb.append(""); + sb.append("" + loc.getBlockX() + ""); + sb.append("" + loc.getBlockY() + ""); + sb.append("" + loc.getBlockZ() + ""); + sb.append("" + loc.getWorld().getName() + ""); + sb.append(""); + } + + String homeWorld = homeConfig.getString( player.getName() + ".world"); + if (homeWorld != null) { + sb.append(""); + sb.append("" + homeWorld + "\n"); + sb.append("" + (int)homeConfig.getDouble(player.getName() + ".x") + "\n"); + sb.append("" + (int)homeConfig.getDouble(player.getName() + ".y") + "\n"); + sb.append("" + (int)homeConfig.getDouble(player.getName() + ".z") + "\n"); + sb.append(""); + + } + + + sb.append("\n"); + } + sb.append("\n"); sb.append("\n"); for (Plugin plugin : server.getPluginManager().getPlugins()) { + sb.append("\n"); sb.append("" + plugin.getDescription().getName() + "\n"); sb.append("" + plugin.getDescription().getVersion() + "\n"); + sb.append("" + (plugin.getDescription().getWebsite() != null ? plugin.getDescription().getWebsite() : "") + "\n"); sb.append("\n"); } sb.append("\n"); sb.append(""); - event.setResponse(sb.toString()); - event.setActionTaken(true); + + return sb.toString(); }