# StatusAPI

Modulares BungeeCord-Plugin für Netzwerkbetrieb, Moderation und Integrationen.
Live-Status · Chat & Support · Verifizierung · Forum-Bridge · Broadcasts · AntiBot · BackendJoinGuard · Scoreboard

--- > **Rechtlicher Hinweis** > Dieses Projekt sowie alle enthaltenen Module, Quelltexte und Ressourcen dürfen nicht verändert, kopiert oder weiterverbreitet werden. Jegliche Nutzung, Modifikation oder Weitergabe ist ausschließlich mit vorheriger schriftlicher Genehmigung des Entwicklers gestattet. > © Entwickelt von M_Viper. Alle Rechte vorbehalten. --- ## Übersicht Dieses Repository enthält zwei aufeinander abgestimmte Plugins: | Plugin | Plattform | Zweck | |---|---|---| | **StatusAPI** | BungeeCord (Proxy) | HTTP-API, AntiBot, Chat, Moderation, Verify, Forum, Scoreboard | | **StatusAPIBridge** | Paper / Spigot (Backend) | Sendet Spielerdaten (Health, Kompass, Position, Ticket-Daten etc.) an StatusAPI | | **BackendJoinGuard** | Paper / Spigot (Backend) | Verhindert Direktjoins am Proxy vorbei | BackendJoinGuard kann eigenständig betrieben werden oder seine Schutzregeln automatisch per Sync von StatusAPI beziehen. --- ## Inhaltsverzeichnis - [StatusAPI](#statusapi-1) - [Module](#module) - [HTTP API](#http-api) - [Commands](#commands-statusapi) - [Permissions](#permissions-statusapi) - [Konfiguration](#konfiguration-statusapi) - [ScoreboardModule](#scoreboardmodule) - [Features](#features-scoreboard) - [Placeholders](#placeholders) - [Konfiguration](#konfiguration-scoreboard) - [Commands](#commands-scoreboard) - [StatusAPIBridge](#statusapibridge) - [BackendJoinGuard](#backendjoinguard-1) - [Betriebsarten](#betriebsarten) - [Commands & Permissions](#commands--permissions-backendjoinguard) - [Konfiguration](#konfiguration-backendjoinguard) - [TicketSystem-Integration](#ticketsystem-integration) - [Voraussetzungen & Installation](#voraussetzungen--installation) - [Troubleshooting](#troubleshooting) --- ## StatusAPI ### Module
Core & HTTP-API - Eigener HTTP-Server über konfigurierbaren Port (`statusapi.port`, Standard: `9191`) - JSON-Statusausgabe mit Spieler-, Prefix-, Bedrock-, Netzwerk- und Systemdaten - POST-Endpunkte für Broadcast, Broadcast-Abbruch, Forum-Notify und Attack-Events
ScoreboardModule - Vollständig konfigurierbares BungeeCord-Sidebar-Scoreboard - Flüssige Wave-Animation im Titel (10 fps, HSB-Farbwelle oder eigene Farben) - Gradient-Placeholder für farbige Zeilen - News-Ticker mit konfigurierbarem Text, Breite und Geschwindigkeit - Zeilenrotation – bis zu 20 Varianten pro Zeile - Separates Admin-Scoreboard und Supporter-Scoreboard mit eigenen Zeilen und Permissions - `/sb`-Command zum Ein-/Ausblenden und Umschalten zwischen Player/Supporter/Admin-Board
NetworkInfo - Live-Snapshot für Proxy, Uptime, RAM, CPU, Backends und Ping - Ingame-Befehl `/netinfo` für Statusprüfung - Discord-Webhook-Meldungen bei: Server-Start/-Stop, hoher RAM-/Spieler-Auslastung, Attack Detected/Stopped - Embed-Modus konfigurierbar: `compact` oder `detailed`
AntiBot - CPS-basierte Attack-Erkennung mit konfigurierbaren Start- und Stop-Schwellen - Pro-IP Rate-Limit mit temporären IP-Blocks - Optionaler VPN/Proxy/Hosting-Check via ip-api - Profile: `strict` und `high-traffic` - Laufzeitverwaltung über `/antibot` (Status, Blocks leeren, IP entblocken, Profil wechseln, Reload)
Chat & Moderation - Mehrere Chat-Kanäle, PM-System mit Reply, Ignore-System - Mute/Unmute, Mentions, Emoji-Unterstützung, SocialSpy - Chat-History und Admin-Infos - Report-System inkl. Close-Flow - Weiterleitung an Discord und Telegram (konfigurierbar)
Verify, Forum & CommandBlocker - Spieler-Verifizierung über Token - Forum-Linking und Forum-Benachrichtigungen ingame - Command-Blocker mit `/cb`-Verwaltung
AutoMessage & CustomCommands - Rotierende Auto-Nachrichten aus `messages.txt` (intervallgesteuert) - Eigene Command-Mappings über `customcommands.yml` - Optionaler `/chat`-Command (steuerbar per Konfiguration) - Reload via `/bcmds`
--- ### HTTP API Basis-URL: `http://:9191` – Port konfigurierbar über `statusapi.port`. | Methode | Pfad | Beschreibung | Auth | |---|---|---|---| | `GET` | `/` | Voller Netzwerk-Status als JSON | – | | `POST` | `/broadcast` | Broadcast senden oder planen | `x-api-key` | | `POST` | `/broadcast/cancel` | Geplanten Broadcast abbrechen | `x-api-key` | | `POST` | `/cancel` | Alias für `/broadcast/cancel` | `x-api-key` | | `POST` | `/forum/notify` | Forum-Notification an Proxy | `x-api-key` / Forum-Secret | | `POST` | `/network/attack` | Attack-Event an Discord-Webhook melden | `x-api-key` | | `GET` | `/network/backendguard/config` | Guard-Regeln für BackendJoinGuard Sync | `x-api-key` | | `POST` | `/scoreboard/health` | Spieler-HP aktualisieren | intern | | `POST` | `/scoreboard/compass` | Spieler-Yaw aktualisieren | intern | | `POST` | `/scoreboard/tps` | Server-TPS aktualisieren | intern | | `POST` | `/player/world` | Spieler-Welt aktualisieren | intern | | `POST` | `/player/data` | Koordinaten, Gamemode, Exp, Food, Speed | intern | | `POST` | `/ticket/update` | TicketSystem-Daten aktualisieren (von StatusAPIBridge) | intern | --- ### Commands (StatusAPI) #### Netzwerk & Schutz | Command | Beschreibung | |---|---| | `/netinfo` | Netzwerk- und Systemstatus anzeigen | | `/antibot status` | AntiBot-Status anzeigen | | `/antibot clearblocks` | Alle aktiven IP-Blocks entfernen | | `/antibot unblock ` | Einzelne IP entblocken | | `/antibot profile ` | Profil wechseln und speichern | | `/antibot reload` | AntiBot-Konfiguration neu laden | #### Verify & Forum | Command | Beschreibung | |---|---| | `/verify ` | Account verifizieren | | `/forumlink ` | Account mit Forum verknüpfen | | `/forum` | Forum-Benachrichtigungen anzeigen | #### Chat, Support & Moderation | Command | Beschreibung | |---|---| | `/channel [kanal]` | Kanal wechseln oder Liste anzeigen | | `/helpop ` | Support-Anfrage an Team | | `/msg ` | Private Nachricht senden | | `/r ` | Auf letzte PM antworten | | `/ignore ` | Spieler ignorieren | | `/unignore ` | Ignore entfernen | | `/chatmute [minuten]` | Spieler muten | | `/chatunmute ` | Mute aufheben | | `/chataus` | Chat-Empfang toggeln | | `/broadcast ` | Broadcast an alle senden | | `/emoji` | Emoji-Liste anzeigen | | `/socialspy` | PMs mitlesen toggeln | | `/chatreload` | Chat-Konfiguration neu laden | | `/chatinfo ` | Admin-Infos zu einem Spieler | | `/chathist [spieler] [anzahl]` | Chat-History anzeigen | | `/mentions` | Mention-Benachrichtigungen toggeln | | `/chatbypass` | Nächste Nachricht am Plugin vorbei senden | | `/discordlink`, `/dlink` | Discord-Linktoken erstellen | | `/telegramlink`, `/tlink` | Telegram-Linktoken erstellen | | `/unlink ` | Verknüpfung aufheben | | `/report ` | Spieler melden | | `/reports [all]` | Reports ansehen | | `/reportclose ` | Report schließen | #### CommandBlocker | Command | Beschreibung | |---|---| | `/cb add ` | Command blockieren | | `/cb remove ` | Blockierung aufheben | | `/cb list` | Alle blockierten Commands anzeigen | | `/cb reload` | CommandBlocker neu laden | #### CustomCommands | Command | Beschreibung | |---|---| | `/bcmds` | `customcommands.yml` neu laden | | `/chat ` | Text als Chat senden oder Slash-Command ausführen | --- ### Permissions (StatusAPI) | Permission | Beschreibung | |---|---| | `statusapi.update.notify` | Update-Benachrichtigungen empfangen | | `statusapi.netinfo` | Zugriff auf `/netinfo` | | `statusapi.antibot` | Zugriff auf `/antibot` | | `statusapi.automessage` | Zugriff auf `/automessage reload` | | `statusapi.bcmds` | Zugriff auf CustomCommand-Funktionen | | `chat.channel.local` | Zugang zum Local-Kanal | | `chat.channel.trade` | Zugang zum Trade-Kanal | | `chat.channel.staff` | Zugang zum Staff-Kanal | | `chat.helpop.receive` | HelpOp-Nachrichten empfangen | | `chat.mute` | Spieler muten / unmuten | | `chat.broadcast` | Broadcasts senden | | `chat.socialspy` | Private Nachrichten mitlesen | | `chat.admin.bypass` | Nicht mutbar / nicht blockierbar | | `chat.admin.notify` | Benachrichtigungen über Mutes und Blocks | | `chat.report` | Spieler reporten (`/report`) | | `chat.color` | Farbcodes (`&a`, `&b`, …) im Chat nutzen | | `chat.color.format` | Formatierungen (`&l`, `&o`, `&n`, …) im Chat nutzen | | `chat.filter.bypass` | Anti-Spam, Caps und Blacklist umgehen | | `commandblocker.bypass` | Command-Blocker umgehen | | `commandblocker.admin` | CommandBlocker verwalten (`/cb`) | --- ### Konfiguration (StatusAPI) #### `verify.properties` – Core, Verify, Broadcast, Forum, Port ```properties statusapi.port=9191 wp_verify_url=https://deine-domain.tld server..id= server..secret= broadcast.enabled=true broadcast.api_key= forum.enabled=true forum.api_secret= automessage.enabled=true automessage.interval=300 automessage.file=messages.txt automessage.prefix=&8[&bInfo&8] ``` #### `network-guard.properties` – NetworkInfo, Webhook, AntiBot, BackendJoinGuard ```properties networkinfo.enabled=true networkinfo.webhook.enabled=true networkinfo.webhook.url= networkinfo.webhook.embed_mode=detailed networkinfo.attack.api_key= antibot.enabled=true antibot.profile=high-traffic backendguard.enforcement_enabled=true backendguard.log_blocked_attempts=true backendguard.kick_message=&cBitte verbinde dich nur ueber den Proxy-Server. backendguard.allowed_proxy_ips=127.0.0.1,::1 backendguard.allowed_proxy_cidrs=10.0.0.0/24 backendguard.sync.api_key= ``` #### Weitere Konfigurationsdateien | Datei | Inhalt | |---|---| | `chat.yml` | Kanäle, Formate, PM, Reports, Filter, Logging, Discord/Telegram, Linking | | `blocked-commands.yml` | Liste der geblockten Commands | | `customcommands.yml` | Eigene Befehle, Aliase, Sender-Typen | | `messages.txt` | AutoMessage-Texte (Zeilen mit `#` und Leerzeilen werden ignoriert) | | `scoreboard.properties` | Scoreboard-Konfiguration (siehe ScoreboardModule) | --- ## ScoreboardModule Das ScoreboardModule zeigt ein vollständig konfigurierbares Sidebar-Scoreboard auf BungeeCord-Ebene. Spielerdaten werden über **StatusAPIBridge** vom Backend-Server in Echtzeit geliefert. Es gibt drei separate Scoreboards, die automatisch anhand der Spieler-Permission zugewiesen werden: | Board | Permission | Beschreibung | |---|---|---| | Spieler-Board | *(keine)* | Standard-Scoreboard für alle Spieler | | Supporter-Board | `statusapi.scoreboard.supporter` | Zeigt Ticket-Übersicht und Support-relevante Infos | | Admin-Board | `statusapi.scoreboard.admin` | Vollständige Server- und Ticket-Statistiken | > Admin hat Vorrang vor Supporter – hat ein Spieler beide Permissions, sieht er das Admin-Board. --- ### Features (Scoreboard) - **Wave-Titel-Animation** – flüssige HSB-Farbwelle (10 fps), Farben frei konfigurierbar - **Gradient-Placeholder** – `%gradient:FARBE1:FARBE2:TEXT%` für farbige Zeilen - **News-Ticker** – konfigurierbarer Lauftext von rechts nach links (10 fps), nur im Spieler-Board - **Zeilenrotation** – pro Zeile bis zu 20 Varianten, wechseln automatisch - **Drei Scoreboards** – Spieler, Supporter, Admin – je eigenes Objective, Titel und Zeilen - **Kompass** – Himmelsrichtungs-Anzeige mit farbigen Buchstaben, zentriert - **Herzen & Hunger** – `♥♥♥♥♥♡♡♡♡♡` / `◆◆◆◆◆◇◇◇◇◇` - **Separator-Styles** – frei wählbar (Striche, Wellen, Gradient, leer, …) - **Toggle-Command** – `/sb` zum Ein-/Ausblenden, `/sb admin` / `/sb player` zum Umschalten --- ### Placeholders #### Spieler-Placeholders (werden von StatusAPIBridge geliefert) | Placeholder | Beschreibung | |---|---| | `%player%` | Spielername | | `%rank%` | Rang (LuckPerms Prefix) | | `%server%` | Aktueller Server (erster Buchstabe groß) | | `%health%` | Leben als Herz-Symbole `♥♥♥♡♡` | | `%hearts%` | Leben als Zahl | | `%food%` | Hunger als Zahl (0–20) | | `%foodsym%` | Hunger als Symbole `◆◆◆◇◇` | | `%compass%` | Kompass-Balken zentriert | | `%ping%` | Ping in ms | | `%online%` | Anzahl Online-Spieler | | `%maxplayers%` | Max. Spieleranzahl | | `%money%` | Kontostand (Economy) | | `%time%` | Aktuelle Uhrzeit | | `%date%` | Aktuelles Datum | | `%playtime%` | Spielzeit der Session `TT HH:MM:SS` | | `%x%` `%y%` `%z%` | Koordinaten | | `%world%` | Welt-Name | | `%gamemode%` | Spielmodus (SURVIVAL, CREATIVE, …) | | `%exp%` | XP-Level | | `%speed%` | Laufgeschwindigkeit | | `%news%` | News-Ticker (nur Spieler-Board) | | `%line%` | Trennlinie (konfigurierbar) | #### Admin-Placeholders (BungeeCord-seitig) | Placeholder | Beschreibung | |---|---| | `%tps%` | Server-TPS | | `%ram%` | RAM-Nutzung | | `%proxymem%` | Proxy RAM | | `%uptime%` | Proxy-Laufzeit `HH:MM:SS` | | `%servers%` | Anzahl verbundener Backend-Server | #### TicketSystem-Placeholders Werden alle 5 Sekunden von **StatusAPIBridge** über `POST /ticket/update` an StatusAPI gesendet. Voraussetzung: **TicketSystem** läuft auf demselben Backend-Server wie StatusAPIBridge. | Placeholder | Verfügbar für | Beschreibung | |---|---|---| | `%ticket_my_open%` | Spieler, Supporter, Admin | Eigene aktive Tickets (OPEN + CLAIMED + FORWARDED) | | `%ticket_open%` | Supporter, Admin | Alle unbearbeiteten Tickets (Status: OPEN) | | `%ticket_claimed%` | Admin | Alle Tickets in Bearbeitung (Status: CLAIMED) | | `%ticket_rating_good%` | Admin | Positive Bewertungen gesamt | | `%ticket_rating_bad%` | Admin | Negative Bewertungen gesamt | | `%ticket_rating_pct%` | Admin | Prozentsatz positiver Bewertungen (oder `-` wenn keine) | #### Spezial-Placeholders | Placeholder | Beschreibung | |---|---| | `%gradient:F1:F2:TEXT%` | Farbverlauf von F1 nach F2 über TEXT (beliebig viele Stopps) | | `%line%` | Trennlinie aus `scoreboard.separator` | | `%news%` | News-Ticker-Fenster | Farben für Gradient: Hex (`#RRGGBB`, `&#RRGGBB`) oder Minecraft-Codes (`&0`–`&f`). --- ### Konfiguration (Scoreboard) Datei: `plugins/StatusAPI/scoreboard.properties` ```properties scoreboard.enabled=true scoreboard.update_interval=500 # Millisekunden, min. 250 scoreboard.title=&lViper Network # Kein Farbcode → Wave übernimmt Farbe scoreboard.admin_title=&l[Admin] Panel scoreboard.supporter_title=&l[Support] Panel scoreboard.admin_permission=statusapi.scoreboard.admin scoreboard.supporter_permission=statusapi.scoreboard.supporter # Wave-Animation scoreboard.rainbow.enabled=true scoreboard.rainbow.mode=wave # wave | chars | line scoreboard.rainbow.speed=10 # 1=sehr langsam, 10=normal, 50=schnell scoreboard.rainbow.colors=#FF0000,#FF6600,#FFFF00,#00FF00,#00FFFF,#0000FF,#FF00FF # News-Ticker (nur Spieler-Board) scoreboard.news.text=Willkommen auf Viper Network! scoreboard.news.prefix=&8[&6News&8] &r scoreboard.news.width=20 scoreboard.news.speed=1 # Zeilenrotation (Sekunden pro Variante) scoreboard.rotation_interval=4 # Separator für %line% scoreboard.separator=&8&m-------------------- # =================================================== # SPIELER-ZEILEN (max. 15 sichtbar) # scoreboard.lines.N = Variante 1 (dauerhaft) # scoreboard.lines.N.2 = Variante 2 (rotiert nach rotation_interval Sekunden) # =================================================== scoreboard.lines.1=%line% scoreboard.lines.2=%gradient:&b:&f:&b:&l> Player Info:% scoreboard.lines.3=&7%rank% &f%player% scoreboard.lines.4= scoreboard.lines.5=&7Spielzeit: &f%playtime% scoreboard.lines.5.2=&7Leben: &c%health% scoreboard.lines.5.3=&7Hunger: B4513%foodsym% scoreboard.lines.6= scoreboard.lines.7=%gradient:&b:&f:&b:&l> Money:% scoreboard.lines.8=&a$%money% scoreboard.lines.9= scoreboard.lines.10=%gradient:&b:&f:&b:&l> Server Info:% scoreboard.lines.11=&f%server% scoreboard.lines.11.2=&7Ping: &f%ping%ms &8| &7Online: &f%online% scoreboard.lines.12= scoreboard.lines.13=%news% scoreboard.lines.14=%line% scoreboard.lines.15=&7%compass% # =================================================== # SUPPORTER-ZEILEN # =================================================== scoreboard.supporter_lines.1=%line% scoreboard.supporter_lines.2=%gradient:&6:&f:&6:&l> Support Panel:% scoreboard.supporter_lines.3=&7%rank% &f%player% scoreboard.supporter_lines.4=&7Ping: &f%ping%ms &8| &7%server% scoreboard.supporter_lines.5= scoreboard.supporter_lines.6=%gradient:&6:&f:&6:&l> Tickets:% scoreboard.supporter_lines.7=&7Offen: &c%ticket_open% scoreboard.supporter_lines.8=&7Meine Tickets: &e%ticket_my_open% scoreboard.supporter_lines.9= scoreboard.supporter_lines.10=%gradient:&6:&f:&6:&l> Server Info:% scoreboard.supporter_lines.11=&7Online: &f%online% &8/ &7%maxplayers% scoreboard.supporter_lines.12=&7Zeit: &f%time% scoreboard.supporter_lines.13= scoreboard.supporter_lines.14=%line% scoreboard.supporter_lines.15=&7%compass% # =================================================== # ADMIN-ZEILEN # =================================================== scoreboard.admin_lines.1=%line% scoreboard.admin_lines.2=%gradient:&b:&f:&b:&l> Player Info:% scoreboard.admin_lines.3=&7%rank% &f%player% scoreboard.admin_lines.4=&7Gamemode: &f%gamemode% scoreboard.admin_lines.5=&7Leben: &c%health% scoreboard.admin_lines.5.2=&7Hunger: B4513%foodsym% scoreboard.admin_lines.6= scoreboard.admin_lines.7=%gradient:&b:&f:&b:&l> Server Info:% scoreboard.admin_lines.8=&f%server% &8| &7RAM: &e%ram% scoreboard.admin_lines.8.2=&7Proxy: &f%uptime% scoreboard.admin_lines.9= scoreboard.admin_lines.10=&7TPS: &a%tps% scoreboard.admin_lines.11= scoreboard.admin_lines.12=%gradient:&b:&f:&b:&l> Tickets:% scoreboard.admin_lines.13=&7Offen: &c%ticket_open% &8| &7Aktiv: &e%ticket_claimed% scoreboard.admin_lines.14=&7Bewertung: &a%ticket_rating_good%&8/&c%ticket_rating_bad% &7(&f%ticket_rating_pct%&7%&7) scoreboard.admin_lines.15=%line% scoreboard.admin_lines.15.2=&7%compass% ``` #### Separator-Stile | Stil | Wert | |---|---| | Standard | `&8&m--------------------` | | Doppelt | `&8&m====================` | | Wellig | `&8&m~~~~~~~~~~~~~~~~~~~~` | | Dünn | `&8&m────────────────────` | | Dick | `&8&m════════════════════` | | Diamanten | `&8◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇` | | Gradient | `%gradient:&8:&7:────────────────────%` | | Leer | *(leer lassen)* | --- ### Commands (Scoreboard) | Command | Aliase | Beschreibung | |---|---|---| | `/scoreboard` | `/sb`, `/togglesb` | Scoreboard ein-/ausblenden (Toggle) | | `/sb hide` | | Scoreboard ausblenden | | `/sb show` | | Scoreboard einblenden | | `/sb player` | | Spieler-Scoreboard anzeigen | | `/sb supporter` | | Supporter-Scoreboard anzeigen (Permission erforderlich) | | `/sb admin` | | Admin-Scoreboard anzeigen (Permission erforderlich) | **Permissions:** | Permission | Beschreibung | |---|---| | `statusapi.scoreboard.admin` | Admin-Scoreboard + `/sb admin` | | `statusapi.scoreboard.supporter` | Supporter-Scoreboard (automatisch, kein Command nötig) | --- ## StatusAPIBridge StatusAPIBridge läuft auf jedem **Backend-Server** (Spigot/Paper) und sendet Spielerdaten in Echtzeit an StatusAPI. ### Gesendete Daten | Datenpunkt | Endpunkt | Beschreibung | |---|---|---| | Health | `POST /scoreboard/health` | Aktuelle HP | | Kompass (Yaw) | `POST /scoreboard/compass` | Blickrichtung (0–360°) | | TPS | `POST /scoreboard/tps` | Server-TPS | | Welt | `POST /player/world` | Welt-Name | | Position, Gamemode, Exp, Food, Speed | `POST /player/data` | Erweiterte Spielerdaten | | TicketSystem-Daten | `POST /ticket/update` | Ticket-Statistiken (alle 5 Sekunden, falls TicketSystem installiert) | ### TicketSystem-Daten (automatisch) Ist das **TicketSystem**-Plugin auf demselben Backend-Server installiert, liest StatusAPIBridge die Daten per Reflection und sendet sie alle 5 Sekunden: - Globale Werte (Anzahl offener Tickets, Tickets in Bearbeitung, Bewertungen) – nur bei Änderung - Pro Spieler: Anzahl eigener aktiver Tickets (OPEN + CLAIMED + FORWARDED) Es wird keine harte Abhängigkeit zum TicketSystem benötigt – fehlt es, passiert nichts. ### Konfiguration (StatusAPIBridge) Datei: `plugins/StatusAPIBridge/config.yml` ```yaml statusapi-url: "http://127.0.0.1:9191" scoreboard-sync-interval-ticks: 20 # Ticks zwischen Daten-Pushes (20 = 1s) compass-threshold: 0.5 # Minimale Yaw-Änderung für Kompass-Update (Grad) ``` --- ## BackendJoinGuard BackendJoinGuard verhindert, dass Spieler Backend-Server direkt betreten und damit den Proxy-Schutz umgehen. Das Plugin prüft beim Login die Quell-IP – nur konfigurierte Proxy-IPs oder CIDR-Netze werden durchgelassen. > **Wichtig:** BackendJoinGuard kommt auf **jeden Backend-Server**, nicht auf den Proxy. --- ### Betriebsarten | Modus | Beschreibung | |---|---| | **Standalone** | Nutzt ausschließlich die lokale `config.yml` | | **StatusAPI Sync** | Lädt Schutzregeln regelmäßig von StatusAPI; lokale Werte bleiben als Fallback erhalten | --- ### Commands & Permissions (BackendJoinGuard) | Command | Permission | Beschreibung | |---|---|---| | `/backendguard reload` | `backendguard.admin` | Config neu laden und bei aktivem Sync sofort neu abrufen | --- ### Konfiguration (BackendJoinGuard) Datei: `plugins/BackendJoinGuard/config.yml` #### Lokaler Schutz ```yml enforcement-enabled: true log-blocked-attempts: true kick-message: "&cBitte verbinde dich nur ueber den Proxy-Server." allowed-proxy-ips: - "127.0.0.1" - "::1" - "185.123.45.67" allowed-proxy-cidrs: - "10.0.0.0/24" ``` #### StatusAPI Sync ```yml statusapi-sync: enabled: true base-url: "http://127.0.0.1:9191" endpoint-path: "/network/backendguard/config" api-key: "DEIN_SYNC_KEY" interval-seconds: 60 log-sync-errors: true ``` #### Typische Szenarien | Szenario | `allowed-proxy-ips` | `base-url` | |---|---|---| | Alles auf einer Maschine | `127.0.0.1`, `::1` | `http://127.0.0.1:9191` | | Proxy auf separatem Host | `185.123.45.67` | `http://185.123.45.67:9191` | | Internes Netz (CIDR) | `10.0.0.10` + CIDR `10.0.0.0/24` | `http://10.0.0.10:9191` | --- ## TicketSystem-Integration StatusAPI und StatusAPIBridge unterstützen eine optionale Integration mit dem **TicketSystem**-Plugin. Die Verbindung ist vollständig Reflection-basiert – es sind keine harten Abhängigkeiten nötig. ### Architektur ``` TicketSystem (Bukkit) ↓ Reflection (alle 5s) StatusAPIBridge → POST /ticket/update → StatusAPI (BungeeCord) → Scoreboard ``` ### Voraussetzungen - TicketSystem ist auf demselben Backend-Server installiert wie StatusAPIBridge - StatusAPIBridge sendet die Daten automatisch – keine zusätzliche Konfiguration nötig ### Verfügbare Placeholder im Scoreboard | Placeholder | Für wen | Beschreibung | |---|---|---| | `%ticket_my_open%` | Spieler, Supporter, Admin | Eigene aktive Tickets (OPEN + CLAIMED + FORWARDED) | | `%ticket_open%` | Supporter, Admin | Alle offenen Tickets (noch unbearbeitet) | | `%ticket_claimed%` | Admin | Alle Tickets in Bearbeitung | | `%ticket_rating_good%` | Admin | Positive Bewertungen gesamt | | `%ticket_rating_bad%` | Admin | Negative Bewertungen gesamt | | `%ticket_rating_pct%` | Admin | Prozentsatz positiver Bewertungen | ### PlaceholderAPI (PAPI) Das TicketSystem selbst stellt über die Klasse `TicketPlaceholderExpansion` ebenfalls PAPI-Placeholder bereit (Prefix: `ticketsystem`): | PAPI-Placeholder | Beschreibung | |---|---| | `%ticketsystem_my_open%` | Eigene aktive Tickets des Spielers | | `%ticketsystem_admin_open%` | Alle offenen Tickets (Status: OPEN) | | `%ticketsystem_admin_claimed%` | Alle Tickets in Bearbeitung (Status: CLAIMED) | | `%ticketsystem_admin_rating_good%` | Positive Bewertungen gesamt | | `%ticketsystem_admin_rating_bad%` | Negative Bewertungen gesamt | | `%ticketsystem_admin_rating_total%` | Alle Bewertungen gesamt | | `%ticketsystem_admin_rating_percent%` | Prozentsatz positiver Bewertungen | > Diese PAPI-Placeholder sind unabhängig von StatusAPI und können in jedem PAPI-kompatiblen Plugin genutzt werden (z.B. andere Scoreboard-Plugins, Chat-Plugins). --- ## Voraussetzungen & Installation ### Voraussetzungen | Komponente | Pflicht | Optional | |---|---|---| | BungeeCord Proxy | ✅ | | | Minecraft 1.20+ | ✅ | | | Java 8+ | ✅ | | | LuckPerms | | ✅ | | Geyser-BungeeCord | | ✅ | | Discord Webhook / Bot | | ✅ | | Telegram Bot | | ✅ | | WordPress / Forum-Backend | | ✅ | | TicketSystem (Bukkit) | | ✅ | | PlaceholderAPI (Bukkit) | | ✅ | ### StatusAPI installieren (Proxy) ``` 1. StatusAPI.jar → plugins/ auf dem Proxy 2. Proxy starten → Konfigurationsdateien werden erzeugt 3. Proxy stoppen 4. Konfigurationen anpassen: verify.properties · chat.yml · network-guard.properties · scoreboard.properties 5. Proxy neu starten ``` ### StatusAPIBridge installieren (Backend) ``` 1. StatusAPIBridge.jar → plugins/ auf jedem Backend-Server 2. Server starten → config.yml wird erzeugt 3. config.yml anpassen → statusapi-url auf Proxy-IP setzen 4. Server neu starten ``` ### BackendJoinGuard installieren (Backend) ``` 1. BackendJoinGuard.jar → plugins/ auf jedem Backend-Server 2. Server starten → config.yml wird erzeugt 3. config.yml anpassen 4. Server neu starten oder /backendguard reload ausführen ``` ### StatusPulse Companion (WordPress) Im Repository unter `wordpress/statuspulse` liegt ein WordPress-Admin-Plugin. Damit lassen sich StatusAPI-Verbindung, Attack-Key und Attack-Testflows direkt im WordPress-Backend bedienen. Erfordert StatusAPI ≥ 4.1.0. --- ## Troubleshooting ### StatusAPI | Problem | Mögliche Ursachen & Lösung | |---|---| | API nicht erreichbar | `statusapi.port` prüfen · Firewall / Portfreigabe prüfen · Proxy-Konsole auf HTTP-Server-Startmeldung prüfen | | Attack-Meldungen fehlen in Discord | `networkinfo.webhook.enabled` und `.url` prüfen · `networkinfo.attack.enabled` und `api_key`-Header prüfen | | AntiBot zu hart / zu weich | `antibot.profile` auf `strict` oder `high-traffic` setzen · Schwellwerte in `network-guard.properties` feinjustieren · `/antibot reload` ausführen | ### ScoreboardModule | Problem | Mögliche Ursachen & Lösung | |---|---| | Scoreboard verschwindet nach Join | `scoreboard.update_interval` muss mind. 250ms sein – nicht auf `1` setzen | | Wave-Titel hängt / springt | `scoreboard.rainbow.speed` reduzieren · Empfohlen: 10–30 | | Hex-Farben werden nicht angezeigt | Titel ohne feste Farb-Codes schreiben: `&lViper Network` statt `&6&lViper Network` | | News-Ticker stoppt kurz | Normal – 4-Zeichen-Pause zwischen Durchläufen · `scoreboard.news.speed` erhöhen | | Kompass nicht mittig | `COMPASS_WIN` in der Quellcode-Konstante anpassen (Standard: 19) | | `too many queued packets` | `update_interval` zu niedrig – auf mind. 500ms erhöhen | | Supporter-Board wird nicht angezeigt | Permission `statusapi.scoreboard.supporter` prüfen · `scoreboard.supporter_permission` in `scoreboard.properties` prüfen | | Supporter sieht Admin-Board | Normal – Admin-Permission hat Vorrang über Supporter-Permission | ### StatusAPIBridge | Problem | Mögliche Ursachen & Lösung | |---|---| | Herzen zeigen immer voll | StatusAPIBridge nicht installiert oder `statusapi-url` falsch konfiguriert | | Kompass bewegt sich nicht | Bridge läuft, aber Spieler steht still – PlayerMoveEvent sendet nur bei Bewegung | | Ticket-Placeholder zeigen immer 0 | TicketSystem nicht auf demselben Server wie StatusAPIBridge · Konsole auf `[TicketPush]`-Fehler prüfen | ### BackendJoinGuard | Problem | Mögliche Ursachen & Lösung | |---|---| | Spieler werden trotz Proxy geblockt | Proxy-IP in `allowed-proxy-ips` korrekt eintragen · Bei mehreren Segmenten CIDR-Eintrag nutzen | | Sync mit StatusAPI funktioniert nicht | `base-url` und Port prüfen · `api-key` muss identisch zu `backendguard.sync.api_key` sein |