# 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 |