v1.1.7: 修复玩家不移动问题(移除寻路前相邻领土校验)

1.1.5 新增的「目标与己方领土接壤校验」在第三方领土地图刷新后,own 集合与规划器判定不一致,导致有效目标被误判跳过,玩家原地不动。已移除运行时的重复邻居验证(规划器已保证目标与己方领土相邻),仅保留「未被其它邦国占领」判断,恢复 1.1.2 及更早版本的行为。

构建:修正 build.gradle 使 baritone 嵌套打包进 META-INF/jars(1.1.6 缺失)。
这个提交包含在:
lyizai
2026-08-18 13:47:20 +08:00
父节点 b8e56dafcb
当前提交 15b4a40b6d
共修改 6 个文件,包含 27 行新增和 37 行删除
@@ -387,45 +387,18 @@ implements SubtitleChatMonitor.Listener {
/**
* 判断当前目标是否仍然有效:
* 未被任何邦国占领,且与己方领土(含本次会话新占领)至少一个区块接壤。
* 使用实时地图数据校验,避免寻路到与领土不接壤的孤立区块。
* 未被任何邦国占领即可——规划器已保证目标与己方领土相邻,
* 运行时无需重复验证邻居关系,避免地图刷新后 own 集合不一致导致误判跳过。
*
* <p>注意:己方领土数据暂时不可用时保守视为有效(可能性极小,仅刷新竞态时发生),
* 避免所有目标被误跳过导致玩家原地不动。
*/
private boolean isTargetStillValid() {
if (this.target == null) {
return false;
}
TerritoryModel m = this.dataService.model();
if (m.allClaimedChunks().contains(this.target)) {
return false;
}
HashSet<ChunkPos> own = new HashSet<ChunkPos>(m.sessionClaims());
TerritoryState self = m.selfState();
// Fallback:如果当前刷新后的模型找不到己方邦国,使用启动/规划时缓存的模型
// 启动检查成功说明邦国一定存在,fallback 解决竞态/刷新导致的 self 暂时性 null,避免所有目标被跳过
if (self == null && this.model != null) {
self = this.model.selfState();
}
if (self != null) {
own.addAll(self.chunks());
}
// 己方领土数据暂时不可用时保守视为有效,避免所有目标被误跳过导致玩家原地不动;
// 规划器生成目标时己方领土必然非空,此处 own 为空仅可能是刷新竞态,放行让寻路继续
if (own.isEmpty()) {
this.log("警告:己方领土数据暂时为空,保守放行目标 " + this.target.x() + "," + this.target.z());
return true;
}
return this.ownNeighbors(this.target, own) > 0;
}
/** 统计区块周围(上下左右)属于给定集合的邻居数量 */
private int ownNeighbors(ChunkPos chunk, Set<ChunkPos> own) {
int count = 0;
for (ChunkPos neighbor : this.cardinalNeighbors(chunk)) {
if (own.contains(neighbor)) {
++count;
}
}
return count;
return !m.allClaimedChunks().contains(this.target);
}
/** 判断区块是否属于己方领土(含本次会话新占领) */