Dateien nach "src/main/java/net/viper/status/modules/navigation" hochladen
This commit is contained in:
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user