diff --git a/README.md b/README.md index f260729..ff9350f 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ 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, etc.) an StatusAPI | +| **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. @@ -52,6 +52,7 @@ BackendJoinGuard kann eigenständig betrieben werden oder seine Schutzregeln aut - [Betriebsarten](#betriebsarten) - [Commands & Permissions](#commands--permissions-backendjoinguard) - [Konfiguration](#konfiguration-backendjoinguard) +- [TicketSystem-Integration](#ticketsystem-integration) - [Voraussetzungen & Installation](#voraussetzungen--installation) - [Troubleshooting](#troubleshooting) @@ -78,8 +79,8 @@ BackendJoinGuard kann eigenständig betrieben werden oder seine Schutzregeln aut - 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 +- Separates Admin-Scoreboard und Supporter-Scoreboard mit eigenen Zeilen und Permissions +- `/sb`-Command zum Ein-/Ausblenden und Umschalten zwischen Player/Supporter/Admin-Board @@ -154,6 +155,7 @@ Basis-URL: `http://:9191` – Port konfigurierbar über `statusapi.por | `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 | --- @@ -306,13 +308,25 @@ backendguard.sync.api_key= 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) +- **News-Ticker** – konfigurierbarer Lauftext von rechts nach links (10 fps), nur im Spieler-Board - **Zeilenrotation** – pro Zeile bis zu 20 Varianten, wechseln automatisch -- **Admin-Scoreboard** – eigenes Objective mit eigenen Zeilen, automatisch für Spieler mit Permission +- **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, …) @@ -346,7 +360,7 @@ Das ScoreboardModule zeigt ein vollständig konfigurierbares Sidebar-Scoreboard | `%gamemode%` | Spielmodus (SURVIVAL, CREATIVE, …) | | `%exp%` | XP-Level | | `%speed%` | Laufgeschwindigkeit | -| `%news%` | News-Ticker | +| `%news%` | News-Ticker (nur Spieler-Board) | | `%line%` | Trennlinie (konfigurierbar) | #### Admin-Placeholders (BungeeCord-seitig) @@ -359,6 +373,19 @@ Das ScoreboardModule zeigt ein vollständig konfigurierbares Sidebar-Scoreboard | `%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 | @@ -380,7 +407,9 @@ 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 @@ -388,9 +417,9 @@ 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 +# News-Ticker (nur Spieler-Board) scoreboard.news.text=Willkommen auf Viper Network! -scoreboard.news.prefix=&8[&6News&8] &r # Leer lassen zum Deaktivieren +scoreboard.news.prefix=&8[&6News&8] &r scoreboard.news.width=20 scoreboard.news.speed=1 @@ -400,10 +429,11 @@ scoreboard.rotation_interval=4 # Separator für %line% scoreboard.separator=&8&m-------------------- -# Zeilen (max. 15 sichtbar, bis zu 20 definierbar) +# =================================================== +# SPIELER-ZEILEN (max. 15 sichtbar) # 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% @@ -423,7 +453,28 @@ scoreboard.lines.13=%news% scoreboard.lines.14=%line% scoreboard.lines.15=&7%compass% -# Admin-Zeilen (eigenes Objective, automatisch für Spieler mit Admin-Permission) +# =================================================== +# 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% @@ -437,11 +488,11 @@ 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% +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 @@ -466,10 +517,15 @@ scoreboard.admin_lines.15.2=&7Pos: X:&f%x% &7Y:&f%y% &7Z:&f%z% | `/scoreboard` | `/sb`, `/togglesb` | Scoreboard ein-/ausblenden (Toggle) | | `/sb hide` | | Scoreboard ausblenden | | `/sb show` | | Scoreboard einblenden | -| `/sb player` | | Player-Scoreboard anzeigen | +| `/sb player` | | Spieler-Scoreboard anzeigen | | `/sb admin` | | Admin-Scoreboard anzeigen (Permission erforderlich) | -**Permission:** `statusapi.scoreboard.admin` – Admin-Scoreboard + `/sb admin` +**Permissions:** + +| Permission | Beschreibung | +|---|---| +| `statusapi.scoreboard.admin` | Admin-Scoreboard + `/sb admin` | +| `statusapi.scoreboard.supporter` | Supporter-Scoreboard (automatisch, kein Command nötig) | --- @@ -486,6 +542,16 @@ StatusAPIBridge läuft auf jedem **Backend-Server** (Spigot/Paper) und sendet Sp | 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) @@ -566,6 +632,52 @@ statusapi-sync: --- +## 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 @@ -580,6 +692,8 @@ statusapi-sync: | Discord Webhook / Bot | | ✅ | | Telegram Bot | | ✅ | | WordPress / Forum-Backend | | ✅ | +| TicketSystem (Bukkit) | | ✅ | +| PlaceholderAPI (Bukkit) | | ✅ | ### StatusAPI installieren (Proxy) @@ -638,6 +752,8 @@ Erfordert StatusAPI ≥ 4.1.0. | 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 @@ -645,6 +761,7 @@ Erfordert StatusAPI ≥ 4.1.0. |---|---| | 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