init repo
This commit is contained in:
49
sponge/build.gradle
Normal file
49
sponge/build.gradle
Normal file
@@ -0,0 +1,49 @@
|
||||
//file:noinspection GrUnresolvedAccess
|
||||
plugins {
|
||||
id 'java'
|
||||
id 'com.github.johnrengelman.shadow' version '7.0.0'
|
||||
}
|
||||
|
||||
group 'ru.dmitriymx'
|
||||
version '1.0-SNAPSHOT'
|
||||
jar.archiveBaseName.set(project.name)
|
||||
|
||||
compileJava {
|
||||
sourceCompatibility = targetCompatibility = JavaVersion.VERSION_1_8
|
||||
options.encoding = 'UTF-8'
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
maven { url 'https://repo.spongepowered.org/maven' }
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(':core'))
|
||||
|
||||
annotationProcessor 'org.projectlombok:lombok:1.18.20'
|
||||
compileOnly 'org.projectlombok:lombok:1.18.20'
|
||||
|
||||
compileOnly('org.spongepowered:spongeapi:7.3.0') {
|
||||
exclude(module: 'asm')
|
||||
exclude(module: 'caffeine')
|
||||
exclude(module: 'commons-lang3')
|
||||
exclude(module: 'configurate-gson')
|
||||
exclude(module: 'configurate-hocon')
|
||||
exclude(module: 'configurate-yaml')
|
||||
exclude(module: 'error_prone_annotations')
|
||||
exclude(module: 'flow-math')
|
||||
exclude(module: 'flow-noise')
|
||||
exclude(module: 'gson')
|
||||
exclude(module: 'guava')
|
||||
exclude(module: 'jsr305')
|
||||
}
|
||||
}
|
||||
|
||||
shadowJar {
|
||||
archiveBaseName.set('mc-mectics-sponge')
|
||||
archiveVersion.set(project.version.toString())
|
||||
archiveClassifier.set('')
|
||||
|
||||
relocate('assets', 'assets.minecraft_metrics')
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
package ru.dmitriymx.minecraft.metrics.sponge;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import com.typesafe.config.Config;
|
||||
import lombok.SneakyThrows;
|
||||
import org.spongepowered.api.config.ConfigDir;
|
||||
import org.spongepowered.api.event.Listener;
|
||||
import org.spongepowered.api.event.game.state.GameStartedServerEvent;
|
||||
import org.spongepowered.api.event.game.state.GameStoppingServerEvent;
|
||||
import org.spongepowered.api.plugin.Plugin;
|
||||
import org.spongepowered.api.plugin.PluginContainer;
|
||||
import ru.dmitriymx.minecraft.config.ConfigProvider;
|
||||
import ru.dmitriymx.minecraft.metrics.MetricsServer;
|
||||
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
|
||||
@Plugin(id = "minecraft_metrics",
|
||||
name = "MinecraftMetrics",
|
||||
description = "Minecraft Prometheus Exporter",
|
||||
version = "1.0",
|
||||
authors = { "DmitriyMX" })
|
||||
@SuppressWarnings("unused")
|
||||
public class MetricsPlugin {
|
||||
|
||||
@Inject
|
||||
private org.slf4j.Logger slf4jLogger;
|
||||
|
||||
@Inject
|
||||
@ConfigDir(sharedRoot = false)
|
||||
private Path pluginDataDirPath;
|
||||
|
||||
@Inject
|
||||
private PluginContainer pluginContainer;
|
||||
|
||||
private MetricsServer metricsServer;
|
||||
|
||||
@Listener
|
||||
@SneakyThrows
|
||||
public void onGameStartedServerEvent(GameStartedServerEvent event) {
|
||||
if (Files.notExists(pluginDataDirPath)) {
|
||||
slf4jLogger.info("Create data dir: {}", pluginDataDirPath);
|
||||
Files.createDirectories(pluginDataDirPath);
|
||||
}
|
||||
|
||||
ConfigProvider configProvider = new SpongeConfigProvider(pluginContainer, pluginDataDirPath);
|
||||
Config config = configProvider.get();
|
||||
|
||||
SpongeLogger logger = new SpongeLogger(slf4jLogger);
|
||||
metricsServer = new MetricsServer(
|
||||
config.getString("server.host"),
|
||||
config.getInt("server.port"),
|
||||
config.getString("server.endpoint"),
|
||||
logger,
|
||||
new SpongeInfoProvider()
|
||||
);
|
||||
|
||||
//noinspection HttpUrlsUsage
|
||||
logger.info("Start metrics server: http://{}:{}{}",
|
||||
config.getString("server.host"),
|
||||
config.getInt("server.port"),
|
||||
config.getString("server.endpoint"));
|
||||
metricsServer.start();
|
||||
}
|
||||
|
||||
@Listener
|
||||
public void onGameStoppingServerEvent(GameStoppingServerEvent event) {
|
||||
metricsServer.stop();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package ru.dmitriymx.minecraft.metrics.sponge;
|
||||
|
||||
import com.typesafe.config.Config;
|
||||
import com.typesafe.config.ConfigFactory;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.SneakyThrows;
|
||||
import org.spongepowered.api.asset.Asset;
|
||||
import org.spongepowered.api.plugin.PluginContainer;
|
||||
import ru.dmitriymx.minecraft.config.ConfigProvider;
|
||||
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Optional;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class SpongeConfigProvider implements ConfigProvider {
|
||||
|
||||
private final PluginContainer plugin;
|
||||
private final Path pluginDataDirPath;
|
||||
|
||||
@Override
|
||||
@SneakyThrows
|
||||
public Config get() {
|
||||
Optional<Asset> optionalAsset = plugin.getAsset("config-default.conf");
|
||||
if (!optionalAsset.isPresent()) {
|
||||
throw new RuntimeException("Where is 'config-default.conf'!!??");
|
||||
}
|
||||
|
||||
Config defaultConfig = ConfigFactory.parseString(optionalAsset.get().readString());
|
||||
Config config;
|
||||
Path userConfigPath = pluginDataDirPath.resolve("config.conf");
|
||||
if (Files.exists(userConfigPath)) {
|
||||
Config userConfig = ConfigFactory.parseFile(userConfigPath.toFile());
|
||||
config = userConfig.withFallback(defaultConfig).resolve();
|
||||
} else {
|
||||
config = defaultConfig.resolve();
|
||||
}
|
||||
|
||||
return config;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package ru.dmitriymx.minecraft.metrics.sponge;
|
||||
|
||||
import org.spongepowered.api.Sponge;
|
||||
import ru.dmitriymx.minecraft.metrics.MinecraftInfoProvider;
|
||||
|
||||
public class SpongeInfoProvider implements MinecraftInfoProvider {
|
||||
|
||||
@Override
|
||||
public int playersOnline() {
|
||||
return Sponge.getServer().getOnlinePlayers().size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public double tps() {
|
||||
return Sponge.getServer().getTicksPerSecond();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package ru.dmitriymx.minecraft.metrics.sponge;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import ru.dmitriymx.minecraft.logger.LoggerAdapter;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class SpongeLogger extends LoggerAdapter {
|
||||
|
||||
private final org.slf4j.Logger logger;
|
||||
|
||||
@Override
|
||||
public void debug(String message) {
|
||||
logger.debug(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debug(String message, Throwable throwable) {
|
||||
logger.debug(message, throwable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void info(String message) {
|
||||
logger.info(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void warn(String message) {
|
||||
logger.warn(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void error(String message) {
|
||||
logger.error(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void error(String message, Throwable throwable) {
|
||||
logger.error(message, throwable);
|
||||
}
|
||||
}
|
||||
17
sponge/src/main/resources/mcmod.info
Normal file
17
sponge/src/main/resources/mcmod.info
Normal file
@@ -0,0 +1,17 @@
|
||||
[
|
||||
{
|
||||
"modid": "minecraft_metrics",
|
||||
"name": "MinecraftMetrics",
|
||||
"version": "1.0",
|
||||
"description": "Minecraft Prometheus Exporter",
|
||||
"authorList": [
|
||||
"DmitriyMX"
|
||||
],
|
||||
"dependencies": [
|
||||
"spongeapi"
|
||||
],
|
||||
"requiredMods": [
|
||||
"spongeapi"
|
||||
]
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user