MC Toolkit

Руководства / Команды и данные

Головы игроков по нику: как работает компонент профиля и почему головы становятся пустыми

Голова хранит снимок скина, а не живую ссылку. Вот что такое компонент профиля, почему старая голова показывает не тот скин и при чём тут поиск по UUID.

Выдать голову игрока звучит так, будто это должен быть один аргумент. Так и есть, но сохраняется совсем не то, чего люди ожидают, и это объясняет большинство странностей, связанных с головами.

Команда

/give @p player_head[profile="Notch"]

Компонент profile заменил старый NBT SkullOwner. Фрагменты, использующие {SkullOwner:"Notch"}, относятся к версиям до 1.20.5 и теперь ничего не делают.

Что на самом деле сохраняется

Голова, выданная как profile="Notch", хранит только имя. Это динамический профиль — так и написано в подсказке предмета — и клиент каждого игрока ищет это имя и загружает скин, когда отрисовывает голову. Голова несёт фиксированный снимок только тогда, когда её профиль включает саму текстуру:

"profile": {
  "name": "Notch",
  "id": [I; …],
  "properties": [{ "name": "textures", "value": "<base64>" }]
}

Из этого следуют два вывода:

  • Голова, основанная на имени, следует за текущим скином игрока. При отрисовке имя ищется заново; клиент хранит найденный скин, пока тот не останется неиспользованным в течение пяти минут. Только голова, несущая свойство textures, зафиксирована на одном скине.
  • Где происходит разрешение — зависит от машины смотрящего. Голова с запечённым свойством textures отрисовывается вообще без поиска. Голова, основанная на имени, зависит от того, сможет ли клиент каждого смотрящего связаться с Mojang, а не от online mode сервера.

Почему голова пустая или показывает Стива

В порядке вероятности:

  1. Имя не разрешилось для этого клиента. API Mojang был недоступен, или поиск всё ещё выполняется; до этого голова показывает скин по умолчанию.
  2. Имени не существует. Mojang ничего не возвращает для удалённых или никогда не зарегистрированных аккаунтов.
  3. Разрешение ещё идёт. Поиск выполняется в фоне, поэтому голова может показывать скин по умолчанию ещё мгновение после того, как впервые попадает в поле зрения.

Голова, основанная на имени, повторяет попытку сама, как только истекает срок её записи в кэше. Чтобы вместо этого зафиксировать скин, выдайте голову с её свойством textures — /fetchprofile name <name> находит игрока и предлагает полный компонент для копирования либо готовую голову для выдачи.

Пользовательские головы используют текстуру, а не имя

Декоративные головы — мебель, еда, головы мобов из каталогов — не имеют владельца. Они несут только значение текстуры properties с base64-блобом, указывающим на URL текстуры. Именно поэтому их можно передавать одной длинной командой give и поэтому они никогда не ломаются, когда игрок меняет имя.

Base64 декодируется в небольшой JSON, содержащий textures.SKIN.url на textures.minecraft.net. Ничто другое в нём для отрисовки не важно.

Форматы UUID

Существуют две формы, и они не взаимозаменяемы в любом контексте:

trimmed   069a79f444e94726a5befca90e38aaf5
dashed    069a79f4-44e9-4726-a5be-fca90e38aaf5

Команды и NBT обычно требуют форму с дефисами или целочисленный массив. Веб-API обычно возвращают усечённую. Преобразование между ними механическое — вставьте дефисы после 8, 12, 16 и 20 символов.

Выдайте голову по нику, просмотрите каталоги декоративных голов или конвертируйте форматы UUID в Player Head & Username Tools.

Головы и никнеймы игроков →

Другие руководства

Смотреть все →