UUID
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
[editar | editar código-fonte]- 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-12com 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-000000000005pode 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
Longno 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:-568210367123287600emparelhado 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
[editar | editar código-fonte]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
[editar | editar código-fonte]Intervalo de valores
[editar | editar código-fonte]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
[editar | editar código-fonte]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
[editar | editar código-fonte]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
[editar | editar código-fonte]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: