771 lines
28 KiB
Markdown
771 lines
28 KiB
Markdown
# StatusAPI
|
||
|
||
<p align="center">
|
||
<img src="https://img.shields.io/badge/Version-4.1.0-0B63CE?style=for-the-badge" />
|
||
<img src="https://img.shields.io/badge/Platform-BungeeCord-D48700?style=for-the-badge" />
|
||
<img src="https://img.shields.io/badge/Minecraft-1.20+-1E9E5A?style=for-the-badge" />
|
||
<img src="https://img.shields.io/badge/Java-8+-C0392B?style=for-the-badge" />
|
||
</p>
|
||
|
||
<p align="center">
|
||
Modulares BungeeCord-Plugin für Netzwerkbetrieb, Moderation und Integrationen.<br>
|
||
Live-Status · Chat & Support · Verifizierung · Forum-Bridge · Broadcasts · AntiBot · BackendJoinGuard · Scoreboard
|
||
</p>
|
||
|
||
---
|
||
|
||
> **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
|
||
|
||
<details>
|
||
<summary><strong>Core & HTTP-API</strong></summary>
|
||
|
||
- 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
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary><strong>ScoreboardModule</strong></summary>
|
||
|
||
- 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
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary><strong>NetworkInfo</strong></summary>
|
||
|
||
- 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`
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary><strong>AntiBot</strong></summary>
|
||
|
||
- 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)
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary><strong>Chat & Moderation</strong></summary>
|
||
|
||
- 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)
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary><strong>Verify, Forum & CommandBlocker</strong></summary>
|
||
|
||
- Spieler-Verifizierung über Token
|
||
- Forum-Linking und Forum-Benachrichtigungen ingame
|
||
- Command-Blocker mit `/cb`-Verwaltung
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary><strong>AutoMessage & CustomCommands</strong></summary>
|
||
|
||
- Rotierende Auto-Nachrichten aus `messages.txt` (intervallgesteuert)
|
||
- Eigene Command-Mappings über `customcommands.yml`
|
||
- Optionaler `/chat`-Command (steuerbar per Konfiguration)
|
||
- Reload via `/bcmds`
|
||
|
||
</details>
|
||
|
||
---
|
||
|
||
### HTTP API
|
||
|
||
Basis-URL: `http://<proxy-ip>: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 <ip>` | Einzelne IP entblocken |
|
||
| `/antibot profile <strict\|high-traffic>` | Profil wechseln und speichern |
|
||
| `/antibot reload` | AntiBot-Konfiguration neu laden |
|
||
|
||
#### Verify & Forum
|
||
|
||
| Command | Beschreibung |
|
||
|---|---|
|
||
| `/verify <token>` | Account verifizieren |
|
||
| `/forumlink <token>` | Account mit Forum verknüpfen |
|
||
| `/forum` | Forum-Benachrichtigungen anzeigen |
|
||
|
||
#### Chat, Support & Moderation
|
||
|
||
| Command | Beschreibung |
|
||
|---|---|
|
||
| `/channel [kanal]` | Kanal wechseln oder Liste anzeigen |
|
||
| `/helpop <text>` | Support-Anfrage an Team |
|
||
| `/msg <spieler> <text>` | Private Nachricht senden |
|
||
| `/r <text>` | Auf letzte PM antworten |
|
||
| `/ignore <spieler>` | Spieler ignorieren |
|
||
| `/unignore <spieler>` | Ignore entfernen |
|
||
| `/chatmute <spieler> [minuten]` | Spieler muten |
|
||
| `/chatunmute <spieler>` | Mute aufheben |
|
||
| `/chataus` | Chat-Empfang toggeln |
|
||
| `/broadcast <text>` | Broadcast an alle senden |
|
||
| `/emoji` | Emoji-Liste anzeigen |
|
||
| `/socialspy` | PMs mitlesen toggeln |
|
||
| `/chatreload` | Chat-Konfiguration neu laden |
|
||
| `/chatinfo <spieler>` | 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 <discord\|telegram\|all>` | Verknüpfung aufheben |
|
||
| `/report <spieler> <grund>` | Spieler melden |
|
||
| `/reports [all]` | Reports ansehen |
|
||
| `/reportclose <id>` | Report schließen |
|
||
|
||
#### CommandBlocker
|
||
|
||
| Command | Beschreibung |
|
||
|---|---|
|
||
| `/cb add <command>` | Command blockieren |
|
||
| `/cb remove <command>` | Blockierung aufheben |
|
||
| `/cb list` | Alle blockierten Commands anzeigen |
|
||
| `/cb reload` | CommandBlocker neu laden |
|
||
|
||
#### CustomCommands
|
||
|
||
| Command | Beschreibung |
|
||
|---|---|
|
||
| `/bcmds` | `customcommands.yml` neu laden |
|
||
| `/chat <text>` | 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.<Name>.id=<id>
|
||
server.<Name>.secret=<secret>
|
||
broadcast.enabled=true
|
||
broadcast.api_key=<key>
|
||
forum.enabled=true
|
||
forum.api_secret=<key>
|
||
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=<discord_webhook>
|
||
networkinfo.webhook.embed_mode=detailed
|
||
networkinfo.attack.api_key=<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=<sync_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 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 | |