1快速开始
LinuxSync 是关服前的数据同步闸门。
服务器执行 /xstop 或 stop 时,它先把所有 Linux 系插件的数据
立即保存 + 备份,然后再让服务器关掉,
最后用一条面板消息汇报结果。
三步上手
- 把
LinuxSync-1.0.0.jar放进plugins/。 - 重启服务器,日志出现「LinuxSync 已启用」。
- 执行
/linuxsync验证,应看到 7/7 全部成功。
没有前置依赖
装了 XlandStop 就用
/xstop 触发;没装也能用 stop 或手动 /linuxsync。
2命令详解
| 命令 | 作用 |
|---|---|
/linuxsync | 手动触发一次同步(别名 /lsync),不关服 |
/xstop | XlandStop 的倒计时关服命令,LinuxSync 监听它并先同步 |
stop | 控制台关服命令,LinuxSync 会拦截、同步、再放行 |
三条路径的区别
| 触发 | 行为 |
|---|---|
/xstop | 立即同步 + 广播,然后放行,让 XlandStop 照常走 30 秒倒计时 |
stop | 拦截(取消原命令)→ 保存 → 广播 → 下一 tick 再真正执行 stop |
/linuxsync | 只同步 + 广播,不关服 |
3保存清单
全部走反射调用,任何一个插件缺失或方法变更都只影响它自己那一行,不会中断其它插件的保存。
| 插件 | 实际调用 |
|---|---|
| LinuxTeam | TeamManager.save() + backupNow(触发源) 强制备份 |
| LinuxTitle | PlayerDataManager.save() |
| FakePlayerPlugin | saveFakePlayersToYaml() |
| PointsShop | data().save() |
| NalxerPDR | ReportManager.save() |
| InTheNameOfLinux | BanManager.flush() + PlayTimeManager.save() |
| LinuxACE | 无持久化数据,标注「仅内存状态」 |
备份文件后缀
-xstop— 由/xstop触发-stop— 由 stop 拦截触发-manual— 手动/linuxsync-shutdown— onDisable 兜底
4防死循环
拦截 stop 之后自己又派发 stop,是最容易写出无限循环的地方。三重保险:
- bypassStop — 自己 dispatch 之前置 true,派发结束(finally)后复位;监听器第一行就检查它。
- stopHandled — 整个生命周期只拦截一次,第二次直接放行并继续关服。
- runTaskLater(1L) — 不在命令事件里嵌套派发命令,先让事件处理完,下一 tick 再 dispatch。
关服不会被保存卡住
即使同步过程抛异常,也一定继续执行 stop;耗时超过 15 秒只打警告,不阻塞。
5配置与限制
权限
| 权限 | 说明 | 默认 |
|---|---|---|
linuxsync.use | 使用 /linuxsync | OP |
★ RCON 的 stop 拦不住
Paper 1.12.2 对 RCON / 原生控制台的 stop 走服务端原生命令处理,
不触发 ServerCommandEvent。所以额外做了 onDisable 兜底保存 ——
任何关服方式都至少落盘一次。
生产建议:关服统一用 /xstop,或直接在控制台敲 stop。
6常见问题
没装 XlandStop 能用吗?
能。用 stop 关服(会被拦截并先保存),或者手动 /linuxsync。
看到某个插件显示 ✘ 怎么办?
表示那个插件没装、或者保存方法变了。该行失败不影响其它插件,查看 原因 字段即可。
为什么 LinuxACE 显示「仅内存状态」?
LinuxACE 的危险等级、缓冲都在内存里,没有需要落盘的数据,所以这一行只是占位说明。
同步很慢怎么办?
正常 200~1500 ms。如果超过 15 秒会打警告但不会阻塞关服。数据量特别大时可以检查各插件的数据文件大小。