0

init repo

This commit is contained in:
2021-09-12 06:54:23 +03:00
commit c174daacf5
31 changed files with 1334 additions and 0 deletions

40
bukkit/build.gradle Normal file
View 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('')
}

View File

@@ -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;
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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();
}
}

View File

@@ -0,0 +1,5 @@
name: MinecraftMetrics
version: 1.0
description: 'Minecraft Prometheus Exporter'
author: DmitriyMX
main: ru.dmitriymx.minecraft.metrics.bukkit.MetricsPlugin