Update from Git Manager GUI

This commit is contained in:
2026-02-20 12:31:38 +01:00
parent 526cb8b442
commit df6878db2f
11 changed files with 1622 additions and 811 deletions

View File

@@ -7,16 +7,21 @@ import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
public class TicketManager {
private final TicketPlugin plugin;
// Cooldown Map: UUID → Zeit in Millis, wann das letzte Ticket erstellt wurde
/** Cooldown Map: UUID → Zeitstempel letztes Ticket */
private final Map<UUID, Long> cooldowns = new HashMap<>();
/** Ticket-IDs für die der Ersteller bereits über Schließung informiert wurde */
private final Set<Integer> notifiedClosedTickets = new HashSet<>();
public TicketManager(TicketPlugin plugin) {
this.plugin = plugin;
}
@@ -42,7 +47,8 @@ public class TicketManager {
// ─────────────────────────── Benachrichtigungen ────────────────────────
/**
* Benachrichtigt alle Online-Supporter und Admins über ein neues Ticket.
* Benachrichtigt alle Online-Supporter/Admins über ein neues Ticket
* und sendet optional eine Discord-Webhook-Nachricht.
*/
public void notifyTeam(Ticket ticket) {
String msg = plugin.formatMessage("messages.new-ticket-notify")
@@ -53,15 +59,16 @@ public class TicketManager {
for (Player p : Bukkit.getOnlinePlayers()) {
if (p.hasPermission("ticket.support") || p.hasPermission("ticket.admin")) {
p.sendMessage(msg);
// Klickbaren Hinweis senden (Bukkit Chat-Component)
p.sendMessage(plugin.color("&7» Klicke &e/ticket list &7um die GUI zu öffnen."));
}
}
// Discord-Webhook (asynchron, kein Einfluss auf Server-Performance)
plugin.getDiscordWebhook().sendNewTicket(ticket);
}
/**
* Benachrichtigt den Ersteller des Tickets, wenn es geclaimt wurde.
* Benachrichtigt den Ersteller, wenn sein Ticket angenommen wurde.
*/
public void notifyCreatorClaimed(Ticket ticket) {
Player creator = Bukkit.getPlayer(ticket.getCreatorUUID());
@@ -74,9 +81,24 @@ public class TicketManager {
}
/**
* Sendet dem weitergeleiteten Supporter eine Benachrichtigung.
* Benachrichtigt den Ersteller, wenn sein Ticket weitergeleitet wurde.
*/
public void notifyForwardedTo(Ticket ticket) {
public void notifyCreatorForwarded(Ticket ticket) {
Player creator = Bukkit.getPlayer(ticket.getCreatorUUID());
if (creator != null && creator.isOnline()) {
String forwardedTo = ticket.getForwardedToName() != null ? ticket.getForwardedToName() : "einen Supporter";
String msg = plugin.formatMessage("messages.ticket-forwarded-creator-notify")
.replace("{id}", String.valueOf(ticket.getId()))
.replace("{supporter}", forwardedTo);
creator.sendMessage(msg);
}
}
/**
* Sendet dem weitergeleiteten Supporter eine Benachrichtigung
* und informiert optional Discord.
*/
public void notifyForwardedTo(Ticket ticket, String fromName) {
Player target = Bukkit.getPlayer(ticket.getForwardedToUUID());
if (target != null && target.isOnline()) {
String msg = plugin.formatMessage("messages.ticket-forwarded-notify")
@@ -84,13 +106,55 @@ public class TicketManager {
.replace("{id}", String.valueOf(ticket.getId()));
target.sendMessage(msg);
}
// Discord
plugin.getDiscordWebhook().sendTicketForwarded(ticket, fromName);
}
/**
* Benachrichtigt den Ersteller, wenn sein Ticket geschlossen wurde,
* und informiert optional Discord.
*/
public void notifyCreatorClosed(Ticket ticket) {
notifyCreatorClosed(ticket, null);
}
/**
* Benachrichtigt den Ersteller, wenn sein Ticket geschlossen wurde.
* @param closerName Name des Admins/Supporters der es geschlossen hat (für Discord, kann null sein)
*/
public void notifyCreatorClosed(Ticket ticket, String closerName) {
notifiedClosedTickets.add(ticket.getId());
Player creator = Bukkit.getPlayer(ticket.getCreatorUUID());
if (creator != null && creator.isOnline()) {
String comment = (ticket.getCloseComment() != null && !ticket.getCloseComment().isEmpty())
? ticket.getCloseComment() : "";
String msg = plugin.formatMessage("messages.ticket-closed-notify")
.replace("{id}", String.valueOf(ticket.getId()))
.replace("{comment}", comment);
creator.sendMessage(msg);
if (!comment.isEmpty()) {
creator.sendMessage(plugin.color("&7Kommentar des Supports: &f" + comment));
}
}
// Discord
String closer = closerName != null ? closerName : "Unbekannt";
plugin.getDiscordWebhook().sendTicketClosed(ticket, closer);
}
/**
* Prüft ob der Ersteller für dieses Ticket bereits über die Schließung informiert wurde.
*/
public boolean wasClosedNotificationSent(int ticketId) {
return notifiedClosedTickets.contains(ticketId);
}
// ─────────────────────────── Hilfsmethoden ─────────────────────────────
/**
* Prüft, ob ein Spieler zu viele offene Tickets hat.
*/
public boolean hasReachedTicketLimit(UUID uuid) {
int max = plugin.getConfig().getInt("max-open-tickets-per-player", 2);
if (max <= 0) return false;
@@ -102,10 +166,10 @@ public class TicketManager {
player.sendMessage(plugin.color("&6TicketSystem &7 Befehle"));
player.sendMessage(plugin.color("&8&m "));
player.sendMessage(plugin.color("&e/ticket create <Text> &7 Neues Ticket erstellen"));
player.sendMessage(plugin.color("&e/ticket list &7 Deine Tickets ansehen (GUI)"));
if (player.hasPermission("ticket.support") || player.hasPermission("ticket.admin")) {
player.sendMessage(plugin.color("&e/ticket list &7 Ticket-Übersicht (GUI)"));
player.sendMessage(plugin.color("&e/ticket claim <ID> &7 Ticket annehmen"));
player.sendMessage(plugin.color("&e/ticket close <ID> &7 Ticket schließen"));
player.sendMessage(plugin.color("&e/ticket close <ID> [Kommentar] &7 Ticket schließen"));
}
if (player.hasPermission("ticket.admin")) {
player.sendMessage(plugin.color("&e/ticket forward <ID> <Spieler> &7 Ticket weiterleiten"));
@@ -113,4 +177,4 @@ public class TicketManager {
}
player.sendMessage(plugin.color("&8&m "));
}
}
}