README.md aktualisiert
This commit is contained in:
266
README.md
266
README.md
@@ -9,7 +9,7 @@
|
||||
|
||||
<p align="center">
|
||||
Modulares BungeeCord-Plugin für Netzwerkbetrieb, Moderation und Integrationen.<br>
|
||||
Live-Status · Chat & Support · Verifizierung · Forum-Bridge · Broadcasts · AntiBot · BackendJoinGuard
|
||||
Live-Status · Chat & Support · Verifizierung · Forum-Bridge · Broadcasts · AntiBot · BackendJoinGuard · Scoreboard
|
||||
</p>
|
||||
|
||||
---
|
||||
@@ -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
|
||||
|
||||
</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 mit eigenen Zeilen
|
||||
- `/sb`-Command zum Ein-/Ausblenden und Umschalten zwischen Player/Admin-Board
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><strong>NetworkInfo</strong></summary>
|
||||
|
||||
@@ -129,6 +149,11 @@ Basis-URL: `http://<proxy-ip>: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=<sync_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 |
|
||||
| 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 |
|
||||
Reference in New Issue
Block a user