SyncHandler
基本信息
| 属性 | 值 |
|---|---|
| 类名 | squeek.applecore.network.SyncHandler |
| 类型 | class,静态 channel + 实例事件处理器 |
| 频道 | NetworkRegistry.INSTANCE.newSimpleChannel(ModInfo.MODID) |
| 启用版本 | Minecraft 1.7.10 |
功能
服务端把玩家的饱和度与消耗值同步到客户端。
| 方法 / 字段 | 说明 |
|---|---|
init() |
注册 2 个消息类并把自身挂到 FML 总线与 Forge 总线 |
onLivingUpdateEvent(LivingUpdateEvent) |
每 tick 检查并按需发包 |
onPlayerLoggedIn(PlayerLoggedInEvent) |
清理该 UUID 的缓存 |
lastSaturationLevels |
Map<UUID, Float> 饱和度缓存 |
lastExhaustionLevels |
Map<UUID, Float> 消耗值缓存 |
实现要点
- 两个消息的判别 id:
MessageExhaustionSync=0,MessageSaturationSync=1;两者方向均为Side.CLIENT。 - 饱和度用
!=比较,值一变就发包(不设阈值)。 - 消耗值用
Math.abs(last - current) >= ModConfig.EXHAUSTION_SYNC_THRESHOLD比较,默认阈值0.01D;等于阈值时也会发包。 - 缓存是无界
HashMap,仅在玩家登录事件里remove。 长生命周期服务端若玩家反复上下线,条目会随唯一 UUID 增长; 源码无容量上限或过期清理。 onLivingUpdateEvent首行做instanceof EntityPlayerMP判断, 客户端实体直接返回。
相关条目
- ModConfig -
EXHAUSTION_SYNC_THRESHOLD定义处 - MessageExhaustionSync - id 0
- MessageSaturationSync - id 1
- NetworkHelper - 消息内的玩家获取工具
- AppleCore -
init阶段调用本类