-
1.0.3 Stable
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()undforwardTicket()in derDatabaseManager.javasetzenplayer_deletedjetzt automatisch aufFALSE, 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
CLAIMEDoderFORWARDEDtheoretisch 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 StatusOPENundCLOSEDbeschrä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.archivewurde 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.archiveist bewusst nicht inticket.adminenthalten 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.archiveein 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_deletedwird automatisch hinzugefügt, falls nicht vorhanden (Fallback auffalse). Keine manuelle Migration notwendig. - MySQL:
claimTicket()undforwardTicket()setzenplayer_deleted = FALSEdirekt 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.adminenthält jetztticket.supportals child, aber bewusst nichtticket.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 auftrue. 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
- Problem: Hatte ein Spieler sein Ticket in der eigenen Übersicht gelöscht (