diff --git a/buildnumber.properties b/buildnumber.properties index e680e9be..ee3b4a8e 100644 --- a/buildnumber.properties +++ b/buildnumber.properties @@ -1,3 +1,3 @@ #Build Number for ANT. Do not edit! -#Tue Dec 17 17:32:25 CET 2013 -build.number=686 +#Wed Dec 18 14:11:43 CET 2013 +build.number=694 diff --git a/src/me/StevenLawson/TotalFreedomMod/HTTPD/Module_players.java b/src/me/StevenLawson/TotalFreedomMod/HTTPD/Module_players.java new file mode 100644 index 00000000..303a765f --- /dev/null +++ b/src/me/StevenLawson/TotalFreedomMod/HTTPD/Module_players.java @@ -0,0 +1,92 @@ +package me.StevenLawson.TotalFreedomMod.HTTPD; + +import me.StevenLawson.TotalFreedomMod.TFM_SuperadminList; +import me.StevenLawson.TotalFreedomMod.TFM_Util; +import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; + +public class Module_players extends TFM_HTTPD_Module +{ + public Module_players(NanoHTTPD.HTTPSession session) + { + super(session); + } + + @Override + public NanoHTTPD.Response getResponse() + { + final JSONObject response = new JSONObject(); + + final JSONArray players = new JSONArray(); + final JSONArray superadmins = new JSONArray(); + final JSONArray telnetadmins = new JSONArray(); + final JSONArray senioradmins = new JSONArray(); + final JSONArray developers = new JSONArray(); + + // All online players + for (Player player : TotalFreedomMod.server.getOnlinePlayers()) + { + players.add(player.getName()); + } + + // Super admins (non-telnet and non-senior) + for (String superadmin : TFM_SuperadminList.getSuperadminNames()) + { + if (TFM_SuperadminList.getSenioradminNames().contains(superadmin)) + { + continue; + } + + if (TFM_SuperadminList.getTelnetadminNames().contains(superadmin)) + { + continue; + } + + superadmins.add(getName(superadmin)); + } + + // Telnet admins (non-senior) + for (String telnetadmin : TFM_SuperadminList.getTelnetadminNames()) + { + if (TFM_SuperadminList.getSenioradminNames().contains(telnetadmin)) + { + continue; + } + telnetadmins.add(getName(telnetadmin)); + } + + // Senior admins + for (String senioradmin : TFM_SuperadminList.getSenioradminNames()) + { + senioradmins.add(getName(senioradmin)); + } + + // Developers + developers.addAll(TFM_Util.DEVELOPERS); + + response.put("players", players); + response.put("superadmins", superadmins); + response.put("telnetadmins", telnetadmins); + response.put("senioradmins", senioradmins); + response.put("developers", developers); + + return new NanoHTTPD.Response(NanoHTTPD.Response.Status.OK, NanoHTTPD.MIME_JSON, response.toString()); + } + + private String getName(String caseInsensitiveName) + { + final OfflinePlayer player = Bukkit.getOfflinePlayer(caseInsensitiveName); + if (player == null) + { + return caseInsensitiveName; + } + else + { + return player.getName(); + } + } +} diff --git a/src/me/StevenLawson/TotalFreedomMod/HTTPD/NanoHTTPD.java b/src/me/StevenLawson/TotalFreedomMod/HTTPD/NanoHTTPD.java index 8ace0bdc..0f7c4103 100644 --- a/src/me/StevenLawson/TotalFreedomMod/HTTPD/NanoHTTPD.java +++ b/src/me/StevenLawson/TotalFreedomMod/HTTPD/NanoHTTPD.java @@ -62,6 +62,12 @@ public abstract class NanoHTTPD * Common mime type for dynamic content: html */ public static final String MIME_HTML = "text/html"; + // TFM Start + /** + * Common mime type for dynamic content: json + */ + public static final String MIME_JSON = "application/json"; + // TFM End /** * Pseudo-Parameter to use to store the actual query string in the parameters map for later re-processing. */ diff --git a/src/me/StevenLawson/TotalFreedomMod/HTTPD/TFM_HTTPD_Manager.java b/src/me/StevenLawson/TotalFreedomMod/HTTPD/TFM_HTTPD_Manager.java index 0f93100d..944d0932 100644 --- a/src/me/StevenLawson/TotalFreedomMod/HTTPD/TFM_HTTPD_Manager.java +++ b/src/me/StevenLawson/TotalFreedomMod/HTTPD/TFM_HTTPD_Manager.java @@ -117,6 +117,14 @@ public class TFM_HTTPD_Manager { return new Module_permbans(session).getResponse(); } + }), + PLAYERS(new ModuleExecutable(true, "players") + { + @Override + public Response getResponse(HTTPSession session) + { + return new Module_players(session).getResponse(); + } }); // private final ModuleExecutable moduleExecutable; diff --git a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java index 202e2dd4..b532fc8f 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java +++ b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java @@ -536,7 +536,7 @@ public class TFM_PlayerListener implements Listener // Finally, set message event.setMessage(message); - + // Broadcast it to console (since 1.7 doesn't do that anymore) TFM_Log.info(String.format(event.getFormat(), player.getDisplayName(), event.getMessage()), true); diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_SuperadminList.java b/src/me/StevenLawson/TotalFreedomMod/TFM_SuperadminList.java index 5966ec8b..058b6a52 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_SuperadminList.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_SuperadminList.java @@ -21,10 +21,11 @@ import org.bukkit.util.FileUtil; public class TFM_SuperadminList { - private static Map superadminList = new HashMap(); + private static final Map superadminList = new HashMap(); private static List superadminNames = new ArrayList(); + private static List senioradminNames = new ArrayList(); + private static List telnetadminNames = new ArrayList(); private static List superadminIPs = new ArrayList(); - private static List seniorAdminNames = new ArrayList(); private static int cleanThreshold = 24 * 7; // 1 Week in hours private TFM_SuperadminList() @@ -42,6 +43,16 @@ public class TFM_SuperadminList return superadminNames; } + public static List getTelnetadminNames() + { + return telnetadminNames; + } + + public static List getSenioradminNames() + { + return senioradminNames; + } + public static void loadSuperadminList() { try @@ -87,19 +98,19 @@ public class TFM_SuperadminList { superadminNames.clear(); superadminIPs.clear(); - seniorAdminNames.clear(); + senioradminNames.clear(); Iterator> it = superadminList.entrySet().iterator(); while (it.hasNext()) { Entry pair = it.next(); - String admin_name = pair.getKey().toLowerCase(); + String name = pair.getKey().toLowerCase(); TFM_Superadmin superadmin = pair.getValue(); if (superadmin.isActivated()) { - superadminNames.add(admin_name); + superadminNames.add(name); for (String ip : superadmin.getIps()) { @@ -108,19 +119,24 @@ public class TFM_SuperadminList if (superadmin.isSeniorAdmin()) { - seniorAdminNames.add(admin_name); + senioradminNames.add(name); for (String console_alias : superadmin.getConsoleAliases()) { - seniorAdminNames.add(console_alias.toLowerCase()); + senioradminNames.add(console_alias.toLowerCase()); } } + + if (superadmin.isTelnetAdmin()) + { + telnetadminNames.add(name); + } } } superadminNames = TFM_Util.removeDuplicates(superadminNames); superadminIPs = TFM_Util.removeDuplicates(superadminIPs); - seniorAdminNames = TFM_Util.removeDuplicates(seniorAdminNames); + senioradminNames = TFM_Util.removeDuplicates(senioradminNames); TFM_AdminWorld.getInstance().wipeAccessCache(); } @@ -264,7 +280,7 @@ public class TFM_SuperadminList if (!(user instanceof Player)) { - return seniorAdminNames.contains(username); + return senioradminNames.contains(username); } TFM_Superadmin entry = getAdminEntry((Player) user);