# TicketSystem ![Version](https://img.shields.io/badge/Minecraft-1.18.x--1.21.x-green?style=for-the-badge) ![Java](https://img.shields.io/badge/Java-17+-orange?style=for-the-badge) ![Type](https://img.shields.io/badge/Type-Support-blue?style=for-the-badge) **TicketSystem** ist das flexible, moderne Support- und Feedback-Plugin für Minecraft-Server (Spigot/Paper 1.18.x–1.21.x, Java 17+). Es bietet flexible Speicherung, automatische Backups & Migration, Export/Import, Statistiken, dynamische GUI, Kategorie- und Prioritäten-System, Bewertungs- und Kommentar-System, **FAQ-System**, Discord-Webhook und volle BungeeCord-Unterstützung. --- ## Features - MySQL oder Datei-Speicherung (YAML/JSON oder MySQL/MariaDB, jederzeit umschaltbar) - Automatische Backups & Migration - Export/Import von Tickets - Statistiken & Archivierung - Rollenbasierter Archiv-Zugriff - Konfigurierbare Speicherpfade - Vollständige Validierung & Fehlerausgaben - Debug-Modus & Versionsprüfung - Anpassbare Nachrichten, Farben, Limits, Speicherpfade, Archiv-Intervall, Cooldowns, Rechte - Dynamische GUI mit Seiten-System - Kategorie- und Prioritäten-System - Bewertungs- und Kommentar-System - Offline-Benachrichtigungen - Discord-Webhook mit Embeds & Rollen-Ping - Blacklist für Spieler - **FAQ-System** mit eigenem GUI, eigener Datei (`faqs.yml`) und vollständiger In-Game-Verwaltung durch Admins - **Performance-Caching** – TTL-basierter In-Memory-Cache reduziert Datenbankabfragen spürbar - **Saubere Konsole** – minimale Start-Logs, kein unnötiger Spam - Erweiterbarkeit: viele Hooks - **BungeeCord-Unterstützung**: serverübergreifende Tickets, Teleports, Weiterleitungen, Benachrichtigungen --- ## Installation & Setup 1. TicketSystem.jar in den plugins-Ordner legen und Server starten 2. `config.yml` anpassen (Speicherorte, Nachrichten, Limits, Farben, MySQL-Daten etc.) 3. `/ticket`-Befehle nutzen --- ## Befehle & Rechte ### Übersicht der Befehle | Befehl | Beschreibung | Nutzergruppe | |-----------------------------------------------------------|--------------------------------------------------------|------------------| | `/ticket` | Hilfe & Übersicht | Spieler, Support | | `/ticket create [Kategorie] [Priorität] ` | Ticket erstellen | Spieler | | `/ticket list` | Eigene Tickets in der GUI anzeigen | Spieler | | `/ticket comment ` | Kommentar hinzufügen | Spieler, Support | | `/ticket rate ` | Support bewerten | Spieler | | `/ticket faq` | FAQ-GUI öffnen (häufige Fragen) | Spieler | | `/ticket faq list` | FAQs im Chat auflisten | Spieler | | `/ticket faq add \| ` | Neues FAQ hinzufügen | Admin | | `/ticket faq edit \| ` | Bestehendes FAQ bearbeiten | Admin | | `/ticket faq delete ` | FAQ löschen | Admin | | `/ticket faq reload` | FAQs aus faqs.yml neu laden | Admin | | `/ticket claim ` | Ticket annehmen | Support/Admin | | `/ticket close [Kommentar]` | Ticket schließen | Support/Admin | | `/ticket forward ` | Ticket weiterleiten | Support/Admin | | `/ticket setpriority ` | Priorität ändern | Support/Admin | | `/ticket reload` | Konfiguration neu laden | Admin | | `/ticket stats` | Statistiken anzeigen | Admin | | `/ticket archive` | Tickets archivieren | Admin | | `/ticket blacklist [Spieler] [Grund]` | Blacklist verwalten | Admin | | `/ticket migrate ` | Speicherart wechseln | Admin | | `/ticket export ` | Tickets exportieren | Admin | | `/ticket import ` | Tickets importieren | Admin | | `/ticket teleport ` | Teleport zu Ticket (BungeeCord) | Support/Admin | ### Rechte | Permission | Beschreibung | Standard | |-----------------|-----------------------------------------------------------------|------------------| | `ticket.create` | Ticket erstellen | alle Spieler | | `ticket.support`| Tickets einsehen, claimen, schließen, Priorität ändern | manuell vergeben | | `ticket.archive`| Archiv öffnen, Tickets permanent löschen | manuell vergeben | | `ticket.admin` | Voller Zugriff inkl. Weiterleitung, Reload, Blacklist, FAQ-Verwaltung | OP | > `ticket.archive` ist nicht in `ticket.admin` enthalten und muss explizit vergeben werden. --- ## Mehrsprachigkeit TicketSystem unterstützt drei Sprachmodi, die über einen einzigen Schlüssel in der `config.yml` gesteuert werden: ```yaml language: de # Deutsch – deutsche Texte & deutsche Befehlsnamen language: en # Englisch – englische Texte & englische Befehlsnamen language: both # Beides – deutsche Texte & beide Befehlsnamen gleichzeitig ``` > `command-language` existiert nicht mehr. Alle Einstellungen laufen über `language`. ### Befehlsnamen je Sprachmodus | Interner Schlüssel | `language: de` | `language: en` | `language: both` | |--------------------|---------------------------|-------------------------|-------------------------------------------| | `create` | `/ticket erstellen` | `/ticket create` | `/ticket create §8(§7erstellen§8)` | | `list` | `/ticket liste` | `/ticket list` | `/ticket list §8(§7liste§8)` | | `comment` | `/ticket kommentar` | `/ticket comment` | `/ticket comment §8(§7kommentar§8)` | | `rate` | `/ticket bewerten` | `/ticket rate` | `/ticket rate §8(§7bewerten§8)` | | `claim` | `/ticket übernehmen` | `/ticket claim` | `/ticket claim §8(§7übernehmen§8)` | | `close` | `/ticket schließen` | `/ticket close` | `/ticket close §8(§7schließen§8)` | | `forward` | `/ticket weiterleiten` | `/ticket forward` | `/ticket forward §8(§7weiterleiten§8)` | | `reload` | `/ticket neuladen` | `/ticket reload` | `/ticket reload §8(§7neuladen§8)` | | `stats` | `/ticket statistik` | `/ticket stats` | `/ticket stats §8(§7statistik§8)` | | `archive` | `/ticket archivieren` | `/ticket archive` | `/ticket archive §8(§7archivieren§8)` | | `migrate` | `/ticket migrieren` | `/ticket migrate` | `/ticket migrate §8(§7migrieren§8)` | | `export` | `/ticket exportieren` | `/ticket export` | `/ticket export §8(§7exportieren§8)` | | `import` | `/ticket importieren` | `/ticket import` | `/ticket import §8(§7importieren§8)` | | `blacklist` | `/ticket sperrliste` | `/ticket blacklist` | `/ticket blacklist §8(§7sperrliste§8)` | | `setpriority` | `/ticket priorität` | `/ticket setpriority` | `/ticket setpriority §8(§7priorität§8)` | | `faq` | `/ticket faq` | `/ticket faq` | `/ticket faq` | | `top` | `/ticket top` | `/ticket top` | `/ticket top` | ### `{cmd_X}`-Platzhalter in den Sprachdateien Alle Hilfetexte, Fehlermeldungen und GUI-Hinweise in `lang_de.yml` / `lang_en.yml` verwenden `{cmd_X}`-Platzhalter statt fester Befehlsnamen. Beim Anzeigen ersetzt der `LanguageManager` diese automatisch anhand des aktiven Sprachmodus. | Platzhalter | Beispiel-Ausgabe (`language: en`) | |----------------------|-----------------------------------| | `{cmd_create}` | `/ticket create` | | `{cmd_list}` | `/ticket list` | | `{cmd_comment}` | `/ticket comment` | | `{cmd_rate}` | `/ticket rate` | | `{cmd_claim}` | `/ticket claim` | | `{cmd_close}` | `/ticket close` | | `{cmd_forward}` | `/ticket forward` | | `{cmd_reload}` | `/ticket reload` | | `{cmd_stats}` | `/ticket stats` | | `{cmd_archive}` | `/ticket archive` | | `{cmd_migrate}` | `/ticket migrate` | | `{cmd_export}` | `/ticket export` | | `{cmd_import}` | `/ticket import` | | `{cmd_blacklist}` | `/ticket blacklist` | | `{cmd_setpriority}` | `/ticket setpriority` | | `{cmd_faq}` | `/ticket faq` | | `{cmd_top}` | `/ticket top` | **Verwendungsbeispiel in der Sprachdatei:** ```yaml help: create: "&e{cmd_create} [Kategorie] &7– Neues Ticket erstellen" # → language: de gibt aus: /ticket erstellen [Kategorie] # → language: en gibt aus: /ticket create [Kategorie] ``` ### GUI-Sprachanpassung Seit dieser Version sind auch alle **GUI-Texte** vollständig sprachabhängig – Inventar-Titel, Item-Lore-Labels und Action-Buttons werden aus `gui.item.*` in der aktiven Sprachdatei geladen. Nach einem `/ticket reload` mit geändertem `language`-Wert wechselt die gesamte Oberfläche sofort. --- ## FAQ-System Das FAQ-System ermöglicht es Admins, häufige Fragen und Antworten direkt im Spiel zu verwalten. Spieler können die FAQs per GUI oder Befehl einsehen. ### Für Spieler ``` /ticket faq – öffnet die FAQ-GUI mit Custom-Skull-Items /ticket faq list – listet alle FAQs im Chat auf ``` In der GUI wird für jeden FAQ-Eintrag ein **Custom-Skull-Item** mit individueller Textur angezeigt. Ein Klick auf einen Eintrag zeigt die vollständige Antwort im Chat. ### Für Admins ``` /ticket faq add Wie melde ich einen Bug? | Nutze /ticket create bug . /ticket faq edit 1 Neue Frage? | Neue Antwort. /ticket faq delete 1 /ticket faq reload ``` Alternativ können FAQs auch direkt über die **Admin-FAQ-GUI** verwaltet werden (öffnet sich automatisch wenn `ticket.admin`-Berechtigung vorhanden). Ein Klick auf einen Eintrag öffnet eine Aktions-GUI mit den Optionen **Bearbeiten** und **Löschen**. Neue FAQs lassen sich ebenfalls per Schaltfläche in der GUI hinzufügen – das Plugin führt den Admin Schritt für Schritt durch eine Chat-Eingabe. ### faqs.yml Alle FAQs werden in einer eigenen Datei `plugins/TicketSystem/faqs.yml` gespeichert: ```yaml faqs: 1: question: "Wie erstelle ich ein Ticket?" answer: "Nutze den Befehl /ticket create [Kategorie] [Beschreibung]." 2: question: "Wie lange dauert die Bearbeitung?" answer: "Unser Support-Team bearbeitet Tickets so schnell wie möglich." ``` Beim ersten Start werden automatisch vier Beispiel-FAQs erstellt. --- ## Performance-Caching Ab dieser Version hält TicketSystem häufig abgerufene Tickets in einem **TTL-basierten In-Memory-Cache** vor. Das reduziert die Datenbankbelastung bei wiederholten Zugriffen (GUI, Kommentare, Bewertungen) deutlich. - Standard-Lebenszeit: **60 Sekunden** (konfigurierbar: `cache-ttl-seconds` in `config.yml`) - Der Cache wird bei Ticket-Änderungen (Claim, Close, Priorität usw.) automatisch invalidiert - Regelmäßige Bereinigung abgelaufener Einträge alle 5 Minuten - Der aktuelle Cache-Status ist in `/ticket stats` einsehbar --- ## Kategorie & Priorität Beim Erstellen eines Tickets können Kategorie und Priorität optional angegeben werden: | Befehl | Kategorie | Priorität | |-----------------------------------------|-----------|-----------| | `/ticket create ` | Standard | NORMAL | | `/ticket create bug ` | Bug | NORMAL | | `/ticket create high ` | Standard | HIGH | | `/ticket create bug high ` | Bug | HIGH | | `/ticket create question urgent ` | Frage | URGENT | **Verfügbare Prioritäten:** `low`, `normal`, `high`, `urgent` (auch deutsch: `niedrig`, `hoch`, `dringend`) Kategorien und Aliases sind frei in der `config.yml` konfigurierbar. --- ## Discord-Webhook - Embeds mit Kategorie & Priorität - Rollen-Ping pro Nachrichtentyp - Drei Ereignisse: neues Ticket, Ticket geschlossen, Ticket weitergeleitet Konfiguration in `config.yml`: ```yaml discord: enabled: true webhook-url: "https://discord.com/api/webhooks/..." role-ping-id: "123456789012345678" messages: new-ticket: role-ping: true show-category: true show-priority: true ticket-closed: enabled: true role-ping: false ``` --- ## BungeeCord-Unterstützung TicketSystem bietet volle Unterstützung für BungeeCord-Netzwerke: - Tickets von jedem Server im Netzwerk - Teleport zu Tickets auf anderen Servern (`/ticket teleport `) - Tickets im Archiv und GUI serverübergreifend - Benachrichtigungen an alle Server - Discord-Webhooks zeigen Server-Namen - Tickets an Supporter auf anderen Servern weiterleiten **Voraussetzungen:** - `spigot.yml`: `bungeecord: true` - `config.yml`: `bungeecord: true`, `server-name` pro Server - TicketSystem.jar auf allen Spigot-Servern - Alle Server nutzen dieselbe MySQL-Datenbank --- ## Vergleich mit anderen Plugins | Feature | TicketSystem | SimpleTickets | AdvancedTickets | |-----------------------------|:------------:|:-------------:|:---------------:| | Speicher-Migration | ✔️ | ⚠️ | ✖️ | | Automatische Backups | ✔️ | ⚠️ | ✖️ | | GUI mit Kategorien | ✔️ | ⚠️ | ✖️ | | Archivierung | ✔️ | ⚠️ | ✖️ | | Rollenbasierter Archiv-Zugriff| ✔️ | ✖️ | ✖️ | | Kategorie-System | ✔️ | ✖️ | ✖️ | | Prioritäten-System | ✔️ | ✖️ | ✖️ | | FAQ-System | ✔️ | ✖️ | ✖️ | | Performance-Caching | ✔️ | ✖️ | ✖️ | | Offline-Benachrichtigungen | ✔️ | ✖️ | ✖️ | | Discord-Webhook | ✔️ | ✖️ | ✖️ | | Bewertungs-System | ✔️ | ✖️ | ✖️ | | Update-Checker | ✔️ | ✖️ | ✖️ | | BungeeCord-Unterstützung | ✔️ | ✖️ | ✖️ | Legende: ✔️ Vollständige Unterstützung · ⚠️ Eingeschränkt · ✖️ Nicht vorhanden --- ## FAQ **Kann ich zwischen MySQL und Datei-Speicherung wechseln?** > Ja! Mit `/ticket migrate tomysql` oder `/ticket migrate tofile` werden alle Daten automatisch migriert. **Wie konfiguriere ich eigene Kategorien?** > In der `config.yml` unter `categories:` – Name, Farbe, Material und Aliases frei wählbar. Änderungen mit `/ticket reload` übernehmen. **Wie verwalte ich FAQs?** > Mit `/ticket faq` öffnest du die GUI. Als Admin kannst du über die GUI oder per `/ticket faq add|edit|delete` FAQs verwalten. Alle Daten liegen in `faqs.yml`. **Was passiert mit Benachrichtigungen wenn ein Spieler offline ist?** > Alle Benachrichtigungen werden gespeichert und beim nächsten Login angezeigt. **Wie ändere ich die Priorität eines Tickets?** > Als Support/Admin per `/ticket setpriority ` oder direkt in der GUI. **Wie aktiviere ich den Debug-Modus?** > `debug: true` in der `config.yml` setzen. **Wer darf das Ticket-Archiv sehen?** > Nur Spieler mit `ticket.archive`. Muss explizit vergeben werden. **Wie funktioniert Teleport bei BungeeCord?** > Mit `/ticket teleport ` wirst du automatisch auf den richtigen Server und zur Ticket-Position teleportiert. **Wie lange werden Tickets gecacht?** > Standardmäßig 60 Sekunden. Über `cache-ttl-seconds` in der `config.yml` anpassbar. Der Cache wird bei Änderungen sofort invalidiert. --- ## Support, Community & Motivation Du hast Fragen, brauchst Hilfe oder möchtest Feedback geben? - [Discord Support](https://discord.com/invite/FdRs4BRd8D) - [Git Issues](https://git.viper.ipv64.net/M_Viper/TicketSystem/issues) Wir antworten in der Regel innerhalb von 24 Stunden! **Dein Feedback zählt:** Wenn TicketSystem deinen Server bereichert hat, freuen wir uns über eine 5-Sterne Bewertung auf SpigotMC! Jede Rückmeldung hilft, das Plugin weiter zu verbessern und die Community zu stärken.