diff --git a/pom.xml b/pom.xml
index c4a693eb..b2bd76e1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,6 +20,10 @@
Bukkit Official
http://repo.bukkit.org/content/repositories/public
+
+ mcstats
+ http://repo.mcstats.org/content/repositories/snapshots
+
@@ -152,6 +156,7 @@
me.main__.util:SerializationConfig
com.fernferret.allpay:AllPay
com.pneumaticraft.commandhandler:CommandHandler
+ org.mcstats:metrics
@@ -167,6 +172,10 @@
com.pneumaticraft.commandhandler
com.pneumaticraft.commandhandler.multiverse
+
+ org.mcstats
+ org.mcstats.multiverse
+
@@ -221,6 +230,15 @@
compile
+
+
+ org.mcstats
+ metrics
+ 1.0-SNAPSHOT
+ jar
+ compile
+
+
junit
diff --git a/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java b/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java
index cb079ff8..3597af0e 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java
@@ -75,6 +75,7 @@ import com.pneumaticraft.commandhandler.CommandHandler;
import me.main__.util.SerializationConfig.SerializationConfig;
import org.bukkit.ChatColor;
import org.bukkit.Location;
+import org.bukkit.World.Environment;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.Configuration;
@@ -84,6 +85,7 @@ import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
+import org.mcstats.Metrics;
import java.io.File;
import java.io.IOException;
@@ -91,10 +93,12 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
+import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -303,6 +307,95 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
this.log(Level.INFO, "Spout integration enabled.");
}
*/
+
+ this.setupMetrics();
+ }
+
+ /**
+ * Plotter for Environment-Values.
+ */
+ private static final class EnvironmentPlotter extends Metrics.Plotter {
+ private MultiverseCore core;
+ private final Environment env;
+
+ public EnvironmentPlotter(MultiverseCore core, Environment env) {
+ super(envToString(env));
+ this.core = core;
+ this.env = env;
+ }
+
+ private static String envToString(Environment env) {
+ return new StringBuilder().append(env.name().toUpperCase().charAt(0))
+ .append(env.name().toLowerCase().substring(1)).toString();
+ }
+
+ @Override
+ public int getValue() {
+ int count = 0;
+ for (MultiverseWorld w : core.getMVWorldManager().getMVWorlds())
+ if (w.getEnvironment() == env)
+ count++;
+ System.out.println(String.format("Tracking %d worlds of type %s", count, env));
+ return count;
+ }
+ }
+
+ /**
+ * Plotter for Generator-Values.
+ */
+ private static final class GeneratorPlotter extends Metrics.Plotter {
+ private MultiverseCore core;
+ private final String gen;
+
+ public GeneratorPlotter(MultiverseCore core, String gen) {
+ super(gen);
+ this.core = core;
+ this.gen = gen;
+ }
+
+ @Override
+ public int getValue() {
+ int count = 0;
+ for (MultiverseWorld w : core.getMVWorldManager().getMVWorlds())
+ if (w.getGenerator().equals(gen))
+ count++;
+ System.out.println(String.format("Tracking %d worlds of type %s", count, gen));
+ return count;
+ }
+ }
+
+ private void setupMetrics() {
+ try {
+ Metrics m = new Metrics(this);
+
+
+ Metrics.Graph envGraph = m.createGraph("worlds_by_env");
+ for (Environment env : Environment.values())
+ envGraph.addPlotter(new EnvironmentPlotter(this, env));
+
+
+ m.addCustomData(new Metrics.Plotter("world_count") {
+ @Override
+ public int getValue() {
+ return getMVWorldManager().getMVWorlds().size();
+ }
+ });
+
+ Set gens = new HashSet();
+ for (MultiverseWorld w : this.getMVWorldManager().getMVWorlds())
+ gens.add(w.getGenerator());
+ gens.remove(null);
+ gens.remove("null");
+ Metrics.Graph genGraph = m.createGraph("custom_gens");
+ for (String gen : gens)
+ genGraph.addPlotter(new GeneratorPlotter(this, gen));
+
+ m.start();
+ System.out.println("Metrics have run!");
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
}
private void initializeDestinationFactory() {
diff --git a/src/test/java/com/onarandombox/MultiverseCore/test/utils/TestInstanceCreator.java b/src/test/java/com/onarandombox/MultiverseCore/test/utils/TestInstanceCreator.java
index 552ee7ed..9d1a7995 100644
--- a/src/test/java/com/onarandombox/MultiverseCore/test/utils/TestInstanceCreator.java
+++ b/src/test/java/com/onarandombox/MultiverseCore/test/utils/TestInstanceCreator.java
@@ -30,6 +30,7 @@ import org.bukkit.scheduler.BukkitScheduler;
import org.mockito.Matchers;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
+import org.powermock.api.easymock.PowerMock;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.MockGateway;
@@ -60,6 +61,12 @@ public class TestInstanceCreator {
MockGateway.MOCK_STANDARD_METHODS = false;
core = PowerMockito.spy(new MultiverseCore());
+ PowerMockito.doAnswer(new Answer() {
+ @Override
+ public Void answer(InvocationOnMock invocation) throws Throwable {
+ return null; // don't run metrics in tests
+ }
+ }).when(core, "setupMetrics");
// Let's let all MV files go to bin/test
doReturn(pluginDirectory).when(core).getDataFolder();