diff --git a/Factions.jar b/Factions.jar index 742546d..c1a3216 100644 Binary files a/Factions.jar and b/Factions.jar differ diff --git a/pom.xml b/pom.xml index ab93bd6..28160bb 100644 --- a/pom.xml +++ b/pom.xml @@ -25,6 +25,15 @@ + + org.apache.maven.plugins + maven-compiler-plugin + 2.0.2 + + 1.6 + 1.6 + + maven-assembly-plugin @@ -51,22 +60,40 @@ + + + + + + + bukkit-repo + http://repo.bukkit.org/content/repositories/releases/ + + + + + + + dynmap-repo + http://repo.mikeprimm.com/ + + org.dynmap dynmap-api - [0.70,) + 1.0 org.bukkit bukkit - [1.3.1-R1.0,1.7) + 1.4.5-R1.0 com.massivecraft Factions - 1.7.7 + 1.8.0 system ${project.basedir}/Factions.jar diff --git a/src/main/java/org/dynmap/factions/MetricsLite.java b/src/main/java/org/dynmap/factions/MetricsLite.java index 4db164f..7c0a090 100644 --- a/src/main/java/org/dynmap/factions/MetricsLite.java +++ b/src/main/java/org/dynmap/factions/MetricsLite.java @@ -26,13 +26,14 @@ * either expressed or implied, of anybody else. */ -package org.dynmap.factions; +package org.mcstats; import org.bukkit.Bukkit; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginDescriptionFile; +import org.bukkit.scheduler.BukkitTask; import java.io.BufferedReader; import java.io.File; @@ -52,7 +53,7 @@ public class MetricsLite { /** * The current revision number */ - private final static int REVISION = 5; + private final static int REVISION = 6; /** * The base url of the metrics domain @@ -89,6 +90,11 @@ public class MetricsLite { */ private final String guid; + /** + * Debug mode + */ + private final boolean debug; + /** * Lock for synchronization */ @@ -97,7 +103,7 @@ public class MetricsLite { /** * Id of the scheduled task */ - private volatile int taskId = -1; + private volatile BukkitTask task = null; public MetricsLite(Plugin plugin) throws IOException { if (plugin == null) { @@ -113,6 +119,7 @@ public class MetricsLite { // add some defaults configuration.addDefault("opt-out", false); configuration.addDefault("guid", UUID.randomUUID().toString()); + configuration.addDefault("debug", false); // Do we need to create the file? if (configuration.get("guid", null) == null) { @@ -122,6 +129,7 @@ public class MetricsLite { // Load the guid then guid = configuration.getString("guid"); + debug = configuration.getBoolean("debug", false); } /** @@ -139,12 +147,12 @@ public class MetricsLite { } // Is metrics already running? - if (taskId >= 0) { + if (task != null) { return true; } // Begin hitting the server with glorious data - taskId = plugin.getServer().getScheduler().scheduleAsyncRepeatingTask(plugin, new Runnable() { + task = plugin.getServer().getScheduler().runTaskTimerAsynchronously(plugin, new Runnable() { private boolean firstPost = true; @@ -153,9 +161,9 @@ public class MetricsLite { // This has to be synchronized or it can collide with the disable method. synchronized (optOutLock) { // Disable Task, if it is running and the server owner decided to opt-out - if (isOptOut() && taskId > 0) { - plugin.getServer().getScheduler().cancelTask(taskId); - taskId = -1; + if (isOptOut() && task != null) { + task.cancel(); + task = null; } } @@ -168,7 +176,9 @@ public class MetricsLite { // Each post thereafter will be a ping firstPost = false; } catch (IOException e) { - //Bukkit.getLogger().log(Level.INFO, "[Metrics] " + e.getMessage()); + if (debug) { + Bukkit.getLogger().log(Level.INFO, "[Metrics] " + e.getMessage()); + } } } }, 0, PING_INTERVAL * 1200); @@ -188,10 +198,14 @@ public class MetricsLite { // Reload the metrics file configuration.load(getConfigFile()); } catch (IOException ex) { - Bukkit.getLogger().log(Level.INFO, "[Metrics] " + ex.getMessage()); + if (debug) { + Bukkit.getLogger().log(Level.INFO, "[Metrics] " + ex.getMessage()); + } return true; } catch (InvalidConfigurationException ex) { - Bukkit.getLogger().log(Level.INFO, "[Metrics] " + ex.getMessage()); + if (debug) { + Bukkit.getLogger().log(Level.INFO, "[Metrics] " + ex.getMessage()); + } return true; } return configuration.getBoolean("opt-out", false); @@ -201,7 +215,7 @@ public class MetricsLite { /** * Enables metrics for the server by setting "opt-out" to false in the config file and starting the metrics task. * - * @throws IOException + * @throws java.io.IOException */ public void enable() throws IOException { // This has to be synchronized or it can collide with the check in the task. @@ -213,7 +227,7 @@ public class MetricsLite { } // Enable Task, if it is not running - if (taskId < 0) { + if (task == null) { start(); } } @@ -222,7 +236,7 @@ public class MetricsLite { /** * Disables metrics for the server by setting "opt-out" to true in the config file and canceling the metrics task. * - * @throws IOException + * @throws java.io.IOException */ public void disable() throws IOException { // This has to be synchronized or it can collide with the check in the task. @@ -234,9 +248,9 @@ public class MetricsLite { } // Disable Task, if it is running - if (taskId > 0) { - this.plugin.getServer().getScheduler().cancelTask(taskId); - taskId = -1; + if (task != null) { + task.cancel(); + task = null; } } } @@ -262,24 +276,52 @@ public class MetricsLite { * Generic method that posts a plugin to the metrics website */ private void postPlugin(boolean isPing) throws IOException { - // The plugin's description file containg all of the plugin data such as name, version, author, etc - final PluginDescriptionFile description = plugin.getDescription(); + // Server software specific section + PluginDescriptionFile description = plugin.getDescription(); + String pluginName = description.getName(); + boolean onlineMode = Bukkit.getServer().getOnlineMode(); // TRUE if online mode is enabled + String pluginVersion = description.getVersion(); + String serverVersion = Bukkit.getVersion(); + int playersOnline = Bukkit.getServer().getOnlinePlayers().length; + + // END server software specific section -- all code below does not use any code outside of this class / Java // Construct the post data final StringBuilder data = new StringBuilder(); + + // The plugin's description file containg all of the plugin data such as name, version, author, etc data.append(encode("guid")).append('=').append(encode(guid)); - encodeDataPair(data, "version", description.getVersion()); - encodeDataPair(data, "server", Bukkit.getVersion()); - encodeDataPair(data, "players", Integer.toString(Bukkit.getServer().getOnlinePlayers().length)); + encodeDataPair(data, "version", pluginVersion); + encodeDataPair(data, "server", serverVersion); + encodeDataPair(data, "players", Integer.toString(playersOnline)); encodeDataPair(data, "revision", String.valueOf(REVISION)); + // New data as of R6 + String osname = System.getProperty("os.name"); + String osarch = System.getProperty("os.arch"); + String osversion = System.getProperty("os.version"); + String java_version = System.getProperty("java.version"); + int coreCount = Runtime.getRuntime().availableProcessors(); + + // normalize os arch .. amd64 -> x86_64 + if (osarch.equals("amd64")) { + osarch = "x86_64"; + } + + encodeDataPair(data, "osname", osname); + encodeDataPair(data, "osarch", osarch); + encodeDataPair(data, "osversion", osversion); + encodeDataPair(data, "cores", Integer.toString(coreCount)); + encodeDataPair(data, "online-mode", Boolean.toString(onlineMode)); + encodeDataPair(data, "java_version", java_version); + // If we're pinging, append it if (isPing) { encodeDataPair(data, "ping", "true"); } // Create the url - URL url = new URL(BASE_URL + String.format(REPORT_URL, encode(plugin.getDescription().getName()))); + URL url = new URL(BASE_URL + String.format(REPORT_URL, encode(pluginName))); // Connect to the website URLConnection connection; @@ -310,7 +352,6 @@ public class MetricsLite { if (response == null || response.startsWith("ERR")) { throw new IOException(response); //Throw the exception } - //if (response.startsWith("OK")) - We should get "OK" followed by an optional description if everything goes right } /**