• 欢迎加入MineBBS QQ讨论群:点击查看所有的官方讨论群
  • 我们将于近期对服务器进行迁移,服务可能中断至多2日。请各位安排好自己的访问计划,造成不便敬请谅解!
  • MineBBS入站考试已经上线!想要成为【正式会员】解锁更多功能吗?快来参与吧!【点我去看】
PluralBackupJava

原创 工具 PluralBackupJava 1.0.9

请登录后获取
[MD] ### 新增功能 #### exclude-files 配置项 - 新增 `exclude-files` 配置字段,支持按文件名排除单个文件(如 `session.lock`) - 默认排除 `session.lock`(Minecraft 服务器运行时的世界锁文件,无法复制且无需备份) - 与 `exclude-dirs` 配合使用,覆盖目录和文件两级排除 ### 修复 #### session.lock 文件锁定导致备份失败 #### 压缩步骤静默失败(Error 未捕获) #### ZSTD 压缩时本地库未加载(UnsatisfiedLinkError) ### 改进 - 文件复制失败时记录警告日志并跳过,不再中断整个备份流程 - `plugin.yml` 和 `pom.xml` 描述更新,明确兼容 Purpur/Leaves ### 变更 #### 下线非 ZIP 压缩格式(仅保留 ZIP) - **背景**:Java 版 zst / 7z / tar.gz 压缩在实际服务端(Purpur 26.2 等)存在兼容性问题,仅 ZIP 工作正常 - **变更内容**: - `CompressorFactory` 仅返回 `ZipCompressor`,无论 `compression.type` 配置为何值(除 `none` 外)均按 ZIP 处理 - 删除 `ZstdCompressor`、`SevenZipCompressor`、`TarGzCompressor`、`CompressUtils` 四个类 - 移除 `commons-compress`、`zstd-jni`、`tukaani xz` 三项 Maven 依赖及对应 shade relocation / filter 配置 - `config.yml` 中 `compression.type` 默认值由 `zst` 改为 `zip` - `KNOWN_EXTENSIONS` 与 `PREFERRED_ORDER` 仅保留 `zip` - **体积优化**:jar 体积由约 3290 KB 降至约 991 KB(减少约 70%) - **兼容性说明**: - 已有的 `.zst` / `.7z` / `.tar.gz` 旧备份文件不会被识别(不出现在 `/backup list`,也无法还原),需手动删除 - 旧 config 中 `compression.type: "zst"` 等配置无需修改,会自动按 ZIP 处理,但建议改为 `zip` 避免误解 [/MD]
[MD] # 很抱歉因为没有测试出来这个问题,在刚刚我们进行了修复,日志可看下方: ### 修复 #### Asynchronous world save! 异常 - **问题**:在 Paper 26.1.2 / 26.2 服务端执行 `/backup now` 或自动备份时,`PluralBackup-Worker` 线程抛出 `Asynchronous world save!`,备份直接失败 - **根因**:`BackupManager.performBackup()` 将整个 `doBackup` 流程提交到异步线程池,而 `doBackupCore()` 在异步线程中直接调用 `World.save()`。Paper/Spigot 的 `AsyncCatcher` 强制要求世界保存必须在主线程执行,故触发异常 - **影响范围**:同样问题存在于 `pauseAutoSave()`(调用 `setAutoSave`)和 `restoreAutoSave()`,存在相同隐患 - **修复**:新增 `runOnMainThreadAndWait()` 辅助方法,使用 `Bukkit.getScheduler().runTask` + `CountDownLatch` 将 World 相关操作调度到主线程同步执行;若已在主线程则直接执行,避免重复调度 - **覆盖调用路径**:`performBackup()`(自动/手动备份)和 `performGitHubBackup()`(GitHub 上传备份)两条异步路径均会受益 [/MD]
  • 喜欢
反馈: ZHT121
[MD] ### 修复 #### 时刻模式调度器启动条件 - **修复 `schedule.enabled: true` 但 `auto-backup: false` 时刻模式不启动的问题** - 原因:`PluralBackup.onEnable()` 和 `BackupCommand.handleReload()` 仅在 `isAutoBackup()` 为 true 时才调用 `backupScheduler.start()` - 修复:改为 `isAutoBackup() || isScheduleEnabled()`,间隔模式或时刻模式任一启用即启动调度器 - 影响文件: - `src/main/java/cn/plural/backup/PluralBackup.java` - `src/main/java/cn/plural/backup/command/BackupCommand.java` #### 时刻模式同一分钟重复触发 - **修复时刻模式在同一分钟内被重复触发的问题** - 原因:`BackupScheduler.checkSchedule()` 每 30 秒检查一次,同一分钟内会匹配两次,第二次触发时备份正在运行被拒绝 - 修复:新增 `lastTriggerMinute` 字段记录上次触发时刻,同一分钟内只触发一次 - 影响文件:`src/main/java/cn/plural/backup/manager/BackupScheduler.java` [/MD]
[MD] ## 2026-06-25 #### GitHub备份调度统一 - **删除独立的GitHubScheduler** - GitHub备份不再使用独立的调度器,而是集成到主备份流程中 - 当间隔模式或时刻模式触发备份时,如果 `github.enabled: true` 且正确配置,备份完成后自动上传到GitHub - `/backup github-upload` 命令仍可手动触发备份+上传 - 修复了"关闭auto-backup仍每小时备份"的问题 #### 多语言配置项 - **config.yml新增language配置** - 支持手动指定语言(如 `zh_CN`、`en_US`、`ja_JP`) - 留空则自动检测服务器语言 - 优先级:config.yml配置 > 自动检测 > 默认英语 #### 移除硬编码消息 - **删除config.yml中的backup-start-message等配置** - 所有消息已由多语言系统管理 ### 修改的文件 - `src/main/java/cn/plural/backup/manager/GitHubScheduler.java` - 删除 - `src/main/java/cn/plural/backup/manager/BackupManager.java` - 集成GitHub上传 - `src/main/java/cn/plural/backup/PluralBackup.java` - 移除GitHubScheduler引用 - `src/main/java/cn/plural/backup/command/BackupCommand.java` - 移除GitHubScheduler参数 - `src/main/java/cn/plural/backup/config/PluginConfig.java` - 删除消息字段,添加language字段 - `src/main/java/cn/plural/backup/i18n/LanguageManager.java` - 支持config.yml语言配置 - `src/main/resources/config.yml` - 添加language配置,删除硬编码消息 [/MD]
[MD] ### 新增功能 #### 定时备份(时刻模式) - **双模式定时备份** - 新增"时刻模式",与原有"间隔模式"独立运行,可同时启用 - 支持自定义时区(如 `Asia/Shanghai`、`America/New_York`、`Europe/London`) - 支持 24 小时制(`HH:mm`,如 `00:00`、`12:00`、`18:30`) - 支持 12 小时制(`hh:mm a`,如 `12:00 AM`、`06:00 PM`) - 可配置多个触发时刻(`times` 列表) - 每 30 秒检查一次,匹配当前时区时间与配置时刻 - 时区解析失败时自动回退为系统默认时区 #### GitHub备份清理 - **手动GitHub上传后自动清理旧备份** - 执行 `/backup github-upload` 后会自动清理本地旧备份 - 清理规则与本地备份共用 `max-backups` 配置 - 避免本地备份文件无限累积 ### 配置变更 #### 新增配置项 ```yaml backup: schedule: enabled: false # 是否启用时刻模式 timezone: "Asia/Shanghai" # 触发时区 use-24-hour-format: true # 是否使用 24 小时制 times: # 触发时刻列表 - "00:00" - "12:00" ``` ### 修改的文件 - `src/main/java/cn/plural/backup/config/PluginConfig.java` - 新增4个字段和getter - `src/main/java/cn/plural/backup/manager/BackupScheduler.java` - 重写,支持双模式 - `src/main/java/cn/plural/backup/manager/BackupManager.java` - performGitHubBackup添加清理 - `src/main/resources/config.yml` - 添加schedule配置段 [/MD]
[MD] ### 新增功能 #### 云端备份 - **百度网盘备份**(Nukkit版 / Java版) - 通过百度网盘开放平台 API 上传备份(分片上传:precreate → superfile2 → create) - 支持 access_token 自动获取与缓存 - 备份文件存放于网盘 `/apps/{app-folder}/` 目录下 - 申请地址:https://pan.baidu.com/union/console - **123云盘备份**(Nukkit版 / Java版) - 通过 123云盘开放平台 API 上传备份(create → get_upload_url → PUT → complete) - 支持秒传识别与分片上传 - 支持异步轮询上传结果 - 申请地址:https://www.123pan.cn/developer #### 告警通知 - **邮件通知**(Nukkit版 / Java版) - 通过 SMTP 协议发送告警邮件(支持 SSL/TLS) - 使用 jakarta.mail 实现 - 适配 QQ邮箱等主流邮箱服务(需使用授权码) - **飞书通知**(Nukkit版 / Java版) - 通过飞书自定义机器人 Webhook 发送告警 - 支持加签校验 - **钉钉通知**(Nukkit版 / Java版) - 通过钉钉自定义机器人 Webhook 发送告警 - 支持加签校验 - 通知触发时机:备份执行异常、云端上传失败、GitHub备份失败 ### 改进优化 - 云端上传集成到主备份流程,备份完成后自动上传到云端 - 通知发送采用 `CompletableFuture.runAsync()` 异步执行,不阻塞备份流程 - 配置文件增加 `notification` 段,统一管理所有通知渠道 ### 依赖变更 - 新增依赖:`org.eclipse.angus:angus-mail:2.0.3`(邮件通知) - 新增 shade relocation:`jakarta.mail` → `cn.plural.backup.lib.mail`、`jakarta.activation` → `cn.plural.backup.lib.activation` ### 配置变更 - `cloud.type` 新增可选值:`baidu`、`pan123` - 新增 `cloud.baidu` 配置段(app-id、app-secret、app-folder、access-token) - 新增 `cloud.pan123` 配置段(client-id、client-secret、access-token、parent-folder-id) - 新增 `notification` 配置段(enabled、email、feishu、dingtalk) [/MD]
后退
顶部 底部