Skip to content

fix: 修复导航边界与路径平滑正确性#717

Open
zhibeigg wants to merge 1 commit into
TabooLib:dev/6.3.0from
zhibeigg:fix/703-navigation-correctness
Open

fix: 修复导航边界与路径平滑正确性#717
zhibeigg wants to merge 1 commit into
TabooLib:dev/6.3.0from
zhibeigg:fix/703-navigation-correctness

Conversation

@zhibeigg

@zhibeigg zhibeigg commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

原有问题

导航模块沿用了不完整的世界高度、水体和直线路径判定:

  • 高度查询与纵向扫描没有始终使用目标坐标及当前世界的真实最小/最大高度,现代负高度世界可能越界。
  • 节点哈希在部分坐标组合下发生碰撞,不同位置可能被当成同一节点。
  • 水和岩浆、可游泳位置及随机陆地候选筛选不够严格。
  • 路径平滑只验证抽象连线,未按实体碰撞箱、支撑方块、危险方块和窄通道检查整段路径。

典型触发场景与后果

  • Minecraft 1.18+ 负 Y 世界、自定义高度世界或接近上下边界寻路:读取越界、漏掉可行节点或生成非法高度。
  • 较远坐标寻路时节点哈希碰撞:开放/关闭集合错误覆盖,路径随机绕路、失败或不稳定。
  • 水边、岩浆附近或 Folia 区域随机选点:把危险液体或错误区域候选当成可行位置。
  • 高个/宽体实体经过墙角、台阶、窄门或悬空位置时平滑路径:删除必要节点后直线穿墙、穿过危险方块或失去地面支撑。

本 PR 修改

  • 使用版本兼容的世界最小/最大高度,并按目标 x/z 执行边界安全的纵向扫描。
  • 修复节点坐标哈希,避免不同位置碰撞。
  • 明确区分水和岩浆,修正可游泳状态、Folia 目标区域评分及随机陆地候选筛选。
  • 按实体完整碰撞箱扫掠验证平滑路径,检查障碍、液体、危险方块、支撑高度和通道宽度。
  • 增加现代世界高度、哈希、水域筛选、墙角/窄通道和平滑安全测试。

修改目的

确保寻路结果与真实世界边界和实体体积一致,平滑过程只能删除真正可安全直达的节点,避免路径穿墙、越界或进入危险地形。

兼容性与行为变化

  • 不修改公开导航 API。
  • 路径结果可能改变,但变化是从不安全或越界路线修正为可通行路线。

验证

  • ./gradlew :module:bukkit:bukkit-navigation:test --rerun-tasks --no-parallel
  • ./gradlew :module:bukkit:bukkit-navigation:build --rerun-tasks --no-parallel
  • git diff --check(仅 Windows LF→CRLF 提示)

Refs #703

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant