
HI,这里是暮风径羽。
前言
目前伶宁域京门市的区域已经确定下来,相关的编辑工作也正在开展。在五一假期的时候咱基本上都在使用WorldPainter对京门市整体地形进行编辑。不过,因为微软突如其来的更新,并擅自在咱合上笔电后重启,导致程序关闭进度丢失。当然,大部分的进度都有保存到WorldPainter指定的文件格式中,可是再打开WorldPainter的时候却说内存不足,就算是重新导入地形也是。没办法,只能将地图分割后再进行编辑。同时宣告五一假期所做的所有事情白费。

使用MCEdit迁移地形需要花费大量的时间。一方面得给新地图加载足够大小的区块,另一方面得在总地图中复制区块,然后再将复制好的区块放到新地图中。因为京门市区的范围很大,这三个步骤执行起来都非常非常的耗时,各步骤时长基本上都是一个半小时起步。并且因为MCEdit会时不时抽风使一部分区域无法被自己读取,并且你往往还不知道这个无法被读取的区域到底在哪里,导致当等了差不多两个小时复制地图之后,只告诉你错误信息,无果而终,浪费时间。
那么有没有办法绕过MCEdit这个中间商就能将要大量迁移的区块迁移好呢?有,这就是我接下来要讲的内容。
MOJANG将Minecraft的地图数据存储在了.minecraft/saves目录下各个存档的region文件夹中,以.mca作后缀名表示这是一个用来存地图的文件。单个.mca文件可以存储32x32个区块的数据,即存储范围有XZ:512x512。在限高为256的情况下,完全存放地形数据后单个文件大约会占用4GB的存储。而以21w14a为代表的新限高模式(MOJANG将这个更新咕了)目前知道单个最大文件大约占用8GB的存储。

.mca文件是地图数据经过一定的算法后压缩过而形成的,直接用文本编辑器打开会看到一团乱码,所以一般情况下没法对其进行更精细的编辑,除非使用像MCEdit等编辑工具。
尽管正常玩家没法对这些文件进行编辑,但是用来管理还是可以的。根据.mca文件的命名规则,以r.0.1.mca文件为例。这里的0表示在X轴上0-511的部分,而1表示在Z轴上512-1023的部分,所以范围是(0,512)到(511,1023)之间。如果你想知道你的大豪宅“建”到了哪个文件里,只需要知道你房子的X轴和Z轴坐标,然后除以512取整数部分,坐标是负数的就再在结果上减一,就知道是存到哪个文件了。

如果你觉得你的房子在现在的坐标上不好,那么适当挪窝一下也是可以的。例如你家在r.5.9.mca里,你想将你家移到X轴正方向1024格处,那么就将这个文件的名称改为r.7.9.mca就行。只是这个修改距离最基础的就是移动512格,并且还要连带你房子四周的区块一起移动。而且当你的房子非常幸运地建在了4个.mca文件的边角处时,你也只能将这四个文件同时改名,但好在如果房子建得小的话,四周的景色基本上不会有什么太大的变动。移动房屋之前记得看看新地址是否有什么重要财产,如果有,建议只是将这两个文件的名称互换即可。而若是想将房子覆盖到新的区域,旧区域也不用担心它消失,MC将会重新生成旧区域的地形。
或者你不满足,想把自己家搬到另一个存档去了,那也没问题。同样的,将包含你家的.mca文件放到新存档的region文件夹里面去就行了。就相当是从这个世界搬迁到了另一个世界,而且你的机器、宠物依旧会在那个老地方呆着,这或许是最完美的搬迁方案了。
可能有人觉得512x512的范围太大了,不过对于超大型地图制作者来说这其实算不上什么。就拿伶宁域京门市现在的情况来说,包含县区和城区的所有已被刷图刷满占用的文件大约有2600个,因此可以大概估计京门市目前的面积为681574400平方格(实际应该会小于这个数字)。
创建新的存档,在命名上不要与原存档相同。这里不管你是进游戏新建一个存档,还是直接在saves文件夹里复制存档都可以。此时,假设我要对原存档 r.-15.-15 至 r.7.7 的部分进行编辑,那么就需要将相关的.mca文件放入到新存档里面,这里应该是需要移动(23x23=529)个.mca文件才行。虽然一遍又一遍的选取文件相对于MCEdit那种傻瓜式操作来说要麻烦了一些,但耗时绝对是要更低的。什么?在WorldPainter里导入还是说内存不够?那就再缩减范围编辑。
这种编辑思路可以演变成,一个超大型存档可以被分割成多个小存档并分给多个人进行编辑,当每个人都编辑完的时候再将各个小存档拼装起来,合成回那个超大型存档。类似于服务器的地皮系统,只是各个地皮之间没有路了而已。如果你是一个景观地图团队的领导者,不妨可以采用这种思路。
还有一种编辑方式就是,如果你想让你的地图与原版地图之间有一个很好的过渡,那么还可以单独将过渡区域提取出来编辑。仍然以r.-15.-15 至 r.7.7 为例,过渡区可以是X为-16、8和Z为-16、8的四个长条区域。在MC中加载这部分区域,之后再用WorldPainter对其进行编辑,最后再加入到主存档中。需要注意的是地图的种子,主存档的种子必须要和过渡区的种子一致。版本也最好一致,不要一边是用1.12的,另一边却是用1.16的。不然还不如不做这方面的过渡。
一个Minecraft存档升级版本是没有问题的,但是降级却很有可能会出问题,这个其实就与.mca文件有关。不要看1.12版存档里的.mca文件与1.16存档里的.mca文件后缀名一样就以为它们之间可以相互通用,没有这回事的。在前面我也提到过,.mca文件是经过一定的算法后压缩形成的,你也可以理解为压缩包。那么压缩包里面的文件是可以不一样的,就更不用说.mca文件了。
因此在移动.mca文件时最好是往相同版本或更高版本的存档移,或者移动到低版本的存档但是不在Minecraft中打开。否则,轻则加载出来虚空,重则整个区域都无法被读取,然后Minecraft重新生成了这个区域。不管是轻是重,数据都会被低版本的Minecraft更改,再放回到高版本地形也不会改变回来。由于默认情况下.mca文件没有版本标识,因此在移动的时候更是要加以注意。
最后
这个应该算是编辑大型地图的无奈之举吧,毕竟不是谁家的电脑都那么强劲,一次性就能处理好所有东西的。不过运用得当的话倒又比传统的方法方便得多,看你是怎么想及怎么使用了。但话说回来,应该也没有人会去想到要一次性编辑那么大个地图吧,所以我也可能写了个寂寞。(当然这个倒无所谓)
如果觉得文章哪里看着不太明白的,欢迎在评论区提问,咱尽量回答。视频化的话看各位意见,觉得要的表个态就行了,人多的话大概在暑假安排视频化。