Голови гравців за іменем користувача: як працює компонент профілю і чому голови стають порожніми
Голова зберігає знімок скіна, а не живе посилання. Ось що таке компонент профілю, чому стара голова показує неправильний скін і як із цим пов'язаний пошук UUID.
Видача голови гравця звучить так, ніби це один аргумент. Так і є, але зберігається зовсім не те, що очікують, і це пояснює більшість дивацтв із головами.
Команда
/give @p player_head[profile="Notch"]
Параметр profile component replaced the old SkullOwner NBT. Snippets using {SkullOwner:"Notch"} are pre-1.20.5 and do nothing now.
Що насправді зберігається
Голова не зберігає ім'я користувача для подальшого завантаження скіна. Коли голова створюється, сервер зіставляє ім'я з UUID та знімком текстури, і запікає це в предмет:
"profile": {
"name": "Notch",
"id": [I; …],
"properties": [{ "name": "textures", "value": "<base64>" }]
}
Два наслідки:
- Голова, створена рік тому, показує тогорічний скін. Зміна скіна гравцем
не оновлює голови, які вже розміщені у світі. Це не помилка, і оновлення не відбувається.
- Голови працюють офлайн. Після запікання виклик Mojang API для рендерингу не потрібен, що
пояснює, чому голови зберігаються на серверах у режимі offline-mode, тоді як /give ... profile="Name" does not resolve there.
Чому голова порожня або показує Стіва
У порядку ймовірності:
- Ім'я не вдалося зіставити. Сервер у режимі offline-mode або API був недоступний, коли
виконувалася команда. Нічого запекти, тому ви отримуєте стандартний скін.
- Імені не існує. Mojang нічого не повертає для видалених або ніколи не зареєстрованих
облікових записів.
- Чанк не перезавантажено. Голова завантажується асинхронно; іноді потрібно відвести погляд
вбік і повернутися назад.
Очікування рідко допомагає — якщо профіль не було запечено під час створення, він залишається порожнім. Видайте голову знову.
Користувацькі голови використовують текстуру, а не ім'я
Декоративні голови — меблі, їжа, голови мобів із каталогів — не мають власника. Вони містять лише properties texture value with a base64 blob pointing at a texture URL. That is why they are shareable as a single long give command and why they never break when a player renames.
Base64 декодується в невеликий JSON, що містить textures.SKIN.url on textures.minecraft.net. Nothing else in it matters for rendering.
Формати UUID
Існує дві форми, і вони не взаємозамінні у кожному контексті:
trimmed 069a79f444e94726a5befca90e38aaf5
dashed 069a79f4-44e9-4726-a5be-fca90e38aaf5
Команди та NBT зазвичай вимагають форму з дефісами або масив цілих чисел. Веб-API зазвичай повертають скорочену форму. Перетворення між ними механічне — вставте дефіси після 8, 12, 16 і 20 символів.
Отримайте голову за іменем користувача, переглядайте каталоги декоративних голів або конвертуйте формати UUID у Інструменти для голів гравців та імен користувачів.