Upload folder via GUI - src
This commit is contained in:
@@ -446,7 +446,7 @@ public class TicketCommand implements CommandExecutor, TabCompleter {
|
|||||||
// ── /ticket forward ───────────────────────────────────────────────────
|
// ── /ticket forward ───────────────────────────────────────────────────
|
||||||
|
|
||||||
private void handleForward(Player player, String[] args) {
|
private void handleForward(Player player, String[] args) {
|
||||||
if (!player.hasPermission("ticket.admin")) {
|
if (!player.hasPermission("ticket.support") && !player.hasPermission("ticket.admin")) {
|
||||||
plugin.lang().send(player, "general.no-permission"); return;
|
plugin.lang().send(player, "general.no-permission"); return;
|
||||||
}
|
}
|
||||||
if (args.length < 3) { player.sendMessage(plugin.lang().get("forward.usage")); return; }
|
if (args.length < 3) { player.sendMessage(plugin.lang().get("forward.usage")); return; }
|
||||||
@@ -454,27 +454,50 @@ public class TicketCommand implements CommandExecutor, TabCompleter {
|
|||||||
try { id = Integer.parseInt(args[1]); }
|
try { id = Integer.parseInt(args[1]); }
|
||||||
catch (NumberFormatException e) { plugin.lang().send(player, "general.invalid-id"); return; }
|
catch (NumberFormatException e) { plugin.lang().send(player, "general.invalid-id"); return; }
|
||||||
|
|
||||||
Player target = Bukkit.getPlayer(args[2]);
|
String targetName = args[2];
|
||||||
if (target == null) {
|
|
||||||
|
// Selbst-Weiterleitung verhindern
|
||||||
|
if (targetName.equalsIgnoreCase(player.getName())) {
|
||||||
|
plugin.lang().send(player, "forward.cannot-self"); return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ziel-Spieler auflösen: zuerst online prüfen, dann OfflinePlayer
|
||||||
|
Player onlineTarget = Bukkit.getPlayer(targetName);
|
||||||
|
|
||||||
|
// Wenn online: Permission-Prüfung direkt möglich
|
||||||
|
if (onlineTarget != null) {
|
||||||
|
if (!onlineTarget.hasPermission("ticket.support") && !onlineTarget.hasPermission("ticket.admin")) {
|
||||||
|
plugin.lang().send(player, "forward.not-a-supporter"); return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
OfflinePlayer offlineTarget = onlineTarget != null
|
||||||
|
? onlineTarget
|
||||||
|
: Bukkit.getOfflinePlayer(targetName);
|
||||||
|
|
||||||
|
// Spieler komplett unbekannt (hasPlayedBefore = false, nicht online)
|
||||||
|
if (!offlineTarget.hasPlayedBefore() && !offlineTarget.isOnline()) {
|
||||||
player.sendMessage(plugin.isBungeeCordEnabled()
|
player.sendMessage(plugin.isBungeeCordEnabled()
|
||||||
? plugin.lang().format("forward.bungee-offline", "{player}", args[2])
|
? plugin.lang().format("forward.bungee-offline", "{player}", targetName)
|
||||||
: plugin.lang().get("forward.local-not-found"));
|
: plugin.lang().get("forward.local-not-found"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final int ticketId = id;
|
final int ticketId = id;
|
||||||
final String fromName = player.getName();
|
final String fromName = player.getName();
|
||||||
final Player t = target;
|
final UUID targetUUID = offlineTarget.getUniqueId();
|
||||||
|
final String resolvedName = offlineTarget.getName() != null ? offlineTarget.getName() : targetName;
|
||||||
|
|
||||||
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
|
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
|
||||||
boolean ok = plugin.getDatabaseManager().forwardTicket(ticketId, t.getUniqueId(), t.getName());
|
boolean ok = plugin.getDatabaseManager().forwardTicket(ticketId, targetUUID, resolvedName);
|
||||||
plugin.getTicketCache().invalidate(ticketId);
|
plugin.getTicketCache().invalidate(ticketId);
|
||||||
Bukkit.getScheduler().runTask(plugin, () -> {
|
Bukkit.getScheduler().runTask(plugin, () -> {
|
||||||
if (!ok) { plugin.lang().send(player, "general.ticket-not-found"); return; }
|
if (!ok) { plugin.lang().send(player, "general.ticket-not-found"); return; }
|
||||||
Ticket ticket = getCachedOrFetch(ticketId);
|
Ticket ticket = getCachedOrFetch(ticketId);
|
||||||
if (ticket == null) return;
|
if (ticket == null) return;
|
||||||
player.sendMessage(plugin.lang().format("ticket.forwarded",
|
player.sendMessage(plugin.lang().format("ticket.forwarded",
|
||||||
"{id}", String.valueOf(ticketId), "{player}", t.getName()));
|
"{id}", String.valueOf(ticketId), "{player}", resolvedName));
|
||||||
plugin.getTicketManager().notifyForwardedTo(ticket, fromName);
|
plugin.getTicketManager().notifyForwardedTo(ticket, fromName);
|
||||||
plugin.getTicketManager().notifyCreatorForwarded(ticket);
|
plugin.getTicketManager().notifyCreatorForwarded(ticket);
|
||||||
});
|
});
|
||||||
@@ -1357,8 +1380,11 @@ public class TicketCommand implements CommandExecutor, TabCompleter {
|
|||||||
completions.addAll(getPriorityInputsForTab(args[2]));
|
completions.addAll(getPriorityInputsForTab(args[2]));
|
||||||
|
|
||||||
} else if (args.length == 3 && normalize(args[0]).equals("forward")) {
|
} else if (args.length == 3 && normalize(args[0]).equals("forward")) {
|
||||||
for (Player p : Bukkit.getOnlinePlayers())
|
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||||
|
if (p.equals(player)) continue; // Selbst-Forward ausblenden
|
||||||
|
if (!p.hasPermission("ticket.support") && !p.hasPermission("ticket.admin")) continue;
|
||||||
if (p.getName().toLowerCase().startsWith(args[2].toLowerCase())) completions.add(p.getName());
|
if (p.getName().toLowerCase().startsWith(args[2].toLowerCase())) completions.add(p.getName());
|
||||||
|
}
|
||||||
|
|
||||||
} else if (args.length == 2 && normalize(args[0]).equals("blacklist")) {
|
} else if (args.length == 2 && normalize(args[0]).equals("blacklist")) {
|
||||||
if (useEn) completions.addAll(List.of("add", "remove", "list"));
|
if (useEn) completions.addAll(List.of("add", "remove", "list"));
|
||||||
|
|||||||
@@ -274,9 +274,9 @@ public class TicketManager {
|
|||||||
if (player.hasPermission("ticket.support") || player.hasPermission("ticket.admin")) {
|
if (player.hasPermission("ticket.support") || player.hasPermission("ticket.admin")) {
|
||||||
plugin.lang().send(player, "help.claim");
|
plugin.lang().send(player, "help.claim");
|
||||||
plugin.lang().send(player, "help.close");
|
plugin.lang().send(player, "help.close");
|
||||||
|
plugin.lang().send(player, "help.forward");
|
||||||
}
|
}
|
||||||
if (player.hasPermission("ticket.admin")) {
|
if (player.hasPermission("ticket.admin")) {
|
||||||
plugin.lang().send(player, "help.forward");
|
|
||||||
plugin.lang().send(player, "help.blacklist");
|
plugin.lang().send(player, "help.blacklist");
|
||||||
plugin.lang().send(player, "help.reload");
|
plugin.lang().send(player, "help.reload");
|
||||||
plugin.lang().send(player, "help.stats");
|
plugin.lang().send(player, "help.stats");
|
||||||
|
|||||||
@@ -111,6 +111,8 @@ forward:
|
|||||||
usage: "&cBenutzung: {cmd_forward} <ID> <Spieler>"
|
usage: "&cBenutzung: {cmd_forward} <ID> <Spieler>"
|
||||||
bungee-offline: "&7[BungeeCord] Spieler &e{player} &7ist auf diesem Server nicht online."
|
bungee-offline: "&7[BungeeCord] Spieler &e{player} &7ist auf diesem Server nicht online."
|
||||||
local-not-found: "&cSpieler nicht gefunden!"
|
local-not-found: "&cSpieler nicht gefunden!"
|
||||||
|
not-a-supporter: "&cDieser Spieler hat keine Supporter-Berechtigung!"
|
||||||
|
cannot-self: "&cDu kannst ein Ticket nicht an dich selbst weiterleiten!"
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
# KOMMENTARE
|
# KOMMENTARE
|
||||||
|
|||||||
@@ -111,6 +111,8 @@ forward:
|
|||||||
usage: "&cUsage: {cmd_forward} <ID> <player>"
|
usage: "&cUsage: {cmd_forward} <ID> <player>"
|
||||||
bungee-offline: "&7[BungeeCord] Player &e{player} &7is not online on this server."
|
bungee-offline: "&7[BungeeCord] Player &e{player} &7is not online on this server."
|
||||||
local-not-found: "&cPlayer not found!"
|
local-not-found: "&cPlayer not found!"
|
||||||
|
not-a-supporter: "&cThis player does not have supporter permission!"
|
||||||
|
cannot-self: "&cYou cannot forward a ticket to yourself!"
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
# COMMENTS
|
# COMMENTS
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
name: TicketSystem
|
name: TicketSystem
|
||||||
version: 1.1.6
|
version: 1.1.7
|
||||||
main: de.ticketsystem.TicketPlugin
|
main: de.ticketsystem.TicketPlugin
|
||||||
api-version: 1.20
|
api-version: 1.20
|
||||||
author: M_Viper
|
author: M_Viper
|
||||||
@@ -39,7 +39,7 @@ permissions:
|
|||||||
# ── Supporter-Permissions ─────────────────────────────────────────────────
|
# ── Supporter-Permissions ─────────────────────────────────────────────────
|
||||||
|
|
||||||
ticket.support:
|
ticket.support:
|
||||||
description: Supporter kann Tickets einsehen, claimen und schließen
|
description: Supporter kann Tickets einsehen, claimen, schließen und weiterleiten
|
||||||
default: false
|
default: false
|
||||||
|
|
||||||
ticket.archive:
|
ticket.archive:
|
||||||
|
|||||||
Reference in New Issue
Block a user