KeyTracking

基本信息

属性 值
路径 mrtjp.core.data.KeyTracking
源码 src/main/scala/mrtjp/core/data/KeyTracking.scala

服务端可读取「某玩家某个按键是否按下」的同步机制。客户端每 tick 检测按键状态变化, 经 keyBindPacket 上报,服务端存为 Map[Int, Map[UUID, Boolean]]。

关键 API

成员 说明
registerTracker(tracker: TServerKeyTracker) 分配递增 id(从 0)并初始化该 id 的 map
updatePlayerKey(id, player, state) 服务端侧更新
isKeyDown(id, player) 服务端侧查询(按玩家 UUID)

两个 trait

trait 职责
TServerKeyTracker 服务端侧;var id = -1;register() 申请 id;isKeyDown(p) 查询
TClientKeyTracker 客户端侧;@SubscribeEvent 监听 ClientTickEvent;状态变化时发包;register() 时若自身是 KeyBinding 则自动注册到 ClientRegistry

缺陷

  • isKeyDown 用 map(id)(player.getGameProfile.getId)——MHashMap 的 withDefaultValue(false) 只在 getOrElseUpdate 建立的 key 上生效;若某 id 未注册,调用会抛 NoSuchElementException 而非返回 false。
  • 整个机制假设玩家有 GameProfile(即非假玩家),对假玩家会 NPE。

相关条目