diff --git a/pom.xml b/pom.xml
index 477573893..0949061fc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,10 +33,9 @@
minebench-repo
https://repo.minebench.de/
-
- elmakers-repo
- http://maven.elmakers.com/repository/
+ CodeMC
+ https://repo.codemc.org/repository/maven-public
@@ -203,8 +202,8 @@
com.onarandombox.buscript
- org.mcstats
- com.onarandombox.mcstats
+ org.bstats
+ com.onarandombox.bstats
com.dumptruckman.minecraft.util.Logging
@@ -283,9 +282,9 @@
2.0-SNAPSHOT
- org.mcstats.bukkit
- metrics
- R8-SNAPSHOT
+ org.bstats
+ bstats-bukkit
+ 1.7
org.bukkit
diff --git a/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java b/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java
index dbe1ca568..772a4c722 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java
@@ -17,11 +17,9 @@
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.Set;
import java.util.logging.Level;
import buscript.Buscript;
@@ -34,7 +32,6 @@
import com.onarandombox.MultiverseCore.api.MVWorldManager;
import com.onarandombox.MultiverseCore.api.MultiverseCoreConfig;
import com.onarandombox.MultiverseCore.api.MultiverseMessaging;
-import com.onarandombox.MultiverseCore.api.MultiverseWorld;
import com.onarandombox.MultiverseCore.api.SafeTTeleporter;
import com.onarandombox.MultiverseCore.commands.AnchorCommand;
import com.onarandombox.MultiverseCore.commands.CheckCommand;
@@ -96,6 +93,7 @@
import com.onarandombox.MultiverseCore.utils.MVPermissions;
import com.onarandombox.MultiverseCore.utils.MVPlayerSession;
import com.onarandombox.MultiverseCore.utils.MaterialConverter;
+import com.onarandombox.MultiverseCore.utils.metrics.MetricsConfigurator;
import com.onarandombox.MultiverseCore.utils.SimpleBlockSafety;
import com.onarandombox.MultiverseCore.utils.SimpleLocationManipulation;
import com.onarandombox.MultiverseCore.utils.SimpleSafeTTeleporter;
@@ -109,7 +107,6 @@
import org.bukkit.Difficulty;
import org.bukkit.GameMode;
import org.bukkit.Location;
-import org.bukkit.World.Environment;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.Configuration;
@@ -122,7 +119,6 @@
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.plugin.java.JavaPluginLoader;
-import org.mcstats.Metrics;
/**
* The implementation of the Multiverse-{@link Core}.
@@ -335,7 +331,8 @@ public void onEnable() {
getServer().getPluginManager().registerEvents(this.chatListener, this);
this.initializeBuscript();
- this.setupMetrics();
+
+ MetricsConfigurator.configureMetrics(this);
// Output a little snippet to show it's enabled.
Logging.config("Version %s (API v%s) Enabled - By %s", this.getDescription().getVersion(), PROTOCOL, getAuthors());
@@ -355,98 +352,6 @@ private void initializeBuscript() {
buscript.setScriptVariable("multiverse", this);
}
- /**
- * 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++;
- core.log(Level.FINE, 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 (gen.equals(w.getGenerator()))
- count++;
- core.log(Level.FINE, 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 environment");
- for (Environment env : Environment.values())
- envGraph.addPlotter(new EnvironmentPlotter(this, env));
-
- Metrics.Graph loadedWorldsGraph = m.createGraph("Worlds by environment");
- loadedWorldsGraph.addPlotter(new Metrics.Plotter("Loaded worlds") {
- @Override
- public int getValue() {
- return getMVWorldManager().getMVWorlds().size();
- }
- });
- loadedWorldsGraph.addPlotter(new Metrics.Plotter("Total number of worlds") {
- @Override
- public int getValue() {
- return getMVWorldManager().getMVWorlds().size()
- + getMVWorldManager().getUnloadedWorlds().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 Generators");
- for (String gen : gens)
- genGraph.addPlotter(new GeneratorPlotter(this, gen));
-
- m.start();
- log(Level.FINE, "Metrics have run!");
- } catch (Exception e) {
- log(Level.WARNING, "There was an issue while enabling metrics: " + e.getMessage());
- }
- }
-
private void initializeDestinationFactory() {
this.destFactory = new DestinationFactory(this);
this.destFactory.registerDestinationType(WorldDestination.class, "");
diff --git a/src/main/java/com/onarandombox/MultiverseCore/utils/metrics/MetricsConfigurator.java b/src/main/java/com/onarandombox/MultiverseCore/utils/metrics/MetricsConfigurator.java
new file mode 100644
index 000000000..25aaf009f
--- /dev/null
+++ b/src/main/java/com/onarandombox/MultiverseCore/utils/metrics/MetricsConfigurator.java
@@ -0,0 +1,94 @@
+package com.onarandombox.MultiverseCore.utils.metrics;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.function.Consumer;
+
+import com.dumptruckman.minecraft.util.Logging;
+import com.onarandombox.MultiverseCore.MultiverseCore;
+import com.onarandombox.MultiverseCore.api.MVWorldManager;
+import com.onarandombox.MultiverseCore.api.MultiverseWorld;
+import org.apache.commons.lang.StringUtils;
+import org.bstats.bukkit.Metrics;
+import org.bukkit.World;
+
+public class MetricsConfigurator {
+
+ private static final int PLUGIN_ID = 7765;
+ private static final String NO_GENERATOR_NAME = "N/A";
+
+ public static void configureMetrics(MultiverseCore plugin) {
+ MetricsConfigurator configurator = new MetricsConfigurator(plugin);
+ configurator.initMetrics();
+ }
+
+ private final MultiverseCore plugin;
+ private final Metrics metrics;
+
+ private MetricsConfigurator(MultiverseCore plugin) {
+ this.plugin = plugin;
+ this.metrics = new Metrics(plugin, PLUGIN_ID);
+ }
+
+ private MVWorldManager getWorldManager() {
+ return plugin.getMVWorldManager();
+ }
+
+ private Collection getMVWorlds() {
+ return getWorldManager().getMVWorlds();
+ }
+
+ private void initMetrics() {
+ try {
+ addCustomGeneratorsMetric();
+ addEnvironmentsMetric();
+ addWorldCountMetric();
+
+ Logging.fine("Metrics enabled.");
+ } catch (Exception e) {
+ Logging.warning("There was an issue while enabling metrics:");
+ e.printStackTrace();
+ }
+ }
+
+ private void addCustomGeneratorsMetric() {
+ addAdvancedPieMetric("custom_generators", map -> {
+ for (MultiverseWorld w : getMVWorlds()) {
+ MetricsHelper.incrementCount(map, getGeneratorName(w));
+ }
+ });
+ }
+
+ private String getGeneratorName(MultiverseWorld world) {
+ return world.getGenerator() != null ? world.getGenerator() : NO_GENERATOR_NAME;
+ }
+
+ private void addEnvironmentsMetric() {
+ addAdvancedPieMetric("environments", map -> {
+ for (MultiverseWorld w : getMVWorlds()) {
+ MetricsHelper.incrementCount(map, titleCaseEnv(w.getEnvironment()));
+ }
+ });
+ }
+
+ private String titleCaseEnv(World.Environment env) {
+ String envName = env.name().replaceAll("_+", " ");
+ return StringUtils.capitalize(envName.toLowerCase());
+ }
+
+ private void addWorldCountMetric() {
+ addMultiLineMetric("world_count", map -> {
+ int loadedWorldsCount = getMVWorlds().size();
+ map.put("Loaded worlds", loadedWorldsCount);
+ map.put("Total number of worlds", loadedWorldsCount + getWorldManager().getUnloadedWorlds().size());
+ });
+ }
+
+ private void addAdvancedPieMetric(String chartId, Consumer