Files
TicketSystem/src/main/java/de/ticketsystem/TicketPlugin.java
2026-02-20 12:31:38 +01:00

134 lines
5.7 KiB
Java

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; }
}