UUIDs (Identificador único universal; Classe Java) são números longos de 128 bits que são usados pelo Minecraft para distinguir entre instâncias separadas.
Representação[]
- Hexadecimal hifenizado: Uma representação hexadecimal do UUID, com hífens separando as diferentes seções em números individuais.
O hífen é definido para dividir o UUID em números no formato8-4- 4-4-12
com cada número marcando o número de dígitos hexadecimais que se encaixam na seção correspondente. Mais detalhes seguem na seção Aspectos técnicos.
Um exemplo dessa representação seriaf81d4fae-7dec-11d0-a765-00a0c91e6bf6
.- Como cada parte é avaliada como um número individual, dígitos vazios no início de uma seção podem ser ignorados.
Por exemplo,00000001-0002-0003-0004-000000000005
pode ser avaliado como o mesmo que1-2-3-4-5
.
- Como cada parte é avaliada como um número individual, dígitos vazios no início de uma seção podem ser ignorados.
- Hexadecimal:O mesmo que a representação hexadecimal hifenizada, mas sem a separação das diferentes seções.
Um exemplo para essa representação seria00000001000200030004000000000005
, onde é impossível remover a maioria dos dígitos vazios como oposição à representação hexadecimal hifenizada. - Mais/Menos: Uma separação dos 64 bits mais significativos dos 64 bits menos significativos. Cada um dos dois números é armazenado separadamente e usa o tipo de dados
Long
no jogo.
Este formato está obsoleto, pois era usado antes do 1.16 e foi totalmente substituído pelo formato Int-array.
Um exemplo dessa representação seriaUUIDMost:-568210367123287600
emparelhado comUUIDLeast:-6384696206158828554
. - Int-array: Uma separação em quatro números de 32 bits. Cada parte é armazenada em uma matriz de inteiros ordenada do mais significativo ao menos significativo.
Um exemplo dessa representação seria[I;-132296786,2112623056,-1486552928,-920753162]
Ocorrências[]
A tabela a seguir representa as situações em que UUIDs são usados em locais acessíveis por um jogador:
Localização (Geral) | Localização (caminho) | Formato | Uso |
---|---|---|---|
Todas as entidades (NBT) | UUID |
int-array | Próprio uuid |
Modificadores de atributo (NBT) | UUID |
int-array | Próprio uuid. Usado ao equipar e desencadear o item para identificar qual modificador adicionar ou remover da entidade. |
Modificadores de atributo (Tabela de itens) | id |
Hyphenated hexadecimal | Definir uuid de modificador na função set_attributes
|
/attribute |
- | Hyphenated hexadecimal | Usado para identificar os modificadores |
Criaturas domésticas (NBT) | Owner |
int-array | Proprietário |
Projéteis (NBT) | Owner |
int-array | Entidade que atirou o projétil |
entidades do item (NBT) | Owner |
int-array | Jogador alvo do comando /give
|
entidades do item (NBT) | Thrower |
int-array | Jogador que deixou cair o item |
Shulker bullets (NBT) | Target |
int-array | Entidade direcionada para ataque |
Aquedutos (NBT) | Target |
int-array | Entidade direcionada para ataque |
Cabeças de jogador (NBT) | SkullOwner.Id |
int-array | Dono da skin |
Cabeças de jogador (NBT) | SkullOwner.Properties.textures[].Value.ProfileId |
hexadecimal | Dono da skin |
Criaturas (NBT) | Leash.UUID |
int-array | Entidade que movia a criatura |
Criaturas reproduzíveis (NBT) | LoveCause |
int-array | Jogador que alimentou a criatura |
Wardens (NBT) | anger.suspects[].uuid |
int-array | Alvo associado ao nível de raiva |
Zumbi aldeão (NBT) | ConversionPlayer |
int-array | Jogador que está convertendo um zumbi aldeão |
Criaturas neutras, exceto piglins (NBT) | AngryAt |
int-array | Entidade que atacou a criatura neutra |
Aldeões (NBT) | Gossips[].Target |
int-array | Jogador que causou a fofoca |
Jogadores (NBT) | RootVehicle.Attach |
int-array | Identificador da entidade que o jogador está montando |
Seletores de destino (Comandos) | - | Hyphenated hexadecimal | Entidade selecionada |
Aspectos técnicos[]
Intervalo de valores[]
Um UUID pode ser expresso como um número de 128 bits, o que significa que ele suporta todos os valores inteiros de -(2^127)
a (2^127)-1
. É importante notar que esta avaliação não se refere à gama de valores gerados pelo jogo, mas sim à capacidade do formato.
Nomes de seção em formato hexadecimal hifenizado[]
UUIDs de formato hexadecimal hifenizado seguem o padrão xxxxxxxx-xxxx-Axxx-Bxxx-xxxxxxxxxxxx
.
Nome da Seção | Faixa de bits | |||
---|---|---|---|---|
A partir de | Para | Tamanho | Personagens | |
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 |
(Os nomes fazem sentido apenas para UUIDs de versão 1 e 2, mas foram passados para todas as formas de UUIDs usadas.)
Versões e variantes[]
Houve cinco versões de UUIDs. As versões 1 e 2 são baseadas na hora atual e no endereço MAC; as versões 3 e 5 são baseadas em hashing de uma string; a versão 4 é baseada em geração completamente aleatória. O valor "version" ocupa quatro bits e está localizado no formato de string UUID na posição indicada por um "A".
A posição "B" é a variante (formato) do UUID. Dependendo da variante específica, pode ocupar os 1 a 3 bits altos:
- 0xx é a "variante 0" do Apollo NCS 1.5, um tipo antigo de UUID.
- 10x é a "variante 1" da IETF RFC 4122 (Leach-Salz). É referido como "variante 2" por Java.
- 110 é a "variante 2" de produtos antigos da Microsoft. É referido como "variante 6" por Java.
- 111 é a "variante reservada". É referido como "variante 7" por Java.
No Minecraft[]
O Minecraft usa UUIDs da versão 4, variante 1 (RFC), o que significa que o número inteiro, com exceção dos bits usados para metadados (versão e variante), é gerado aleatoriamente. A função UUID.randomUUID()
do Java executa essa tarefa exata.
Uma tabela com os locais e valores dos metadados: