**一些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/%E7%8E%A9%E5%AE%B6%E5%AD%98%E5%82%A8%E6%A0%BC%E5%BC%8F?variant=zh-cn](https://zh.minecraft.wiki/w/%E7%8E%A9%E5%AE%B6%E5%AD%98%E5%82%A8%E6%A0%BC%E5%BC%8F?variant=zh-cn) ----