Dateien nach "src/main/java/net/viper/status/modules/navigation" hochladen

This commit is contained in:
2026-01-08 14:59:41 +00:00
parent c3bec35b15
commit 3776c3e2de

View File

@@ -0,0 +1,149 @@
package net.viper.status.modules.navigation;
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.config.ServerInfo;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.plugin.Command;
import net.md_5.bungee.api.plugin.Plugin;
import net.viper.status.module.Module;
import java.io.*;
import java.util.*;
/**
* NavigationModule - Erstellt automatisch Server-Switch Befehle basierend auf der verify.properties.
*/
public class NavigationModule implements Module {
private Plugin plugin;
private boolean isEnabled = true;
@Override
public String getName() {
return "NavigationModule";
}
@Override
public void onEnable(Plugin plugin) {
this.plugin = plugin;
loadConfig(plugin);
}
@Override
public void onDisable(Plugin plugin) {
// Befehle müssen nicht manuell entfernt werden (handled by Bungee)
}
private void loadConfig(Plugin plugin) {
String fileName = "verify.properties";
File file = new File(plugin.getDataFolder(), fileName);
Properties props = new Properties();
// 1. Datei kopieren falls nicht vorhanden
if (!file.exists()) {
// Wir müssen hier nichts erstellen, da GlobalChat oder Verify das schon tun
// Wir versuchen einfach nur zu laden
}
// 2. Laden
try (InputStream in = new FileInputStream(file)) {
props.load(in);
} catch (IOException e) {
plugin.getLogger().warning("Konnte " + fileName + " nicht für Navigation laden.");
return;
}
// 3. Aktivierung prüfen
isEnabled = Boolean.parseBoolean(props.getProperty("navigation.enabled", "true"));
if (!isEnabled) {
plugin.getLogger().info("§eNavigation ist DEAKTIVIERT.");
return;
}
// 4. Befehle generieren
int registered = 0;
for (String key : props.stringPropertyNames()) {
if (key.startsWith("server.")) {
// Struktur: server.<ServerName>=<DisplayName>
// Wir ignorieren Unterpunkte wie .id oder .secret (teilen wir am Punkt)
String[] parts = key.split("\\.");
if (parts.length == 2) {
String targetServer = parts[1]; // Z.B. "bungee-server-1" oder "lobby"
String displayName = props.getProperty(key); // Z.B. "&aSurvival"
// Befehlsnamen generieren: Farbcodes entfernen und Leerzeichen entfernen
// "&aSurvival" -> "Survival" -> "/survival"
String alias = ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', displayName))
.toLowerCase()
.replace(" ", "");
if (alias.isEmpty()) continue;
// Command registrieren
try {
plugin.getProxy().getPluginManager().registerCommand(plugin, new ServerSwitchCommand(targetServer, displayName, alias));
registered++;
plugin.getLogger().info("§aBefehl registered: /" + alias + " -> " + targetServer);
} catch (Exception e) {
plugin.getLogger().warning("Konnte Befehl für " + targetServer + " nicht registrieren: " + e.getMessage());
}
}
}
}
if (registered > 0) {
plugin.getLogger().info("§aNavigation aktiviert! " + registered + " Server-Befehle erstellt.");
} else {
plugin.getLogger().warning("§cKeine Server für Navigation gefunden (Überprüfe verify.properties).");
}
}
/**
* Interne Klasse für den Switch-Befehl.
* Ein Objekt davon wird für jeden Server erstellt.
*/
private class ServerSwitchCommand extends Command {
private final String targetServer; // Der technische Name (z.B. bungee-server-1)
private final String displayName; // Der hübsche Name (z.B. &aSurvival)
public ServerSwitchCommand(String targetServer, String displayName, String alias) {
super(alias); // Befehl name
this.targetServer = targetServer;
this.displayName = displayName;
}
@Override
public void execute(CommandSender sender, String[] args) {
if (!(sender instanceof ProxiedPlayer)) {
sender.sendMessage(ChatColor.RED + "Nur Spieler können den Server wechseln.");
return;
}
ProxiedPlayer p = (ProxiedPlayer) sender;
// Check ob Spieler schon auf dem Server ist
if (p.getServer() != null && p.getServer().getInfo().getName().equalsIgnoreCase(targetServer)) {
String name = ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', displayName));
p.sendMessage(ChatColor.YELLOW + "Du bist bereits auf " + name + ChatColor.YELLOW + "!");
return;
}
// Server Info holen
ServerInfo target = plugin.getProxy().getServerInfo(targetServer);
if (target == null) {
p.sendMessage(ChatColor.RED + "Der Server '" + targetServer + "' wurde nicht gefunden.");
return;
}
// Connecten
p.sendMessage(ChatColor.GRAY + "Verbinde dich mit " + displayName + ChatColor.GRAY + "...");
p.connect(target);
}
}
}