一些mc腐竹可能遇到过这种问题

经过一段时间不管理或者是切换了服务器的正盗版验证,会出现玩家数据丢失

举例

这里举个例子:假设我的游戏id是MGSLANGFENG,在服务器为正版验证的时候我在服务器内获得了很多东西,但是在服务器进服验证切换为离线后我再次进服东西都不见了。

为什么会出现这种情况呢?

这和mc服务器存储玩家数据的方式有点关系

这里先来说一下mc服务器是怎么存储用户数据的

首先,你进入服务器后,你的名称会转为uuid(或者说你的id对应唯一的uuid),然后服务器会在world/playerdata文件夹下以uuid.dat和uuid.dat_old的格式生成两个文件

这两个文件就是你在服务器中的数据

img


好了,到这里,我们大概明白服务器是怎么存储的我们的数据了

那么用户数据丢失是怎么一回事呢?

神秘丢失的数据

其实这个就很好解释了,最常见的情况是切换了服务器的在线离线验证方式

当我们选择在线验证的时候,我们玩家保存数据的uuid就是我们正版名称对应的唯一的uuid

当我们切换为离线模式,再次进服的时候就会随机生成一个新的uuid

因为uuid的不同,我们进服后读取的对应的文件也不一样,这就造成了玩家数据的“丢失”

不是很明白?这里我们举个例子

假设我们的id是MGSLANGFENG,uuid应该是

1
e2095569-482b-4810-ab0c-1f3f545ff10a

才对,正常情况下服务器保存的两个文件应该也是

1
2
e2095569-482b-4810-ab0c-1f3f545ff10a.dat
e2095569-482b-4810-ab0c-1f3f545ff10a.dat_old

当我们进服的时候服务器就会读取e2095569-482b-4810-ab0c-1f3f545ff10a.dat 这个文件,这里面就是我们的数据

但是,当我们切换为离线模式,uuid就会发生变化,我们再进服uuid就可能变成

1
b5f24146-66ea-4a08-a434-416760e33bed

然后就会生成两个新的数据文件

1
2
b5f24146-66ea-4a08-a434-416760e33bed.dat
b5f24146-66ea-4a08-a434-416760e33bed.dat_old

这时候我们读取的文件就是b5f24146-66ea-4a08-a434-416760e33bed.dat了,他是一个空白的新文件,就会造成我们认为的数据丢失

如何恢复?

其实恢复的一个思路很简单,就是把旧uuid的文件名中的uuid换成新的就可以了

但是难点是在于怎么知道旧uuid和新uuid

这里有两个方法

方法1

最直接的就是翻log日志,在你每次进服的时候,都会提醒你你的id和uuid,还有你的ip地址,然后你将新旧uuid记住,然后手动替换即可

当然,现在可能部分核心端不会显示uuid了,那就需要用到方法二了

方法2

那就是直接读取dat文件

这里我们使用的工具是

https://irath96.github.io/webNBT/

可以直接在线打开查看编辑修改,比较方便

我们打开我们的dat文件后,根据一些特征(这个不一定,部分服务的dat文件夹内可能会存放玩家id)来判断是属于哪个用户的,然后进行替换,替换后我们重启服务器就可以恢复数据

dat文件结构

img