feat: 新增物理 tick 录制,把「走不动」的三种原因切开(1.9.0)
抓包已经证明「手动按键时客户端坐标一字未变、服务端入站位置包为 0」, 问题在 prismarine-physics 这一层;但抓包只能看到「发出去的包」, 看不到物理引擎内部读到了什么输入、算出了什么、有没有真的移动。 本提交补上这最后一块拼图。 新增 src/core/physicsRecorder.js + 控制台接口 (POST /api/bots/:id/physics/start|stop、GET /api/bots/:id/physics): 逐 tick 记录位置增量、速度、onGround、isCollidedHorizontally、控制键快照、 脚下/脚部/头部方块名、physicsEnabled;汇总给出四个判定计数: - inputTicks 有移动输入的 tick 数 - inputMovedTicks 其中真的产生了水平位移的 - blockedTicks 有输入、没位移、物理报告碰撞 → 被方块挡住(地形) - frozenTicks 有输入、没位移、物理没报告碰撞 → 输入根本没进物理 即:抓包看「发了什么」,本录制器看「物理读到了什么、动没动」,两者配合即可定位。 细节: - 录制开始时先取一次当前位置作基线,避免第一个 tick 因「没有上一 tick 可比」 被误判成「有输入但没动」; - 滚动缓冲只保留最近 240 个 tick(约 12 秒),只放内存、不写盘; - 录制全程 try 包裹,诊断自身出异常绝不影响物理循环; - FakeBot 补上与 mineflayer 一致的 controlState(带 getter 的实时控制键代理)。 测试:451 → 468 个用例(含三种故障判定的回归用例与控制台接口用例),全绿。
这个提交包含在:
@@ -381,6 +381,21 @@ curl -s -X POST -H "X-Auth-Token: $PW" http://103.236.99.177:78/api/bots/$BOT/ca
|
||||
|
||||
# 协议字段定义自检(核对 mineflayer 写出的字段名与 1.21.4 是否一致)
|
||||
node scripts/check-protocol.js
|
||||
|
||||
# 录物理 tick(诊断「走不动」的另一半:抓包看「发了什么」,这里看「物理读到了什么、动没动」)
|
||||
# 一边录一边按方向键,然后看三个计数:
|
||||
# inputTicks>0 且 inputMovedTicks=0 且 frozenTicks>0 → 输入根本没进物理
|
||||
# inputTicks>0 且 inputMovedTicks=0 且 blockedTicks>0 → 被方块挡住(地形)
|
||||
# inputMovedTicks>0 但服务端把位置拉回 → 才是服务端回弹
|
||||
curl -s -X POST -H "X-Auth-Token: $PW" -H 'Content-Type: application/json' \
|
||||
-d '{"seconds":10}' http://103.236.99.177:78/api/bots/$BOT/physics/start
|
||||
curl -s -X POST -H "X-Auth-Token: $PW" -H 'Content-Type: application/json' \
|
||||
-d '{"direction":"forward","seconds":3}' http://103.236.99.177:78/api/bots/$BOT/move
|
||||
curl -s -H "X-Auth-Token: $PW" http://103.236.99.177:78/api/bots/$BOT/physics \
|
||||
| jq '.data | {inputTicks, inputMovedTicks, blockedTicks, frozenTicks, movedTicks, maxHorizDelta, last}'
|
||||
# 逐 tick 明细(看速度、onGround、碰撞、脚下方块)
|
||||
curl -s -H "X-Auth-Token: $PW" 'http://103.236.99.177:78/api/bots/$BOT/physics?limit=40' \
|
||||
| jq '.data.ticks[] | {t, dx, dz, vx, vz, onGround, collidedHorizontally, blockBelow, control}'
|
||||
```
|
||||
|
||||
### 判断「机器人是不是卡在登录服」
|
||||
|
||||
在新工单中引用
屏蔽一个用户