Update from Git Manager GUI

This commit is contained in:
2026-02-23 13:06:59 +01:00
parent c8d4578fa6
commit 02811bafbd
9 changed files with 1050 additions and 174 deletions

View File

@@ -1,12 +1,15 @@
package de.ticketsystem;
import de.ticketsystem.bungee.BungeeMessenger;
import de.ticketsystem.cache.TicketCache;
import de.ticketsystem.commands.TicketCommand;
import de.ticketsystem.database.DatabaseManager;
import de.ticketsystem.discord.DiscordWebhook;
import de.ticketsystem.gui.FaqGUI;
import de.ticketsystem.gui.TicketGUI;
import de.ticketsystem.listeners.PlayerJoinListener;
import de.ticketsystem.manager.CategoryManager;
import de.ticketsystem.manager.FaqManager;
import de.ticketsystem.manager.TicketManager;
import de.ticketsystem.model.Ticket;
import org.bukkit.ChatColor;
@@ -23,16 +26,18 @@ public class TicketPlugin extends JavaPlugin {
/**
* Name dieses Servers im BungeeCord-Netzwerk.
* Konfigurierbar in config.yml → server-name
* Wird in Tickets gespeichert und in Benachrichtigungen angezeigt.
*/
private String serverName;
private DatabaseManager databaseManager;
private TicketManager ticketManager;
private CategoryManager categoryManager;
private FaqManager faqManager;
private TicketGUI ticketGUI;
private FaqGUI faqGUI;
private DiscordWebhook discordWebhook;
private BungeeMessenger bungeeMessenger;
private TicketCache ticketCache;
@Override
public void onEnable() {
@@ -44,9 +49,7 @@ public class TicketPlugin extends JavaPlugin {
Ticket.register();
// ── BungeeCord Plugin-Messaging-Kanäle registrieren ───────────────
// Ausgehend: BungeeCord-Standardkanal (für Forward / Message)
getServer().getMessenger().registerOutgoingPluginChannel(this, BungeeMessenger.BUNGEE_CHANNEL);
// Eingehend & Ausgehend: Eigener Kanal für Team- und Spielerbenachrichtigungen
getServer().getMessenger().registerOutgoingPluginChannel(this, BungeeMessenger.CUSTOM_CHANNEL);
bungeeMessenger = new BungeeMessenger(this);
@@ -55,67 +58,65 @@ public class TicketPlugin extends JavaPlugin {
// Server-Name aus Config lesen
serverName = getConfig().getString("server-name", "unknown");
if ("unknown".equals(serverName)) {
getLogger().warning("[BungeeCord] Kein 'server-name' in der config.yml definiert! " +
"Setze 'server-name: dein-server' für korrekte Cross-Server-Anzeige.");
} else {
getLogger().info("[BungeeCord] Server-Name: §e" + serverName);
getLogger().warning("[BungeeCord] Kein 'server-name' in der config.yml definiert!");
}
// BungeeCord-Hinweis prüfen
// BungeeCord-Hinweis nur bei deaktiviertem Feature ausgeben
if (!getConfig().getBoolean("bungeecord", false)) {
getLogger().info("[BungeeCord] Hinweis: Cross-Server-Features sind deaktiviert. " +
"Setze 'bungeecord: true' in der config.yml und stelle sicher, " +
"dass 'bungeecord: true' auch in spigot.yml gesetzt ist.");
} else {
getLogger().info("[BungeeCord] Cross-Server-Benachrichtigungen aktiviert.");
getLogger().info("[BungeeCord] Cross-Server-Features deaktiviert. Setze 'bungeecord: true' um sie zu aktivieren.");
}
// Update-Checker
// Update-Checker (nur Warnung wenn Update verfügbar kein API-Raw-Log)
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, () -> {
"&6[TicketSystem] &eNeue Version verfügbar: &a" + version + " &7(aktuell: " + current + ")");
getLogger().warning("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 + ")");
.forEach(p -> p.sendMessage(msg)), 20L);
}
});
// Versionsprüfung
// Versionsprüfung der config.yml
String configVersion = getConfig().getString("version", "");
String expectedVersion = "2.0";
if (!expectedVersion.equals(configVersion)) {
getLogger().warning("[WARNUNG] Die Version deiner config.yml (" + configVersion
getLogger().warning("[WARNUNG] config.yml-Version (" + configVersion
+ ") stimmt nicht mit der erwarteten Version (" + expectedVersion + ") überein!");
}
debug = getConfig().getBoolean("debug", false);
// ── Performance: Ticket-Cache ──────────────────────────────────────
long cacheTtl = getConfig().getLong("cache-ttl-seconds", 60) * 1000L;
ticketCache = new TicketCache(cacheTtl);
// Regelmäßige Cache-Bereinigung alle 5 Minuten
getServer().getScheduler().runTaskTimerAsynchronously(this,
() -> ticketCache.evictExpired(), 6000L, 6000L);
// 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
// Manager, GUI, FAQ & Discord-Webhook initialisieren
categoryManager = new CategoryManager(this);
ticketManager = new TicketManager(this);
faqManager = new FaqManager(this);
ticketGUI = new TicketGUI(this);
faqGUI = new FaqGUI(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.");
getLogger().warning("[DiscordWebhook] Aktiviert, aber keine Webhook-URL in config.yml eingetragen!");
}
}
@@ -126,6 +127,7 @@ public class TicketPlugin extends JavaPlugin {
getServer().getPluginManager().registerEvents(new PlayerJoinListener(this), this);
getServer().getPluginManager().registerEvents(ticketGUI, this);
getServer().getPluginManager().registerEvents(faqGUI, this);
// Automatische Archivierung
int archiveIntervalH = getConfig().getInt("auto-archive-interval-hours", 24);
@@ -137,18 +139,17 @@ public class TicketPlugin extends JavaPlugin {
getLogger().info("Automatische Archivierung: " + archived + " Tickets archiviert.");
}
}, ticks, ticks);
getLogger().info("Automatische Archivierung alle " + archiveIntervalH + " Stunden aktiviert.");
}
getLogger().info("TicketSystem erfolgreich gestartet!");
getLogger().info("TicketSystem v" + getDescription().getVersion() + " erfolgreich gestartet!");
}
@Override
public void onDisable() {
// Plugin-Messaging-Kanäle abmelden
getServer().getMessenger().unregisterOutgoingPluginChannel(this);
getServer().getMessenger().unregisterIncomingPluginChannel(this);
if (ticketCache != null) ticketCache.clear();
if (databaseManager != null) databaseManager.disconnect();
getLogger().info("TicketSystem wurde deaktiviert.");
}
@@ -171,20 +172,13 @@ public class TicketPlugin extends JavaPlugin {
public DatabaseManager getDatabaseManager() { return databaseManager; }
public TicketManager getTicketManager() { return ticketManager; }
public CategoryManager getCategoryManager() { return categoryManager; }
public FaqManager getFaqManager() { return faqManager; }
public TicketGUI getTicketGUI() { return ticketGUI; }
public FaqGUI getFaqGUI() { return faqGUI; }
public DiscordWebhook getDiscordWebhook() { return discordWebhook; }
public BungeeMessenger getBungeeMessenger() { return bungeeMessenger; }
public TicketCache getTicketCache() { return ticketCache; }
public boolean isDebug() { return debug; }
/**
* BungeeCord: Gibt den konfigurierten Server-Namen zurück.
* Entspricht dem Wert aus config.yml → server-name.
*/
public String getServerName() { return serverName; }
/**
* BungeeCord: Gibt zurück ob Cross-Server-Features aktiviert sind.
* Entspricht config.yml → bungeecord: true
*/
public boolean isBungeeCordEnabled() { return getConfig().getBoolean("bungeecord", false); }
}