第57批续3修正:/del ban拦截移到del分支内 + 管理员通知改为可点击消息
Check Source / check (push) Successful in 3s
Auto Release / build (push) Successful in 2m11s
Simple Test / test (push) Successful in 1s
Test Env / test (push) Successful in 2s

This commit is contained in:
youpaishidifu
2026-10-26 11:10:45 +08:00
parent d7d51cbb6b
commit 7b62075dc7
2 changed files with 43 additions and 11 deletions
+7 -8
View File
@@ -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; }
+36 -3
View File
@@ -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);
}
/** 管理员确认拉回封禁缺口 */