• 1.0.3 d14646c5ae

    1.0.3 Stable

    M_Viper released this 2026-02-20 17:04:23 +00:00 | 5 commits to main since this release

    📋 Changelog – TicketSystem


    [1.0.3] – 2026-02-20

    Zusammenfassung

    Diese Version schließt die letzte offene Lücke im Soft-Delete-System und stellt sicher, dass Spieler Tickets im Bearbeitungsstatus nicht versehentlich löschen können. Außerdem wurde ein kritischer Datenbankfehler behoben, bei dem geclaimate oder weitergeleitete Tickets für den Spieler unsichtbar blieben, sowie ein neues rollenbasiertes Archiv-Berechtigungssystem eingeführt.


    🐛 Behobene Fehler

    [Kritisch] Ticket nach Claim/Weiterleitung unsichtbar für Spieler

    • Problem: Hatte ein Spieler sein Ticket in der eigenen Übersicht gelöscht (player_deleted = true) und ein Supporter claimte oder leitete das Ticket anschließend weiter, blieb das Ticket dauerhaft unsichtbar für den Spieler – obwohl es aktiv bearbeitet wurde. Dies wurde durch den Datenbankexport bestätigt (Ticket #3: status = CLAIMED, player_deleted = 1).
    • Lösung: claimTicket() und forwardTicket() in der DatabaseManager.java setzen player_deleted jetzt automatisch auf FALSE, sobald ein Supporter ein Ticket annimmt oder weiterleitet. Gilt für MySQL- und Datei-Modus (YML).
    • Betroffene Datei: DatabaseManager.java
    • SQL-Fix für bestehende Datenbanken:
      UPDATE tickets SET player_deleted = 0 WHERE status IN ('CLAIMED', 'FORWARDED');
      

    [Kritisch] Lösch-Sperre bei aktiven Tickets

    • Problem: Der Fehler, bei dem Spieler Tickets mit dem Status CLAIMED oder FORWARDED theoretisch löschen konnten (obwohl der Text dies verbot), wurde nun auch logisch im Code unterbunden.
    • Lösung: Die if/else-Logik im Klick-Event der Spieler-GUI wurde verschärft. Ein Löschen ist nun strikt auf die Status OPEN und CLOSED beschränkt.
    • Betroffene Datei: TicketGUI.java

    [Optimierung] Soft Delete Filter

    • Der Filter in der Spieler-GUI wurde optimiert, um sicherzustellen, dass Tickets korrekt angezeigt werden, solange sie nicht vom Spieler als "gelöscht" markiert wurden – unabhängig vom Status (Offen, In Bearbeitung, Geschlossen).
    • Betroffene Datei: TicketGUI.java

    Neue Features

    Rollenbasiertes Archiv-Berechtigungssystem

    • Neu: Die Permission ticket.archive wurde eingeführt. Nur Spieler mit dieser Permission können:
      • Den Archiv-Button in der Admin-Übersicht sehen
      • Das Ticket-Archiv (geschlossene Tickets) öffnen und einsehen
      • Tickets permanent und unwiderruflich aus der Datenbank löschen
    • Wichtig: ticket.archive ist bewusst nicht in ticket.admin enthalten und wird auch nicht automatisch an OPs vergeben. Die Permission muss explizit zugewiesen werden:
      /lp user <Spielername> permission set ticket.archive true
      
    • Betroffene Dateien: TicketGUI.java, plugin.yml

    Permanent-Löschen aus dem Archiv

    • Im Detail-View eines geschlossenen Tickets erscheint für Spieler mit ticket.archive ein neuer Barrier-Block-Button zum permanenten Löschen des Tickets aus der Datenbank.
    • Der Zurück-Button im Detail-View navigiert korrekt zurück ins Archiv (wenn von dort geöffnet) oder in die Hauptübersicht.
    • Betroffene Datei: TicketGUI.java

    Änderungen am Verhalten (User Experience)

    • Admin-Sicht auf gelöschte Tickets: Admins können in der Übersicht nun sehen, ob ein Spieler ein Ticket selbst aus seiner Übersicht entfernt hat (Hinweis im Tooltip).
    • Konsistente Daten: Durch das Soft-Delete-System gehen keine Daten mehr verloren, wenn ein Spieler "aufräumt". Die Historie bleibt für Admins erhalten.
    • Archiv-Navigation: Der Zurück-Button im Ticket-Detail merkt sich, ob man aus dem Archiv oder der Hauptübersicht kam, und leitet entsprechend zurück.

    🔧 Technische Details

    • Datenbank: Spalte player_deleted wird automatisch hinzugefügt, falls nicht vorhanden (Fallback auf false). Keine manuelle Migration notwendig.
    • MySQL: claimTicket() und forwardTicket() setzen player_deleted = FALSE direkt im SQL-Statement.
    • Datei-Modus (YML): t.setPlayerDeleted(false) wird beim Claimen und Weiterleiten im Objekt gesetzt und gespeichert.
    • Code-Sauberkeit: Alle GUI-Interaktionen sind nun konsistent validiert. Doppelte Permission-Checks (beim Öffnen und beim Klick) verhindern Umgehungsversuche.
    • plugin.yml: ticket.admin enthält jetzt ticket.support als child, aber bewusst nicht ticket.archive.

    🔙 Bekannte Probleme / Hinweise

    • Sichtbarkeit (Altdaten): Wenn ein Spieler ein Ticket "löscht" (ausblendet), bevor diese Version eingespielt wird, und ein Admin das Ticket anschließend annimmt, bleibt der player_deleted-Wert in der Datenbank auf true. Für solche Altfälle einmalig folgenden SQL-Befehl ausführen:
      UPDATE tickets SET player_deleted = 0 WHERE status IN ('CLAIMED', 'FORWARDED');
      
    • Permanent löschen: Das Löschen über den Archiv-Button ist unwiderruflich. Es gibt keine Rückfrage-Bestätigung im Spiel – Admins sollten mit dieser Permission sorgfältig umgehen.

    Downloads