Berechtigungen
Eranio
Berechtigungen
Vollständige Anleitung zum Berechtigungssystem, 17 granulare Berechtigungen, benutzerdefinierte Berechtigungsgruppen und OP-Verwaltung.
Berechtigungsreferenz
Das Plugin definiert 17 benutzerdefinierte Berechtigungen zur Steuerung des Zugriffs auf jede Funktion:
| Berechtigung | Gewährt Zugriff auf |
|---|---|
hytale-admin.dashboard |
Dashboard anzeigen (Status, TPS, Betriebszeit) |
hytale-admin.players-read |
Spielerliste anzeigen |
hytale-admin.players-manage |
Spieler kicken, heilen, teleportieren, Spielmodus setzen, OP/De-OP |
hytale-admin.players-inventory |
Spielerinventare anzeigen und bearbeiten, Items geben, Inventar leeren |
hytale-admin.moderation-read |
Ban-Liste und Stummschaltungsliste anzeigen |
hytale-admin.moderation-manage |
Bannen/Entbannen, Stummschalten/Entstummen |
hytale-admin.chat-read |
Live-Chat-Monitor und Todeslog anzeigen |
hytale-admin.chat-broadcast |
Broadcast-Nachrichten an alle Spieler senden |
hytale-admin.world-read |
Weltinformationen anzeigen (Zeit, Wetter, Seed) |
hytale-admin.world-manage |
Zeit und Wetter setzen, Warps verwalten |
hytale-admin.serverconfig-read |
Serverkonfiguration und Whitelist anzeigen |
hytale-admin.serverconfig-manage |
Serverkonfiguration bearbeiten, Whitelist verwalten |
hytale-admin.backups-read |
Backup-Liste anzeigen |
hytale-admin.backups-manage |
Backups erstellen, wiederherstellen und löschen |
hytale-admin.mods-manage |
Seite Mods: Mods hochladen, Version anpassen, reparieren und löschen |
hytale-admin.setup |
Setup-Seite aufrufen (Mod installieren/deinstallieren, Einstellungen) |
hytale-admin.activity |
Aktivitätslog-Tab anzeigen |
Berechtigungshierarchie
Berechtigungen folgen einem lesen → verwalten-Muster:
*-read= Nur-Lese-Zugriff*-manage= Volle Kontrolle (beinhaltet Lesen)
Berechtigungsgruppen
Gruppe erstellen
| Detail | Wert |
|---|---|
| Berechtigung | hytale-admin.serverconfig-manage |
| API | POST /permissions/groups |
| Erfolg | „Berechtigungsgruppe erstellt: {group}" |
| Fehler | „Gruppenerfstellung fehlgeschlagen" |
Gruppe löschen
| Detail | Wert |
|---|---|
| API | DELETE /permissions/groups/{name} |
| Erfolg | „Berechtigungsgruppe gelöscht: {group}" |
| Fehler | „Gruppenlöschung fehlgeschlagen" |
Beispielgruppen
| Gruppenname | Vorgeschlagene Berechtigungen |
|---|---|
| Moderator | moderation-read, moderation-manage, chat-read, players-read |
| Builder | world-read, world-manage, players-read |
| Admin | Alle 16 Berechtigungen |
| Betrachter | dashboard, players-read, chat-read, world-read |
OP-Verwaltung
OP gewähren
| Detail | Wert |
|---|---|
| API | POST /permissions/op/{uuid} |
| Erfolg | „OP gewährt: {uuid}" |
| Fehler | „OP-Gewährung fehlgeschlagen" |
OP widerrufen
| Detail | Wert |
|---|---|
| API | DELETE /permissions/op/{uuid} |
| Erfolg | „OP widerrufen: {uuid}" |
| Fehler | „OP-Widerruf fehlgeschlagen" |
Hinweis: OP-Verwaltung verwendet UUIDs, nicht Spielernamen. Das Plugin löst Namen zu UUIDs für dich auf.
Spiel-Übersetzungssystem
Für die Item-Suche und den Inventar-Editor werden Item-Namen über eine Prioritätskette übersetzt:
| Priorität | Quelle | Beschreibung |
|---|---|---|
| 1 | Java-Mod-I18n | Serverseitige Item-Übersetzungen vom Mod |
| 2 | Statische PHP-Übersetzungen | Mitgelieferte Übersetzungsdateien im Plugin |
| 3 | Formatierter Schlüssel-Fallback | Item-Schlüssel als lesbarer Name formatiert |
13 Sprachzuordnungen werden unterstützt.
Fehlerbehebung
Benutzer kann auf ein Feature nicht zugreifen
- Prüfe welche Berechtigung für das Feature erforderlich ist (siehe Tabelle oben)
- Verifiziere, dass der Benutzer/Unterbenutzer die Berechtigung zugewiesen hat
- Serverbesitzer haben standardmäßig alle Berechtigungen
Berechtigungsgruppen-Erstellung fehlgeschlagen
- Gruppenname existiert möglicherweise bereits
- API-Verbindung unterbrochen
permissions.json-Datei gesperrt oder beschädigt
Aktivitätslog zeigt „unbekannt" als Akteur
- Der Admin-Benutzername wird aus der Panel-Sitzung übergeben
- Bei abgelaufener Sitzung während der Aktion kann der Akteur leer sein
API-Client & Interne Architektur
Vollständige API-Endpunkt-Dokumentation ist in der HytaleAdminAPI-Referenz verfügbar. Dieser Abschnitt behandelt den PHP-Client, den das Panel-Plugin intern zur Kommunikation mit dem Hytale-Server-Mod verwendet. Für Endpunkt-Parameter, Antwort-Schemata und Anfrage-Beispiele siehe die HytaleAdminAPI-Dokumentation.
HytaleApiService, PHP-Client
Das Panel-Plugin spricht mit dem Hytale-Mod über die Klasse HytaleApiService, die alle HTTP-Aufrufe kapselt. Jede Seite (Dashboard, Spieler, Chat usw.) nutzt diesen Dienst.
Woher die Verbindungsdaten kommen
| Wert | Quelle | Beschreibung |
|---|---|---|
| Host | Pelican | FQDN der Node, auf der der Server läuft |
| Port | mods/Eranio_HytaleAdminAPI/config.json |
Feld port, Standard 5550 |
| Token | mods/Eranio_HytaleAdminAPI/config.json |
Feld token, vom Mod beim ersten Start erzeugt |
| Zeitlimit | mods/Eranio_HytaleAdminAPI/config.json |
Feld requestTimeout, Standard 10 Sekunden |
| Basis-Adresse | berechnet | http://{node-fqdn}:{port} |
Das Plugin liest die config.json des Mods über Pelicans Datei-Schnittstelle (ModConfigReader), es gibt keine Egg-Variablen und keine Einstellung im Panel dafür. Ändern lassen sich die Werte im Fenster Einstellungen bearbeiten auf der Einrichtungsseite, das Plugin schreibt sie dann in dieselbe Datei.
// Aufbau der Verbindung (vereinfacht aus HytaleApiService)
$modConfig = app(ModConfigReader::class)->readConfig($server);
$baseUrl = 'http://' . $server->node->fqdn . ':' . ($modConfig['port'] ?? 5550);
Http::baseUrl($baseUrl)
->timeout($modConfig['requestTimeout'] ?? 10)
->withHeaders([
'X-Admin-Token' => $modConfig['token'] ?? '',
'Accept' => 'application/json',
])
->get('/api/status');
Der Token geht im Header X-Admin-Token mit, nicht als Bearer-Token. Schlägt ein Aufruf fehl (Fehlercode oder keine Verbindung), gibt der Dienst null zurück statt eine Ausnahme zu werfen. Die Seiten zeigen dann ihren Hinweis, dass die API nicht erreichbar ist.
Anfrage-Ablauf, Panel zum Server-Mod
┌──────────────┐ HTTP/JSON ┌─────────────────┐ Java API ┌──────────────┐
│ Panel Plugin │ ──────────────> │ Hytale Mod HTTP │ ──────────── > │ Hytale Server│
│ (PHP/Laravel)│ <────────────── │ Server (Netty) │ < ──────────── │ (Spiel) │
│ │ JSON-Antwort │ │ Spielzustand │ │
└──────────────┘ └─────────────────┘ └──────────────┘
Wichtige Architektur-Hinweise:
- Der Mod bettet einen Netty HTTP-Server in den Hytale-Serverprozess ein
- Alle spielverändernden Operationen (Kick, Ban, Teleport) laufen auf dem Server-Hauptthread
- Nur-Lese-Operationen (Status, Spielerliste) können gecachte Daten verwenden
- Die API ist synchron aus Panel-Sicht, intern wird aber an den Spielthread weitergeleitet
Funktion → API-Endpunkt-Zuordnung
Siehe HytaleAdminAPI-Referenz für Anfrage-/Antwort-Details jedes Endpunkts.
| Panel-Funktion | Verwendete API-Endpunkte | Hinweise |
|---|---|---|
| Dashboard-Status | GET /api/status, GET /api/version |
TPS laufend gemessen (Hytale-Ziel: 30) |
| Aktive Instanzen (Dashboard) | GET /api/adventure, POST /api/adventure/* |
Portal-Zeit, Void-Invasion, Welt-Ereignisse, Instanz schließen |
| Spielerliste | GET /api/players, GET /api/players/known |
Online-Spieler live, Offline-Spieler aus den Spielerdateien |
| Spieler-Aktionen | POST /api/players/{name}/kick, /op, /deop, /heal, /teleport, /gamemode, /give |
Laufen auf dem Welt-Thread des Spielers |
| Abenteuer-Menü (Spieler) | POST /api/adventure/teleport-player, /send-to-spawn, /scale, /history, /wilderness, /debug-screens, /instance/spawn, /instance/exit, POST /api/worlds/send |
Auch weltübergreifend |
| Inventar-Editor | GET /api/players/{name}/inventory, POST /api/players/{name}/inventory/slot, /slot/remove, /slot/swap, /clear, GET /api/items |
Online-Spieler live, Offline-Spieler über die Spielerdatei |
| Banns | GET /api/bans, POST /api/bans, DELETE /api/bans/{player} |
Hytales Zugriffssteuerung, bans.json |
| Stummschaltungen | GET /api/mutes, POST /api/mutes, DELETE /api/mutes/{player} |
mutes.json im Mod-Ordner |
| Chat | GET /api/chat, POST /api/chat/broadcast |
Ereignis-Logs des Mods |
| Tode | GET /api/deaths |
Letzte 10 Tode und Gesamtzahl |
| Welten | GET /api/worlds, POST /api/worlds/* |
Anlegen, Einstellungen, Standard, Entladen, Auslagern, Zurücksetzen, Papierkorb |
| Spielerwelten | GET /api/playerworlds, POST /api/playerworlds/config |
Einstellungen und Zugang |
| Abenteuer (World-Seite) | GET /api/adventure, POST /api/adventure/* |
Welt-Ereignisse, Portale, Spawn |
| Zeit und Wetter | POST /api/world/time, POST /api/world/weather |
Erste geladene Welt |
| Warps | GET /api/warps, POST /api/warps, POST /api/warps/{name}/tp, DELETE /api/warps/{name} |
Hytales TeleportPlugin |
| Erinnerungen | GET /api/memories |
Serverweit |
| Backups | GET /api/backup, GET /api/backup/status, POST /api/backup/create, DELETE /api/backup |
Hytales eigene Backup-Funktion |
| Serverkonfiguration | GET /api/serverconfig, POST /api/serverconfig |
Neustart kann nötig sein |
| Whitelist | GET /api/whitelist, POST /api/whitelist, DELETE /api/whitelist/{name} |
Unbekannte Namen löst Hytale auf |
| Rechte und OP | GET /api/permissions, POST /api/permissions/op, DELETE /api/permissions/op/{uuid}, /user/group, /groups |
permissions.json |
| Installierte Mods (Mod-Manager) | kein API-Aufruf | Liest den Ordner mods/ über Pelicans Datei-Schnittstelle |
Inventardaten
Bei Online-Spielern kommt das Inventar live von der API (GET /api/players/{name}/inventory), Änderungen gehen über POST /api/players/{name}/inventory/slot, /slot/remove, /slot/swap und /clear. Bei Offline-Spielern liest und schreibt das Plugin die Speicherdatei universe/players/{uuid}.json direkt über Pelicans Datei-Schnittstelle.
Die Speicherdateien werden als Objekte gelesen (json_decode($content, false)), nicht als Arrays. Hytale unterscheidet zwischen {} und [], ein Umwandeln in Arrays würde leere Objekte beim Zurückschreiben zu Listen machen und die Datei beschädigen.
Spielernamen (UUID-Auflösung)
Hytale speichert Spieler, Sperren und Rechte mit UUID. Das Panel zeigt Namen und sucht sie in known_players.json (vom Plugin gepflegt, neue Spieler kommen beim Öffnen von Dashboard oder Spielerseite dazu) und in whitelist.json. Ohne Treffer steht die UUID da.
Zwischenspeicher
Die Seiten fragen Daten bei jeder Aktualisierung frisch ab (Intervalle stehen bei den einzelnen Seiten). Zwischengespeichert wird nur wenig:
| Was | Wie lange | Zweck |
|---|---|---|
| Übernahme neuer Spieler aus den Serverdateien | höchstens alle 5 Minuten je Server | Spart Dateizugriffe beim Öffnen der Seiten |
| Suche nach einer neuen Version des Admin-Mods | höchstens alle 6 Stunden | Abfrage bei eranio.de |
| Bilder von Gegenständen und Erinnerungen | dauerhaft im Panel | Seiten bleiben schnell |
Demo-Modus-Architektur
Der Demo-Modus springt nie von selbst an, auch nicht bei einem Offline-Server. Er gilt, wenn
- auf der Einrichtungsseite Demo-Modus einschalten gedrückt wurde (Berechtigung
hytale-admin.setup,toggleDemoMode()), dann legtDemoInventoryServicefür diesen Server Testdaten an und der Modus bleibt bis zum Ausschalten aktiv, oder - eine Seite mit
?demo=1aufgerufen wird, dann nur für diesen Aufruf.
Im Demo-Modus liefern DemoDataService und DemoInventoryService alle Daten, Aktionen zeigen nur eine Meldung („Diese Aktion wurde simuliert“) und senden nichts an den Server. Oben auf jeder Seite steht ein Hinweisbalken.
Ist der Server dagegen nur nicht erreichbar, zeigt das Dashboard API offline und die Seiten bleiben leer oder zeigen ihren Hinweis.
API-Client-Fehlertabelle
| Symptom | Ursache | Lösung |
|---|---|---|
| Dashboard zeigt API offline | Server aus, Mod nicht geladen oder Port gesperrt | Server starten, auf der Einrichtungsseite prüfen, ob der Mod installiert ist, Port aus config.json in der Firewall freigeben |
| Alle Seiten leer, Mod läuft | Token in config.json passt nicht |
config.json löschen und Server neu starten, der Mod erzeugt einen neuen Token, das Plugin liest ihn automatisch |
| Aktion meldet Fehler | Der Mod hat mit einem Fehlercode geantwortet, der Dienst gibt dann null zurück |
Hytale-Serverlog und storage/logs/laravel.log prüfen |
| Seiten laden langsam oder unvollständig | Zeitlimit zu knapp oder Server überlastet | Zeitlimit für Anfragen in den Einstellungen erhöhen |
| Aktionen schlagen nach langer Pause fehl | Sitzung abgelaufen | Seite im Browser neu laden |
Vollständige Fehlerreferenz (Alle Funktionen)
Verbindung
| Symptom | Ursache | Lösung |
|---|---|---|
| Dashboard zeigt API offline | Mod antwortet nicht | Server starten, Mod auf der Einrichtungsseite prüfen |
| Seiten laden lange und bleiben leer | Zeitlimit überschritten | Zeitlimit für Anfragen erhöhen, Firewall prüfen |
| Alle Seiten leer, Mod läuft | Token passt nicht (HTTP 403) | config.json löschen, Server neu starten |
| Aktionen hängen nach langer Pause | Sitzung abgelaufen | Seite neu laden |
| Ausfälle mit Pausen | Server überlastet | TPS auf dem Dashboard prüfen |
Spieler
| Symptom | Ursache | Lösung |
|---|---|---|
| „Spieler konnte nicht gekickt werden“ | Spieler hat den Server schon verlassen | Liste aktualisiert sich nach spätestens 15 Sekunden |
| Sperren nicht möglich | Auf der Spielerseite fehlt hytale-admin.players-manage, auf der Moderationsseite hytale-admin.moderation-manage |
Berechtigung vergeben |
| Neuer Spieler fehlt in der Liste | Übernahme aus den Dateien läuft höchstens alle 5 Minuten | Kurz warten und die Seite neu öffnen |
Chat
| Symptom | Ursache | Lösung |
|---|---|---|
| Keine neuen Nachrichten | Chat-Abfrage zu selten eingestellt oder Mod nicht erreichbar | Einstellung Chat-Abfrage alle prüfen |
| „Broadcast konnte nicht gesendet werden“ | Verbindung zum Mod verloren | Status auf dem Dashboard prüfen |
Welt
| Symptom | Ursache | Lösung |
|---|---|---|
| Zeit oder Wetter lässt sich nicht setzen | hytale-admin.world-manage fehlt |
Berechtigung vergeben |
| Weltaktionen dauern lange | Große Welt | Zeitlimit für Anfragen erhöhen |
Backups
| Symptom | Ursache | Lösung |
|---|---|---|
| „Backup konnte nicht erstellt werden“ | Kein Speicher oder keine Schreibrechte | Speicher freigeben, Rechte des Backup-Ordners prüfen |
| „Sicherung konnte nicht wiederhergestellt werden“ | Datei beschädigt oder Server läuft | Server stoppen, anderes Backup nehmen |
Serverkonfiguration
| Symptom | Ursache | Lösung |
|---|---|---|
| Speichern nicht möglich | hytale-admin.serverconfig-manage fehlt |
Berechtigung vergeben |
| Änderung ohne Wirkung | Neustart nötig | Server neu starten |
API-Antwortcode-Referenz
Der Java-Mod antwortet mit diesen Statuscodes:
| HTTP-Status | Bedeutung | Typischer Fall |
|---|---|---|
| 200 | Erfolg | Normaler Betrieb |
| 400 | Ungültige Anfrage | Pflichtfeld fehlt oder Wert ungültig |
| 403 | Verboten | Token im Header X-Admin-Token fehlt oder passt nicht |
| 404 | Nicht gefunden | Spieler, Welt, Warp oder Datei gibt es nicht |
| 405 | Methode nicht erlaubt | Falsche HTTP-Methode für den Endpunkt |
| 500 | Serverfehler | Interner Fehler im Mod, Hytale-Serverlog prüfen |
Das Panel wertet jede Antwort außer 2xx als Fehler, die Seite zeigt dann ihre Fehlermeldung.
Meldungen
Die Erfolgs- und Fehlermeldungen jeder Aktion stehen mit ihrem genauen Wortlaut in den Abschnitten der einzelnen Seiten (Spieler, Moderation, Chat, Backups, Mods, Serverkonfiguration, Einrichtung).