开源 · Apache-2.0 · Kotlin — 面向 PaperMC / Vanilla

Minecraft 世界优化备份工具

按玩家活跃时间(InhabitedTime)逐区块裁剪世界体积——备份更小、恢复更快、保留更高频。 优化备份与全量备份可槽位级合并恢复,实测零非预期数据丢失。

-88.3% 体积 92.7% 区块剔除 0 非预期数据丢失 26.1+ 新格式

为什么需要

Minecraft 区块一经生成就不会自动消失——世界体积只涨不跌,备份成本随之失控。

🌍区块永久生成

玩家探索、跑图、飞行会永久生成大量区块。其中绝大部分是"路过但从未建设"的区块,却与真正建设过的区块占用相同存储。

📈体积持续膨胀

世界体积只增不减,备份文件随之膨胀。存储成本、传输耗时、恢复时长全部被动上升,备份保留策略被迫越来越稀疏。

🔄合并恢复缺口

当只剩「优化备份 + 更早的全量备份」时,直接同名覆盖会造成地图空洞或地形回退——需要一个安全的合并恢复手段。

OrzMCBackup 在备份前按 InhabitedTime 阈值剔除低活跃区块,并自动保护强制加载区块; 若需要恢复更早的全量备份,merge 子命令以 chunk 槽位粒度合并,恢复"全量最新"地图。

实测效果 · 六档阈值对比

对同一真实 PaperMC 26.2 恢复合并世界(28,451 文件 / 18,637.6 MB / 3,162,906 区块),仅改变 -t 阈值各跑一次完整备份,其余参数一致(--copy-misc --parallelism 4,HDD 实测)。

阈值 耗时 输出大小 保留区块 剔除区块 剔除率 节省 MB 压缩率
0 秒(从未访问) 27.2 分 6,863.3 MB 908,260 2,254,646 71.3% 11,774.3 63.2%
1 分钟 (60s) 26.1 分 2,591.2 MB 276,381 2,886,525 91.3% 16,046.4 86.1%
2 分钟 (120s) 24.0 分 2,348.2 MB 250,054 2,912,852 92.1% 16,289.4 87.4%
3 分钟 (180s) 15.4 分 2,256.2 MB 240,290 2,922,616 92.4% 16,381.4 87.9%
4 分钟 (240s) 21.9 分 2,207.6 MB 235,262 2,927,644 92.6% 16,430.0 88.2%
默认5 分钟 (300s) 17.9 分 2,178.3 MB 232,067 2,930,839 92.7% 16,459.3 88.3%
◆60 秒是收益拐点:从 t0 到 t60,保留区块 908K→276K(骤降 70%),输出 6.9GB→2.6GB;从 t60 到 t300 仅再省约 413 MB。60 秒剔除率 91.3%,相当于 t300(92.7%)的约 98%。
◆六档阈值下非预期数据丢失均为 0(逐字节验证)——优化不丢数据,阈值只决定"砍多少",不决定"砍错"。
◆阈值几乎不影响耗时(HDD 上 15–27 分钟,由输入读取主导),只影响体积。-t 0 适合激进归档(仅保留玩家真实访问过的区块),运营者默认 60–120 秒即可。

数据来源:threshold-benchmark-report.md(逐字节验证:0 新文件 / 0 槽位伪造 / 0 锁步违规 / removedChunks 与槽位差严格吻合)

核心特性

面向服务端运营的备份优化,把"安全"放在第一位。

🎯 InhabitedTime 阈值裁剪

按玩家累计活跃时间(严格 >)逐区块保留;-t 0 可移除从未被访问的区块。

🛡️ 强制加载保护

自动解析并保留出生点 / 区块加载器所在区块,兼容新旧格式(chunk_tickets.dat → chunks.dat)。

🔒 三文件锁步

region / entities / poi 按同一决策同步重写,杜绝"有地形无实体 / POI"的数据错位。

✂️ 惰性写入

整区被剔除的 region 不生成空文件;幸存区块逐字节不变。

🧩 26.1+ 新格式

兼容 dimensions/ 嵌套结构(PaperMC 26.1+ / Vanilla),自动递归发现维度。

🔁 merge 槽位级合并恢复

优化备份 + 全量备份按 chunk 槽位粒度合并,patch 优先、base 填空槽;损坏 patch 自动回退 base。

工作原理

一条可并行、可审计的优化管道。

1
发现维度

递归扫描,兼容 26.1+ 的 dimensions/ 嵌套结构

2
统计区块

统计全部 MCA 文件中的区块总数

3
解析强制加载

chunk_tickets.dat / chunks.dat 自动探测坐标

4
逐块评估

强制加载列表 + InhabitedTime 阈值联合判定保留

5
锁步重写

region + entities + poi 按同一决策重写 .mca

6
收尾输出

复制杂项文件 / ZIP 打包 / 原地替换 / 生成报告

merge 槽位级合并:对 base / patch 共有的 region,逐槽位按 patch 有该槽 ? patch : base 有该槽 ? base : 空 决定来源;entities / poi 与 region 锁步; 仅 base 存在的 region 原样复制。真实案例:18.64 GB 全量 + 2.18 GB 优化 → 约 18 GB 完整恢复。

快速开始

JDK 17-29 环境,一条命令构建 CLI fat JAR。

bash — 构建 CLI
./gradlew :app:shadowJar --no-daemon
bash — 优化备份(默认阈值 5 分钟)
java -jar app/build/libs/backup.jar /path/to/world /path/to/out -t 300 --zip-output
bash — merge 合并恢复(BASE=更早全量,PATCH=优化备份)
java -jar app/build/libs/backup.jar merge BASE PATCH OUTPUT --report --progress-mode Global

提示:先用 --dry-run --report 预览将剔除的区块量;-t 0 会移除所有未被访问的区块, 建议保留一份全量备份以便需要时 merge 恢复。

文档导航

从功能梳理到真实案例分析,一站式了解。

优化你的世界备份

从 18.6 GB 到 2.2 GB,数据零非预期丢失——现在就试。