玩家数据
本文档介绍爱慕西服务器中玩家数据的存放。是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
的玩家的uuid
为78a610e7-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
中修改id
与uuid
的对应,还是在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
此时,第二名玩家再次连入游戏,他的玩家数据将使用原本第一名玩家的数据。