跳到主要内容

玩家数据

提示

本文档介绍爱慕西服务器中玩家数据的存放。是jvav版。几把版去找岚给你写:P

信息

本文档介绍的内容会和文件结构文档有联动(实际上就是用了那边的知识)。

playerdata文件夹的内容在1.7.6版本受到更改。但是考虑到应该没人开1.7.6以前的服,所以只介绍更改后的新版本内容。

实际上就是我懒

如果想要了解旧版本内容,详见minecraft wiki

玩家数据存储方式

minecraft服务器中,玩家首次连入时会由服务器自动生成一个uuid,完全由本地生成,也就意味着不同服务器间不通用。uuid与玩家id的对应会以json文件的格式存储。玩家的数据本身则存储在playerdata文件夹内。

uuid有时间限制,通常来看似乎是以玩家最后在线时间+一个月为止,到期后uuid会失效,服务器自动清除,玩家连入会重新分配uuid(大概

也就是说如果删除了存储uuid与id的对应的文件或者uuid过期,玩家数据会丢失。

uuid对应文件

uuid对应文件usercache.json为名,存储在服务器根目录下。

因为整个文件都是一个json中的值,所以以[开头,以]结尾,每个值之间由英文逗号,隔开。

以下是一个合法值的示例:

{"name":"kawaii_Elaina","uuid":"78a610e7-9107-4653-94b6-0a366ea5b950","expiresOn":"2023-07-27 00:11:19 +0800"}

这个值表示,id为kawaii_Elaina的玩家的uuid78a610e7-9107-4653-94b6-0a366ea5b950,该uuid将于2023-07-27 00:11:19 +0800(UTC+8 2023年7月27日0时11分19秒)时过期。

playerdata的储存

不管服务端的文件结构中,存档的存储方式怎么变化,playerdata文件夹的位置和作用是固定的。

playerdata文件夹存储在world文件夹内,内部为以玩家uuid为名的.dat.dat_old文件。

内部文件说明

.dat.dat_old文件内容相同(如果你的服务器正常运行的话),存储玩家的数据(物品栏等)。

也就是说,如果想的话,可以在服务器关机期间修改此文件使玩家获得/失去特定物品。并且由于服务器关机,此行为不会留下任何记录(除了你的记忆)。真正的神(op)不知鬼(hacker)不觉

特殊情况

因为验证方式的不同,玩家数据会有以下种类:

Details

离线验证

正版验证

第三方服务器验证

(互通服)间歇泉插件写入

其中各个验证方式之间的玩家数据均相互独立。

也就是说,如果一个服务器同时允许离线、正版、第三方、基岩版玩家连入,可以同时在游戏内看到4个id相同的玩家,而他们的数据互相独立(只是输指令指定某一个人的时候麻烦了)

#好像如果同时允许更多第三方服务器验证可以无限增殖

注:usercache.json可能分裂出来很多个,但是玩家数据本体始终以uuid为名存储在playerdata文件夹中。

#至于为什么说可能分裂出来很多个呢,因为我没开过互通服。希腊奶。有没有开过的讲一下

同时,因为数据种类不同,如果一个服务器最多只同时允许一种验证方式,但是前后更换过验证方式,则因为玩家数据不通用会造成丢失。

如何迁移玩家数据

因为所有数据都以uuid为名存储在playerdata文件夹中,所以即使id相同,只要uuid不同,本质上都不是同一个玩家的数据。

这样来看,不管是最简单的数据迁移——服务器并未更换验证模式,只是你换了个号(id)但想要继承上个id的数据——还是服务器启用了一大堆验证模式,有人某一种验证模式登不上了或者服务器选择弃用一种验证模式——

——数据迁移的本质都相同,就是把一个玩家id的数据迁移到另一个id上。

这样看的话,数据迁移方法就很明了了。

我们的目的是让玩家id B用上玩家id A的数据,只要id B和数据A联系起来就行,所以,不管是在usercache.json中修改iduuid的对应,还是在playerdata文件夹中将.dat.dat_old文件改名,都能达成效果。

提示

所有修改文件的行为请在服务器关机状态下进行。

方法1:修改usercache.json

此文件用于缓存玩家的UUID(唯一标识符)和用户名的映射关系。这个文件主要用于加速玩家登录过程。因此其并不会保存玩家的数据。

你问我方法A去哪了?不知道(逃

方法2:修改playerdata文件夹

以下为两名玩家的数据文件。现在我们需要把第一名玩家的数据迁移给第二名。

Details

78a610e7-9107-4653-94b6-0a366ea5b950.dat 640KB

78a610e7-9107-4653-94b6-0a366ea5b950.dat_old 640KB

0b881575-595b-4869-b555-4263433925a0.dat 120KB

0b881575-595b-4869-b555-4263433925a0.dat_old 120KB

操作方法:

1 复制第一名玩家的数据文件名并删除数据文件;

2 将第二名玩家的数据文件名替换为第一名玩家的。

成功操作后,数据文件如下:

0b881575-595b-4869-b555-4263433925a0.dat 640KB

0b881575-595b-4869-b555-4263433925a0.dat_old 640KB

此时,第二名玩家再次连入游戏,他的玩家数据将使用原本第一名玩家的数据。