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