Skip to content

Conversation

@Dbackolds
Copy link

问题描述

使用 WaterdogPE 代理端(包括网易的)跨服后,计分板和头部显示消失,只有重启服务器才能恢复。

原因分析

  1. Player 对象缓存失效:跨服后新旧 Player 对象被视为相等,但旧对象已失效
  2. GameCore 内部缓存:认为已发送过数据包,不再重复发送
  3. 发送时机问题:player.spawned=false 时发送的数据包被丢弃

修复内容

  1. TipTask - 缓存命中时更新 player 引用
  2. SendPlayerClass - 添加 player.spawned 检查,每次重新创建子 Task
  3. ScoreBoardTask - 每次先 closeScoreboard 再 showScoreboard 强制刷新
  4. 其他 Task - 统一添加 spawned 检查

…tate issues

- Upgrade MemoriesOfTime-GameCore from 1.6.9 to 1.6.11-PM1E
- Change GameCore dependency scope from provided to system with local jar path
- Add player spawned state checks in all task classes to prevent operations on unspawned players
- Fix BossBarAllPlayerTask to check if player exists in apis before recreating BossBar
- Update SendPlayerClass to refresh player reference on each task execution to handle cross-server transitions
- Add updatePlayer() method to SendPlayerClass for updating stale player references
- Recreate all subtasks (BossBar, Broadcast, NameTag, ScoreBoard) on each init to use latest player reference
- Add scoreboard close before show to force GameCore to resend data packets
- Add manifest file for jar artifact
- These changes resolve issues where players transitioning between servers had stale player object references causing display tasks to fail
…SNAPSHOT

- Downgrade MemoriesOfTime-GameCore from 1.6.11-PM1E to 1.6.9
- Update project version from 2.2.3-SNAPSHOT to 2.2.4-SNAPSHOT
- Change GameCore dependency scope from system to provided
- Remove local jar file from lib directory
- Use property variable for GameCore version management
- Clean up build artifacts from out directory
- Delete META-INF/MANIFEST.MF from repository
- Allow build system to generate manifest dynamically
- Reduce unnecessary version control overhead for generated files
<groupId>com.smallaswater.tips</groupId>
<artifactId>Tips</artifactId>
<version>2.2.3-SNAPSHOT</version>
<version>2.2.4-SNAPSHOT</version>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

快照版本暂时不需要修改版本号

bossTask = new BossBarAllPlayerTask(player);
}
// 每次都重新创建子Task,确保使用最新的player引用
bossTask = new BossBarAllPlayerTask(player);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

应当更新player而不是直接new新的,这会导致gc压力提升

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.

3 participants