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 日志。

相关条目