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
+
+ maven-assembly-plugin
@@ -51,22 +60,40 @@
+
+
+
+
+
+
+ bukkit-repo
+ http://repo.bukkit.org/content/repositories/releases/
+
+
+
+
+
+
+ dynmap-repo
+ http://repo.mikeprimm.com/
+
+ org.dynmapdynmap-api
- [0.70,)
+ 1.0org.bukkitbukkit
- [1.3.1-R1.0,1.7)
+ 1.4.5-R1.0com.massivecraftFactions
- 1.7.7
+ 1.8.0system${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
}
/**