JianFeeeee
69f54dc5a6
修复状态层撒谎:自身位置是客户端权威,move 必须更新本地状态
★★ 真 bug(用户问「寻路呢」时暴露出来):move() 之后本地坐标不变,
而服务端认为玩家真的移动了。
实测证据:
连发 5 次 move 后
本地以为: (0.5, -60.0, -3.5) ← 没动
服务端认为: (5.5, -60.0, -3.5) ← 真的动了
修后:本地 (10.5,-60,-3.5) == 服务端 [10.5d,-60.0d,-3.5d] ✓
根因:MC 的自身位置是**客户端权威** —— 客户端跑自己那侧物理并上报,
服务端只做校验(穿墙/超速会发 position 拉回),普通移动**不回包**。
我把这条规则错用成「等服务端权威」⇒ 本地状态永久陈旧。
与另一条的对比(别搞成一套):
自身移动(move/look) 客户端权威 ⇒ 本地必须立刻更新,标 pending 待确认
改世界(dig/place) 服务端权威 ⇒ 本地不动,等 block_changed 事件
★ 同时纠正一条**我自己写错的判据**:
test_move_does_not_falsely_update_local_state(断言「不该改本地」)是错的,
已替换为 test_move_updates_local_state_because_client_is_authoritative,
并补 test_dig_place_do_not_touch_local_world_state 守住相反的那条。
这个 bug 影响很大:寻路/碰撞/可达性判断全都建立在玩家位置上,
状态陈旧会让整个工具箱在错误前提下工作。
2026-09-26 13:21:44 +08:00
..
2026-09-25 14:25:34 +08:00
2026-09-26 13:21:44 +08:00
2026-09-25 19:21:45 +08:00
2026-09-26 13:17:17 +08:00
2026-09-25 14:25:34 +08:00
2026-09-25 14:25:34 +08:00
2026-09-26 12:44:08 +08:00
2026-09-25 14:36:21 +08:00
2026-09-26 10:18:36 +08:00
2026-09-25 14:32:39 +08:00
2026-09-26 12:15:48 +08:00
2026-09-26 07:23:54 +08:00
2026-09-26 13:13:15 +08:00
2026-09-26 11:12:40 +08:00
2026-09-26 12:27:28 +08:00
2026-09-26 07:23:54 +08:00
2026-09-25 14:06:55 +08:00
2026-09-25 14:33:26 +08:00