MC服务器与单机存档之间的数据迁移

/ 0评 / 0赞 / 

前言:本篇文章目标为将服务器低版本存档完美迁移到高版本单机存档,同理单机迁移服务器存档相反操作即可,但最好不要从高版本向低版本迁移。

迁移前的准备及了解

首先了解一下数据保存结构:

本段内容参考:[Mcbbs] 玩家背包的数据在哪里[WiKi]了解player.dat格式

很显然,Wiki告诉我们,一个世界(存档)中和玩家相关的数据储存在 level.dat(.dat 格式)这个文件里面,但仅限单人模式,多人游戏时(服务器)中各个玩家的数据是储存在 playerdata文件夹中的<uuid>.dat (不同的uuid对应不同的玩家)。
不过据我观察,即使是在单人模式,/playerdata/<uuid>.dat也会储存玩家自己的数据,并且这里的数据和level.dat中的Player(类型为复合标签)一致,但单人模式下仅修改/playerdata/<uuid>.dat而不修改level.dat不会影响玩家数据,因此得知单人模式以level.dat为主。

image-20230519194315709

因此我们只需要:

但经过实测,1.12.2与1.19.4的数据保存格式不同,若直接进行数据修改,会导致物品bug(附魔失效,潜影盒物品丢失)

因此展开来讲,结合我们的两项需求,我们具体需要:

将服务器存档结构修改以适配单人模式

本步骤分两部分完成

存档结构了解

本人希望迁移的存档为1.12.2版本bukkit服务端,存档结构如下:

在1.12.2模式新建一个世界,进入地狱和末地创建地图后,可以看到结构如下:

实操

打开单人存档,打开playerdata,里面会有一到两个文件,文件的名字是一样的,后缀不一样,大概长这样:099261a8-503b-39d4-9616-f7782702095c.dat,将文件名找个地方记下来

打开单人存档,将根目录level.dat复制到一个你不会搞混的地方,比如桌面

现在同时打开服务器存档的World文件夹,可以看到文件结构相当相似,为了保证准确我们将单人存档内的如下文件全部删除,直接将服务器的world文件夹内的所有文件复制到单人存档下

world

现在打开单人存档的DIM1和DIM-1文件夹,删除里面的所有文件,将world_nether内,注意是內部的所有文件复制到DIM-1,将world_the_end内,注意是內部的所有文件复制到DIM1,其实就是改了个名字,从world_nether改到DIM-1,从world_the_end改到DIM1

end

打开单人存档的DIM-1DIM1,可以看到有这么一个文件夹,将其拿出来

DIM-1代表地狱,DIM1是末地,两个文件夹都要操作

region

至此服务器存档的三个世界数据已经迁移完毕。

找到目标玩家数据并迁移到单人模式

在bukkit服务端中,根目录\world\playerdata存放着玩家数据,玩家数据是一串不知道什么玩意的字符,这个字符并不是随机的,并且与是否打开了正版验证有关

举例:当我在启动器登录正版后进入一个新的游戏,为我生成的文件是:55d7fbc5-d038-413b-8446-d9e66ccfb206.dat,事实上,这就是我的正版UUID。

image-20230519211549572

刚刚提到过,无论是服务器还是单人模式,都会生成一个UUID.dat文件,在正版验证下若玩家改名,不会导致存档丢失,仅以UUID判断玩家。

我之前在服务器使用的ID是Ling_Yun67,到现在改为Yun67后完全没有受到影响。

因此如果想在服务器的存档里找到自己的数据,刚刚在单人存档新建的1.12.2的存档的时候生成的.dat文件的名字,也就是你记下的文件名去掉.dat的后缀就是你的uuid。

然后直接在服务器存档\world\playerdata内搜索你的数据,将你的数据复制到一个不会被你搞混的地方,比如桌面。

如果是正版验证,可以在namemc.com搜索自己现在的id,即可获得uuid。

还记得在刚刚你还把一个level.dat文件也复制出来了么?完成上述两个大步骤,你现在应该已经拥有:

下载这个可以修改 .dat 格式的文件的编辑器(从1.7到1.20都可以)
[全版本]NBT Studio 汉化版 —— 更加现代化的 NBT 编辑工具

现在同时选中这两个文件,直接拖进NBT编辑工具。

image-20230519214057691

下面的步骤中你可以使用查找工具,相当好用。

找到UUID.dat/Inventory,选中复制其中所有的数据

image-20230519214324419

找到level.dat/Data/Player/Inventory,先删除其中所有的数据

image-20230519214818346

选中Inventory后粘贴,即可将背包数据迁移。

image-20230519214834601

再找到UUID.dat/EnderItems,复制其中所有的数据,与刚刚类似,找到level.dat/Data/Player/EnderItems,删除其中的数据后粘贴新数据即可完成末影箱的数据迁移。

再找到UUID.dat/Pos,复制其中所有的数据,与刚刚类似,找到level.dat/Data/Player/Pos,删除其中的数据后粘贴新数据即可完成人物坐标的更改。

如果还想继续更改其他数据如剩余血量、当前经验值、身上的状态效果,请参照[WiKi]了解player.dat格式

第二个大步骤完成了!你现在已经:

直接在高版本打开低版本存档时,会自动将低版本的附魔信息等数据升级

删除不需要的区块,保证新地形生成

下面是最后一步了,如果你不打算在高版本打开该存档,没必要进行此步骤!

此步骤为的是保证新版本地形及特性能够正常生成。

请直接观看XeKr的视频教程

叉尅教你升存档删区块-MC存档升级+MCA Selector 删除区块简要教程

发表回复

您的电子邮箱地址不会被公开。