bentobox/src/main/java/world/bentobox/bentobox/BStats.java

161 lines
5.1 KiB
Java

package world.bentobox.bentobox;
import java.util.HashMap;
import java.util.Map;
import org.bstats.bukkit.Metrics;
import org.bukkit.Bukkit;
import world.bentobox.bentobox.api.addons.GameModeAddon;
import world.bentobox.bentobox.api.flags.Flag;
/**
* @author Poslovitch
*/
public class BStats {
private final BentoBox plugin;
private Metrics metrics;
/**
* Counts of the islands that got created.
* It is reset to 0 when BStats gets the data.
* @since 1.1
*/
private int islandsCreatedCount = 0;
BStats(BentoBox plugin) {
this.plugin = plugin;
}
void registerMetrics() {
if (metrics == null) {
metrics = new Metrics(plugin);
registerCustomMetrics();
}
}
private void registerCustomMetrics() {
// Pie Charts
registerDefaultLanguageChart();
registerDatabaseTypeChart();
registerAddonsChart();
registerGameModeAddonsChart();
registerHooksChart();
registerPlayersPerServerChart();
registerFlagsDisplayModeChart();
// Single Line charts
registerIslandsCountChart();
registerIslandsCreatedChart();
}
private void registerDefaultLanguageChart() {
metrics.addCustomChart(new Metrics.SimplePie("default_language", () -> plugin.getSettings().getDefaultLanguage()));
}
private void registerDatabaseTypeChart() {
metrics.addCustomChart(new Metrics.SimplePie("database_type", () -> plugin.getSettings().getDatabaseType().toString()));
}
private void registerIslandsCountChart() {
metrics.addCustomChart(new Metrics.SingleLineChart("islands", () -> plugin.getIslands().getIslandCount()));
}
/**
* @since 1.1
*/
private void registerIslandsCreatedChart() {
metrics.addCustomChart(new Metrics.SingleLineChart("islandsCreated", () -> {
int value = islandsCreatedCount;
islandsCreatedCount = 0;
return value;
}));
}
/**
* Increases the count of islands that got create since the last "data get" request from BStats.
* @since 1.1
*/
public void increaseIslandsCreatedCount() {
islandsCreatedCount++;
}
/**
* Sends the enabled addons (except GameModeAddons) of this server.
* @since 1.1
*/
private void registerAddonsChart() {
metrics.addCustomChart(new Metrics.AdvancedPie("addons", () -> {
Map<String, Integer> values = new HashMap<>();
plugin.getAddonsManager().getEnabledAddons().stream()
.filter(addon -> !(addon instanceof GameModeAddon) && addon.getDescription().isMetrics())
.forEach(addon -> values.put(addon.getDescription().getName(), 1));
return values;
}));
}
/**
* Sends the enabled GameModeAddons of this server.
* @since 1.4.0
*/
private void registerGameModeAddonsChart() {
metrics.addCustomChart(new Metrics.AdvancedPie("gameModeAddons", () -> {
Map<String, Integer> values = new HashMap<>();
plugin.getAddonsManager().getGameModeAddons().stream()
.filter(gameModeAddon -> gameModeAddon.getDescription().isMetrics())
.forEach(gameModeAddon -> values.put(gameModeAddon.getDescription().getName(), 1));
return values;
}));
}
/**
* Sends the enabled Hooks of this server.
* @since 1.6.0
*/
private void registerHooksChart() {
metrics.addCustomChart(new Metrics.AdvancedPie("hooks", () -> {
Map<String, Integer> values = new HashMap<>();
plugin.getHooks().getHooks().forEach(hook -> values.put(hook.getPluginName(), 1));
return values;
}));
}
/**
* Sends the "category" this server is in depending on how many players it has.
* @since 1.6.0
*/
private void registerPlayersPerServerChart() {
metrics.addCustomChart(new Metrics.SimplePie("playersPerServer", () -> {
int players = Bukkit.getOnlinePlayers().size();
if (players <= 10) return "0-10";
else if (players <= 30) return "11-30";
else if (players <= 50) return "31-50";
else if (players <= 100) return "51-100";
else if (players <= 200) return "101-200";
else return "201+";
}));
}
/**
* Sends the "flags display mode" of all the online players.
* @since 1.6.0
*/
private void registerFlagsDisplayModeChart() {
metrics.addCustomChart(new Metrics.AdvancedPie("flagsDisplayMode", () -> {
Map<String, Integer> values = new HashMap<>();
Bukkit.getOnlinePlayers().forEach(player -> {
Flag.Mode mode = plugin.getPlayers().getFlagsDisplayMode(player.getUniqueId());
if (values.containsKey(mode.name())) {
values.put(mode.name(), values.get(mode.name()) + 1);
} else {
values.put(mode.name(), 1);
}
});
return values;
}));
}
}