Delete src/main/java/net/viper/status/modules/AutoMessage/AutoMessageModule.java via Git Manager GUI

This commit is contained in:
2026-05-24 19:43:45 +00:00
parent f117a949e4
commit 38b04ec890

View File

@@ -1,163 +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();
ensureMessagesFileExists();
if (!enabled) return;
registerReloadCommand();
scheduleTask();
}
@Override
public void onDisable(Plugin plugin) {
cancelTask();
}
private void ensureMessagesFileExists() {
File dataFolder = api.getDataFolder();
if (!dataFolder.exists()) dataFolder.mkdirs();
File target = new File(dataFolder, fileName);
if (target.exists()) return;
// Datei aus den Plugin-Ressourcen kopieren
try (java.io.InputStream in = api.getResourceAsStream(fileName)) {
if (in != null) {
Files.copy(in, target.toPath());
api.getLogger().info("[AutoMessage] " + fileName + " wurde aus den Ressourcen erstellt.");
return;
}
} catch (IOException e) {
api.getLogger().warning("[AutoMessage] Konnte " + fileName + " nicht aus Ressourcen kopieren: " + e.getMessage());
}
// Fallback: leere Datei mit Hinweis anlegen
try {
Files.write(target.toPath(),
("# AutoMessage eine Nachricht pro Zeile\n" +
"# Farben mit & oder §-Codes, z.B. &aGrüner Text\n" +
"# Kommentarzeilen (# ...) und Leerzeilen werden ignoriert\n").getBytes(StandardCharsets.UTF_8));
api.getLogger().info("[AutoMessage] " + fileName + " wurde als leere Vorlage erstellt.");
} catch (IOException e) {
api.getLogger().severe("[AutoMessage] Konnte " + fileName + " nicht erstellen: " + e.getMessage());
}
}
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<String> 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;
}
}
}