存储与备份
YAML、SQLite、MySQL、恢复记录及技能导出边界。
LiSkills 默认使用 plugins/LiSkills/players/<uuid>.yml,也可在 storage.yml 选择 SQLite 或 MySQL。切换类型、连接或数据库文件需要完整重启;普通重载会拒绝整次存储变更并继续使用旧配置。
只改类型不会自动搬数据。 有旧档案时先做离线迁移,核对目标后再切换。
三种后端
| 后端 | 用途与限制 |
|---|---|
| YAML | 默认独立玩家文件,容易查看;同目录只允许一个 LiSkills 进程写入 |
| SQLite | 本机数据库;正常停服后备份数据库及必要伴随文件 |
| MySQL | 独立数据库;同数据库和表前缀只允许一个 LiSkills 实例 |
MySQL 不提供多服共享进度或实时同步。不同前缀是互相独立的数据,不能用同一前缀同时启动多个子服。
MySQL 需要 8.0 或以上、独立账户及相应表权限,并允许会话锁。默认验证证书与主机名;不要为方便在不可信网络关闭验证。密码留在配置文件,限制文件权限,不公开完整管理日志。
初始化、驱动下载、锁、表结构或连接失败时安全停止,不悄悄退回空白 YAML。公共驱动独立下载并校验,不合并进 Jar。
保存失败时会怎样
技能档案记录 UUID、最近名称、全部技能等级与本级经验、魔力和冷却。自定义技能与 15 项内置技能一并保存,不按固定旧技能表裁剪。
写入通过独立 IO 队列进行。损坏档案、外部写入冲突或未知提交结果不会被当成空玩家覆盖。无法确认保存的数据会保留最新内存快照并写入 recovery/,但磁盘不可写时恢复文件也可能失败。
shutdown-timeout-seconds 是关闭等待上限,不是保存成功保证。缩短等待不能解决断网或磁盘故障。
recovery 文件不要直接删
若启动发现旧会话的 recovery/<uuid>.yml 或未完成 .yml.tmp,对应玩家会被拒绝加载。插件无法自动判断数据库和恢复文件哪个更新,不会猜测覆盖。
请停服,保留完整副本,核对 UUID、等级、经验和时间,再完成离线恢复。处理完才移走已确认的恢复记录。不要为了让玩家上线直接删掉唯一较新的资料。
正确备份
| 资料 | 包含什么 |
|---|---|
| LiSkills 配置目录 | 技能规则、文本、菜单与连接配置 |
| 技能文件或数据库 | 等级、本级经验、魔力、冷却 |
reward-ledger/ |
职业收入额度、奖励已处理记录 |
| 世界原生玩家数据 | 背包、HUD 偏好、职业选择、命名玩家加成等 |
| 世界区块数据 | 人工方块来源标记及正常世界状态 |
Paper 26.1.2 常用 world/players/data/,旧版本常用 world/playerdata/,以实际目录为准。SQLite 使用 WAL 时不能只复制在线主文件而遗漏日志;建议正常停服后备份完整数据。
技能导出
管理员执行 /lsk export,输出到新的 plugins/LiSkills/exports/profiles-<时间>-<随机UUID>/,不会覆盖旧导出。开始写入时有 INCOMPLETE.txt 标记,全部成功后产生 COMPLETE.txt 并删除未完成标记;玩家 YAML 位于该次导出的 players/ 子目录。未完成导出不能视为完整备份。
导出不包含奖励账本、世界 PDC、物品与区块数据。数据库迁移也不自动搬这些资料。