
拯救我们的维度
服务端Fabric模组,可在服务器运行时快照并恢复单个维度的已保存数据。
保存我们的维度
一个用于 Minecraft 26.2 的服务端 Fabric 模组,可在 服务器运行期间 对单个维度的存档数据进行快照和恢复。
只有两个命令,没有其他内容:
| 命令 | 功能 |
|---|---|
/dimsave <dimension> |
对该维度的磁盘数据进行快照。 |
/dimload <dimension> |
删除该维度当前的磁盘数据并恢复快照。 |
<dimension> 使用原版的 DimensionArgument,因此支持 Tab 补全,并接受
minecraft:overworld、minecraft:the_nether、minecraft:the_end,以及任何由模组
或数据包添加的维度。两个命令都需要所有者权限级别(Commands.LEVEL_OWNERS,即 26.2
版本中对应于旧权限级别 4 的权限)。
⚠️ 使用前请阅读
- 此模组会删除世界数据。
/dimload会用快照的内容替换目标维度的region/、entities/和poi/目录。自快照以来在该维度中建造的任何内容都会消失。 - 保留外部备份。 快照存储在世界文件夹内,因此它不是备份—— 它会随世界一起消亡。在依赖这些功能之前,请进行真正的备份。
- 在
/dimload期间目标维度会冻结。 其中的每个玩家都会被传送出去,其所有 区块都会被卸载,并且该维度会一直保持冻结,直到恢复完成。其他维度在整个过程中会继续正常运转。 - 每个维度仅有一个快照。 再次执行
/dimsave会覆盖之前的快照。没有命名槽位。 - 绝不会触碰:
level.dat、playerdata/、advancements/、stats/以及世界级别的data/目录。玩家的物品栏和进度会在/dimload后完整保留。
/dimload 时会发生什么
- 目标维度中的每个玩家都会被传送到备用维度(主世界,或者如果主世界就是目标维度, 则为第一个其他已加载的维度),并记住他们原来的位置。
- 强制加载的区块会被记录并解除强制加载;区块票证会被丢弃。
- 该维度会被清空,直到其加载区块数为零。如果在 200 个游戏刻(10 秒)内未完成,操作将中止,报告仍有多少区块处于加载状态,并恢复 玩家和强制加载状态。磁盘上不会有任何改动。
- 该维度会被刷新到磁盘,其区域文件句柄会被关闭,然后文件会被交换。
- 派生的内存缓存会被清除,玩家会被传送回原处,强制加载状态也会被恢复。
第 3 步是强制性的。已加载的区块在内存中具有权威性,并且会在下次自动保存时将其自身写回, 覆盖已恢复的数据,因此模组会选择中止,而不是部分恢复世界。
快照存储位置
<world>/dimsave-snapshots/<namespace>__<path>/
region/ entities/ poi/ snapshot.json
例如 <world>/dimsave-snapshots/minecraft__the_nether/。一个快照的大小大致相当于
该维度的大小;如果磁盘空间不足,模组会拒绝启动。
在恢复期间,实时目录会在复制开始前被重命名为 region.dimsave-old-<epoch> 等名称,
并且只有在复制完全成功后才会被删除。如果服务器在恢复过程中崩溃,
这些目录就是你的原始数据——请手动将它们重命名回去。
已知限制
- 自动保存重叠。 文件操作在后台的
dimsave-io线程上运行,服务器线程 不会等待它完成。唯一的例外是在交换窗口期间开始的原版自动保存: 其同步刷新会等待该维度的 I/O 门闩,并阻塞服务器线程,直到交换完成(几秒钟,而且它会自行解决)。 以原版 5 分钟的自动保存间隔来看,这种情况不太可能发生,但确实存在。 - 在繁忙的维度上,
/dimsave可能会超时。 模组在复制前会等待区域 I/O 平静下来。 如果某些内容持续写入区块,它会在 15 秒后放弃并报告错误,而不是复制一个不断变化的目标。 - 恢复的玩家可能会卡在地形中。 在
/dimload后,玩家会返回到他们离开时的 确切坐标,而这些坐标现在可能是实心岩石。完成消息会说明这一点。 - 一次只能处理一个维度。 对已经忙碌的维度执行第二个命令会被拒绝。
- 空载且暂停的服务器不会取得进展。 当设置了
pause-when-empty-seconds(原版默认 为 60)时,没有玩家在线的服务器会停止调用tickChildren,因此模组的 每游戏刻步骤永远不会运行,从控制台或 RCON 启动的任务会一直搁置。它并不会 卡住或损坏——一旦游戏开始运转,它就会恢复并完成。如果你要在空载服务器上驱动这些命令, 请设置pause-when-empty-seconds=0。
许可证
MIT — 参见 LICENSE。发布历史见 CHANGELOG.md。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。