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"