diff --git a/src/main/java/net/viper/status/modules/help/HelpModule.java b/src/main/java/net/viper/status/modules/help/HelpModule.java deleted file mode 100644 index 0edb0ea..0000000 --- a/src/main/java/net/viper/status/modules/help/HelpModule.java +++ /dev/null @@ -1,252 +0,0 @@ -package net.viper.status.modules.help; - -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.ClickEvent; -import net.md_5.bungee.api.chat.HoverEvent; -import net.md_5.bungee.api.chat.TextComponent; -import net.md_5.bungee.api.chat.ComponentBuilder; -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.StatusAPI; -import net.viper.status.module.Module; - -import java.util.ArrayList; -import java.util.List; -import java.util.Properties; - -/** - * HelpModule – seitenbasierte Ingame-Hilfe. - * - * verify.properties: - * statusapi.help=vn → /vn help [seite] - * statusapi.help.permission=statusapi.admin - */ -public class HelpModule implements Module { - - private String commandName = "help"; - private String adminPermission = "statusapi.admin"; - - @Override - public String getName() { return "HelpModule"; } - - @Override - public void onEnable(Plugin plugin) { - Properties props = ((StatusAPI) plugin).getVerifyProperties(); - if (props != null) { - String cn = props.getProperty("statusapi.help", "help").trim(); - if (!cn.isEmpty()) commandName = cn; - String ap = props.getProperty("statusapi.help.permission", "statusapi.admin").trim(); - if (!ap.isEmpty()) adminPermission = ap; - } - ProxyServer.getInstance().getPluginManager().registerCommand(plugin, - new HelpCommand(commandName, adminPermission)); - plugin.getLogger().info("[HelpModule] /" + commandName + " help registriert (Admin-Permission: " + adminPermission + ")"); - } - - @Override - public void onDisable(Plugin plugin) {} - - // ───────────────────────────────────────────────────────────────────────── - - private static class HelpCommand extends Command { - - private final String adminPerm; - - // Jede Seite ist eine Liste von Zeilen - // Seiten werden zur Laufzeit je nach Berechtigung zusammengebaut - HelpCommand(String name, String adminPerm) { - super(name, null); - this.adminPerm = adminPerm; - } - - @Override - public void execute(CommandSender sender, String[] args) { - if (args.length == 0) { - send(sender, "&7Nutze &e/" + getName() + " help &7für eine Befehlsübersicht."); - return; - } - if (!args[0].equalsIgnoreCase("help")) { - send(sender, "&cUnbekannter Unterbefehl. Nutze &e/" + getName() + " help&c."); - return; - } - - boolean isAdmin = !(sender instanceof ProxiedPlayer) - || sender.hasPermission(adminPerm) - || sender.hasPermission("statusapi.admin"); - - // Seiten aufbauen - List> pages = buildPages(isAdmin); - - int totalPages = pages.size(); - int page = 1; - - if (args.length >= 2) { - try { - page = Integer.parseInt(args[1].trim()); - } catch (NumberFormatException e) { - send(sender, "&cUngültige Seitenzahl. Nutze &e/" + getName() + " help <1-" + totalPages + ">&c."); - return; - } - } - - if (page < 1 || page > totalPages) { - send(sender, "&cSeite &e" + page + " &cexistiert nicht. Verfügbar: &e1&c-&e" + totalPages + "&c."); - return; - } - - // Header - send(sender, ""); - send(sender, "&8&m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"); - send(sender, " &6&lStatusAPI &8| &7Hilfe &8– &7Seite &e" + page + "&8/&e" + totalPages); - send(sender, "&8&m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"); - send(sender, ""); - - // Seiteninhalte - for (String line : pages.get(page - 1)) { - send(sender, line); - } - - send(sender, ""); - - // Navigation - sendNavigation(sender, getName(), page, totalPages); - send(sender, ""); - } - - /** Baut alle Seiten zusammen. Admins bekommen zusätzliche Seiten. */ - private List> buildPages(boolean isAdmin) { - List> pages = new ArrayList<>(); - - // ── Seite 1: Allgemein & Chat ───────────────────────────────────── - List p1 = new ArrayList<>(); - p1.add(" &e&lAllgemein"); - p1.add(" &a/verify &8– &7Account verifizieren"); - p1.add(" &a/forumlink &8(&7/fl&8) &8– &7Forum-Account verknüpfen"); - p1.add(" &a/forum &8– &7Forum-Benachrichtigungen"); - p1.add(" &a/go [server] &8(&7/wechsel, /switch&8) &8– &7Serverwechsel"); - p1.add(" &a/scoreboard &8(&7/sb&8) [hide|show] &8– &7Scoreboard umschalten"); - p1.add(""); - p1.add(" &e&lChat"); - p1.add(" &a/msg &8(&7/w, /tell&8) &8– &7Private Nachricht"); - p1.add(" &a/r &8(&7/reply, /antwort&8) &8– &7Auf PN antworten"); - p1.add(" &a/ignore &8(&7/block&8) &8– &7Spieler ignorieren"); - p1.add(" &a/unignore &8(&7/unblock&8) &8– &7Ignorierung aufheben"); - p1.add(" &a/channel [kanal] &8(&7/ch, /kanal&8) &8– &7Kanal wechseln"); - p1.add(" &a/chataus &8(&7/togglechat&8) &8– &7Chat-Empfang umschalten"); - pages.add(p1); - - // ── Seite 2: Chat (weiter) & Account-Verknüpfungen ─────────────── - List p2 = new ArrayList<>(); - p2.add(" &e&lChat (Fortsetzung)"); - p2.add(" &a/emoji &8(&7/emojis&8) &8– &7Alle Emojis anzeigen"); - p2.add(" &a/mentions &8(&7/mention&8) &8– &7Mention-Benachrichtigungen"); - p2.add(" &a/helpop &8– &7Team um Hilfe bitten"); - p2.add(" &a/report &8– &7Spieler melden"); - p2.add(" &a/chatbypass &8(&7/cbp&8) &8– &7ChatModule überspringen"); - p2.add(""); - p2.add(" &e&lAccount-Verknüpfungen"); - p2.add(" &a/discordlink &8(&7/dlink&8) &8– &7Discord verknüpfen"); - p2.add(" &a/telegramlink &8(&7/tlink&8) &8– &7Telegram verknüpfen"); - p2.add(" &a/unlink &8– &7Verknüpfung aufheben"); - pages.add(p2); - - // ── Admin-Seiten nur für Berechtigte ────────────────────────────── - if (isAdmin) { - // ── Seite 3: StatusAPI, AntiBot, Vanish ─────────────────────── - List p3 = new ArrayList<>(); - p3.add(" &c&lAdmin &8– &eStatusAPI & AntiBot"); - p3.add(" &c/statusapi reload &8(&7/sapi reload&8) &8– &7Scoreboard & Tablist neu laden"); - p3.add(" &c/netinfo &8– &7Proxy- & Systeminfos"); - p3.add(""); - p3.add(" &c/antibot status &8– &7AntiBot-Status anzeigen"); - p3.add(" &c/antibot clearblocks &8– &7IP-Blockliste leeren"); - p3.add(" &c/antibot unblock &8– &7IP entsperren"); - p3.add(" &c/antibot profile &8– &7Schutzprofil wechseln"); - p3.add(" &c/antibot reload &8– &7AntiBot neu laden"); - p3.add(""); - p3.add(" &c&lAdmin &8– &eVanish"); - p3.add(" &c/vanish [Spieler] &8(&7/v&8) &8– &7Unsichtbar schalten"); - p3.add(" &c/vanishlist &8(&7/vlist&8) &8– &7Unsichtbare Spieler anzeigen"); - pages.add(p3); - - // ── Seite 4: Chat-Admin, Reports, sonstige ──────────────────── - List p4 = new ArrayList<>(); - p4.add(" &c&lAdmin &8– &eChat-Administration"); - p4.add(" &c/broadcast &8(&7/bc, /alert&8) &8– &7Broadcast an alle"); - p4.add(" &c/chatmute [Min.] &8(&7/gmute&8) &8– &7Spieler muten"); - p4.add(" &c/chatunmute &8(&7/gunmute&8) &8– &7Mute aufheben"); - p4.add(" &c/socialspy &8(&7/spy&8) &8– &7Private Nachrichten mitlesen"); - p4.add(" &c/chatinfo &8– &7Chat-Info eines Spielers"); - p4.add(" &c/chathist [Spieler] [n] &8– &7Chat-Verlauf anzeigen"); - p4.add(" &c/chatreload &8– &7Chat-Konfiguration neu laden"); - p4.add(""); - p4.add(" &c&lAdmin &8– &eReports, Tools"); - p4.add(" &c/reports [all] &8– &7Offene Reports anzeigen"); - p4.add(" &c/reportclose &8– &7Report schließen"); - p4.add(" &c/automessage reload &8– &7AutoMessage neu laden"); - p4.add(" &c/bcmds reload &8– &7Custom-Commands neu laden"); - p4.add(" &c/cb &8– &7Command-Blocker verwalten"); - p4.add(" &c/scoreboard admin|player &8– &7Admin/Spieler-Ansicht wechseln"); - pages.add(p4); - } - - return pages; - } - - /** Sendet eine klickbare Navigationszeile mit ◀ Seite X/Y ▶ */ - private void sendNavigation(CommandSender sender, String cmd, int page, int total) { - // Für Konsole: einfacher Text - if (!(sender instanceof ProxiedPlayer)) { - String nav = " "; - if (page > 1) nav += "&7[&e◀&7] "; - nav += "&8Seite &e" + page + "&8/&e" + total; - if (page < total) nav += " &7[&e▶&7]"; - send(sender, nav); - return; - } - - // Für Spieler: klickbare Buttons - TextComponent line = new TextComponent(" "); - - // ◀ zurück - if (page > 1) { - TextComponent prev = new TextComponent( - ChatColor.translateAlternateColorCodes('&', "&7[&e◀&7] ")); - prev.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, - "/" + cmd + " help " + (page - 1))); - prev.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, - new ComponentBuilder(ChatColor.translateAlternateColorCodes('&', - "&7Seite &e" + (page - 1) + " &7anzeigen")).create())); - line.addExtra(prev); - } - - // Seitenanzeige - TextComponent mid = new TextComponent( - ChatColor.translateAlternateColorCodes('&', - "&8Seite &e" + page + "&8/&e" + total)); - line.addExtra(mid); - - // ▶ vor - if (page < total) { - TextComponent next = new TextComponent( - ChatColor.translateAlternateColorCodes('&', " &7[&e▶&7]")); - next.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, - "/" + cmd + " help " + (page + 1))); - next.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, - new ComponentBuilder(ChatColor.translateAlternateColorCodes('&', - "&7Seite &e" + (page + 1) + " &7anzeigen")).create())); - line.addExtra(next); - } - - sender.sendMessage(line); - } - - private static void send(CommandSender s, String text) { - s.sendMessage(new TextComponent( - ChatColor.translateAlternateColorCodes('&', text))); - } - } -}