プレイヤーの頭をユーザー名で入手する方法:プロファイルコンポーネントの仕組みと頭が空白になる理由
頭はスキンをスナップショットとして保存し、ライブリンクではありません。プロファイルコンポーネント、古い頭が間違ったスキンを表示する理由、そしてUUIDルックアップがどのように関連するかを説明します。
プレイヤーの頭を与えるコマンドは、引数が1つで済むように思えます。実際そうなのですが、保存される内容は多くの人が期待するものとは異なり、それが頭に関連するほとんどの奇妙な現象を説明しています。
コマンド
/give @p player_head[profile="Notch"]
profileコンポーネントは、古いSkullOwner NBTに代わるものです。{SkullOwner:"Notch"}を使用するスニペットは1.20.5以前のものであり、現在は何も機能しません。
実際に保存されるもの
頭はユーザー名を保存して後でスキンをフェッチするわけではありません。頭が作成される際、サーバーは名前をUUIDとテクスチャのスナップショットに解決し、それをアイテムに焼き付けます。
"profile": {
"name": "Notch",
"id": [I; …],
"properties": [{ "name": "textures", "value": "<base64>" }]
}
これには2つの結果が伴います。
- 1年前に作られた頭は、その年のスキンを表示します。 プレイヤーがスキンを変更しても、すでにワールドにある頭は更新されません。これはバグではなく、更新機能もありません。
- 頭はオフラインでも機能します。 一度焼き付けられると、レンダリングにMojang APIの
/give ... profile="Name"は必要ありません。これが、オフラインモードのサーバーで頭が機能し続ける理由です。
頭が空白になる、またはスティーブを表示する理由
可能性が高い順に:
- 名前が解決されなかった。 オフラインモードのサーバーであるか、コマンド実行時にAPIに到達できなかった場合です。焼き付けるものが何もないため、デフォルトのものが表示されます。
- 名前が存在しない。 Mojangは、削除されたアカウントや未登録のアカウントに対しては何も返しません。
- チャンクがリロードされていない。 頭は非同期で解決されるため、時々一度視線を外して戻す必要があります。
待ってもほとんど解決しません。作成時にプロファイルが焼き付けられなかった場合、それは空白のままです。頭をもう一度与え直してください。
カスタムヘッドは名前ではなくテクスチャを使用する
装飾用の頭(家具、食べ物、カタログからのモブの頭)には所有者がいません。これらはpropertiesテクスチャ値と、テクスチャURLを指すbase64のブロブのみを保持しています。そのため、これらは単一の長いgiveコマンドとして共有可能であり、プレイヤーが名前を変更しても壊れることがありません。
base64は、textures.minecraft.net上のtextures.SKIN.urlを含む小さなJSONにデコードされます。レンダリングにとって、それ以外の内容は重要ではありません。
UUID形式
2つの形式が存在し、すべてのコンテキストで互換性があるわけではありません。
trimmed 069a79f444e94726a5befca90e38aaf5
dashed 069a79f4-44e9-4726-a5be-fca90e38aaf5
コマンドとNBTは通常、ハイフン付き形式または整数配列を必要とします。Web APIは通常、トリムされた形式を返します。これらを変換するのは機械的な作業で、8、12、16、20文字の後にハイフンを挿入します。
ユーザー名からプレイヤーの頭を入手したり、装飾用の頭のカタログを閲覧したり、UUID形式を変換したりするには、プレイヤーの頭とユーザー名ツールをご利用ください。