Update from Git Manager GUI

This commit is contained in:
2026-02-28 16:31:00 +01:00
parent 120245c2ad
commit 63988befeb
9 changed files with 1331 additions and 731 deletions

View File

@@ -21,143 +21,163 @@ public class ConfigManager {
private void loadConfig() {
configFile = new File(plugin.getDataFolder(), "config.yml");
if (!configFile.exists()) {
plugin.saveResource("config.yml", false);
}
if (!configFile.exists()) plugin.saveResource("config.yml", false);
config = YamlConfiguration.loadConfiguration(configFile);
mergeDefaults(config, "config.yml", configFile);
setConfigDefaults();
}
private void loadLang() {
langFile = new File(plugin.getDataFolder(), "lang.yml");
if (!langFile.exists()) {
plugin.saveResource("lang.yml", false);
}
if (!langFile.exists()) plugin.saveResource("lang.yml", false);
lang = YamlConfiguration.loadConfiguration(langFile);
mergeDefaults(lang, "lang.yml", langFile);
setLangDefaults();
}
/**
* FIX: Null-Check VOR dem try-Block verhindert NPE wenn Ressource nicht im JAR.
*/
private void mergeDefaults(FileConfiguration file, String resourceName, File targetFile) {
try (InputStream is = plugin.getResource(resourceName);
InputStreamReader reader = new InputStreamReader(is, StandardCharsets.UTF_8)) {
if (is == null) {
plugin.getLogger().warning(resourceName + " nicht im Plugin-Jar gefunden, Merge übersprungen.");
return;
}
InputStream is = plugin.getResource(resourceName);
if (is == null) {
plugin.getLogger().warning(resourceName + " nicht im JAR gefunden.");
return;
}
try (InputStreamReader reader = new InputStreamReader(is, StandardCharsets.UTF_8)) {
FileConfiguration defaults = YamlConfiguration.loadConfiguration(reader);
boolean changed = false;
for (String key : defaults.getKeys(true)) {
if (!file.contains(key)) {
file.set(key, defaults.get(key));
changed = true;
plugin.getLogger().info("[ConfigManager] Neuer Key in " + resourceName + " hinzugefügt: " + key);
}
}
if (changed) {
file.save(targetFile);
plugin.getLogger().info(resourceName + " wurde mit neuen Standardwerten ergänzt.");
}
} catch (IOException e) {
plugin.getLogger().severe("Fehler beim Mergen von " + resourceName + ": " + e.getMessage());
plugin.getLogger().severe("Merge-Fehler " + resourceName + ": " + e.getMessage());
}
}
private void setConfigDefaults() {
if (!config.contains("max-doors")) config.set("max-doors", 20);
if (!config.contains("max-lamps")) config.set("max-lamps", 50);
if (!config.contains("max-noteblocks")) config.set("max-noteblocks", 10);
if (!config.contains("max-gates")) config.set("max-gates", 20);
if (!config.contains("max-trapdoors")) config.set("max-trapdoors", 20);
if (!config.contains("max-bells")) config.set("max-bells", 5);
if (!config.contains("default-note")) config.set("default-note", "PIANO");
if (!config.contains("double-note-enabled")) config.set("double-note-enabled", true);
if (!config.contains("double-note-delay-ms")) config.set("double-note-delay-ms", 1000);
if (!config.contains("motion-detection-radius")) config.set("motion-detection-radius", 5.0);
if (!config.contains("motion-close-delay-ms")) config.set("motion-close-delay-ms", 5000);
def(config, "max-doors", 20);
def(config, "max-lamps", 50);
def(config, "max-noteblocks", 10);
def(config, "max-gates", 20);
def(config, "max-trapdoors", 20);
def(config, "max-bells", 5);
def(config, "default-note", "PIANO");
def(config, "double-note-enabled", true);
def(config, "double-note-delay-ms", 1000);
def(config, "motion-detection-radius", 5.0);
def(config, "motion-close-delay-ms", 5000);
def(config, "motion-trigger-cooldown-ms", 2000);
// Sounds (NEU)
def(config, "sounds.enabled", true);
def(config, "sounds.door-open", "BLOCK_WOODEN_DOOR_OPEN");
def(config, "sounds.door-close", "BLOCK_WOODEN_DOOR_CLOSE");
def(config, "sounds.iron-door-open", "BLOCK_IRON_DOOR_OPEN");
def(config, "sounds.iron-door-close", "BLOCK_IRON_DOOR_CLOSE");
def(config, "sounds.lamp-on", "BLOCK_LEVER_CLICK");
def(config, "sounds.lamp-off", "BLOCK_LEVER_CLICK");
saveConfig();
}
private void setLangDefaults() {
if (!lang.contains("tueren-geoeffnet")) lang.set("tueren-geoeffnet", "§aTüren wurden geöffnet.");
if (!lang.contains("tueren-geschlossen")) lang.set("tueren-geschlossen", "§cTüren wurden geschlossen.");
if (!lang.contains("max-tueren-erreicht")) lang.set("max-tueren-erreicht", "§cMaximale Anzahl an Türen erreicht.");
if (!lang.contains("lampen-eingeschaltet")) lang.set("lampen-eingeschaltet", "§aLampen wurden eingeschaltet.");
if (!lang.contains("lampen-ausgeschaltet")) lang.set("lampen-ausgeschaltet", "§cLampen wurden ausgeschaltet.");
if (!lang.contains("max-lampen-erreicht")) lang.set("max-lampen-erreicht", "§cMaximale Anzahl an Lampen erreicht.");
if (!lang.contains("notenblock-ausgeloest")) lang.set("notenblock-ausgeloest", "§aNotenblock-Klingel wurde ausgelöst.");
if (!lang.contains("max-notenbloecke-erreicht")) lang.set("max-notenbloecke-erreicht", "§cMaximale Anzahl an Notenblöcken erreicht.");
if (!lang.contains("gates-geoeffnet")) lang.set("gates-geoeffnet", "§aZauntore wurden geöffnet.");
if (!lang.contains("gates-geschlossen")) lang.set("gates-geschlossen", "§cZauntore wurden geschlossen.");
if (!lang.contains("max-gates-erreicht")) lang.set("max-gates-erreicht", "§cMaximale Anzahl an Zauntoren erreicht.");
if (!lang.contains("fallturen-geoeffnet")) lang.set("fallturen-geoeffnet", "§aFalltüren wurden geöffnet.");
if (!lang.contains("fallturen-geschlossen")) lang.set("fallturen-geschlossen", "§cFalltüren wurden geschlossen.");
if (!lang.contains("max-fallturen-erreicht")) lang.set("max-fallturen-erreicht", "§cMaximale Anzahl an Falltüren erreicht.");
if (!lang.contains("glocke-gelaeutet")) lang.set("glocke-gelaeutet", "§eGlocke wurde geläutet.");
if (!lang.contains("max-glocken-erreicht")) lang.set("max-glocken-erreicht", "§cMaximale Anzahl an Glocken erreicht.");
if (!lang.contains("bloecke-umgeschaltet")) lang.set("bloecke-umgeschaltet", "§eBlöcke wurden umgeschaltet.");
if (!lang.contains("keine-bloecke-verbunden")) lang.set("keine-bloecke-verbunden", "§cKeine Blöcke sind verbunden.");
if (!lang.contains("block-verbunden")) lang.set("block-verbunden", "§aBlock verbunden.");
if (!lang.contains("block-bereits-verbunden")) lang.set("block-bereits-verbunden", "§cBlock ist bereits verbunden.");
if (!lang.contains("controller-platziert")) lang.set("controller-platziert", "§aController platziert.");
if (!lang.contains("controller-entfernt")) lang.set("controller-entfernt", "§cController entfernt.");
if (!lang.contains("instrument-gesetzt")) lang.set("instrument-gesetzt", "§aDein Notenblock-Instrument wurde auf %s gesetzt.");
if (!lang.contains("ungueltiges-instrument")) lang.set("ungueltiges-instrument", "§cUngültiges Instrument! Verwende: /bc note <Instrument>");
if (!lang.contains("konfiguration-reloaded")) lang.set("konfiguration-reloaded", "§aKonfiguration und Daten erfolgreich neu geladen!");
if (!lang.contains("keine-berechtigung")) lang.set("keine-berechtigung", "§cDu hast keine Berechtigung für diesen Befehl!");
if (!lang.contains("kolben-ausgefahren")) lang.set("kolben-ausgefahren", "§6[ButtonControl] §7Kolben wurden ausgefahren.");
if (!lang.contains("kolben-eingefahren")) lang.set("kolben-eingefahren", "§6[ButtonControl] §7Kolben wurden eingezogen.");
if (!lang.contains("max-kolben-erreicht")) lang.set("max-kolben-erreicht", "§6[ButtonControl] §7Maximale Anzahl an Kolben erreicht.");
// Türen (Holz)
def(lang, "tueren-geoeffnet", "§aTüren wurden geöffnet.");
def(lang, "tueren-geschlossen", "§cTüren wurden geschlossen.");
def(lang, "max-tueren-erreicht", "§cMaximale Anzahl an Türen erreicht.");
// Eisentüren (NEU)
def(lang, "eisentueren-geoeffnet", "§aEisentüren wurden geöffnet.");
def(lang, "eisentueren-geschlossen", "§cEisentüren wurden geschlossen.");
def(lang, "eisenfallturen-geoeffnet", "§aEisen-Falltüren wurden geöffnet.");
def(lang, "eisenfallturen-geschlossen", "§cEisen-Falltüren wurden geschlossen.");
// Zauntore
def(lang, "gates-geoeffnet", "§aZauntore wurden geöffnet.");
def(lang, "gates-geschlossen", "§cZauntore wurden geschlossen.");
def(lang, "max-gates-erreicht", "§cMaximale Anzahl an Zauntoren erreicht.");
// Falltüren
def(lang, "fallturen-geoeffnet", "§aFalltüren wurden geöffnet.");
def(lang, "fallturen-geschlossen", "§cFalltüren wurden geschlossen.");
def(lang, "max-fallturen-erreicht", "§cMaximale Anzahl an Falltüren erreicht.");
// Lampen
def(lang, "lampen-eingeschaltet", "§aLampen wurden eingeschaltet.");
def(lang, "lampen-ausgeschaltet", "§cLampen wurden ausgeschaltet.");
def(lang, "max-lampen-erreicht", "§cMaximale Anzahl an Lampen erreicht.");
// Glocken
def(lang, "glocke-gelaeutet", "§aGlocke wurde geläutet.");
def(lang, "max-glocken-erreicht", "§cMaximale Anzahl an Glocken erreicht.");
// Notenblöcke
def(lang, "notenblock-ausgeloest", "§aNotenblock-Klingel wurde ausgelöst.");
def(lang, "instrument-gesetzt", "§aDein Instrument wurde auf %s gesetzt.");
def(lang, "ungueltiges-instrument", "§cUngültiges Instrument! /bc note <Instrument>");
def(lang, "max-notenbloecke-erreicht", "§cMaximale Anzahl an Notenblöcken erreicht.");
// Kolben (vorbereitet)
def(lang, "kolben-ausgefahren", "§6[ButtonControl] §7Kolben wurden ausgefahren.");
def(lang, "kolben-eingefahren", "§6[ButtonControl] §7Kolben wurden eingezogen.");
def(lang, "max-kolben-erreicht", "§6[ButtonControl] §7Maximale Anzahl an Kolben erreicht.");
// Controller
def(lang, "block-verbunden", "§aBlock verbunden.");
def(lang, "block-bereits-verbunden", "§cBlock ist bereits verbunden.");
def(lang, "block-verbindung-entfernt", "§7Verbindung zu abgebautem Block automatisch entfernt.");
def(lang, "keine-bloecke-verbunden", "§cKeine Blöcke sind verbunden.");
def(lang, "bloecke-umgeschaltet", "§eBlöcke wurden umgeschaltet.");
def(lang, "controller-platziert", "§aController platziert.");
def(lang, "controller-entfernt", "§cController entfernt.");
def(lang, "controller-umbenannt", "§aController umbenannt zu: §f%s"); // NEU
// Trust & Berechtigungen
def(lang, "keine-berechtigung", "§cDu hast keine Berechtigung!");
def(lang, "keine-berechtigung-controller", "§cDu darfst diesen Controller nicht benutzen!");
def(lang, "nur-besitzer-abbauen", "§cNur der Besitzer kann diesen Controller verwalten!");
def(lang, "spieler-nicht-gefunden", "§cSpieler nicht gefunden.");
def(lang, "status-geandert", "§6[BC] §7Controller ist nun %s§7.");
def(lang, "trust-hinzugefuegt", "§a%s darf diesen Controller nun benutzen.");
def(lang, "trust-entfernt", "§c%s wurde das Vertrauen entzogen.");
def(lang, "kein-controller-im-blick", "§cBitte sieh einen Controller direkt an!");
// System
// FIX: Korrekte Key-Bezeichnung (war fälschlich "konfiguration-reloaded")
def(lang, "konfiguration-neugeladen", "§aKonfiguration erfolgreich neu geladen!");
saveLang();
}
private void def(FileConfiguration cfg, String key, Object value) {
if (!cfg.contains(key)) cfg.set(key, value);
}
public void reloadConfig() {
config = YamlConfiguration.loadConfiguration(configFile);
lang = YamlConfiguration.loadConfiguration(langFile);
lang = YamlConfiguration.loadConfiguration(langFile);
mergeDefaults(config, "config.yml", configFile);
mergeDefaults(lang, "lang.yml", langFile);
mergeDefaults(lang, "lang.yml", langFile);
setConfigDefaults();
setLangDefaults();
}
public FileConfiguration getConfig() {
return config;
}
public FileConfiguration getConfig() { return config; }
public int getMaxDoors() { return config.getInt("max-doors", 20); }
public int getMaxLamps() { return config.getInt("max-lamps", 50); }
public int getMaxNoteBlocks() { return config.getInt("max-noteblocks", 10); }
public int getMaxGates() { return config.getInt("max-gates", getMaxDoors()); }
public int getMaxTrapdoors() { return config.getInt("max-trapdoors", getMaxDoors()); }
public int getMaxBells() { return config.getInt("max-bells", 5); }
public int getMaxDoors() { return config.getInt("max-doors", 20); }
public int getMaxLamps() { return config.getInt("max-lamps", 50); }
public int getMaxNoteBlocks() { return config.getInt("max-noteblocks", 10); }
public int getMaxGates() { return config.getInt("max-gates", 20); }
public int getMaxTrapdoors() { return config.getInt("max-trapdoors", 20); }
public int getMaxBells() { return config.getInt("max-bells", 5); }
public String getMessage(String key) {
return lang.getString(key, "§cNachricht nicht gefunden: " + key);
return lang.getString(key, "§cNachricht fehlt: " + key);
}
public void saveConfig() {
try {
config.save(configFile);
} catch (IOException e) {
plugin.getLogger().severe("Konnte config.yml nicht speichern: " + e.getMessage());
}
try { config.save(configFile); }
catch (IOException e) { plugin.getLogger().severe("config.yml Fehler: " + e.getMessage()); }
}
public void saveLang() {
try {
lang.save(langFile);
} catch (IOException e) {
plugin.getLogger().severe("Konnte lang.yml nicht speichern: " + e.getMessage());
}
try { lang.save(langFile); }
catch (IOException e) { plugin.getLogger().severe("lang.yml Fehler: " + e.getMessage()); }
}
}