Cabeças de jogador por nome de usuário: como o componente de perfil funciona e por que elas ficam em branco
Uma cabeça armazena um snapshot da skin, não um link dinâmico. Entenda o componente de perfil, por que uma cabeça antiga mostra a skin errada e como a busca por UUID se encaixa nisso.
Dar uma cabeça de jogador parece exigir um argumento simples. E exige, mas o valor armazenado não é o que as pessoas esperam — daí vem a maioria dos comportamentos estranhos dessas cabeças.
O comando
/give @p player_head[profile="Notch"]
O componente profile substituiu o antigo NBT SkullOwner. Trechos de código usando {SkullOwner:"Notch"} são anteriores à versão 1.20.5 e não funcionam mais.
O que realmente é armazenado
Uma cabeça não armazena um nome de usuário para buscar a skin depois. Quando a cabeça é criada, o servidor resolve o nome para um UUID e um snapshot da textura, e incorpora isso ao item:
"profile": {
"name": "Notch",
"id": [I; …],
"properties": [{ "name": "textures", "value": "<base64>" }]
}
Duas consequências:
- Uma cabeça feita há um ano mostra a skin daquele ano. O jogador mudar sua skin não atualiza as cabeças já existentes no mundo. Isso não é um bug e não há atualização.
- As cabeças funcionam offline. Uma vez incorporadas, nenhuma chamada à API da Mojang é necessária para renderizá-las, e é por isso que as cabeças sobrevivem em servidores offline, enquanto
/give ... profile="Name"não é resolvido lá.
Por que uma cabeça está em branco ou mostra o Steve
Em ordem de probabilidade:
- O nome não foi resolvido. Servidor em modo offline, ou a API estava inacessível quando o comando foi executado. Nada para incorporar, então você recebe um padrão.
- O nome não existe. A Mojang não retorna nada para contas excluídas ou nunca registradas.
- Chunk não recarregado. A cabeça é resolvida assincronamente; ocasionalmente você precisa desviar o olhar e olhar de volta.
Esperar raramente ajuda — se o perfil não foi incorporado na criação, ele permanece vazio. Dê a cabeça novamente.
Cabeças personalizadas usam a textura, não um nome
Cabeças decorativas — móveis, comida, cabeças de criaturas de catálogos — não têm proprietário. Elas carregam apenas o valor de textura properties com um blob base64 apontando para uma URL de textura. É por isso que elas podem ser compartilhadas como um único comando give longo e por que nunca quebram quando um jogador muda de nome.
O base64 decodifica para um pequeno JSON contendo um textures.SKIN.url em textures.minecraft.net. Nada mais nele importa para a renderização.
Formatos de UUID
Existem duas formas e elas não são intercambiáveis em todos os contextos:
trimmed 069a79f444e94726a5befca90e38aaf5
dashed 069a79f4-44e9-4726-a5be-fca90e38aaf5
Comandos e NBT geralmente querem a forma com hífens ou um array de inteiros. As APIs web geralmente retornam a forma sem hífens. Converter entre elas é mecânico — insira hífens após 8, 12, 16 e 20 caracteres.
Dê uma cabeça a partir de um nome de usuário, navegue por catálogos de cabeças decorativas ou converta entre formatos de UUID nas Ferramentas de Cabeça de Jogador e Nome de Usuário.