Chunk Backup
一个以区块为单位备份或回档的MCDR插件,在开始使用前建议你详细阅读下文档
您在使用过程中遇到任何问题或想提出建议,欢迎加入我们的交流群号: 417086159
Tip
README尚未完善,请等待后续完善
目前仅支持mca格式与zlib压缩的区域文件
尽可能的使用最新版本,以避免潜藏的问题
发现bug先看看插件是不是有新版本,新版本大概率会修复问题
升级版本后虽然配置文件能自动升级,但最好检查下
发现问题请提交issue,如果您想为本项目做出贡献,欢迎提交pr
README部分内容参考了MCDR文档
需要 v2.7.0
以上的 MCDReforged
Note
使用前你必须知道的!!!
位于cb_multi与cb_static内的文件
千万!
千万!
千万!
不可以移动
我们的优势!!!!
-
区块级别(小至16x16范围的方块)备份!支持跨世界备份!支持跨维度备份!
-
对自定义维度添加了支持,不再局限于原版的三个维度,以及对spigot,paper一类将world拆分为多个世界的服务端提供了支持,因此备份文件夹的结构与维度的区域文件夹高度类似。
你会在什么时候想起我们?
-
服内新建造好了机器,一测坏了!
回档!!!!!!
一回档就要回整个服务器,你会受到来自其他玩家的问候可是我们是
区块回档!,完全互不影响
(区块回档的了MVP) -
创建区块手办
(新型赛博手办)(如果你想长期保存这个区块,可以使用静态备份)
关于区域与区块的详细解析
区域(Region)与区块(Chunk)定义:
-
区域文件存储的范围称为区域(Region),每个区域包含32×32个区块。
-
一个区块的x和z范围均为16×16,您可以通过在游戏中按下F3+G查看区块边界。
坐标换算规则:
-
区块x,z坐标:通过将x,z坐标除以16并向下取整得到。
-
区域x,z坐标:通过将区块x,z坐标除以32并向下取整得到。
备份的最小单位
- 本插件能够操控的最小单位为一个区块,即16×16×256格(在Minecraft 1.18及以上版本为384格)。因此,在备份或回档时,最小范围也是一个区块。
Chunk_BackUp(cb)的备份机制:
-
假设需要备份主世界的区域文件r.0.0.mca中的区块(1,1)和(2,2),cb会在备份文件夹中创建r.0.0.region文件来存放这些区块的数据。
-
如果r.0.0.mca文件不存在,cb同样会创建r.0.0.region文件。因为不存在表明这些区块的数据为空,而空的状态也需要被备份。
关于区块内容的完整性:
-
玩家加载过的区块中,region(方块数据)必定存在,但entities(实体)与poi(兴趣点)可能不存在。
-
如果在备份区块(1,1)和(2,2)时,只有region存在,而entities与poi不存在,那么在之后的回档过程中,如果(1,1)和(2,2)出现了新的entities与poi,仅回档region数据将导致状态不一致。
-
为了保持区块在备份时与回档后的状态一致,只要region、poi、entities中有不存在的,cb就需要在备份文件夹中创建相应的r.0.0.region文件来保存这些区块的entities与poi的空状态。
备份文件的使用:
-
在r.0.0.region文件中,(1,1)和(2,2)位置的偏移量被设为0,其他位置保持默认的0偏移量。
-
在备份时,尽量框选在世界上已生成的区块,否则每个不存在的区块插件都会为其生成对应的空的区域文件来存放该区块的空状态,可能会给服务器带来卡顿
-
使用r.0.0.region对r.0.0.mca进行回档时,这些区块(1,1)和(2,2)会覆盖目标区域文件中的对应区块,而目标区域文件内的其他区块则不会受到影响。
-
如果目标区域文件r.0.0.mca不存在,则会在目标文件夹内新建一个r.0.0.mca文件,并用r.0.0.region中的数据来覆盖新文件中对应的区块。
插件使用说明
-
插件目前有两种备份模式(动态备份,静态备份),三种备份指令(半径备份,坐标备份,维度备份)
-
两种回档指令(槽位回档,撤回回档),具体见指令说明
-
本插件具有静态备份功能(即不会被替换的备份),静态备份采用独立文件夹存储在
./cb_static
,与之相对的动态备份存储在./cb_multi
,具体见指令说明。 -
本插件支持多维度,原版环境下,0对应主世界,-1对应下界,1对应末地,在您的服务器有其他世界的情况下,您可以自定义一个整数来对应新的维度,这使得您的其他维度能够被插件识别,这个 整数与对应的维度名不能与其他维度的重复。
维度名不能随便填写!
Tip
(1) 使用F3调试屏幕:在游戏中按下F3键,可以打开调试屏幕。在调试屏幕的左上角部分,可以看到当前所在维度的信息。
由此可知该玩家所在维度的合法维度名为twilightforest:twilight_forest
(2) 使用/data get entity 玩家id Dimension指令来获取玩家当前所在维度名
由此可知该玩家所在维度的合法维度名为twilightforest:twilight_forest
以下是一个添加其他维度的例子:
"dimension_info": {
"-2": {
"dimension": "twilightforest:twilight_forest",
"world_name": "world",
"region_folder": [
"dimensions/twilightforest/twilight_forest/poi",
"dimensions/twilightforest/twilight_forest/entities",
"dimensions/twilightforest/twilight_forest/region"
]
},
"0": {
"dimension": "minecraft:overworld",
"world_name": "world",
"region_folder": [
"poi",
"entities",
"region"
]
},
"-1": {
"dimension": "minecraft:the_nether",
"world_name": "world",
"region_folder": [
"DIM-1/poi",
"DIM-1/entities",
"DIM-1/region"
]
},
"1": {
"dimension": "minecraft:the_end",
"world_name": "world",
"region_folder": [
"DIM1/poi",
"DIM1/entities",
"DIM1/region"
]
}
由上例可知,-2
与twilightforest:twilight_forest
是新增加的一对维度,现在你也可以对该维度使用备份功能了!
我们注意到一个维度数字对应的维度信息包含维度名(dimension
参数),该维度所在的世界文件夹(world_name
参数),该维度的区域文件(r.x.z.mca
)所在的文件夹(region_folder
参数)
参数说明具体见下文的配置文件说明
-
因此,该维度的区域文件所在路径应为:
./server_path参数/world_name参数/region_folder参数中的任一文件夹/r.x.z.mca
根据以上格式,您可以准确的的获取到某个维度的所有参数
对于使用多世界文件夹的服务端,如spigot,paper等,使用插件前应在
chunk_backup.json
配置文件里将world_name
参数设置为对应维度的存档文件夹多世界文件夹服务器端使用的dimension_info与单世界文件夹服务端的相同
该参数编辑方法与上文的无本质区别,仅是不同维度对应的
world_name
不同 -
插件在非原版端或fabric端上运行时,您需要修改MCDR的配置文件
config.yml
中的服务端处理器handler
参数选择适合您服务端的处理器,错误的处理器将导致MCDR无法处理来自该服务端的消息。它位于,也应位于 MCDR 的工作目录中。 -
内置的处理器及其适用的服务端见服务端处理器列表
Tip
插件使用时,如果出现乱码,您可能需要保证与服务端相关的一切编解码都用上 UTF-8,具体方法见下:
让 MCDR 使用 UTF-8 与 Minecraft 服务端通信,即在 MCDR 配置中将encoding
和decoding
设置为utf8
encoding: utf8
decoding: utf8
确保启动 Minecraft 的 JVM 也使用 UTF-8 作为默认字符集。你可以通过以下任一操作来实现:
在MCDR配置文件中start_command
中的-jar
参数前面加一个诸如-Dfile.encoding=UTF-8
的 JVM 属性,以确保服务端运行在一个 UTF-8 的环境中,具体见下
Java >= 19:
-Dfile.encoding=UTF-8 -Dstdout.encoding=UTF-8 -Dstderr.encoding=UTF-8
Java = 18:
-Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8
Java <= 17:
-Dfile.encoding=UTF-8
最后重新加载MCDR的配置文件就可以了
-
如果您的服务端加入了改变消息输出格式的插件或mod导致MCDR无法解析控制台消息或插件功能无法使用,请不要在本仓库发起issue,因为这个问题的发生与MCDR和插件无关,你可以自己写一个服务端处理器。
-
由于插件在备份时会保存区块的方块数据、实体数据和兴趣点数据,因此可能会有玩家用此来刷取物品,因为插件只会备份与区块有关的数据,而不会与其他数据产生交互。
-
尽量不要在插件进行备份回档升级操作时重载插件。
-
备份时会在槽位里创建一个
info.json
文件,该文件存储着槽位的所有信息,请不要删除它,否则该槽位会被认定为无效槽位 -
如果在回档后你想撤销本次回档,你可以使用
!!cb restore
指令,来将存档还原到回档前状态
命令格式说明
!!cb
显示帮助信息
!!cb help
显示全部指令
!!cb make <区块半径> <注释>
以玩家所在区块为中心,备份边长为2倍半径+1的区块所在区块
!!cb make -s <区块半径> <注释>
同上,只是创建的备份为静态备份(即永久备份)
!!cb dmake <维度:0主世界,-1地狱,1末地> <注释>
备份给定维度的所有区块,维度间用,做区分 例 0 或 0,-1
!!cb dmake -s <维度:0主世界,-1地狱,1末地> <注释>
同上,只是创建的备份为静态备份(即永久备份)
!!cb pmake <x1坐标> <z1坐标> <x2坐标> <z2坐标> in <维度> <注释>
给定两个坐标点,备份以两坐标点所在的区块坐标为顶点形成的矩形区块
!!cb pmake -s <x1坐标> <z1坐标> <x2坐标> <z2坐标> in <维度> <注释>
同上,只是创建的备份为静态备份(即永久备份)
!!cb back <槽位>
回档指定槽位所对应的区块
!!cb back -s <槽位>
同上,只是回档的对象为静态备份(即永久备份)
!!cb restore
使存档还原到回档前状态
!!cb del <槽位>
删除某槽位
!!cb del -s <槽位>
同上,只是删除的备份为静态备份(即永久备份)
!!cb confirm
再次确认是否回档
!!cb abort
在任何时候键入此指令可中断回档
!!cb list
显示备份槽位信息
!!cb list -s
同上,只是查看的备份为静态备份(即永久备份)
!!cb list <page>
显示备份槽位信息(太好了可以选择翻页了)
!!cb list -s <page>
同上,只是查看的备份为静态备份(即永久备份)
!!cb show <slot>
显示给定槽位的所有信息
!!cb show -s <slot>
同上,只是显示的信息为静态备份(即永久备份)
!!cb show overwrite
显示覆盖备份槽位的所有信息
!!cb set slot <数量>
修改动态备份槽位最大数量
!!cb set slot -s <数量>
同上,只是修改的数量为静态备份(即永久备份)
!!cb set max_chunk_length <区块边长>
修改备份的最大区块边长
!!cb reload
重载插件
!!cb force_reload
强行重载插件,用于插件功能无法正常使用
配置文件选项说明
- 配置文件为
config/chunk_backup/chunk_backup.json
。它会在第一次运行时自动生成
当你修改了配置文件后,记得输入!!cb reload来重载配置文件
-
server_path
默认值:
./server
服务端文件夹的路径。
./server
即为 MCDR 的默认服务端文件夹路径 -
backup_path
默认值:
./cb_multi
存储动态备份文件的路径
-
static_backup_path
默认值:
./cb_static
存储静态备份文件的路径
-
overwrite_backup_folder
默认值:
overwrite
被覆盖的区块备份的备份位置,在配置文件均为默认值的情况下路径为
./cb_multi/overwrite
-
prefix
默认值: !!cb
插件指令的前缀,在指令未与其他插件起冲突的情况下,你最好不要更改它
-
dimension_info
默认值:
{ "0": {"dimension": "minecraft:overworld", "world_name": "world", "region_folder": [ "poi", "entities", "region" ] }, "-1": {"dimension": "minecraft:the_nether", "world_name": "world", "region_folder": [ "DIM-1/poi", "DIM-1/entities", "DIM-1/region" ] }, "1": {"dimension": "minecraft:the_end", "world_name": "world", "region_folder": [ "DIM1/poi", "DIM1/region" ] } }
单世界
文件夹服务端所对应的维度信息
-
minimum_permission_level
默认值:
{ "make": 1, "pos_make": 1, "dim_make": 1, "back": 2, "restore": 2, "del": 2, "confirm": 1, "abort": 1, "reload": 2, "force_reload": 3, "list": 0 }
一个字典,代表使用不同类型指令需要权限等级。数值含义见此处
把所有数值设置成
0
以让所有人均可操作
-
max_chunk_length
框选区块的最大区块边长
默认值:320
默认的的最大范围为5120 x 5120大小的方块,说实话,完全够用了
-
slot
普通备份(即动态备份)的槽位数量
默认值:10
动态槽位数量满了在新创建备份时,会删除最后一个槽位来为新槽位腾出空间
-
static_slot
静态备份的槽位数量
默认值:50
静态槽位数量满了在新创建备份时,会撤销此次备份
自述文件来源:README.md