package de.ticketsystem; import de.ticketsystem.commands.TicketCommand; import de.ticketsystem.database.DatabaseManager; import de.ticketsystem.discord.DiscordWebhook; import de.ticketsystem.gui.TicketGUI; import de.ticketsystem.listeners.PlayerJoinListener; import de.ticketsystem.manager.TicketManager; // WICHTIG: Import hinzugefügt import de.ticketsystem.model.Ticket; import org.bukkit.ChatColor; import org.bukkit.plugin.java.JavaPlugin; import java.util.Objects; public class TicketPlugin extends JavaPlugin { private static TicketPlugin instance; private boolean debug; private DatabaseManager databaseManager; private TicketManager ticketManager; private TicketGUI ticketGUI; private DiscordWebhook discordWebhook; @Override public void onEnable() { instance = this; saveDefaultConfig(); // --- WICHTIG: Ticket-Klasse registrieren --- Ticket.register(); // ------------------------------------------- // Update-Checker int resourceId = 132757; new UpdateChecker(this, resourceId).getVersion(version -> { String current = getDescription().getVersion(); if (!current.equals(version)) { String msg = ChatColor.translateAlternateColorCodes('&', "&6[TicketSystem] &eEs ist eine neue Version verfügbar: &a" + version + " &7(aktuell: " + current + ")"); getLogger().info("Es ist eine neue Version verfügbar: " + version + " (aktuell: " + current + ")"); getServer().getScheduler().runTaskLater(this, () -> { getServer().getOnlinePlayers().stream() .filter(p -> p.hasPermission("ticket.admin")) .forEach(p -> p.sendMessage(msg)); }, 20L); } else { getLogger().info("TicketSystem ist aktuell (Version " + current + ")"); } }); // Versionsprüfung String configVersion = getConfig().getString("version", ""); String expectedVersion = "2.0"; if (!expectedVersion.equals(configVersion)) { getLogger().warning("[WARNUNG] Die Version deiner config.yml (" + configVersion + ") stimmt nicht mit der erwarteten Version (" + expectedVersion + ") überein!"); } debug = getConfig().getBoolean("debug", false); // Datenbankverbindung databaseManager = new DatabaseManager(this); if (!databaseManager.connect()) { getLogger().severe("Konnte keine Datenbankverbindung herstellen! Plugin läuft im Datei-Modus weiter."); } // Manager, GUI & Discord-Webhook initialisieren ticketManager = new TicketManager(this); ticketGUI = new TicketGUI(this); discordWebhook = new DiscordWebhook(this); if (getConfig().getBoolean("discord.enabled", false)) { String url = getConfig().getString("discord.webhook-url", ""); if (url.isEmpty()) { getLogger().warning("[DiscordWebhook] Aktiviert, aber keine Webhook-URL in der config.yml eingetragen!"); } else { getLogger().info("[DiscordWebhook] Integration aktiv."); } } // Commands & Events TicketCommand ticketCommand = new TicketCommand(this); Objects.requireNonNull(getCommand("ticket")).setExecutor(ticketCommand); Objects.requireNonNull(getCommand("ticket")).setTabCompleter(ticketCommand); getServer().getPluginManager().registerEvents(new PlayerJoinListener(this), this); getServer().getPluginManager().registerEvents(ticketGUI, this); // Automatische Archivierung int archiveIntervalH = getConfig().getInt("auto-archive-interval-hours", 24); if (archiveIntervalH > 0) { long ticks = archiveIntervalH * 60L * 60L * 20L; getServer().getScheduler().runTaskTimer(this, () -> { int archived = databaseManager.archiveClosedTickets(); if (archived > 0) { getLogger().info("Automatische Archivierung: " + archived + " Tickets archiviert."); } }, ticks, ticks); getLogger().info("Automatische Archivierung alle " + archiveIntervalH + " Stunden aktiviert."); } getLogger().info("TicketSystem erfolgreich gestartet!"); } @Override public void onDisable() { if (databaseManager != null) databaseManager.disconnect(); getLogger().info("TicketSystem wurde deaktiviert."); } // ─────────────────────────── Hilfsmethoden ───────────────────────────── public String formatMessage(String path) { String prefix = color(getConfig().getString("prefix", "&8[&6Ticket&8] &r")); String message = getConfig().getString(path, "&cNachricht nicht gefunden: " + path); return prefix + color(message); } public String color(String text) { return ChatColor.translateAlternateColorCodes('&', text); } // ─────────────────────────── Getter ──────────────────────────────────── public static TicketPlugin getInstance() { return instance; } public DatabaseManager getDatabaseManager() { return databaseManager; } public TicketManager getTicketManager() { return ticketManager; } public TicketGUI getTicketGUI() { return ticketGUI; } public DiscordWebhook getDiscordWebhook() { return discordWebhook; } public boolean isDebug() { return debug; } }