fix: 修复tpaccept路由被isValidRequest提前拦截导致4秒也报过期。tpaccept现在先确定targetName再查数据库时间戳校验,不再依赖teleportRequestTimes内存
This commit is contained in:
@@ -680,21 +680,18 @@ public class TeleportManager implements Listener {
|
|||||||
// ★ 先检查是否有待处理请求且未过期
|
// ★ 先检查是否有待处理请求且未过期
|
||||||
String targetName = null;
|
String targetName = null;
|
||||||
if (args.length > 0) {
|
if (args.length > 0) {
|
||||||
targetName = args[0];
|
String arg = args[0];
|
||||||
|
// ★ 优先当玩家名处理,在线则直接走玩家名逻辑
|
||||||
|
Player possiblePlayer = Bukkit.getServer().getPlayer(arg);
|
||||||
|
if (possiblePlayer != null && possiblePlayer.isOnline()) {
|
||||||
|
targetName = arg;
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
int index = Integer.parseInt(arg);
|
||||||
|
return handleTPAcceptCLI(player, index);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
targetName = arg;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 如果是无参调用,收集 incoming senders 来判断
|
|
||||||
Set<String> currentIncoming = incomingRequests.get(player.getName());
|
|
||||||
if ((targetName == null || targetName.isEmpty()) && (currentIncoming == null || currentIncoming.isEmpty())) {
|
|
||||||
player.sendMessage("§c[传送] 你没有待处理的传送请求");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果有目标名,检查请求是否仍然有效
|
|
||||||
if (targetName != null && !targetName.isEmpty()) {
|
|
||||||
if (!isValidRequest(player.getName(), targetName)) {
|
|
||||||
player.sendMessage("§c[传送] 请求 §f" + targetName + " §c的传送请求已过期或不存在");
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user