minecraft.wiki-mirror/wiki_backup/UUID.txt
2024-12-20 08:07:18 -05:00

114 lines
7.6 KiB
Text

'''Universally Unique Identifiers''' ('''UUID''') are 128-bit long numbers that are used by ''Minecraft'' to distinguish between separate instances.
==Representation==
* '''Hyphenated hexadecimal''': The RFC 9562 standard string representation of UUID<ref>https://datatracker.ietf.org/doc/html/rfc9562#section-4</ref>. A hexadecimal representation of the UUID, with hyphens separating the different sections into individual numbers.<br> The hyphen is set to split the UUID into numbers of the format <code>8-4-4-4-12</code> with each number marking the number of hexadecimal digits fitting into the corresponding section. Further detail follows in the [[Universally unique identifier#Technical aspects|Technical aspects]] section.<br> An example of this representation would be <code>f81d4fae-7dec-11d0-a765-00a0c91e6bf6</code>.
** Because every part is evaluated as an individual number, empty digits at the start of a section can be ignored.<br> For example, <code>00000001-0002-0003-0004-000000000005</code> can be evaluated as the same as <code>1-2-3-4-5</code>.
* '''Hexadecimal''': The same as the hyphenated hexadecimal representation, but without the separation of the different sections.<br> An example for this representation would be <code>00000001000200030004000000000005</code>, where it is impossible for the majority of empty digits to be removed as opposed to the hyphenated hexadecimal representation.
* '''Most/Least''': A separation of the 64 most significant bits from the 64 least significant bits. Each of the two numbers is stored separately and uses the <code>Long</code> data type in the game.<br>This format is deprecated as it was used before [[Java Edition 1.16|1.16]] and was entirely replaced by the Int-array format.<br>An example of this representation would be <code>UUIDMost:-568210367123287600</code> paired with <code>UUIDLeast:-6384696206158828554</code>.
* '''Int-array''': A separation into four 32-bit numbers. Each part is stored in an integer array ordered from most significant to least significant.<br> An example of this representation would be <code>[I;-132296786,2112623056,-1486552928,-920753162]</code>
==Occurences==
The following table represents the situations in which UUIDs are used in places accessible by a player:
{| class="wikitable"
|-
! Location (general) !! Location (path) !! Format !! Use
|-
| [[Chunk format/Entity|All entities]] (NBT) || <code>UUID</code> || int-array || Own UUID
|-
| [[Chunk format/Tameable|Tameable mobs]] (NBT) || <code>Owner</code> || int-array || Owner
|-
| [[Chunk format#Projectiles|Projectiles]] (NBT) || <code>Owner</code> || int-array || Entity that shot the projectile
|-
| [[Item (entity)|Item entities]] (NBT) || <code>Owner</code> || int-array || Target player for {{Command|give}} command
|-
| [[Item (entity)|Item entities]] (NBT) || <code>Thrower</code> || int-array || Player who dropped the item
|-
| [[Shulker#Shulker bullet|Shulker bullets]] (NBT) || <code>Target</code> || int-array || Entity targeted for attack
|-
| [[Conduit]]s (NBT) || <code>Target</code> || int-array || Entity targeted for attack
|-
| [[Mob head#Player skins|Player heads]] (NBT) || <code>SkullOwner.Id</code> || int-array || Owner of the skin
|-
| [[Mob head#Player skins|Player heads]] (NBT) || <code>SkullOwner.Properties.textures[].Value.ProfileId</code> || hexadecimal || Owner of the skin
|-
| [[Chunk format#Mobs|Mobs]] (NBT) || <code>Leash.UUID</code> || int-array || Entity that leashed the mob
|-
| [[Chunk format/Breedable|Breedable mobs]] (NBT) || <code>LoveCause</code> || int-array || Player who fed the mob
|-
| [[Warden/ED|Warden]]s (NBT) || <code>anger.suspects[].uuid</code> || int-array || Target associated with the anger level
|-
| [[Zombie Villager]]s (NBT) || <code>ConversionPlayer</code> || int-array || Player who is converting the Zombie Villager
|-
| Most of the neutral mobs (NBT) || <code>AngryAt</code> || int-array || Entity that hurt the neutral mob
|-
| [[Villagers]] (NBT) || <code>Gossips[].Target</code> || int-array || Player who caused the gossip
|-
| [[Player]]s (NBT) || <code>RootVehicle.Attach</code> || int-array || Identifier of the entity that the player is riding
|-
| [[Argument types#minecraft:entity|Target selectors]] (Commands) || - || Hyphenated hexadecimal || Selected entity
|-
| [[Server.properties#Keys|server.properties]] || <code>resource-pack-id</code> || Hyphenated hexadecimal || Identifies the server resource pack with clients
|}
==Technical aspects==
===Value range===
A UUID can be expressed as a 128-bit number, which means that it supports all integer values from <code>-(2^127)</code> to <code>(2^127)-1</code>. It is important to note that this evaluation does not refer to the range of values generated by the game but instead focuses on the capacity of the format.
===Hyphenated hexadecimal format section names===
Hyphenated hexadecimal format UUIDs follow the pattern <code>xxxxxxxx-xxxx-Axxx-Bxxx-xxxxxxxxxxxx</code>.
{| class="wikitable"
|-
! Section name !! colspan="4" | Bit range
|-
! !! From !! To !! Size !! Characters
|- style="text-align:right;"
| style="text-align:left;" | time-low|| 96 || 127 || 32 || 8
|- style="text-align:right;"
| style="text-align:left;" | time-mid || 80 || 95 || 16 || 4
|- style="text-align:right;"
| style="text-align:left;" | time-high-and-version || 54 || 79 || 16 ||4
|- style="text-align:right;"
| style="text-align:left;" | clock-seq-and-reserved || 36 || 53 || 8 || 2
|- style="text-align:right;"
| style="text-align:left;" | clock-seq-low || 48 || 45 || 8 || 2
|- style="text-align:right;"
| style="text-align:left;" | node || 0 || 47 || 48 || 12
|}
(The names make sense only for version 1 and 2 UUIDs, but it has been passed onto all forms of UUIDs used.)
=== Versions and variants ===
There are 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, an 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.
=== In Minecraft ===
Minecraft uses version 4, variant 1 (RFC) UUIDs, which means that the entire number with the exception of the bits used for metadata (version and variant) is randomly generated. Java's {{code|UUID.randomUUID()}} function performs this exact task.
A table with the locations and values of the metadata:
{{Collapse|title='''Bitwise version'''|content={{/metadata}}}}
{{Collapse|title='''Collapsed version'''|content={{/metadata1}}}}
==External links==
* [https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/UUID.html UUID Java class documentation]
* [https://www.uuidtools.com/generate/minecraft Generate UUIDs in hyphenated hexadecimal format]
* [https://www.soltoder.com/mc-uuid-converter/ Convert between and generate all different formats, with the exception that the non-hyphenated hexadecimal format is only accepted as input]
==References==
{{Reflist}}
== Navigation ==
{{Navbox Java Edition technical|general}}
{{Navbox Bedrock Edition}}
[[Category:Game terms]]
[[de:UUID]]
[[fr:Identifiant unique universel]]
[[ja:Universally unique identifier]]
[[pt:UUID]]
[[ru:Универсальный уникальный идентификатор]]
[[uk:UUID]]
[[zh:通用唯一识别码]]