init repo
This commit is contained in:
40
bukkit/build.gradle
Normal file
40
bukkit/build.gradle
Normal file
@@ -0,0 +1,40 @@
|
||||
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://hub.spigotmc.org/nexus/content/repositories/snapshots' }
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(':core'))
|
||||
|
||||
annotationProcessor('org.projectlombok:lombok:1.18.20')
|
||||
compileOnly('org.projectlombok:lombok:1.18.20')
|
||||
|
||||
compileOnly('org.spigotmc:spigot-api:1.12-R0.1-SNAPSHOT') {
|
||||
exclude(module: 'bungeecord-chat')
|
||||
exclude(module: 'commons-lang')
|
||||
exclude(module: 'gson')
|
||||
exclude(module: 'guava')
|
||||
exclude(module: 'json-simple')
|
||||
exclude(module: 'snakeyaml')
|
||||
}
|
||||
}
|
||||
|
||||
shadowJar {
|
||||
archiveBaseName.set('mc-mectics-bukkit')
|
||||
archiveVersion.set(project.version.toString())
|
||||
archiveClassifier.set('')
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package ru.dmitriymx.minecraft.metrics.bukkit;
|
||||
|
||||
import com.typesafe.config.Config;
|
||||
import com.typesafe.config.ConfigFactory;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.SneakyThrows;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import ru.dmitriymx.minecraft.config.ConfigProvider;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class BukkitConfigProvider implements ConfigProvider {
|
||||
|
||||
private final JavaPlugin plugin;
|
||||
|
||||
@Override
|
||||
@SneakyThrows
|
||||
public Config get() {
|
||||
InputStream inputStream = plugin.getClass().getResourceAsStream("/assets/config-default.conf");
|
||||
if (inputStream == null) {
|
||||
throw new RuntimeException("Where is 'config-default.conf'!!??");
|
||||
}
|
||||
|
||||
Reader reader = new InputStreamReader(inputStream);
|
||||
Config defaultConfig = ConfigFactory.parseReader(reader);
|
||||
Config config;
|
||||
Path userConfigPath = plugin.getDataFolder().toPath().resolve("config.conf");
|
||||
if (Files.exists(userConfigPath)) {
|
||||
BufferedReader reader1 = Files.newBufferedReader(userConfigPath);
|
||||
Config userConfig = ConfigFactory.parseReader(reader1);
|
||||
config = userConfig.withFallback(defaultConfig).resolve();
|
||||
} else {
|
||||
config = defaultConfig.resolve();
|
||||
}
|
||||
|
||||
return config;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package ru.dmitriymx.minecraft.metrics.bukkit;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.SneakyThrows;
|
||||
import org.bukkit.Server;
|
||||
import ru.dmitriymx.minecraft.metrics.MinecraftInfoProvider;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class BukkitInfoProvider implements MinecraftInfoProvider {
|
||||
|
||||
private final Server bukkitServer;
|
||||
|
||||
@Override
|
||||
public int playersOnline() {
|
||||
return bukkitServer.getOnlinePlayers().size();
|
||||
}
|
||||
|
||||
@Override
|
||||
@SneakyThrows
|
||||
public double tps() {
|
||||
Field consoleField = bukkitServer.getClass().getDeclaredField("console");
|
||||
consoleField.setAccessible(true);
|
||||
Object minecraftServer = consoleField.get(bukkitServer);
|
||||
Field recentTps = minecraftServer.getClass().getSuperclass().getDeclaredField("recentTps");
|
||||
recentTps.setAccessible(true);
|
||||
|
||||
double tps = ((double[]) recentTps.get(minecraftServer))[0];
|
||||
return Math.min(tps, 20.0d);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package ru.dmitriymx.minecraft.metrics.bukkit;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import ru.dmitriymx.minecraft.logger.LoggerAdapter;
|
||||
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class BukkitLogger extends LoggerAdapter {
|
||||
|
||||
private final Logger originallLogger;
|
||||
|
||||
@Override
|
||||
public void debug(String message) {
|
||||
originallLogger.log(Level.CONFIG, message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debug(String message, Throwable throwable) {
|
||||
originallLogger.log(Level.CONFIG, message, throwable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void info(String message) {
|
||||
originallLogger.log(Level.INFO, message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void warn(String message) {
|
||||
originallLogger.log(Level.WARNING, message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void error(String message) {
|
||||
originallLogger.log(Level.SEVERE, message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void error(String message, Throwable throwable) {
|
||||
originallLogger.log(Level.SEVERE, message, throwable);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package ru.dmitriymx.minecraft.metrics.bukkit;
|
||||
|
||||
import com.typesafe.config.Config;
|
||||
import lombok.SneakyThrows;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import ru.dmitriymx.minecraft.config.ConfigProvider;
|
||||
import ru.dmitriymx.minecraft.metrics.MetricsServer;
|
||||
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class MetricsPlugin extends JavaPlugin {
|
||||
|
||||
private MetricsServer metricsServer;
|
||||
|
||||
@Override
|
||||
@SneakyThrows
|
||||
public void onEnable() {
|
||||
Path pluginDataDirPath = getDataFolder().toPath();
|
||||
if (Files.notExists(pluginDataDirPath)) {
|
||||
getLogger().info("Create data dir: " + pluginDataDirPath);
|
||||
Files.createDirectories(pluginDataDirPath);
|
||||
}
|
||||
|
||||
ConfigProvider configProvider = new BukkitConfigProvider(this);
|
||||
Config config = configProvider.get();
|
||||
|
||||
BukkitLogger logger = new BukkitLogger(getLogger());
|
||||
metricsServer = new MetricsServer(
|
||||
config.getString("server.host"),
|
||||
config.getInt("server.port"),
|
||||
config.getString("server.endpoint"),
|
||||
logger,
|
||||
new BukkitInfoProvider(getServer())
|
||||
);
|
||||
|
||||
//noinspection HttpUrlsUsage
|
||||
logger.info("Start metrics server: http://{}:{}{}",
|
||||
config.getString("server.host"),
|
||||
config.getInt("server.port"),
|
||||
config.getString("server.endpoint"));
|
||||
metricsServer.start();
|
||||
}
|
||||
|
||||
@Override
|
||||
@SneakyThrows
|
||||
public void onDisable() {
|
||||
metricsServer.stop();
|
||||
}
|
||||
}
|
||||
5
bukkit/src/main/resources/plugin.yml
Normal file
5
bukkit/src/main/resources/plugin.yml
Normal file
@@ -0,0 +1,5 @@
|
||||
name: MinecraftMetrics
|
||||
version: 1.0
|
||||
description: 'Minecraft Prometheus Exporter'
|
||||
author: DmitriyMX
|
||||
main: ru.dmitriymx.minecraft.metrics.bukkit.MetricsPlugin
|
||||
Reference in New Issue
Block a user