feat: 所有转让操作增加注册时间≥5分钟验证

- WebManager: 管理面板改主和玩家过户都验证register_time
- AreaProtection: 游戏内转让也验证register_time
- 防止注册秒退玩家接收领地,确保玩家是真实有效
This commit is contained in:
2026-06-29 21:29:40 +08:00
parent c41ef2eacc
commit c303849335
2 changed files with 87 additions and 1 deletions
@@ -7459,6 +7459,28 @@ public class AreaProtection implements Listener {
return true;
}
// ★ 验证玩家注册时间必须超过5分钟(防止注册秒退玩家接收领地)
if (dbMgr != null) {
long registerTime = 0;
try {
Object regTimeObj = dbMgr.getField(newOwner, "register_time");
if (regTimeObj instanceof Number) {
registerTime = ((Number) regTimeObj).longValue();
}
} catch (Exception e) {
// 忽略异常
}
if (registerTime > 0) {
long now = System.currentTimeMillis();
long fiveMinutesMs = 5 * 60 * 1000;
if (now - registerTime < fiveMinutesMs) {
long minutesLeft = (fiveMinutesMs - (now - registerTime)) / 60000;
sender.sendMessage("§c玩家 §e" + newOwner + " §c注册时间不足5分钟(还差" + minutesLeft + "分钟)");
return true;
}
}
}
// ★ 执行转让
ac.owner = newOwner;
saveAreaToDb(ac);
@@ -8511,6 +8533,28 @@ public class AreaProtection implements Listener {
return true;
}
// ★ 验证玩家注册时间必须超过5分钟(防止注册秒退玩家接收领地)
if (dbMgr != null) {
long registerTime = 0;
try {
Object regTimeObj = dbMgr.getField(newOwner, "register_time");
if (regTimeObj instanceof Number) {
registerTime = ((Number) regTimeObj).longValue();
}
} catch (Exception e) {
// 忽略异常
}
if (registerTime > 0) {
long now = System.currentTimeMillis();
long fiveMinutesMs = 5 * 60 * 1000;
if (now - registerTime < fiveMinutesMs) {
long minutesLeft = (fiveMinutesMs - (now - registerTime)) / 60000;
p.sendMessage("§c玩家 §e" + newOwner + " §c注册时间不足5分钟(还差" + minutesLeft + "分钟)");
return true;
}
}
}
// 执行转让
String oldOwner = ac.owner;
ac.owner = newOwner;
+43 -1
View File
@@ -3522,7 +3522,28 @@ public class WebManager {
applied = false;
break;
}
// 2. 执行改主
// 2. 验证玩家注册时间必须超过5分钟(防止注册秒退玩家接收领地)
long registerTime = 0;
try {
Object regTimeObj = plugin.getDb().getField(newOwner, "register_time");
if (regTimeObj instanceof Number) {
registerTime = ((Number) regTimeObj).longValue();
}
} catch (Exception e) {
// 忽略异常
}
if (registerTime > 0) {
long now = System.currentTimeMillis();
long fiveMinutesMs = 5 * 60 * 1000;
if (now - registerTime < fiveMinutesMs) {
long minutesLeft = (fiveMinutesMs - (now - registerTime)) / 60000;
plugin.getLogger().warning("[Web通信] 管理面板改主失败: 玩家 " + newOwner + " 注册时间不足5分钟(还差" + minutesLeft + "分钟)");
callbackOwnerChangeToPHP(id, false, "玩家 " + newOwner + " 注册时间不足5分钟(还差" + minutesLeft + "分钟)");
applied = false;
break;
}
}
// 3. 执行改主
areaProtect.setLandOwnerFromWeb(landName, newOwner);
plugin.getLogger().info("[Web通信] PHP端领地所有者变更: " + landName + " → " + newOwner);
// 3. 回调PHP更新本地副本
@@ -3677,6 +3698,27 @@ public class WebManager {
return false;
}
// ★ 验证玩家注册时间必须超过5分钟(防止注册秒退玩家接收领地)
long registerTime = 0;
try {
Object regTimeObj = dbMgr.getField(newOwner, "register_time");
if (regTimeObj instanceof Number) {
registerTime = ((Number) regTimeObj).longValue();
}
} catch (Exception e) {
// 忽略异常
}
if (registerTime > 0) {
long now = System.currentTimeMillis();
long fiveMinutesMs = 5 * 60 * 1000;
if (now - registerTime < fiveMinutesMs) {
long minutesLeft = (fiveMinutesMs - (now - registerTime)) / 60000;
plugin.getLogger().info("[过户] 验证失败: 玩家 " + newOwner + " 注册时间不足5分钟(还差" + minutesLeft + "分钟)");
notifyTransferCallback(transferId, "failed", "玩家 " + newOwner + " 注册时间不足5分钟(还差" + minutesLeft + "分钟)");
return false;
}
}
// ★ 验证通过:改Java本地DB
AreaProtection areaProtect = plugin.getAreaProtection();
if (areaProtect == null) {