扫码在手机阅读
手机阅读《Minecraft指令手册》
Minecraft指令手册

第110章UUID

把前面3段和后面两段分开,并分别划成10进制,变成:4295032833和281474976710657这两个数。

这两个数就是这个UUID的高位以及低位了。其实高位以及低位就是将16进制的UUID切成两半然后划成10进制得出的数,说明白点,就是:

xxxxxxxx-xxxx-xxxx 这一段转换成10进制就是UUID Most

Mojang想来想去,最终决定使用网络上常用的Universally Unique Identifier来作为玩家的不可改变识别码,这就是作者在之前经常提到的UUID,它的中文名叫做“通用唯一识别码”(按理说学过JAVA的应该都知道)。

UUID有很多种形态,最常见的形式就是:

xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

原因的话,百度一下,你就知道(毕竟这是Minecraft指令教学,不是计算机课)。

所以版本以前的指令都是叫你填UUID Most以及UUID Least,而不是16进制的UUID,虽然在后台的时候是使用16进制的UUID。

你肯定知道(只要你不是跳着看的),在版本更新中,UUID再也不是16进制表现形式,也不是高位以及低位了,而是使用了一个全新的表现方式:整型数组(int-a

ay)

其样式就是之前第八十八章讲JSON时提到的数组(a

ay)。

比如:[I;-678432868,1549618207,-1367000395,-2137777200

好像这和版本之前的UUID没有太大关系。

但如果你用过之前作者提供的一个UUID转换器(/mc-uuid-nverter/),那么你就知道,版本的UUID与之前的UUID是可以转换的,不然正版玩家的UUID就得重新设了。

如果你不想了解的话,你是可以跳过这一段的,去看看UUID到底该如何获取。

但如果你想了解的话,不妨也来看一看。

如果你仔细观察这一串数组,你就会发现这4串数字是有正负号的,并且假设你之前用过那个UUID转换器,并按了那“随机”好多次,估计你就会发现这四串数,0到9都有。

这些证据证明,这四串数,是十进制。

既然是十进制,那就好办了。根据UUID Most以及UUID Least的经验,这四串数,极有可能是16进制的UUID平均分成4段再分别划成十进制的数。

为了验证我们(作者)的猜想,这里作者随机了一个UUID:

16进制——09fa22c0-807d-4a29-b0fa-a6513fab4822

数组形——[I;167387840,-2139272663,-1325750703,1068189730

将09fa22c0-807d-4a29-b0fa-a6513fab4822的连接符去掉,再平均分成4段,并取最前面的那一段,也就是:

09fa22c0

划成十进制就是:167387840

真相大白!

版本的数组UUID就是将16进制形态的UUID平均分成四段再分别划成十进制最后组合成一个数组!这比那些在网上看见人问就扔一个网址的人好了不知道多少倍!

(哎作者,你不是之前也扔过吗?)

为了满足某些强迫症,这里作者就将下面3份给划成十进制了。

等等,遇到了一个小问题,这个负数问题,该怎么办?

百毒一下,你就知道。

说了这么多UUID,那么UUID该怎么获取?

还记得之前作者说过可以通过玩家的上线和下线加上命令方块的输出来查看一个玩家的UUID吗?

这的确是一个方法,但效率很低。

如果你是一位腐竹,在JAVA开着一个服务器,你可以到服务器的根目录找到一个名叫的文件,里面有大多数的服务器玩家的UUID。

但如果是单人离线呢?

令人震惊的是,国外有很多网站可以通过输入玩家的名字以及UUID来查询一个JAVA正版玩家的皮肤、UUID等信息,甚至可以知道这个玩家去过哪些服务器,这些服务器现在有多少人在线,他的游戏时长是多少!虽然不知道这些数据是怎么获取的(极有可能是爬机装置),但这也方便了我们查询自己的UUID(以及别人的)。

当然只能是JAVA正版的,基岩版以及国服还有盗版的话.......

那就只能使用上述的命令方块获取方法了。

以下是网址:

但别忘了,实体也有UUID。

实体的UUID就可以通过指令获取了。

当然那是下一章或者是下下亿章的事情了。

哦对了,正版UUID还可以通过Mojang给出的api来获取,具体为:

/usersrofiles/minecraft/一个正版玩家的用户名

比如这里拿一个用户名叫做Minecraft的正版玩家举例,输入/usersrofiles/minecraft/Minecraft,你会获得一串字符,具体为:

{“name“:“Minecraft“,“id“:“b2732392fae140c3b836a066c6debd8f“}

其中的id就是这名玩家的16进制无连接符UUID了。

因为都是用x来表示,所以第一眼是不知道这到底是多少进制的。这其实是UUID的十六进制表示形式。准确的来讲,是“连字符十六进制”形式(String),就是16进制的UUID分割成了8+4+4+4+12的5段,相邻两段用连字符连接上。

当然,把连字符去掉就是纯洁的十六进制形式(String without hyphens)了:

在解答之前,作者建议你先去找一个进制转换器,以方便现学现做。

以刚才的00000001-0001-0001-0001-000000000001举例,现在它是16进制。

11-11-11-11-11

在Minecraft JAVA 版本更新中,Mojang认为正版玩家是可以更改用户名的。但如果玩家可以更改用户名,那么一个用户名就不能代表着一个玩家了,因为这名玩家可以更改他的用户名。解决这个问题的唯一办法,就是给玩家添加一个从按下注册那一键开始就不能改变的识别码,而且两个玩家的识别码不能重复。

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

当然去掉连字符你有很大的可能会抄错,所以还是建议抄UUID之前加上个连字符。

1-1-1-1-1

不然代码运行的时候会以为这个UUID是00000011-0011-0011-0011-000000000011的缩写。

而且这仅限有连字符的16位UUID。

现在你知道了这种表现形式的UUID一共有32位(除去连接符),那么问题来了,之前的UUIDMost(UUID高位)和UUIDLeast(UUID低位)到底是啥呢?

00000001-0001-0001-0001-000000000001

那么你就不用在乎前面的那么多0了,可以直接省略掉,变成:

xxxx-xxxxxxxxxxxx 这一段转换成10进制就是UUID Least

但是别忘记了,如果没有特别指明,你是不知道一个16进制的数字到底是正的还是负的。

这是一个非常人性化的设计,也非常符合数学。

当然如果是10000001-1001-1001-1001-100000000001这样的,可不要想着缩写成:

神奇的是,如果你的UUID是这样的:

  • 加入收藏
  • 目录
  • A+
  • A-