# 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. --- ## 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.