PlayerHandler
基本信息
| 属性 | 值 |
|---|---|
| 路径 | baubles.common.lib.PlayerHandler |
| 类型 | class |
| 包名 | baubles.common.lib |
静态字段
| 字段 | 类型 | 说明 |
|---|---|---|
playerBaublesServer |
HashMap<String, InventoryBaubles> |
服务器端玩家饰品栏缓存(key = 玩家名) |
playerBaublesClient |
HashMap<String, InventoryBaubles> |
客户端缓存 |
方法
| 方法 | 用途 |
|---|---|
clearPlayerBaubles(EntityPlayer) / clearPlayerBaubles(String, boolean isClient) |
从指定端缓存移除指定玩家 |
clearClientPlayerBaubles() |
清空客户端缓存(连接新服务器时由 EventHandlerNetwork.onConnectedToServer 调用) |
clearServerPlayerBaubles() |
清空服务器缓存(FMLServerStoppedEvent 时调用) |
pruneServerSide() / pruneClientSide() |
每 200 tick 由 EventHandlerCleanup 调用一次;遍历缓存,弱引用未死的玩家保持原样,若已死但重新找到则更新弱引用;找不到则删除 |
onWorldUnload(World) |
客户端侧:删除引用了此 world 但玩家已 null 的条目,或 worldObj == 该 world 的条目 |
getPlayerBaubles(EntityPlayer) |
按玩家 world 是 client/server 选择对应缓存;不存在则 computeIfAbsent 创建 |
setPlayerBaubles(EntityPlayer, InventoryBaubles) |
把自定义 InventoryBaubles 替换缓存条目(container 关闭时由 ContainerPlayerExpanded.onContainerClosed 调用) |
loadPlayerBaubles(player, mainFile, backupFile) |
服务端读 <name>.baub,失败则尝试 <name>.baubback;NBT 通过 CompressedStreamTools 反序列化;读完后调用 inventory.readNBT |
savePlayerBaubles(player, mainFile, backupFile) |
先把 mainFile 复制为 backup;再写入压缩 NBT;保存失败删除 mainFile |
玩家文件
- 主文件扩展名:
baub - 备份扩展名:
baubback - 路径:
world/players/<playerName>.baub - 加载/保存由 EventHandlerEntity 的
playerLoad/playerSave触发
UUID 兼容
加载时如果 <name>.baub 不存在,会尝试读取 <uuid>.baub(旧版 Baubles 用 UUID 保存);成功则复制到 name 文件并删除 uuid 文件,并打印 info 日志。
相关条目
- BaublesApi - 通过反射调用
getPlayerBaubles - EventHandlerCleanup
- EventHandlerEntity - 加载/保存触发器
- EventHandlerNetwork - 客户端缓存清理
- ContainerPlayerExpanded - 关闭时调用
setPlayerBaubles