diff --git a/README.md b/README.md
index e7a8ecc..216b639 100644
--- a/README.md
+++ b/README.md
@@ -190,3 +190,14 @@ The operation runs _off_ the main thread, so it should not impact performance.
## Getting Help
If you run into problems or need help with something, feel free to hop on the MobArena Discord server: [Instant Invite](https://discord.gg/5tnwQvC)
+
+
+## Metrics
+
+MobArenaStats collects anonymous server metrics through [bStats](https://bstats.org/).
+The metrics include generic information like Minecraft version, as well as plugin-specific information like plugin version and store type.
+All collected metrics are publicly available [here](https://bstats.org/plugin/bukkit/MobArenaStats/11932).
+
+Please note that the stats collected by the plugin itself never leave the server, and they are thus _not_ a part of the metrics collection.
+
+To opt out of metrics collection, edit the `plugins/bStats/config.yml` file.
diff --git a/pom.xml b/pom.xml
index bfb7bc4..8a879b1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -27,6 +27,13 @@
1.7.31
+
+
+ org.bstats
+ bstats-bukkit
+ 2.2.1
+
+
org.bukkit
@@ -175,6 +182,10 @@
true
false
+
+ org.bstats
+ org.mobarena.stats.libs.bstats
+
org.jdbi
org.mobarena.stats.libs.jdbi
diff --git a/src/main/java/org/mobarena/stats/MobArenaStatsPlugin.java b/src/main/java/org/mobarena/stats/MobArenaStatsPlugin.java
index ed27e36..868a497 100644
--- a/src/main/java/org/mobarena/stats/MobArenaStatsPlugin.java
+++ b/src/main/java/org/mobarena/stats/MobArenaStatsPlugin.java
@@ -2,6 +2,7 @@ package org.mobarena.stats;
import com.garbagemule.MobArena.MobArena;
import com.garbagemule.MobArena.commands.CommandHandler;
+import org.bstats.bukkit.Metrics;
import org.bukkit.command.PluginCommand;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.event.HandlerList;
@@ -12,6 +13,7 @@ import org.mobarena.stats.command.ExportCommand;
import org.mobarena.stats.command.GlobalStatsCommand;
import org.mobarena.stats.command.ImportCommand;
import org.mobarena.stats.command.PlayerStatsCommand;
+import org.mobarena.stats.metrics.StoreTypeChart;
import org.mobarena.stats.platform.AsyncBukkitExecutor;
import org.mobarena.stats.platform.SyncBukkitExecutor;
import org.mobarena.stats.session.SessionListener;
@@ -79,6 +81,7 @@ public class MobArenaStatsPlugin extends JavaPlugin implements MobArenaStats {
createConfigFile();
setupExecutors();
setupCommands();
+ setupMetrics();
} catch (Exception up) {
// If setup fails, we can't recover, so throw up
throw new RuntimeException(up);
@@ -131,6 +134,11 @@ public class MobArenaStatsPlugin extends JavaPlugin implements MobArenaStats {
handler.register(ImportCommand.class);
}
+ private void setupMetrics() {
+ Metrics metrics = new Metrics(this, 11932);
+ metrics.addCustomChart(new StoreTypeChart(this));
+ }
+
private void reload() {
try {
createSessionStore();
diff --git a/src/main/java/org/mobarena/stats/metrics/StoreTypeChart.java b/src/main/java/org/mobarena/stats/metrics/StoreTypeChart.java
new file mode 100644
index 0000000..9b6cac1
--- /dev/null
+++ b/src/main/java/org/mobarena/stats/metrics/StoreTypeChart.java
@@ -0,0 +1,27 @@
+package org.mobarena.stats.metrics;
+
+import org.bstats.charts.SimplePie;
+import org.bukkit.configuration.Configuration;
+import org.bukkit.configuration.ConfigurationSection;
+import org.mobarena.stats.MobArenaStatsPlugin;
+import org.mobarena.stats.store.StatsStore;
+
+public class StoreTypeChart extends SimplePie {
+
+ public StoreTypeChart(MobArenaStatsPlugin plugin) {
+ super("store_type", () -> {
+ StatsStore store = plugin.getStatsStore();
+ if (store == null) {
+ return null;
+ }
+
+ // If the store isn't null, it means whatever type is set in
+ // the config-file is valid and has already been parsed, so
+ // we can just extract and submit it.
+ Configuration config = plugin.getConfig();
+ ConfigurationSection section = config.getConfigurationSection("store");
+ return section.getString("type");
+ });
+ }
+
+}