UUID

来自Minecraft Wiki
跳转至: 导航搜索
Clock JE2 BE1.gif
此条目需要更新。

原因:需同步英文Wiki

通用唯一识别码(Universally Unique IDentifier,UUID)是128位长的数字,在Minecraft中用来区分不同的对象实例。

表示方式[编辑 | 编辑源代码]

  • 有连字符的十六进制(Hyphenated hexadecimal):UUID的一种十六进制表示方式,中间用连字符将其划分为几个部分。
通常的一种划分格式是将UUID分成8-4-4-4-12的部分,每一位是十六进制的数字。例如,f81d4fae-7dec-11d0-a765-00a0c91e6bf6
由于每一部分都是单独作为一个数字处理的,因此每个部分开头可以为空。例如,00000001-0002-0003-0004-0000000000051-2-3-4-5会被看作相同的UUID。
  • 十六进制(Hexadecimal):和上面的方式基本上相同,只是每个部分之间没有连字符用来分隔。
例如,00000001000200030004000000000005。和常规的字符串不同,里面的0不能被省略。
  • 高低位(Most/Least):将高64位和低64位分开表示。每部分用一个Long(长整型)数据存储。
例如,UUIDMost:-568210367123287600UUIDLeast:-6384696206158828554的组合。
  • 整型数组(int-array):用4个32位整数表示,按从高位到低位顺序存储。
例如,[I;-132296786,2112623056,-1486552928,-920753162]

出现场合[编辑 | 编辑源代码]

下面的表格展示了所有玩家在游戏中可以接触到的使用UUID的地方:

位置 路径 格式 用途
所有实体(NBT) UUID 整型数组 自身的UUID
属性修饰符(NBT) UUID 整型数组 自身的UUID
属性修饰符(战利品表 id 字符串 set_attributes函数中设置修饰符的UUID
可驯服生物(NBT) Owner 整型数组 主人
信任玩家的生物(NBT) 整型数组 标记部分生物信任的玩家
弹射物(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) HurtBy 整型数组 伤害蜜蜂或僵尸猪灵的实体
村民(NBT) Gossips[].Target 整型数组 引发言论的玩家
目标选择器(命令) - 字符串 选中的实体
命令/attribute(命令) - 字符串 选中的属性修饰符

该段落仍需完善。你可以帮助我们扩充关于该主题的更多信息。
原因:缺失旧的UUID格式

技术型方面[编辑 | 编辑源代码]

值域[编辑 | 编辑源代码]

每个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形式。)

Versions and variants[编辑 | 编辑源代码]

There have been five versions of UUIDs. Versions 1 and 2 are based on current time and MAC address; versions 3 and 5 are based on hashing a string; version 4 is based on completely random generation. The "version" value occupies four bits, and is located in the UUID string format at the position indicated by an "A".

The "B" position is the variant (format) of the UUID. Depending on the specific variant, it may occupy the high 1 to 3 bits:

  • 0xx is the "variant 0" of Apollo NCS 1.5, a very old type of UUID.
  • 10x is the "variant 1" of IETF RFC 4122 (Leach-Salz). It's referred to as "variant 2" by Java.
  • 110 is the "variant 2" of old Microsoft products. It's referred to as "variant 6" by Java.
  • 111 is the "reserved variant". It's referred to as "variant 7" by Java.

Minecraft中[编辑 | 编辑源代码]

Minecraft使用了第4版,第1类(RFC)UUID,也就是说除了元数据(版本与变种)外,整串数字都是随机生成的。Java的UUID.randomUUID()函数负责处理这一项任务。

Bitwise version

[编辑]

Collapsed version

[编辑]

相关工具[编辑 | 编辑源代码]

应用[编辑 | 编辑源代码]

  • 随机数产生器(RNG)
  • 高效引用标记的实体
  • 游戏内机制调整

该段落仍需完善。你可以帮助我们扩充关于该主题的更多信息。
原因:Missing elaboration on different applications