352 lines
12 KiB
Java
352 lines
12 KiB
Java
package de.serverpulse.utils;
|
|
|
|
import de.serverpulse.ServerPulse;
|
|
import org.bukkit.configuration.file.FileConfiguration;
|
|
import org.bukkit.configuration.file.YamlConfiguration;
|
|
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
|
|
/**
|
|
* Verwaltet alle Konfigurationsdateien von ServerPulse.
|
|
*/
|
|
public class ConfigManager {
|
|
|
|
private final ServerPulse plugin;
|
|
private FileConfiguration config;
|
|
|
|
public ConfigManager(ServerPulse plugin) {
|
|
this.plugin = plugin;
|
|
}
|
|
|
|
/**
|
|
* Lädt alle Konfigurationsdateien
|
|
*/
|
|
public void loadAll() {
|
|
plugin.saveDefaultConfig();
|
|
plugin.reloadConfig();
|
|
this.config = plugin.getConfig();
|
|
}
|
|
|
|
// ──────────────────────────────────────────
|
|
// ALLGEMEINE EINSTELLUNGEN
|
|
// ──────────────────────────────────────────
|
|
|
|
public boolean isDebugMode() {
|
|
return config.getBoolean("general.debug", false);
|
|
}
|
|
|
|
public int getMetricsInterval() {
|
|
return Math.max(10, config.getInt("general.metrics-interval", 30));
|
|
}
|
|
|
|
public int getEntityInterval() {
|
|
return Math.max(10, config.getInt("general.entity-interval", 60));
|
|
}
|
|
|
|
public int getDataRetentionDays() {
|
|
return config.getInt("general.data-retention-days", 90);
|
|
}
|
|
|
|
public int getStartupCheckDelayMinutes() {
|
|
return Math.max(0, config.getInt("general.startup-check-delay-minutes", 5));
|
|
}
|
|
|
|
// ──────────────────────────────────────────
|
|
// DATENBANK
|
|
// ──────────────────────────────────────────
|
|
|
|
public boolean isDatabaseEnabled() {
|
|
return config.getBoolean("database.enabled", true);
|
|
}
|
|
|
|
public String getDbHost() {
|
|
return config.getString("database.host", "localhost");
|
|
}
|
|
|
|
public int getDbPort() {
|
|
return config.getInt("database.port", 3306);
|
|
}
|
|
|
|
public String getDbName() {
|
|
return config.getString("database.database", "serverpulse");
|
|
}
|
|
|
|
public String getDbUsername() {
|
|
return config.getString("database.username", "root");
|
|
}
|
|
|
|
public String getDbPassword() {
|
|
return config.getString("database.password", "");
|
|
}
|
|
|
|
public int getPoolMaxSize() {
|
|
return config.getInt("database.pool.maximum-pool-size", 10);
|
|
}
|
|
|
|
public int getPoolMinIdle() {
|
|
return config.getInt("database.pool.minimum-idle", 2);
|
|
}
|
|
|
|
public long getPoolConnectionTimeout() {
|
|
return config.getLong("database.pool.connection-timeout", 30000);
|
|
}
|
|
|
|
public long getPoolIdleTimeout() {
|
|
return config.getLong("database.pool.idle-timeout", 600000);
|
|
}
|
|
|
|
public long getPoolMaxLifetime() {
|
|
return config.getLong("database.pool.max-lifetime", 1800000);
|
|
}
|
|
|
|
// ──────────────────────────────────────────
|
|
// DISCORD
|
|
// ──────────────────────────────────────────
|
|
|
|
public boolean isDiscordEnabled() {
|
|
return config.getBoolean("discord.enabled", false);
|
|
}
|
|
|
|
public String getDiscordWebhookUrl() {
|
|
return config.getString("discord.webhook-url", "");
|
|
}
|
|
|
|
public String getDiscordReportWebhookUrl() {
|
|
String url = config.getString("discord.report-webhook-url", "");
|
|
return (url == null || url.isEmpty()) ? getDiscordWebhookUrl() : url;
|
|
}
|
|
|
|
public String getDiscordBotName() {
|
|
return config.getString("discord.bot-name", "ServerPulse");
|
|
}
|
|
|
|
public String getDiscordBotAvatar() {
|
|
return config.getString("discord.bot-avatar", "");
|
|
}
|
|
|
|
public boolean isDailyReportEnabled() {
|
|
return config.getBoolean("discord.daily-report.enabled", true) && isDiscordEnabled();
|
|
}
|
|
|
|
public String getDailyReportTime() {
|
|
return config.getString("discord.daily-report.time", "08:00");
|
|
}
|
|
|
|
public int getDiscordColorInfo() {
|
|
return config.getInt("discord.colors.info", 3447003);
|
|
}
|
|
|
|
public int getDiscordColorWarning() {
|
|
return config.getInt("discord.colors.warning", 16776960);
|
|
}
|
|
|
|
public int getDiscordColorCritical() {
|
|
return config.getInt("discord.colors.critical", 16711680);
|
|
}
|
|
|
|
public int getDiscordColorSuccess() {
|
|
return config.getInt("discord.colors.success", 65280);
|
|
}
|
|
|
|
// ──────────────────────────────────────────
|
|
// PERFORMANCE-GRENZWERTE
|
|
// ──────────────────────────────────────────
|
|
|
|
public double getTpsWarning() {
|
|
return config.getDouble("thresholds.performance.tps-warning", 18.0);
|
|
}
|
|
|
|
public double getTpsCritical() {
|
|
return config.getDouble("thresholds.performance.tps-critical", 15.0);
|
|
}
|
|
|
|
public double getMsptWarning() {
|
|
return config.getDouble("thresholds.performance.mspt-warning", 40.0);
|
|
}
|
|
|
|
public double getMsptCritical() {
|
|
return config.getDouble("thresholds.performance.mspt-critical", 50.0);
|
|
}
|
|
|
|
public int getRamWarning() {
|
|
return config.getInt("thresholds.performance.ram-warning", 75);
|
|
}
|
|
|
|
public int getRamCritical() {
|
|
return config.getInt("thresholds.performance.ram-critical", 90);
|
|
}
|
|
|
|
// ──────────────────────────────────────────
|
|
// ENTITY-GRENZWERTE (global)
|
|
// ──────────────────────────────────────────
|
|
|
|
public int getEntityTotalWarning() {
|
|
return config.getInt("thresholds.entities.total-warning", 1000);
|
|
}
|
|
|
|
public int getEntityTotalCritical() {
|
|
return config.getInt("thresholds.entities.total-critical", 2000);
|
|
}
|
|
|
|
public int getMonstersWarning() {
|
|
return config.getInt("thresholds.entities.monsters-warning", 300);
|
|
}
|
|
|
|
public int getMonstersCritical() {
|
|
return config.getInt("thresholds.entities.monsters-critical", 600);
|
|
}
|
|
|
|
public int getAnimalsWarning() {
|
|
return config.getInt("thresholds.entities.animals-warning", 200);
|
|
}
|
|
|
|
public int getAnimalsCritical() {
|
|
return config.getInt("thresholds.entities.animals-critical", 400);
|
|
}
|
|
|
|
public int getVillagersWarning() {
|
|
return config.getInt("thresholds.entities.villagers-warning", 100);
|
|
}
|
|
|
|
public int getVillagersCritical() {
|
|
return config.getInt("thresholds.entities.villagers-critical", 200);
|
|
}
|
|
|
|
public int getItemsWarning() {
|
|
return config.getInt("thresholds.entities.items-warning", 150);
|
|
}
|
|
|
|
public int getItemsCritical() {
|
|
return config.getInt("thresholds.entities.items-critical", 300);
|
|
}
|
|
|
|
// ──────────────────────────────────────────
|
|
// WELTBEZOGENE GRENZWERTE
|
|
// ──────────────────────────────────────────
|
|
|
|
public int getWorldMonstersWarning(String worldName) {
|
|
String path = "worlds." + worldName + ".thresholds.monsters-warning";
|
|
return config.getInt(path, getMonstersWarning());
|
|
}
|
|
|
|
public int getWorldMonstersCritical(String worldName) {
|
|
String path = "worlds." + worldName + ".thresholds.monsters-critical";
|
|
return config.getInt(path, getMonstersCritical());
|
|
}
|
|
|
|
public int getWorldTotalWarning(String worldName) {
|
|
String path = "worlds." + worldName + ".thresholds.total-warning";
|
|
return config.getInt(path, getEntityTotalWarning());
|
|
}
|
|
|
|
public int getWorldTotalCritical(String worldName) {
|
|
String path = "worlds." + worldName + ".thresholds.total-critical";
|
|
return config.getInt(path, getEntityTotalCritical());
|
|
}
|
|
|
|
public String getWorldDisplayName(String worldName) {
|
|
String path = "worlds." + worldName + ".display-name";
|
|
return config.getString(path, worldName);
|
|
}
|
|
|
|
public boolean isWorldMonitored(String worldName) {
|
|
String path = "worlds." + worldName + ".enabled";
|
|
// Wenn nicht explizit konfiguriert, wird die Welt standardmäßig überwacht
|
|
return config.getBoolean(path, true);
|
|
}
|
|
|
|
// ──────────────────────────────────────────
|
|
// TREND-ANALYSE
|
|
// ──────────────────────────────────────────
|
|
|
|
public boolean isTrendAnalysisEnabled() {
|
|
return config.getBoolean("trend-analysis.enabled", true);
|
|
}
|
|
|
|
public int getTrendDataPoints() {
|
|
return config.getInt("trend-analysis.data-points", 10);
|
|
}
|
|
|
|
public double getTrendIncreaseThreshold() {
|
|
return config.getDouble("trend-analysis.increase-threshold", 20.0);
|
|
}
|
|
|
|
public int getTrendCheckInterval() {
|
|
return config.getInt("trend-analysis.check-interval", 5);
|
|
}
|
|
|
|
// ──────────────────────────────────────────
|
|
// NOTFALLMASSNAHMEN
|
|
// ──────────────────────────────────────────
|
|
|
|
public boolean isItemClearEnabled() {
|
|
return config.getBoolean("emergency-actions.item-clear.enabled", false);
|
|
}
|
|
|
|
public boolean isItemClearBroadcast() {
|
|
return config.getBoolean("emergency-actions.item-clear.broadcast", true);
|
|
}
|
|
|
|
public String getItemClearBroadcastMessage() {
|
|
return config.getString("emergency-actions.item-clear.broadcast-message",
|
|
"&c[ServerPulse] Automatischer Item-Clear in {seconds} Sekunden!");
|
|
}
|
|
|
|
public int getItemClearCountdown() {
|
|
return config.getInt("emergency-actions.item-clear.countdown-seconds", 30);
|
|
}
|
|
|
|
public boolean isMobClearEnabled() {
|
|
return config.getBoolean("emergency-actions.mob-clear.enabled", false);
|
|
}
|
|
|
|
public boolean isMobClearHostileOnly() {
|
|
return config.getBoolean("emergency-actions.mob-clear.hostile-only", true);
|
|
}
|
|
|
|
public boolean isAutoDiagnosisEnabled() {
|
|
return config.getBoolean("emergency-actions.auto-diagnosis.enabled", true);
|
|
}
|
|
|
|
public int getAutoDiagnosisTriggerCount() {
|
|
return config.getInt("emergency-actions.auto-diagnosis.trigger-count", 3);
|
|
}
|
|
|
|
// ──────────────────────────────────────────
|
|
// REST API
|
|
// ──────────────────────────────────────────
|
|
|
|
public boolean isRestApiEnabled() {
|
|
return config.getBoolean("rest-api.enabled", false);
|
|
}
|
|
|
|
public int getRestApiPort() {
|
|
return config.getInt("rest-api.port", 8080);
|
|
}
|
|
|
|
public String getRestApiHost() {
|
|
return config.getString("rest-api.host", "0.0.0.0");
|
|
}
|
|
|
|
public String getRestApiKey() {
|
|
return config.getString("rest-api.api-key", "");
|
|
}
|
|
|
|
// ──────────────────────────────────────────
|
|
// NACHRICHTEN
|
|
// ──────────────────────────────────────────
|
|
|
|
public String getPrefix() {
|
|
return MessageUtil.colorize(config.getString("messages.prefix", "&8[&bServerPulse&8] &r"));
|
|
}
|
|
|
|
public String getMessage(String key) {
|
|
return MessageUtil.colorize(config.getString("messages." + key, ""));
|
|
}
|
|
|
|
public FileConfiguration getConfig() {
|
|
return config;
|
|
}
|
|
}
|