StaffAuth
Überblick
StaffAuth schützt Staff-Konten. Wenn ein Spieler beitritt und die Staff-Berechtigung hat (standardmäßig security.admin), wird er eingefroren, bis er sich authentifiziert: Er kann sich nicht bewegen, nicht interagieren, keine Blöcke abbauen oder platzieren, keine Inventare öffnen, nicht chatten, nicht kämpfen und keine anderen Befehle als /staffauth verwenden. Ein Staff-Mitglied ohne Passwort registriert beim ersten Beitritt eines; danach meldet es sich damit an.
Passwörter werden nie als Befehlsargumente gesendet oder im Chat getippt. Sie werden in einem Paper-Dialog-Eingabefeld oder in einem optionalen Zahlenblock-Menü eingegeben und nur als BCrypt-Hashes in einem TypeWriter-Artifact gespeichert. Fehlversuche werden mit einem wachsenden Cooldown ratenbegrenzt und können den Spieler kicken.
Alle werden beim Beitritt etwa einen Tick lang stillschweigend festgehalten, während ihre Berechtigungen geladen werden, damit ein langsames Berechtigungs-Backend Staff nie ungeprüft hereinlässt. Spieler, die kein Staff sind, werden danach freigegeben; werden die Berechtigungen nicht innerhalb von 10 Sekunden festgestellt, wird der Spieler mit einer Erklärung gekickt.
Funktionen
- Beitritts-Freeze — nicht authentifiziertes Staff kann sich nicht bewegen, nicht interagieren, nicht bauen, nicht fallen lassen, nicht aufheben, nicht verbrauchen, nicht angeln, keinen Schaden nehmen oder verursachen, nicht chatten und keine Befehle ausführen.
- Registrieren und Anmelden — Staff, das zum ersten Mal beitritt, registriert sich durch zweimaliges Eingeben eines Passworts; andere melden sich an.
- Gehashte Speicherung — nur BCrypt-Hashes werden gespeichert, mit konfigurierbarem Kostenfaktor.
- Versuchslimits — ein Cooldown, der sich nach jedem Fehlschlag verdoppelt (bis zu 60 Sekunden), und ein Kick nach
maxAttemptsFehlschlägen. - Sitzungs-Timeout — schicke optional authentifiziertes Staff nach einer Anzahl von Minuten zurück zur Anmeldung.
- Dialog oder Zahlenblock — standardmäßig ein Paper-Dialog-Eingabefeld, plus ein optionales Zifferblock-Menü, das aus einem GUI-Layout gebaut wird.
- Admin-Werkzeuge — ein gespeichertes Passwort zurücksetzen oder eine Abmeldung erzwingen.
- Optionale Permissions-Erweiterung — wartet, bis die Berechtigungen geladen sind, bevor entschieden wird, wer Staff ist.
Installation
- Installiere die GUI-Erweiterung: Der Anmeldedialog und das Zahlenblock-Menü werden darüber geöffnet. Ohne sie antwortet
/staffauth, dass die Oberfläche nicht verfügbar ist. - Installiere optional die BTC-Permissions-Erweiterung, wenn deine Server Berechtigungen aus einer Datenbank laden; StaffAuth erkennt sie automatisch.
- Lege die StaffAuth-JAR in
plugins/Typewriter/extensions/ab und starte den Server neu. - Vergib die Staff-Berechtigung (
security.admin) an die Konten, die sich authentifizieren müssen.
Erste Schritte
- Öffne im TypeWriter-Web-Panel eine Static-Seite und füge ein Staff Auth Passwords-Artifact hinzu. Ändere seine
artifactIddanach nie, sonst gehen die gespeicherten Passwörter verloren. - Füge auf derselben Seite einen Staff Auth Config-Entry hinzu. Prüfe
staffPermission,adminPermission,maxAttempts,minPasswordLength,bcryptCostund die Nachrichten. - Veröffentliche. StaffAuth benötigt beide Entries: Ohne die Config tut es nichts, und ohne das Artifact wird Staff hereingelassen (ein Fehler wird protokolliert).
- Tritt mit einem Testkonto bei, das die Staff-Berechtigung hat. Du wirst eingefroren und zur Registrierung aufgefordert: Tippe ein Passwort in den Dialog und bestätige es dann.
- Verbinde dich neu: Der Dialog fragt nun nach dem Passwort.
- Optional: Füge eine Staff Auth Menu-Action hinzu, um den Zahlenblock zu nutzen. Siehe unten.
StaffAuth verwendet die erste gefundene Staff Auth Config und das erste gefundene Staff Auth Passwords-Artifact. Erstelle nicht mehrere.
So funktioniert es
Die Authentifizierung dauert, bis der Spieler den Server verlässt (der Zustand wird nur im Speicher gehalten) oder der optionale Sitzungs-Timeout abläuft. Solange er eingeschränkt ist, ist der einzige erlaubte Befehl /staffauth (und /sa, das nur von der Sperre ausgenommen ist; es ist nicht als Alias registriert).
Menüs
Beitreten, /staffauth, login und register öffnen einen Paper-Dialog mit einem Texteingabefeld. Bei der Registrierung wird der Dialog ein zweites Mal angezeigt, um das Passwort zu bestätigen. Der Aufforderungstext stammt aus guiLoginPrompt, der Titel aus guiTitle.
Die Action Staff Auth Menu öffnet stattdessen einen Inventar-Zahlenblock (nur Ziffern). Löse sie aus einer Action-Kette aus, wenn du diese Optik bevorzugst. Gib den Items in ihrem layoutPool einen Button-Typ, um sie zu Tasten zu machen:
| Button-Typ | Funktion |
|---|---|
DIGIT_0 bis DIGIT_9 | Fügt dem Passwort eine Ziffer hinzu. |
PASSWORD_DISPLAY | Zeigt pro eingegebener Ziffer einen Punkt. |
LOGIN / REGISTER | Sendet das Passwort ab; die Beschriftung ist Register, wenn der Spieler noch kein Passwort hat. |
BACKSPACE | Entfernt die letzte Ziffer. |
CANCEL | Löscht die Eingabe und schließt das Menü. |
Der Zahlenblock kann nur Ziffern eingeben, und das Passwort muss weiterhin minPasswordLength einhalten. useGuiWhenAvailable steuert, ob beim Beitritt automatisch ein Dialog geöffnet wird.
Konfiguration
Alles wird in den Entries festgelegt. Verwende in Nachrichtenfeldern {attempts}, {max} und {length} als Platzhalter (geschweifte Klammern, keine MiniMessage-Tags): {attempts} und {max} in wrongPasswordMessage, {attempts} in maxAttemptsKickMessage, {length} (das Minimum) und {max} in passwordTooShortMessage.
Passwörter liegen in der durch artifactId gewählten Artifact-Datei, als JSON-Zuordnung von Spieler-UUID zu BCrypt-Hash. Das Artifact wird 5 Sekunden lang zwischengespeichert.
Befehle
Der Befehlsname stammt aus dem Feld commandName der Config (Standard staffauth). Für den Basisbefehl ist keine Berechtigung registriert: Jeder kann ihn ausführen, aber er wirkt nur bei Staff. Admin-Unterbefehle benötigen die in adminPermission gesetzte Berechtigung.
| Befehl | Beschreibung |
|---|---|
/staffauth | Öffnet den Anmelde- oder Registrierungsdialog. |
/staffauth open, login, register | Wie oben. |
/staffauth logout | Beendet deine Authentifizierung und zeigt den Dialog erneut an. |
/staffauth status | Zeigt deinen Zustand, ob du die Staff-Berechtigung hast und ob die GUI verfügbar ist. |
/staffauth reset <player> | Löscht das gespeicherte Passwort eines Spielers (Name oder UUID), der sich erneut registrieren muss. Erfordert adminPermission. |
/staffauth force-logout <player> | Meldet einen Online-Spieler ab und zeigt ihm den Dialog. Erfordert adminPermission. |
Berechtigungen
Die Berechtigungen sind konfigurierbare Felder, keine festen Nodes.
| Berechtigung | Erlaubt |
|---|---|
security.admin (staffPermission) | Markiert einen Spieler als Staff: Er muss sich authentifizieren. |
security.staffauth.admin (adminPermission) | /staffauth reset und /staffauth force-logout. |
Entries
3 Einträge, aus dem Quellcode der Erweiterung generiert.
Aktionen1
- Staff Auth MenuStaff Auth Menu
Befehle1
- Staff Auth ConfigStaff Auth Config
Artefakte1
- Staff Auth DataStaff Auth Passwords
Fehlerbehebung
Staff kommt herein, ohne nach einem Passwort gefragt zu werden. Prüfe, ob sowohl die Config als auch das Artifact veröffentlicht sind. Ohne Artifact lässt StaffAuth Staff herein und protokolliert StaffAuth has no artifact entry. Prüfe außerdem, ob der Spieler wirklich staffPermission hat (/staffauth status gibt es aus).
Der Spieler wird mit einer Nachricht zu Berechtigungen gekickt. Die Permissions-Erweiterung hat nicht innerhalb von 10 Sekunden signalisiert, dass die Berechtigungen des Spielers geladen waren. Verbinde dich neu; bleibt es bestehen, prüfe das Permissions-Backend in den Logs.
The StaffAuth interface is unavailable. Die GUI-Erweiterung ist nicht geladen. Installiere sie und starte neu.
Passwörter sind verschwunden. Die artifactId des Artifacts wurde geändert oder der Entry wurde neu erstellt. Stelle die vorherige ID wieder her. Ein gespeicherter Wert, der keine gültige UUID oder kein gültiger BCrypt-String ist, lässt das Laden fehlschlagen und wird als StaffAuth artifact could not be loaded protokolliert; der Spieler bleibt eingefroren und erfährt, dass sein Zustand nicht lesbar ist.
Registrierung abgelehnt. Das Passwort muss zwischen minPasswordLength (6) und maxPasswordLength (128) Zeichen lang sein und darf keine Leerzeichen oder Steuerzeichen enthalten. Die beiden Eingaben müssen übereinstimmen.
Ein Spieler wird nach fehlgeschlagenen Anmeldungen gekickt. Nach maxAttempts (standardmäßig 5) Fehlschlägen wird der Spieler mit maxAttemptsKickMessage gekickt. Setze maxAttempts auf 0, um Kicks zu deaktivieren; der Cooldown gilt weiterhin. /staffauth reset <player> löscht ein vergessenes Passwort.
Verwandte Erweiterungen
- GUI — öffnet den Anmeldedialog und das Zahlenblock-Menü.