实测定位:高度偏好的启发值实现与 mineflayer-pathfinder 的内部约定冲突。 该库每次 compute() 返回 partial 时,用 h 最小的节点当 partial 路径的终点 (astar.js: if (neighborNode.h < this.bestNode.h) this.bestNode = neighborNode), 而 AltitudeGoal 把 h 减去了 权重 × y,于是「又高又偏」的节点 h 反而更小, partial 路径被引向高处而不是目标附近 —— A* 一直在算、永不收敛, 机器人一次移动指令都发不出来。 王城平台上的对照实测(其余配置完全相同): - altitudePreference = true → inputTicks = 0,任务永远停在「寻路超时,重新寻路」 - altitudePreference = false → inputTicks = 237,立刻开始移动 顺带排除:searchRadius 从 -1 改到 128 对结果没有任何影响, 所以不是「搜索空间无界」导致的;pathfinder 与 manual 两种执行器表现一致。 改动: - expansionConfig 默认 altitudePreference 改为 false,并在注释里写清原因与 「想重新启用应该怎么做」(把偏置改成低处加移动代价,保持启发值只反映真实距离); - AltitudeGoal 的类注释补上完整推导与实测数据,避免以后有人又把它打开; - 新增回归用例:断言默认关闭,并用启发值差值把「为什么必然出问题」固化下来。 测试 468 → 469,全绿。
40 行
1.0 KiB
JSON
40 行
1.0 KiB
JSON
{
|
|
"name": "autostore-bot",
|
|
"version": "1.9.1",
|
|
"description": "AutoStore Bot —— Minecraft 自动扩地机器人(mineflayer 重写版,多机器人挂机,Web 控制台,开拓日志,大地图,Grim 反作弊适配)",
|
|
"main": "src/index.js",
|
|
"scripts": {
|
|
"start": "node src/index.js",
|
|
"dev": "node --watch src/index.js",
|
|
"test": "node --test",
|
|
"check": "node scripts/check-syntax.js && node scripts/check-web-ids.js",
|
|
"deploy": "node scripts/deploy.js",
|
|
"ssh": "node scripts/ssh-helper.js"
|
|
},
|
|
"keywords": [
|
|
"minecraft",
|
|
"mineflayer",
|
|
"autostore",
|
|
"territory"
|
|
],
|
|
"author": "",
|
|
"license": "MIT",
|
|
"private": true,
|
|
"engines": {
|
|
"node": ">=18.0.0"
|
|
},
|
|
"dependencies": {
|
|
"chalk": "^4.1.2",
|
|
"dotenv": "^16.4.7",
|
|
"express": "^4.21.2",
|
|
"mineflayer": "^4.39.0",
|
|
"mineflayer-pathfinder": "^2.4.5",
|
|
"vec3": "^0.1.10",
|
|
"ws": "^8.18.0"
|
|
},
|
|
"devDependencies": {
|
|
"minecraft-data": "^3.102.3",
|
|
"ssh2": "^1.17.0"
|
|
}
|
|
}
|