feat: 所有转让操作增加注册时间≥5分钟验证
- WebManager: 管理面板改主和玩家过户都验证register_time - AreaProtection: 游戏内转让也验证register_time - 防止注册秒退玩家接收领地,确保玩家是真实有效
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user