一些mc腐竹可能遇到过这种问题
服务器经过一段时间不管理或者是切换了服务器的正盗版验证,会出现玩家数据丢失
举例
这里举个例子:假设我的游戏id是MGSLANGFENG,在服务器为正版验证的时候我在服务器内获得了很多东西,但是在服务器进服验证切换为离线后我再次进服东西都不见了。
为什么会出现这种情况呢?
这和mc服务器存储玩家数据的方式有点关系
这里先来说一下mc服务器是怎么存储用户数据的
首先,你进入服务器后,你的名称会转为uuid(或者说你的id对应唯一的uuid),然后服务器会在world/playerdata文件夹下以uuid.dat和uuid.dat_old的格式生成两个文件
这两个文件就是你在服务器中的数据
好了,到这里,我们大概明白服务器是怎么存储的我们的数据了
那么用户数据丢失是怎么一回事呢?
神秘丢失的数据
其实这个就很好解释了,最常见的情况是切换了服务器的在线离线验证方式
当我们选择在线验证的时候,我们玩家保存数据的uuid就是我们正版名称对应的唯一的uuid
当我们切换为离线模式,再次进服的时候就会随机生成一个新的uuid
因为uuid的不同,我们进服后读取的对应的文件也不一样,这就造成了玩家数据的“丢失”
不是很明白?这里我们举个例子
假设我们的id是MGSLANGFENG,uuid应该是
代码语言:txt复制e2095569-482b-4810-ab0c-1f3f545ff10a
才对,正常情况下服务器保存的两个文件应该也是
代码语言:txt复制e2095569-482b-4810-ab0c-1f3f545ff10a.dat
e2095569-482b-4810-ab0c-1f3f545ff10a.dat_old
当我们进服的时候服务器就会读取e2095569-482b-4810-ab0c-1f3f545ff10a.dat 这个文件,这里面就是我们的数据
但是,当我们切换为离线模式,uuid就会发生变化,我们再进服uuid就可能变成
代码语言:txt复制b5f24146-66ea-4a08-a434-416760e33bed
然后就会生成两个新的数据文件
代码语言:txt复制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文件结构
具体详情可以前往minecraft wiki查看https://zh.minecraft.wiki/w/玩家存储格式?variant=zh-cn