package dk.thoerup.bukkit.hoeruputils.web; import java.io.File; import java.text.SimpleDateFormat; 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; import org.bukkit.plugin.Plugin; import org.bukkit.configuration.Configuration; /*import org.kokakiwi.apicraft.events.ApiEvent; import org.kokakiwi.apicraft.events.ApiListener;*/ import de.codeinfection.quickwango.ApiBukkit.ApiBukkit; import de.codeinfection.quickwango.ApiBukkit.ApiRequestAction; import de.codeinfection.quickwango.ApiBukkit.ApiRequestException; import de.codeinfection.quickwango.ApiBukkit.Net.Parameters; import de.codeinfection.quickwango.ApiBukkit.ApiRequestController; public class StatusListener extends ApiRequestController { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Server server; Configuration loginConfig; Configuration homeConfig; long cachedTime = 0; String cachedXml = ""; public StatusListener(Plugin plugin, Server server, Configuration loginConfig, Configuration homeConfig) { super(plugin,true); this.server = server; this.loginConfig = loginConfig; this.homeConfig = homeConfig; } String formatTime(String input) { return formatTime( Long.parseLong(input) ); } String formatTime(long input) { Date d = new Date( input ); return format.format(d ); } @Override public Object defaultAction(String action, Parameters params, Server server) throws ApiRequestException { /* 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);*/ return xml; } private String buildXML() { StringBuilder sb = new StringBuilder(); sb.append(" \n"); sb.append(""); sb.append("" + server.getVersion() + "\n"); long mb = 1024*1024; Runtime rt = Runtime.getRuntime(); sb.append("\n"); sb.append("" + rt.freeMemory()/mb + "\n"); sb.append("" + rt.totalMemory()/mb + "\n"); sb.append("" + rt.maxMemory()/mb + "\n"); sb.append("\n"); long now = System.currentTimeMillis(); sb.append("\n"); OfflinePlayer playerList[] = server.getOfflinePlayers(); for (OfflinePlayer player : playerList) { long first = player.getFirstPlayed(); long last = player.getLastPlayed(); sb.append("\n"); sb.append("" + player.getName() + "\n" ); sb.append("" + formatTime(first) + "\n"); sb.append("" + formatTime(last) + "\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(""); return sb.toString(); } }