diff --git a/README.md b/README.md index 3cabf55..c3fb931 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # StatusAPI – BungeeCord Plugin -> **Version:** 4.1.2 · **Autor:** M_Viper · **Plattform:** BungeeCord · **Minecraft:** 1.20+ +> **Version:** 4.1.4 · **Autor:** M_Viper · **Plattform:** BungeeCord · **Minecraft:** 1.20+ StatusAPI ist ein umfassendes BungeeCord-Plugin, das als zentrale Schaltstelle für dein Minecraft-Netzwerk dient. Es vereint Chat-Management, Anti-Bot-Schutz, Scoreboard, Tablist, Wirtschaft, Vanish, Forum-Anbindung, Spielerstatistiken, einen integrierten HTTP-Server und vieles mehr in einem vollständig modularen Plugin. @@ -29,6 +29,7 @@ StatusAPI ist ein umfassendes BungeeCord-Plugin, das als zentrale Schaltstelle f - [4.15 StatsModule](#415-statsmodule) - [4.16 CustomCommandModule](#416-customcommandmodule) - [4.17 HelpModule](#417-helpmodule) + - [4.18 AfkModule](#418-afkmodule) 5. [HTTP-API](#5-http-api) 6. [Globales Rate-Limit-Framework](#6-globales-rate-limit-framework) 7. [Update-Checker](#7-update-checker) @@ -89,6 +90,7 @@ Alle Konfigurationsdateien befinden sich unter `/plugins/StatusAPI/` und werden | `customcommands.yml` | Eigene Proxy-Befehle (wird beim ersten Start erstellt) | | `tablist.properties` | Tablist-Layout, Header/Footer, Spalten, Server-Symbole (wird beim ersten Start erstellt) | | `serverswitcher.properties` | Konfiguration des ServerSwitchers – Befehl, Farben, Whitelist | +| `afk.properties` | AFK-Modul – Timeout, Title-Nachrichten-Paare, Animationen | | `broadcasts.schedules` | Interne Datei – gespeicherte, geplante Broadcasts (wird automatisch verwaltet) | | `antibot-security.log` | Sicherheitslog des AntiBotModuls – geblockte IPs, VPN/Proxy-Treffer | | `mutes.dat` | Persistente Speicherung aktiver Mutes (automatisch) | @@ -134,7 +136,7 @@ Spieler können sich über `/msg` private Nachrichten schicken und mit `/r` auf **Spieler-Ignore (Blocking)** -Spieler können andere Spieler mit `/ignore` blockieren. Geblockte Spieler können keine Nachrichten, PMs oder HelpOps an den blocker senden. Der Blockstatus wird persistent in `blocks.dat` gespeichert und überlebt Serverneustarts. +Spieler können andere Spieler mit `/ignore` blockieren. Geblockte Spieler können keine Nachrichten, PMs oder HelpOps an den Blocker senden. Der Blockstatus wird persistent in `blocks.dat` gespeichert und überlebt Serverneustarts. **Mute-System** @@ -888,6 +890,98 @@ statusapi.help.permission=statusapi.admin --- +### 4.18 AfkModule + +Das AfkModule erkennt inaktive Spieler automatisch und bietet einen manuellen `/afk`-Befehl. AFK-Spieler erhalten einen dauerhaft sichtbaren Title-Screen und werden intern als AFK markiert (z. B. für Scoreboard-Platzhalter und Bridge-Integrationen). + +**Funktionen:** + +- Manuelles Umschalten des AFK-Status per `/afk` +- Automatische AFK-Erkennung nach konfigurierbarer Inaktivitätsdauer (Standard: 5 Minuten) +- Aufhebung des AFK-Status bei jeder Chat-Eingabe oder Bewegung (via StatusAPIBridge) +- Dauerhaft sichtbarer Title-Screen solange der Spieler AFK ist – kein automatisches Ausblenden +- Zufällig gewählte, thematisch passende Title-Nachrichten-Paare (AFK-Nachricht + Rückkehr-Nachricht) +- Vollständige Gradient-Unterstützung im Title (`%gradient:FARBE1:FARBE2:...:TEXT%`) +- Bypass-Permission für Spieler, die nicht automatisch AFK gesetzt werden sollen + +**Title-Nachrichten-Paare** + +Für jeden AFK-Eintritt wird zufällig ein Nachrichten-Paar gewählt und für die gesamte AFK-Dauer beibehalten. Beim Verlassen des AFK-Status wird die zugehörige Rückkehr-Nachricht angezeigt. Bis zu 20 Paare können konfiguriert werden. + +Das Format pro Paar: `setTitle|setSubtitle||unsetTitle|unsetSubtitle` + +- `|` trennt Title und Subtitle innerhalb einer Seite +- `||` trennt die AFK-Nachricht (links) von der Rückkehr-Nachricht (rechts) + +Vorkonfigurierte Beispiele (Auszug aus dem Standard-Config): + +| AFK-Title | AFK-Subtitle | Rückkehr-Title | Rückkehr-Subtitle | +|---|---|---|---| +| `[AFK]` (Gradient) | Wahrscheinlich auf dem Klo... | Willkommen zurück! (Gradient) | War das Klo sauber? | +| `[AFK]` (Gradient) | Eingeschlafen. Bitte nicht wecken. | Aufgewacht! (Gradient) | Der Wecker hat funktioniert | +| `[AFK]` (Gradient) | Error 404: Spieler nicht gefunden | Spieler wieder online! (Gradient) | 404 behoben | +| `[AFK]` (Gradient) | Kaffeepause. Die wichtigste Pause. | Koffein erfolgreich zugeführt! (Gradient) | Jetzt wieder einsatzbereit | + +**Gradient-Unterstützung** + +Title-Zeilen unterstützen dieselbe Gradient-Syntax wie Scoreboard und Tablist: + +``` +%gradient:FARBE1:FARBE2:...:TEXT% +``` + +Farben können Minecraft-Codes (`&b`, `&f`) oder Hex-Werte (`#RRGGBB`, `&#RRGGBB`) sein. Beliebig viele Farb-Stopps sind möglich. + +```properties +afk.title.pair.1=%gradient:&b:&f:&b:&l [AFK] %|&8Wahrscheinlich auf dem Klo...||%gradient:&a:&f:&a:&l Willkommen zurück! %|&7War das Klo sauber? +``` + +**Befehl:** + +``` +/afk – AFK-Status manuell ein-/ausschalten +``` + +**Vollständige Konfiguration in `afk.properties`:** + +```properties +# ===================================================== +# AfkModule – /afk Befehl & automatische AFK-Erkennung +# ===================================================== + +afk.enabled=true + +# Automatisch AFK setzen nach X Sekunden ohne Aktivität +afk.idle_enabled=true +afk.idle_seconds=300 + +# Berechtigung zum Umgehen des auto-AFK +afk.permission.bypass=statusapi.afk.bypass + +# ── Title-Anzeigezeiten (in Ticks, 20 Ticks = 1 Sekunde) ── +afk.title.fade_in=10 +afk.title.stay=100 +afk.title.fade_out=10 + +# ── Nachrichten-Paare ───────────────────────────────────── +# Format: setTitle|setSubtitle||unsetTitle|unsetSubtitle +# | trennt Title und Subtitle innerhalb einer Seite +# || trennt AFK-Nachricht (links) von Rückkehr-Nachricht (rechts) +# Gradient: %gradient:FARBE1:FARBE2:...:TEXT% +# Es wird zufällig ein Paar gewählt (max. 20 Paare). + +afk.title.pair.1=%gradient:&b:&f:&b:&l [AFK] %|&8Wahrscheinlich auf dem Klo...||%gradient:&a:&f:&a:&l Willkommen zurück! %|&7War das Klo sauber? +afk.title.pair.2=%gradient:&b:&f:&b:&l [AFK] %|&8Hat den Stecker gezogen||%gradient:&a:&f:&a:&l Wieder eingesteckt! %|&7Der Strom ist zurück +afk.title.pair.3=%gradient:&b:&f:&b:&l [AFK] %|&8Eingeschlafen. Bitte nicht wecken.||%gradient:&a:&f:&a:&l Aufgewacht! %|&7Der Wecker hat funktioniert +# ... (bis zu 20 Paare möglich) +``` + +> **Hinweis:** Die `afk.properties` wird beim ersten Start automatisch erstellt und enthält 15 vorkonfigurierte, humorvolle Nachrichten-Paare. + +> **Integration mit StatusAPIBridge:** Wenn die Bridge eine Koordinatenänderung meldet (`POST /player/data`), wird der AFK-Status des Spielers automatisch aufgehoben und die Rückkehr-Nachricht angezeigt. + +--- + ## 5. HTTP-API StatusAPI startet einen eigenen HTTP-Server auf dem in `verify.properties` konfigurierten Port (Standard: `9191`). Der Server läuft in einem eigenen Thread mit 4 Worker-Threads und wird automatisch neugestartet, wenn er unerwartet stoppt (Watchdog-Task alle 15 Sekunden). @@ -1069,6 +1163,12 @@ StatusAPI prüft automatisch alle 6 Stunden, ob eine neue Version verfügbar ist | `/vanishlist` | `/vlist` | – | Alle unsichtbaren Spieler anzeigen | | `/go [servername]` | `/wechsel`, `/switch` | `serverswitcher.use` | Server-Menü öffnen oder direkt wechseln | +### AFK + +| Befehl | Aliases | Permission | Beschreibung | +|---|---|---|---| +| `/afk` | – | – | AFK-Status manuell ein-/ausschalten | + ### Forum & Verify | Befehl | Aliases | Beschreibung | @@ -1089,6 +1189,7 @@ StatusAPI prüft automatisch alle 6 Stunden, ob eine neue Version verfügbar ist | `statusapi.bcmds` | OP | Zugriff auf `/bcmds reload` | | `statusapi.scoreboard.admin` | false | Admin-Scoreboard-Ansicht | | `statusapi.scoreboard.supporter` | false | Supporter-Scoreboard-Ansicht | +| `statusapi.afk.bypass` | false | Nicht automatisch AFK gesetzt werden | | `statusapi.multiaccountguard.bypass` | **keiner** | Mehrere Accounts gleichzeitig erlauben (**muss manuell vergeben werden!**) | | `statusapi.staff.notify` | false | MAG-Warnungen im Spiel empfangen | | `chat.channel.local` | true | Zugang zum Local-Kanal | @@ -1171,7 +1272,7 @@ Die StatusAPIBridge sendet folgende Daten an den Proxy: | `POST /scoreboard/compass` | Himmelsrichtung des Spielers | | `POST /scoreboard/tps` | TPS des Backend-Servers | | `POST /player/world` | Aktuelle Welt des Spielers | -| `POST /player/data` | Koordinaten (x, y, z), Gamemode, Exp, Food, Speed | +| `POST /player/data` | Koordinaten (x, y, z), Gamemode, Exp, Food, Speed – löst außerdem AFK-Aufhebung aus | | `POST /economy/update` | Aktueller Kontostand (von NexEco via Vault) | | `POST /stats/update` | Kills, Deaths, Spielzeit | | `POST /punishment/update` | Straf-Daten (von einem Punishment-Plugin) | @@ -1272,4 +1373,16 @@ Reduziere die Scoring-Punkte für VPN/Proxy-Treffer oder erhöhe den `antibot.le **Die Ingame-Hilfe zeigt den falschen Befehlsnamen** -Den Wert von `statusapi.help` in `verify.properties` anpassen und den Server **neu starten**. Ein `/statusapi reload` reicht nicht – Befehle werden nur beim Serverstart registriert. \ No newline at end of file +Den Wert von `statusapi.help` in `verify.properties` anpassen und den Server **neu starten**. Ein `/statusapi reload` reicht nicht – Befehle werden nur beim Serverstart registriert. + +**Spieler werden nicht automatisch AFK gesetzt** + +Prüfe in `afk.properties`: +1. `afk.enabled=true` gesetzt? +2. `afk.idle_enabled=true` gesetzt? +3. Hat der Spieler die Permission `statusapi.afk.bypass`? Dann wird er vom Auto-AFK ausgenommen. +4. Der Idle-Check läuft alle 10 Sekunden – es kann bis zu `afk.idle_seconds + 10` Sekunden dauern, bis AFK ausgelöst wird. + +**AFK-Title wird nicht angezeigt** + +Prüfe, ob mindestens ein `afk.title.pair.*` in `afk.properties` korrekt konfiguriert ist. Das Format `setTitle|setSubtitle||unsetTitle|unsetSubtitle` muss exakt eingehalten werden – insbesondere das doppelte `||` als Trenner zwischen AFK- und Rückkehr-Nachricht. \ No newline at end of file