跳到主要内容

旁观、离场与重连

FPSMatch 的地图包含观察者队伍,但“处于原版旁观模式”不意味着玩家一定属于观察者队伍。团队淘汰赛中,出局玩家仍属于红队或蓝队,只是暂时不能战斗。

三种身份

身份队伍比赛存活状态
正在战斗的参赛者普通队伍存活
本轮出局的参赛者原来的普通队伍非存活
只观看比赛的玩家观察者队伍不参与普通队伍胜负

发送比分或回合消息时,用 getOnlineWithSpec() 覆盖三种身份;分配出生装备时,用 getOnline() 避免给观察者发装备。

出局与重新入场

地图的死亡处理可以在调用父实现后设置 GameType.SPECTATOR。下一轮需要同时恢复游戏模式与比赛状态。只设置 PlayerData.setLiving(true) 不会让 Minecraft 的旁观者重新拥有碰撞或攻击能力。

BaseRoundMap.handleRespawn() 默认只更新存活标记并传送。需要恢复生命、镜头或装备的模式,应在自己的回合准备方法中组合这些操作。

临时断线

比赛进行中断线时,框架调用 handlePlayerDisconnect() 保留玩家数据,标记离线和非存活。重连后恢复记分板绑定、发送地图和队伍数据,并将玩家置为旁观状态。

这意味着重连不应默认立即复活。淘汰赛可以让玩家等到下一轮;死斗则需要自行定义复活延迟。再次调用 join()leave() 会改变名单和关联,不能用它们替代所有重连处理。

主动离场

BaseMap.leave() 发布可取消的离开事件,清理关联和准备状态,并恢复为冒险模式。调用方应通过框架入口离场,不要只从内部 UUID 集合删除玩家。

HUD 还需要清理旧快照。教程使用离线清空与短暂超时;实时房间 UI 可以通过单独的离场消息立即清除展示。参见客户端状态

客户端目标、附着和环绕的实现见旁观视角,临时演出见相机系统