Skip to content

fix(replay): 进入回放前先退出当前世界或服务器 - #187

Merged
cursor[bot] merged 1 commit into
mainfrom
cursor/replay-leave-world-5de2
Aug 29, 2026
Merged

fix(replay): 进入回放前先退出当前世界或服务器#187
cursor[bot] merged 1 commit into
mainfrom
cursor/replay-leave-world-5de2

Conversation

@gaoyu06

@gaoyu06 gaoyu06 commented Aug 29, 2026

Copy link
Copy Markdown
Member

在世界或服务器里点播放时,回放世界会直接 loadWorld(replayWorld)不会走 Disconnect 路径。1.8.9 的 loadWorld(新世界) 不会 cleanup()NetHandlerPlayClient,也不会关 integrated server,旧 NetworkManager 继续开着。旁观飞行仍按原 thePlayer.sendQueue 发到真实服务器,表现为飞行等异常。

改动

ReplayPlayer.openWorld 在搭 SilentConnection / 回放 WorldClient 之前先 leaveCurrentSession()

  1. 有现世时走和菜单 Disconnect / Shortcut QUIT_NETWORK 相同的 sendQuittingDisconnectingPacket()
  2. loadWorld(null),关掉连接并停掉 integrated server
  3. 中间弹出多人游戏/主菜单;ReplayScreen 保持到回放世界就绪后 displayGuiScreen(null)

sendQueue 缺失时只记 warn,仍继续 loadWorld(null)

Seek / 重开已有回放时 start() 会先 stop() 卸掉回放世界,此时 theWorld 已是 null,leaveCurrentSession 是空操作。

验证

  • 单人世界里打开回放:应退出该世界(integrated server 停掉),不再向它发包
  • 多人服务器里打开回放:应断开服务器,旁观移动不再发到原服
  • 主菜单打开回放:行为不变
  • 回放中 seek / 重开同一文件:不误伤、不闪菜单
  • 本环境无法启动 1.8.9 客户端,未做游戏内实测;./gradlew test 覆盖现有单元测试

范围

只改 Edge 回放进入路径。Nova 同问题另开 PR。

Open in Web Open in Cursor 

loadWorld(replayWorld) 不会断开原连接,旁观飞行仍会发到真实服务器。
进入回放时先按 Disconnect 路径退出现世/服务器,再加载回放世界。

Co-authored-by: Gao Yu <gaoyu06@users.noreply.github.com>
@cursor
cursor Bot merged commit 22918f7 into main Aug 29, 2026
3 checks passed
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.

2 participants