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。
相关条目