通用唯一识别码(UUID,Java类)是128位长的数字,在Minecraft中用来区分不同的对象实例。
表示方式[]
- 有连字符的十六进制(Hyphenated hexadecimal):UUID的一种十六进制表示方式,中间用连字符将其划分为几个部分。通常的一种划分格式是将UUID分成
8-4-4-4-12
格式的数字,其中每个数字代表对应区间内的十六进制字符个数。进一步详细信息在技术型方面段落中。其中的一个代表示例是f81d4fae-7dec-11d0-a765-00a0c91e6bf6
。- 由于每一部分都是单独作为一个数字处理的,因此每个部分开头可以为空。例如,
00000001-0002-0003-0004-000000000005
和1-2-3-4-5
会被看作相同的UUID。
- 由于每一部分都是单独作为一个数字处理的,因此每个部分开头可以为空。例如,
- 十六进制(Hexadecimal):和有连字符的十六进制表示方法相同,只是每个部分之间没有连字符用来分隔。这种表示方式的一个示例是,
00000001000200030004000000000005
。和常规的字符串不同,里面的0不能被省略。 - 高低位(Most/Least):将高64位和低64位分开表示。两个数字分开存储,并在游戏内使用
Long
(长整型)数据类型。这种格式是过期的,因为仅用于1.16之前并完全被整型数组格式取代。这种表示方法的一个示例是UUIDMost:-568210367123287600
与UUIDLeast:-6384696206158828554
。 - 整型数组(int-array):用4个32位数字表示。每一部分存储在由高到低的整型数组中。这种表示方式的一个示例为
[I;-132296786,2112623056,-1486552928,-920753162]
。
出现场合[]
下面的表格展示了所有玩家在游戏中可以接触到的使用UUID的地方:
位置(通用) | 位置(路径) | 格式 | 用途 |
---|---|---|---|
所有实体(NBT) | UUID |
整型数组 | 自身的UUID |
属性修饰符(NBT) | UUID |
整型数组 | 自身的UUID |
属性修饰符(战利品表) | id |
有连字符的十六进制数字 | 在set_attributes 函数中设置修饰符的UUID
|
/attribute |
- | 有连字符的十六进制数字 | 用来修改修饰符 |
可驯服生物(NBT) | Owner |
整型数组 | 主人 |
信任玩家的生物(NBT) | Trusted |
整型数组 | 标记部分生物信任的玩家 |
弹射物(NBT) | Owner |
整型数组 | 扔出弹射物的实体 |
物品实体(NBT) | Owner |
整型数组 | /give 命令的目标玩家
|
物品实体(NBT) | Thrower |
整型数组 | 扔出物品的实体 |
潜影贝导弹(NBT) | Target |
整型数组 | 攻击的目标实体 |
潮涌核心(NBT) | Target |
整型数组 | 攻击的目标实体 |
玩家头颅(NBT) | SkullOwner.Id |
整型数组 | 皮肤的所有者 |
玩家头颅(NBT) | SkullOwner.Properties.textures[].Value.ProfileId |
十六进制 | 皮肤的所有者 |
生物(NBT) | Leash.UUID |
整型数组 | 牵引拴着此生物的实体 |
可繁殖生物(NBT) | LoveCause |
整型数组 | 喂养此生物的玩家 |
僵尸村民(NBT) | ConversionPlayer |
整型数组 | 治疗此僵尸村民的玩家 |
除了猪灵之外的中立生物(NBT) | AngryAt |
整型数组 | 攻击该中立生物的玩家或实体 |
蜜蜂和僵尸猪灵(NBT) | HurtBy |
整型数组 | 伤害蜜蜂或僵尸猪灵的实体 |
村民(NBT) | Gossips[].Target |
整型数组 | 引发言论的玩家 |
玩家(NBT) | RootVehicle.Attach |
整型数组 | 玩家骑乘的实体ID |
目标选择器(命令) | - | 有连字符的十六进制 | 选中的实体 |
技术型方面[]
值域[]
每个UUID都可以被表示为128位整数,也就是说其支持从-(2127)
到(2127)-1
的所有整数值。需要注意的是,上述并不指向游戏内生成的值的值域,只是为了强调这种格式的容量。
带连字符的十六进制格式各部分的名称[]
带连字符的十六进制格式UUID遵循xxxxxxxx-xxxx-Axxx-Bxxx-xxxxxxxxxxxx
的格式。
部分名称 | 比特位区间 | |||
---|---|---|---|---|
起始 | 结束 | 大小 | 字符 | |
time-low | 96 | 127 | 32 | 8 |
time-mid | 80 | 95 | 16 | 4 |
time-high-and-version | 54 | 79 | 16 | 4 |
clock-seq-and-reserved | 36 | 53 | 8 | 2 |
clock-seq-low | 48 | 45 | 8 | 2 |
node | 0 | 47 | 48 | 12 |
(这些名称只对第1、第2版的UUID有效,但是沿袭到了其他全部的UUID形式。)
版本和变种[]
UUID有五个版本。第1、2版基于当前的时间和MAC地址,第3、5版基于字符串哈希值,第4版基于完全随机的生成。“版本”值占4个位元,位于UUID字符串格式内,位置由一个“A”指定。
“B”位置是UUID的变种(格式)。占用高达1到3个位元,取决于具体变种:
- 0xx是Apollo NCS 1.5的“变种0”,一种非常旧的UUID类型。
- 10x是IETF RFC 4122 (Leach-Salz)的变种1。Java内为“变种2”。
- 110是旧的Microsoft product的“变种2”。Java内为“变种6”。
- 111是“保留变种”。Java内称为“变种7”。
Minecraft中[]
Minecraft使用了第4版,第1类(RFC)UUID,也就是说除了元数据(版本与变种)外,整串数字都是随机生成的。Java的UUID.randomUUID()
函数负责处理这一项任务。
逐位展开版本
主条目:通用唯一识别码/metadata
[编辑]折叠版本
[编辑]
外部工具[]
版本 | |||||||
---|---|---|---|---|---|---|---|
开发周期 |
| ||||||
技术 |
| ||||||
多人游戏 | |||||||
游戏订制 |
语言