From 7b62075dc7020299d81c6cd663a697a8e7260061 Mon Sep 17 00:00:00 2001 From: youpaishidifu <1@ypshidifu.cn> Date: Mon, 26 Oct 2026 11:10:45 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC57=E6=89=B9=E7=BB=AD3=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=EF=BC=9A/del=20ban=E6=8B=A6=E6=88=AA=E7=A7=BB?= =?UTF-8?q?=E5=88=B0del=E5=88=86=E6=94=AF=E5=86=85=20+=20=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=91=98=E9=80=9A=E7=9F=A5=E6=94=B9=E4=B8=BA=E5=8F=AF?= =?UTF-8?q?=E7=82=B9=E5=87=BB=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Sdf1_login/Main.java | 15 +++++---- src/main/java/Sdf1_login/WebManager.java | 39 ++++++++++++++++++++++-- 2 files changed, 43 insertions(+), 11 deletions(-) diff --git a/src/main/java/Sdf1_login/Main.java b/src/main/java/Sdf1_login/Main.java index a176120..80cbd15 100644 --- a/src/main/java/Sdf1_login/Main.java +++ b/src/main/java/Sdf1_login/Main.java @@ -9952,6 +9952,13 @@ public class Main extends JavaPlugin return true; } String target = args[1]; + // ★ 第57批续3:/del ban 拦截(ban 不作为待删除玩家账号的名字) + if (target.equalsIgnoreCase("ban")) { + sender.sendMessage("§cban 是封禁缺口确认命令,不是玩家账号名"); + sender.sendMessage("§7确认拉回封禁:§a/sdf1_login confirm ban"); + sender.sendMessage("§7确认解封:§a/sdf1_login cancel ban"); + return true; + } if (!db.userExists(target)) { String twin = db.findSimilarUserNameIgnoreCase(target); sender.sendMessage( @@ -10064,14 +10071,6 @@ public class Main extends JavaPlugin return true; } - // ★ 第57批续3:/delete ban 拦截(ban 不作为待删除玩家账号的名字) - if (sub.equals("delete") && args.length >= 2 && args[1].equalsIgnoreCase("ban")) { - sender.sendMessage("§cban 是封禁缺口确认命令,不是玩家账号名"); - sender.sendMessage("§7确认拉回封禁:§a/sdf1_login confirm ban"); - sender.sendMessage("§7确认解封:§a/sdf1_login cancel ban"); - return true; - } - // ★ 第57批:confirm ban 确认封禁缺口拉回 if (sub.equals("confirm") && args.length >= 2 && args[1].equalsIgnoreCase("ban")) { if (!isAdmin(sender)) { sender.sendMessage("\u00a7c权限不足"); return true; } diff --git a/src/main/java/Sdf1_login/WebManager.java b/src/main/java/Sdf1_login/WebManager.java index be40e0d..a336a20 100644 --- a/src/main/java/Sdf1_login/WebManager.java +++ b/src/main/java/Sdf1_login/WebManager.java @@ -5895,6 +5895,24 @@ public class WebManager { } } } + // ★ 第57批续3:给所有在线管理员发可点击消息(管理员直接点击执行命令) + private void broadcastClickableToAdmins(net.kyori.adventure.text.Component comp) { + String adminTag = plugin.getConfigMgr().areaProtectAdminTag; + if (adminTag == null || adminTag.isEmpty()) adminTag = "admin"; + for (org.bukkit.entity.Player p : Bukkit.getOnlinePlayers()) { + if (p.hasPermission("group." + adminTag) || p.isOp()) { + p.sendMessage(comp); + continue; + } + for (String tag : p.getScoreboardTags()) { + if (tag.equalsIgnoreCase(adminTag)) { + p.sendMessage(comp); + break; + } + } + } + } + // ★ 第57批:封禁缺口确认/取消 + 登录验证推送 /** 进入封禁缺口待确认模式:写bak备份,等管理员确认 */ @@ -5908,9 +5926,24 @@ public class WebManager { plugin.getLogger().warning("[封禁-缺口] 服主可能批量解封删了 banned-players.json"); plugin.getLogger().warning("[封禁-缺口] 执行 /sdf1_login confirm ban 拉回封禁"); plugin.getLogger().warning("[封禁-缺口] 执行 /sdf1_login cancel ban 确认解封"); - broadcastToAdmins("§c§l[封禁-缺口] §f检测到 " + rows.size() + " 条封禁数据缺口待确认"); - broadcastToAdmins("§7执行 §a/sdf1_login confirm ban §7拉回封禁数据"); - broadcastToAdmins("§7或 §a/sdf1_login cancel ban §7确认解封(清空PHP数据)"); + // ★ 第57批续3:可点击通知(管理员点击直接执行 confirm/cancel) + net.kyori.adventure.text.Component confirmBtn = net.kyori.adventure.text.Component.text() + .append(net.kyori.adventure.text.Component.text("§a[点击拉回封禁] ").clickEvent( + net.kyori.adventure.text.event.ClickEvent.runCommand("/sdf1_login confirm ban"))) + .append(net.kyori.adventure.text.Component.text("§7= /sdf1_login confirm ban")) + .build(); + net.kyori.adventure.text.Component cancelBtn = net.kyori.adventure.text.Component.text() + .append(net.kyori.adventure.text.Component.text("§c[点击确认解封] ").clickEvent( + net.kyori.adventure.text.event.ClickEvent.runCommand("/sdf1_login cancel ban"))) + .append(net.kyori.adventure.text.Component.text("§7= /sdf1_login cancel ban")) + .build(); + broadcastClickableToAdmins(net.kyori.adventure.text.Component.text() + .append(net.kyori.adventure.text.Component.text("§c§l[封禁-缺口] §f检测到 ")) + .append(net.kyori.adventure.text.Component.text(String.valueOf(rows.size())).color(net.kyori.adventure.text.format.NamedTextColor.RED)) + .append(net.kyori.adventure.text.Component.text(" 条封禁数据缺口待确认")) + .build()); + broadcastClickableToAdmins(confirmBtn); + broadcastClickableToAdmins(cancelBtn); } /** 管理员确认拉回封禁缺口 */