UUIDs (Universally unique identifiers; Java Class) は 128 bit の数値でMinecraftではインスタンス毎に識別するために使用される。
表現方法[]
- ハイフン付き16進数表現: 16進数でのUUIDの表現、 特定の長さ毎にハイフンで分割されている。
ハイフンはUUIDを文字数8-4-4-4-12
になるように分割し、分割された部分毎に16進数に変換される。 更に詳細な情報は 技術的側面 を参照。
例:f81d4fae-7dec-11d0-a765-00a0c91e6bf6
。- 区切られた数字毎に評価されるので、0始まりの部分は無視される。
例えば00000001-0002-0003-0004-000000000005
は1-2-3-4-5
と同じ値として評価される。
- 区切られた数字毎に評価されるので、0始まりの部分は無視される。
- 16進数表現: ハイフン付き16進数と似ているが、 部分毎に分割されていない。
例としてこの表現方法ではハイフン付きの場合と違い00000001000200030004000000000005
の0始まりの部分を削除することができない。 - Most/Least表現: 上位64bitと下位64bitで分割される。ゲーム内では分割された2つの数値はそれぞれ、
Long
型で保存される。.
このフォーマットは 1.16 以前は使われていたが廃止されており、全て整数配列表現に置き換えられている。
例:UUIDMost:-568210367123287600
とUUIDLeast:-6384696206158828554
ペア。 - Int-array表現: 4つの32bit数値に分割されている。それぞれの部分は上位bitから下位bitの順に整数の配列に保存されている。
例:[I;-132296786,2112623056,-1486552928,-920753162]
実現値[]
次の表はプレーヤーがアクセスできる場所でUUIDが使用される状況を表している:
Location (general) | Location (path) | Format | Use |
---|---|---|---|
All entities (NBT) | UUID |
int-array | 自身のUUID |
Attribute modifiers (NBT) | UUID |
int-array | 自身のUUID。 アイテムを着脱した際にエンティティから属性修飾子を追加、削除するために使われる。 |
Attribute modifiers (Loot table) | id |
ハイフン付き16進数 | function内で set_attributes の属性修飾子のUUIDの指定。
|
/attribute |
- | ハイフン付き16進数 | modifier を識別するために使用される。 |
Tameable mobs (NBT) | Owner |
int-array | 飼い主のUUID。 |
Projectiles (NBT) | Owner |
int-array | 発射体を打ち出したエンティティ。 |
Item entities (NBT) | Owner |
int-array | /give コマンドの対象プレイヤー。
|
Item entities (NBT) | Thrower |
int-array | アイテムをドロップしたプレイヤー。 |
Shulker bullets (NBT) | Target |
int-array | 攻撃の対象となっているエンティティ |
Conduits (NBT) | Target |
int-array | 攻撃の対象となっているエンティティ |
Player heads (NBT) | SkullOwner.Id |
int-array | スキンの所有者 |
Player heads (NBT) | SkullOwner.Properties.textures[].Value.ProfileId |
16進数 | スキンの所有者 |
Mobs (NBT) | Leash.UUID |
int-array | Mobが結び付いているエンティティ |
Breedable mobs (NBT) | LoveCause |
int-array | 繁殖を促したプレイヤー |
Zombie Villagers (NBT) | ConversionPlayer |
int-array | 村人ゾンビを治療しているプレイヤー |
Neutral mobs except piglins (NBT) | AngryAt |
int-array | 中立Mobを傷つけたエンティティ |
Villagers (NBT) | Gossips[].Target |
int-array | 噂話の対象となるプレイヤー |
Players (NBT) | RootVehicle.Attach |
int-array | プレイヤーが騎乗しているエンティティの識別 |
Target selectors (Commands) | - | ハイフン付き16進数 | 選択されたエンティティ |
技術的側面[]
値の範囲[]
UUIDは128bitの値で表現されるので、-(2^127)
から (2^127)-1
の全ての整数を使用できる。この評価はゲーム側によって実際に生成される値の範囲ではなく、データ型の容量に焦点を当てたものだということに注意すること。
ハイフン付き16進数表現でのセクション名[]
ハイフン付き16進数表現によるUUIDのフォーマットは xxxxxxxx-xxxx-Axxx-Bxxx-xxxxxxxxxxxx
となる。
セクション名 | Bit範囲 | |||
---|---|---|---|---|
From | To | Size | Characters | |
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には5つのバージョンがあり、バージョン1とバージョン2は現在時刻とMACアドレス、 バージョン3とバージョン5はハッシュ値、バージョン4は完全なランダムから生成されている。バージョン情報はUUIDのフォーマットの"A"の4bit占有する 。
"B"はUUIDのバリアント(フォーマット)を示す。バリアントの指定によって、上位の1から3bitを占有する:
- 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.
MinecraftにおけるUUID[]
Minecraftはバージョン4、バリアント1(RFC)のUUIDを使用し、エンティティの番号はメタデータ(バージョンとバリアント)で使用されるbitを除きランダムに生成される。JavaのUUID.randomUUID()
関数の動作をする。
メタデータの場所と値の表:
Bitwise version
詳細は「UUID/metadata」を参照
[編集]Collapsed version
詳細は「UUID/metadata1」を参照
[編集]