diff --git a/src/main/java/net/viper/status/modules/AutoMessage/AutoMessageModule.java b/src/main/java/net/viper/status/modules/AutoMessage/AutoMessageModule.java deleted file mode 100644 index 7f2f1f6..0000000 --- a/src/main/java/net/viper/status/modules/AutoMessage/AutoMessageModule.java +++ /dev/null @@ -1,132 +0,0 @@ -package net.viper.status.modules.AutoMessage; - -import net.md_5.bungee.api.ChatColor; -import net.md_5.bungee.api.CommandSender; -import net.md_5.bungee.api.ProxyServer; -import net.md_5.bungee.api.chat.TextComponent; -import net.md_5.bungee.api.plugin.Command; -import net.md_5.bungee.api.plugin.Plugin; -import net.viper.status.StatusAPI; -import net.viper.status.module.Module; - -import java.io.File; -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.util.List; -import java.util.Properties; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; - -/** - * AutoMessageModule - * - * Fix #5: - * - Nachrichten werden bei jedem Zyklus frisch aus der Datei gelesen, - * damit Änderungen an messages.txt sofort wirken ohne Neustart. - * - Neuer Befehl /automessage reload (Permission: statusapi.automessage) - * lädt die Konfiguration neu und setzt den Zähler zurück. - * - TextComponent.fromLegacy() → ChatColor.translateAlternateColorCodes für §-Codes. - */ -public class AutoMessageModule implements Module { - - private int taskId = -1; - private StatusAPI api; - private final AtomicInteger currentIndex = new AtomicInteger(0); - - // Konfiguration (für Reload zugänglich) - private volatile boolean enabled = false; - private volatile int intervalSeconds = 300; - private volatile String fileName = "messages.txt"; - private volatile String prefix = ""; - - @Override - public String getName() { return "AutoMessage"; } - - @Override - public void onEnable(Plugin plugin) { - this.api = (StatusAPI) plugin; - loadSettings(); - - if (!enabled) return; - - registerReloadCommand(); - scheduleTask(); - } - - @Override - public void onDisable(Plugin plugin) { - cancelTask(); - } - - private void loadSettings() { - Properties props = api.getVerifyProperties(); - enabled = Boolean.parseBoolean(props.getProperty("automessage.enabled", "false")); - String rawInterval = props.getProperty("automessage.interval", "300"); - try { intervalSeconds = Integer.parseInt(rawInterval); } - catch (NumberFormatException e) { api.getLogger().warning("Ungültiges Intervall für AutoMessage! Nutze Standard (300s)."); intervalSeconds = 300; } - fileName = props.getProperty("automessage.file", "messages.txt"); - prefix = props.getProperty("automessage.prefix", ""); - } - - private void registerReloadCommand() { - ProxyServer.getInstance().getPluginManager().registerCommand(api, new Command("automessage", "statusapi.automessage") { - @Override - public void execute(CommandSender sender, String[] args) { - if (args.length > 0 && "reload".equalsIgnoreCase(args[0])) { - cancelTask(); - loadSettings(); - currentIndex.set(0); - if (enabled) { - scheduleTask(); - sender.sendMessage(ChatColor.GREEN + "[AutoMessage] Neu geladen. Intervall: " + intervalSeconds + "s"); - } else { - sender.sendMessage(ChatColor.YELLOW + "[AutoMessage] Modul ist deaktiviert (automessage.enabled=false)."); - } - } else { - sender.sendMessage(ChatColor.YELLOW + "/automessage reload"); - } - } - }); - } - - private void scheduleTask() { - taskId = ProxyServer.getInstance().getScheduler().schedule(api, () -> { - File messageFile = new File(api.getDataFolder(), fileName); - if (!messageFile.exists()) { - api.getLogger().warning("[AutoMessage] Datei nicht gefunden: " + messageFile.getAbsolutePath()); - return; - } - - // Fix #5: Datei bei jedem Tick neu einlesen → Änderungen wirken sofort - List messages; - try { - messages = Files.readAllLines(messageFile.toPath(), StandardCharsets.UTF_8); - } catch (IOException e) { - api.getLogger().severe("[AutoMessage] Fehler beim Lesen von '" + fileName + "': " + e.getMessage()); - return; - } - messages.removeIf(line -> line.trim().isEmpty() || line.trim().startsWith("#")); - if (messages.isEmpty()) return; - - // Index wrappen (threadsafe) - int idx = currentIndex.getAndUpdate(i -> (i + 1) % messages.size()); - if (idx >= messages.size()) idx = 0; - - String raw = messages.get(idx); - String prefixPart = prefix.isEmpty() ? "" : ChatColor.translateAlternateColorCodes('&', prefix) + " "; - // Fix: §-Codes direkt übersetzen (messages.txt nutzt §-Codes) - String text = prefixPart + ChatColor.translateAlternateColorCodes('&', - raw.replace("\u00a7", "&").replace("§", "&")); - - ProxyServer.getInstance().broadcast(new TextComponent(text)); - }, intervalSeconds, intervalSeconds, TimeUnit.SECONDS).getId(); - } - - private void cancelTask() { - if (taskId != -1) { - ProxyServer.getInstance().getScheduler().cancel(taskId); - taskId = -1; - } - } -}