134 lines
5.7 KiB
Java
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; }
|
|
} |