Berechtigungen
Berechtigungen
Vollständige Anleitung zum Berechtigungssystem — 16 granulare Berechtigungen, benutzerdefinierte Berechtigungsgruppen und OP-Verwaltung.
Berechtigungsreferenz
Das Plugin definiert 16 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.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 kommuniziert mit dem Hytale-Server-Mod über eine HytaleApiService-Klasse, die alle HTTP-Aufrufe kapselt. Jede Funktion (Dashboard, Spieler, Chat, etc.) nutzt diesen Service.
Client-Konfigurationsparameter
| Parameter |
Typ |
Quelle |
Beschreibung |
host |
string |
Server-Zuweisung |
Aufgelöst aus Egg-Umgebung: SERVER_IP |
port |
int |
Egg-Variable |
Hytale-Mod API-Port (Standard: 8080) |
token |
string |
Admin-Einstellungen |
Bearer-Token für API-Authentifizierung |
timeout |
int |
Plugin-Konfiguration |
HTTP-Timeout in Sekunden (Standard: 10) |
baseUrl |
string |
Berechnet |
http://{host}:{port}/api |
// Wie der API-Service aufgebaut wird — aus Server-Zuweisung + Egg-Variablen
$allocation = $server->allocation;
$host = $allocation->ip; // Server-IP aus Zuweisung
$port = $server->egg_variable('HYTALE_API_PORT') ?? 8080;
$token = $server->egg_variable('HYTALE_API_TOKEN');
$service = new HytaleApiService($host, $port, $token);
// Basis-Anfragemethode — alle API-Aufrufe gehen hierüber
protected function request(string $method, string $endpoint, array $data = []): array
{
$response = Http::timeout($this->timeout)
->withToken($this->token) // Bearer-Token
->withHeaders([
'Accept' => 'application/json',
'Content-Type' => 'application/json',
])
->{$method}("{$this->baseUrl}/{$endpoint}", $data);
if ($response->failed()) {
throw new HytaleApiException(
"API {$method} /{$endpoint} fehlgeschlagen: HTTP {$response->status()}",
$response->status()
);
}
return $response->json();
}
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-Widget |
GET /api/status, GET /api/stats |
TPS alle 5s gecacht, Spieleranzahl live |
| Spielerliste |
GET /api/players |
Gibt alle Online-Spieler mit UUID, Name, Position zurück |
| Spieler kicken |
POST /api/players/{uuid}/kick |
Läuft auf Server-Hauptthread |
| Spieler teleportieren |
POST /api/players/{uuid}/teleport |
Thread-sicher, Hauptthread-Ausführung |
| Inventar-Editor |
GET /api/players/{uuid}/inventory, POST /api/items/give |
BSON-kodierte Item-Daten |
| Ban-System |
GET /api/bans, POST /api/bans, DELETE /api/bans/{uuid} |
Gespeichert in data/bans.json |
| Mute-System |
GET /api/mutes, POST /api/mutes, DELETE /api/mutes/{uuid} |
Gespeichert in data/mutes.json |
| Chat-Monitor |
GET /api/chat/messages |
Alle 2s abgefragt (konfigurierbar) |
| Broadcast |
POST /api/chat/broadcast |
Unterstützt &-Farbcodes |
| Todes-Protokoll |
GET /api/deaths |
Enthält Ursache, Position, Zeitstempel |
| Welt-Info |
GET /api/world |
Seed, Zeit, Wetter, Schwierigkeit |
| Zeit/Wetter setzen |
POST /api/world/time, POST /api/world/weather |
Hauptthread-Ausführung |
| Warp-System |
GET /api/warps, POST /api/warps, DELETE /api/warps/{name} |
Gespeichert in data/warps.json |
| Backup-System |
GET /api/backup, POST /api/backup/create, POST /api/backup/restore |
Async-Erstellung, speichert Welt vorher |
| Server-Konfiguration |
GET /api/config, POST /api/config |
Neustart möglicherweise erforderlich |
| Whitelist |
GET /api/whitelist, POST /api/whitelist, DELETE /api/whitelist/{uuid} |
Sofortige Wirkung |
| Berechtigungen |
GET /api/permissions, POST /api/permissions |
Gespeichert in permissions.json |
| OP-Verwaltung |
POST /api/permissions/op, DELETE /api/permissions/op/{uuid} |
Sofortige Wirkung |
| Installierte Mods |
GET /api/version |
Gibt Mod-Liste vom Mod-Loader zurück |
BSON Item-Datenverarbeitung
Hytale verwendet BSON (Binary JSON) für die Item-Serialisierung. Das Panel muss die Kodierung/Dekodierung für Inventar-Operationen handhaben.
// Item-Datenstruktur — wie von der API zurückgegeben
$item = [
'id' => 'hytale:wooden_sword', // Namespaced Item-ID
'count' => 1, // Stapelanzahl
'slot' => 3, // Inventar-Slot-Index
'nbt' => [ // BSON-kodierte Eigenschaften
'damage' => 15,
'enchants' => [
['id' => 'sharpness', 'level' => 3],
],
'customName' => '§6Legendäre Klinge', // Farbkodierter Anzeigename
],
];
// Item an Spieler geben — erstellt BSON-Payload
$this->request('POST', "items/give", [
'uuid' => $playerUuid,
'item_id' => $itemId, // z.B. 'hytale:iron_ore'
'count' => $count,
'nbt_data' => $nbtData, // Optionale BSON-Eigenschaften
]);
// Läuft auf Server-Hauptthread, Item erscheint sofort im Spielerinventar
Spielerdaten-Zusammenführung (UUID-Auflösung)
Das Plugin behandelt UUID-zu-Name-Auflösung mit Zusammenführungslogik für Spieler, die ihre Namen ändern.
// UUID-Auflösung — der Mod verfolgt Spieler per UUID, Panel zeigt Namen
$players = $this->request('GET', 'players');
// Jeder Spieler hat sowohl UUID als auch aktuellen Namen
// Das Panel cached UUID→Name-Zuordnungen
// Wenn ein Spieler sich umbenennt, wird der alte Name beim nächsten Login ersetzt
foreach ($players as $player) {
// $player['uuid'] => "550e8400-e29b-41d4-a716-446655440000"
// $player['name'] => "Steve"
// $player['position'] => { "x": 100.5, "y": 64.0, "z": -200.3 }
// $player['gameMode'] => "SURVIVAL"
// $player['health'] => 20.0
// $player['food'] => 18
}
Caching-Strategie
| Datentyp |
Cache TTL |
Begründung |
| Serverstatus (TPS, Uptime) |
5 Sekunden |
Häufig ändernd, günstiger API-Aufruf |
| Spielerliste |
5 Minuten |
Moderate Änderungshäufigkeit |
| Mod-Liste |
24 Stunden |
Ändert sich nur bei Server-Neustart |
| Ban-/Mute-Listen |
10 Minuten |
Selten häufige Änderungen |
| Welt-Info |
30 Sekunden |
Zeit ändert sich jeden Tick |
| Warp-Liste |
10 Minuten |
Nur manuelle Admin-Aktion |
| Backup-Liste |
5 Minuten |
Erstellung ist selten |
| Konfigurationswerte |
1 Stunde |
Nur manuelle Änderung, Neustart nötig |
// Cache-Beispiel — Status mit 5-Sekunden-TTL
$status = Cache::remember("hytale_status_{$serverId}", 5, function () {
return $this->apiService->getStatus();
});
Demo-Modus-Architektur
Wenn der Server offline ist, wechselt das Plugin in den Demo-Modus — es zeigt Platzhalter-Daten, damit Admins die UI ohne laufenden Server erkunden können.
// Demo-Modus-Erkennung — aktiviert sich automatisch bei unerreichbarer API
try {
$status = $this->apiService->getStatus();
$demoMode = false;
} catch (HytaleApiException $e) {
$demoMode = true;
$status = $this->getDemoStatus(); // Gibt fest kodierte Mockdaten zurück
}
// Demo-Daten umfassen:
// - 0 TPS, 0 Spieler, alle Funktionen zeigen Platzhalter-Daten
// - UI ist voll interaktiv, aber Änderungen werden nicht an den Server gesendet
// - Gelbes Banner zeigt „Demo-Modus — Server ist offline"
API-Client-Fehlertabelle
| Fehler / Log-Nachricht |
Ursache |
Auswirkung |
Lösung |
HytaleApiException: HTTP 0 |
Server unerreichbar (keine Antwort) |
Demo-Modus aktiviert |
Server starten, Port/Firewall prüfen |
HytaleApiException: HTTP 401 |
Ungültiger oder fehlender Token |
Alle API-Aufrufe schlagen fehl |
Korrektes HYTALE_API_TOKEN in Egg-Variablen setzen |
HytaleApiException: HTTP 403 |
Token gültig, falsche Berechtigungen |
Bestimmte Funktionen scheitern |
Mod-Berechtigungskonfiguration prüfen |
HytaleApiException: HTTP 500 |
Interner Mod-Fehler |
Funktionsspezifischer Ausfall |
Hytale-Server-Logs prüfen |
Verbindung abgelehnt auf Port X |
Mod nicht geladen oder falscher Port |
Kompletter Plugin-Ausfall |
HYTALE_API_PORT mit Mod-Konfiguration abgleichen |
SSL-Zertifikatsproblem |
HTTPS falsch konfiguriert |
Alle API-Aufrufe schlagen fehl |
HTTP (nicht HTTPS) für lokale Verbindungen verwenden |
Timeout nach Xs |
Server überlastet oder Netzwerkverzögerung |
Teilweise Daten angezeigt |
Timeout-Wert erhöhen, Server-Performance prüfen |
JSON-Dekodierungsfehler |
Mod hat Nicht-JSON-Antwort geliefert |
Funktion zeigt Fehler |
Mod aktualisieren, auf Mod-Konflikte prüfen |
BSON-Dekodierungsfehler |
Beschädigte Inventardaten |
Inventar-Editor schlägt fehl |
/api/players/{uuid}/inventory direkt testen |
| CSRF-Token-Abweichung |
Sitzung abgelaufen |
Livewire-Aufrufe schlagen fehl |
Browser-Seite neu laden |
Vollständige Fehlerreferenz (Alle Funktionen)
Verbindungsfehler
| Fehler / Symptom |
Ursache |
Lösung |
| Dashboard zeigt nur Nullen |
Server-API antwortet nicht |
Server starten, Hytale-Mod prüfen |
| „Connection timed out" |
API nicht innerhalb des Timeouts erreichbar |
Timeout erhöhen, Firewall-Regeln prüfen |
| „Connection refused" |
API läuft nicht auf erwartetem Port |
Mod-Konfiguration prüfen, Port verifizieren |
| „Failed to connect" |
Server offline oder Netzwerkproblem |
Server starten, Port-Bindungen prüfen |
| Alle Features zeigen Lade-Spinner |
CSRF-Token abgelaufen oder JS-Fehler |
Seite aktualisieren, Browser-Konsole prüfen (F12) |
| Intermittierende Ausfälle |
Server überlastet oder instabil |
Server-TPS prüfen, Abfrageintervalle reduzieren |
Authentifizierungs- / Token-Fehler
| Fehler / Symptom |
Ursache |
Lösung |
| „⚠ Token Required" |
Kein API-Token konfiguriert |
Token im API-Test-Seitenfeld eingeben |
| „⚠ Token Too Short" |
Token kürzer als 8 Zeichen |
Token mit mindestens 8 Zeichen verwenden |
| HTTP 401 Unauthorized |
Falscher oder abgelaufener Token |
Token in Hytale-Mod-Konfiguration neu generieren |
| HTTP 403 Forbidden |
Token gültig, aber unzureichende Berechtigungen |
Mod-Berechtigungskonfiguration prüfen |
Spielerverwaltungs-Fehler
| Fehler / Symptom |
Ursache |
Lösung |
| „Player not found" |
Spieler offline oder ungültiger Name |
Verifizieren, dass Spieler online ist oder existiert |
| „Failed to kick player" |
API-Ablehnung oder Spieler bereits getrennt |
API-Antwort prüfen, erneut versuchen |
| „Ban failed" |
Fehlende hytale-admin.moderation-ban Berechtigung |
Berechtigung dem Admin-Benutzer gewähren |
| Spielerliste leer |
Keine Spieler online |
Erwartet bei leerem Server |
| Spielerdaten veraltet |
Gecachte Spielerliste veraltet (5-Min-Cache) |
Cache leeren oder auf Aktualisierung warten |
Chat-System-Fehler
| Fehler / Symptom |
Ursache |
Lösung |
| Keine Nachrichten erscheinen |
WebSocket nicht verbunden |
Browser-Konsole prüfen, Seite aktualisieren |
| „Message send failed" |
API-Ablehnung oder Verbindung verloren |
Neu verbinden, Token-Gültigkeit prüfen |
| Sonderzeichen verzerrt |
Kodierungsfehler |
UTF-8 im Nachrichteninhalt verwenden |
Welt-Verwaltungs-Fehler
| Fehler / Symptom |
Ursache |
Lösung |
| „Failed to get world info" |
API-Endpunkt nicht verfügbar |
Hytale-Mod auf neueste Version aktualisieren |
| Welt-Operationen Timeout |
Große Weltdaten |
Timeout in Einstellungen erhöhen |
| Zeitänderung funktioniert nicht |
Berechtigung hytale-admin.world-manage fehlt |
Berechtigung gewähren |
Backup-System-Fehler
| Fehler / Symptom |
Ursache |
Lösung |
| „Backup creation failed" |
Speicherplatz oder Berechtigungen |
Speicher freigeben, Schreibrechte prüfen |
| Backup dauert zu lange |
Große Weltdateien |
Timeout erhöhen, bei geringer Auslastung planen |
| „Restore failed" |
Backup-Datei beschädigt oder fehlend |
Backup neu erstellen, Speicherpfad prüfen |
Serverkonfigurationsfehler
| Fehler / Symptom |
Ursache |
Lösung |
| Einstellungen speichern nicht |
Berechtigung hytale-admin.serverconfig-manage fehlt |
Berechtigung gewähren |
| Konfigurationsänderungen ohne Wirkung |
Server-Neustart erforderlich |
Server nach Konfigurationsänderungen neustarten |
API-Antwortcode-Referenz
| HTTP-Status |
Bedeutung |
Häufiges Szenario |
Lösung |
| 200 |
Erfolg |
Normaler Betrieb |
— |
| 400 |
Ungültige Anfrage |
Ungültige Parameter |
Anfrageparameter prüfen |
| 401 |
Nicht autorisiert |
Fehlender/ungültiger Token |
Korrekten Token konfigurieren |
| 403 |
Verboten |
Unzureichende Berechtigungen |
Erforderliche Berechtigung gewähren |
| 404 |
Nicht gefunden |
Spieler/Ressource existiert nicht |
Ziel verifizieren |
| 408 |
Anfrage-Timeout |
Server zu langsam |
Timeout erhöhen |
| 429 |
Zu viele Anfragen |
Zu schnelles Polling |
Abfragerate reduzieren |
| 500 |
Serverfehler |
Interner Hytale-Mod-Fehler |
Server-Logs prüfen, Mod aktualisieren |
| 502 |
Bad Gateway |
Proxy- oder Netzwerkproblem |
Netzwerkkonfiguration prüfen |
| 503 |
Dienst nicht verfügbar |
Server startet/stoppt |
Warten bis Server bereit ist |
Vollständige Benachrichtigungs-Referenz
| Ereignis |
Typ |
Benachrichtigung |
| Spieler gekickt |
Erfolg |
„Spieler gekickt: {Name}" |
| Spieler gebannt |
Erfolg |
„Spieler gebannt: {Name}" |
| Befehl gesendet |
Erfolg |
„Befehl ausgeführt" |
| Befehl fehlgeschlagen |
Fehler |
„Befehlsausführung fehlgeschlagen" |
| Server gestoppt |
Erfolg |
„Server-Stopp-Befehl gesendet" |
| Chatnachricht gesendet |
Erfolg |
„Nachricht gesendet" |
| Backup erstellt |
Erfolg |
„Backup erfolgreich erstellt" |
| Backup fehlgeschlagen |
Fehler |
„Backup-Erstellung fehlgeschlagen" + Fehler |
| Wiederherstellung gestartet |
Info |
„Aus Backup wiederherstellen…" |
| Wiederherstellung fehlgeschlagen |
Fehler |
„Wiederherstellung fehlgeschlagen" + Fehler |
| Konfiguration gespeichert |
Erfolg |
„Konfiguration gespeichert" |
| Konfigurationsfehler |
Fehler |
„Konfiguration speichern fehlgeschlagen" + Fehler |
| OP gewährt |
Erfolg |
„OP gewährt: {uuid}" |
| OP widerrufen |
Erfolg |
„OP widerrufen: {uuid}" |
| Berechtigung verweigert |
Warnung |
„Berechtigung verweigert" |
| Whitelist aktualisiert |
Erfolg |
„Whitelist aktualisiert" |
| Weltzeit geändert |
Erfolg |
„Weltzeit auf {Zeit} gesetzt" |
| Weltwetter geändert |
Erfolg |
„Wetter auf {Wetter} gesetzt" |