diff --git a/README.md b/README.md
index a279436..f260729 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@
Modulares BungeeCord-Plugin für Netzwerkbetrieb, Moderation und Integrationen.
- Live-Status · Chat & Support · Verifizierung · Forum-Bridge · Broadcasts · AntiBot · BackendJoinGuard
+ Live-Status · Chat & Support · Verifizierung · Forum-Bridge · Broadcasts · AntiBot · BackendJoinGuard · Scoreboard
---
@@ -26,7 +26,8 @@ Dieses Repository enthält zwei aufeinander abgestimmte Plugins:
| Plugin | Plattform | Zweck |
|---|---|---|
-| **StatusAPI** | BungeeCord (Proxy) | HTTP-API, AntiBot, Chat, Moderation, Verify, Forum |
+| **StatusAPI** | BungeeCord (Proxy) | HTTP-API, AntiBot, Chat, Moderation, Verify, Forum, Scoreboard |
+| **StatusAPIBridge** | Paper / Spigot (Backend) | Sendet Spielerdaten (Health, Kompass, Position, 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.
@@ -41,6 +42,12 @@ BackendJoinGuard kann eigenständig betrieben werden oder seine Schutzregeln aut
- [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)
@@ -63,6 +70,19 @@ BackendJoinGuard kann eigenständig betrieben werden oder seine Schutzregeln aut
+
+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 mit eigenen Zeilen
+- `/sb`-Command zum Ein-/Ausblenden und Umschalten zwischen Player/Admin-Board
+
+
+
NetworkInfo
@@ -129,6 +149,11 @@ Basis-URL: `http://:9191` – Port konfigurierbar über `statusapi.por
| `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 |
---
@@ -273,6 +298,204 @@ backendguard.sync.api_key=
| `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.
+
+### 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)
+- **Zeilenrotation** – pro Zeile bis zu 20 Varianten, wechseln automatisch
+- **Admin-Scoreboard** – eigenes Objective mit eigenen Zeilen, automatisch für Spieler mit Permission
+- **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 |
+| `%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 |
+
+#### 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.admin_permission=statusapi.scoreboard.admin
+
+# 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
+scoreboard.news.text=Willkommen auf Viper Network!
+scoreboard.news.prefix=&8[&6News&8] &r # Leer lassen zum Deaktivieren
+scoreboard.news.width=20
+scoreboard.news.speed=1
+
+# Zeilenrotation (Sekunden pro Variante)
+scoreboard.rotation_interval=4
+
+# Separator für %line%
+scoreboard.separator=&8&m--------------------
+
+# Zeilen (max. 15 sichtbar, bis zu 20 definierbar)
+# scoreboard.lines.N = Variante 1 (dauerhaft)
+# scoreboard.lines.N.2 = Variante 2 (rotiert nach rotation_interval Sekunden)
+# scoreboard.lines.N.3 = Variante 3 usw.
+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%
+
+# Admin-Zeilen (eigenes Objective, automatisch für Spieler mit Admin-Permission)
+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=&7Spieler: &f%online% &8| &7%maxplayers%
+scoreboard.admin_lines.13=%news%
+scoreboard.admin_lines.14=%line%
+scoreboard.admin_lines.15=&7%compass%
+scoreboard.admin_lines.15.2=&7Pos: X:&f%x% &7Y:&f%y% &7Z:&f%z%
+```
+
+#### 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` | | Player-Scoreboard anzeigen |
+| `/sb admin` | | Admin-Scoreboard anzeigen (Permission erforderlich) |
+
+**Permission:** `statusapi.scoreboard.admin` – Admin-Scoreboard + `/sb admin`
+
+---
+
+## 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 |
+
+### 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)
+```
---
@@ -361,19 +584,28 @@ statusapi-sync:
### StatusAPI installieren (Proxy)
```
-1. StatusAPI.jar → plugins/ auf dem Proxy
-2. Proxy starten → Konfigurationsdateien werden erzeugt
+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 · blocked-commands.yml
+ 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
+2. Server starten → config.yml wird erzeugt
3. config.yml anpassen
4. Server neu starten oder /backendguard reload ausführen
```
@@ -396,9 +628,27 @@ Erfordert StatusAPI ≥ 4.1.0.
| 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 |
+
+### 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 |
+
### 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 · Proxy-Konfiguration (Velocity/BungeeCord) prüfen |
-| Sync mit StatusAPI funktioniert nicht | `base-url` und Port prüfen · `api-key` muss identisch zu `backendguard.sync.api_key` sein · `log-sync-errors: true` setzen und Konsole prüfen |
\ No newline at end of file
+| 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 |
\ No newline at end of file