Skip to content

Commit 2e13de5

Browse files
committed
Add Nukkit metrics implementation
1 parent 65b4780 commit 2e13de5

File tree

6 files changed

+122
-1
lines changed

6 files changed

+122
-1
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
version=0.7.5
1+
version=0.8.0

nukkit/build.gradle.kts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
val moduleName by extra("dev.faststats.nukkit")
2+
3+
repositories {
4+
maven("https://repo.opencollab.dev/maven-releases")
5+
maven("https://repo.opencollab.dev/maven-snapshots")
6+
}
7+
8+
dependencies {
9+
api(project(":core"))
10+
compileOnly("cn.nukkit:nukkit:1.0-SNAPSHOT")
11+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package dev.faststats.nukkit;
2+
3+
import cn.nukkit.plugin.PluginBase;
4+
import dev.faststats.core.Metrics;
5+
import org.jetbrains.annotations.Contract;
6+
7+
/**
8+
* Nukkit metrics implementation.
9+
*
10+
* @since 0.8.0
11+
*/
12+
public sealed interface NukkitMetrics extends Metrics permits NukkitMetricsImpl {
13+
/**
14+
* Creates a new metrics factory for Nukkit.
15+
*
16+
* @return the metrics factory
17+
* @since 0.8.0
18+
*/
19+
@Contract(pure = true)
20+
static Metrics.Factory<PluginBase> factory() {
21+
return new NukkitMetricsImpl.Factory();
22+
}
23+
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package dev.faststats.nukkit;
2+
3+
import cn.nukkit.Server;
4+
import cn.nukkit.plugin.PluginBase;
5+
import cn.nukkit.utils.Logger;
6+
import com.google.gson.JsonObject;
7+
import dev.faststats.core.Metrics;
8+
import dev.faststats.core.SimpleMetrics;
9+
import org.jetbrains.annotations.Async;
10+
import org.jetbrains.annotations.Contract;
11+
import org.jspecify.annotations.Nullable;
12+
13+
import java.nio.file.Path;
14+
import java.util.Optional;
15+
import java.util.function.Supplier;
16+
17+
final class NukkitMetricsImpl extends SimpleMetrics implements NukkitMetrics {
18+
private final Logger logger;
19+
private final Server server;
20+
private final PluginBase plugin;
21+
22+
@Async.Schedule
23+
@Contract(mutates = "io")
24+
private NukkitMetricsImpl(SimpleMetrics.Factory<?> factory, PluginBase plugin, Path config) throws IllegalStateException {
25+
super(factory, config);
26+
27+
this.logger = plugin.getLogger();
28+
this.server = plugin.getServer();
29+
this.plugin = plugin;
30+
31+
startSubmitting();
32+
}
33+
34+
@Override
35+
protected void appendDefaultData(JsonObject charts) {
36+
charts.addProperty("minecraft_version", server.getVersion());
37+
charts.addProperty("online_mode", server.xboxAuth);
38+
charts.addProperty("player_count", server.getOnlinePlayers().size());
39+
charts.addProperty("plugin_version", plugin.getDescription().getVersion());
40+
charts.addProperty("server_type", server.getName());
41+
}
42+
43+
@Override
44+
protected void printError(String message, @Nullable Throwable throwable) {
45+
logger.error(message, throwable);
46+
}
47+
48+
@Override
49+
protected void printInfo(String message) {
50+
logger.info(message);
51+
}
52+
53+
@Override
54+
protected void printWarning(String message) {
55+
logger.warning(message);
56+
}
57+
58+
private <T> Optional<T> tryOrEmpty(Supplier<T> supplier) {
59+
try {
60+
return Optional.of(supplier.get());
61+
} catch (NoSuchMethodError | Exception e) {
62+
return Optional.empty();
63+
}
64+
}
65+
66+
static final class Factory extends SimpleMetrics.Factory<PluginBase> {
67+
@Override
68+
public Metrics create(PluginBase plugin) throws IllegalStateException {
69+
var dataFolder = Path.of(plugin.getServer().getPluginPath(), "faststats");
70+
var config = dataFolder.resolve("config.properties");
71+
return new NukkitMetricsImpl(this, plugin, config);
72+
}
73+
}
74+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import org.jspecify.annotations.NullMarked;
2+
3+
@NullMarked
4+
module dev.faststats.nukkit {
5+
exports dev.faststats.nukkit;
6+
7+
requires com.google.gson;
8+
requires dev.faststats.core;
9+
10+
requires static org.jetbrains.annotations;
11+
requires static org.jspecify;
12+
}

settings.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@ include("bukkit")
77
include("bungeecord")
88
include("core")
99
include("minestom")
10+
include("nukkit")
1011
include("velocity")

0 commit comments

Comments
 (0)