The Best Resource for Minecraft
The Best Resource for Minecraft

Власна голова зберігає URL-адресу, загорнуту в base64 JSON, а не зображення

Власна голова зберігає URL-адресу, загорнуту в base64 JSON, а не зображення

Компонент profile містить base64 від {textures:{SKIN:{url:…}}}. Ось чому вигляд голови фіксується в момент її створення, і чому база даних може містити десятки тисяч записів.

Власна голова гравця не містить картинки. Вона містить хеш текстури, загорнутий у JSON, загорнутий у base64, розташований усередині компонента profile предмета.

Шари

Починаючи з хешу, команда будується так:

1. hash        e3b0c44298fc1c149afbf4c8996fb924…
2. JSON        {"textures":{"SKIN":{"url":"http://textures.minecraft.net/texture/<hash>"}}}
3. base64      eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6…
4. component   /give @p player_head[profile={properties:[{name:"textures",value:"<base64>"}]}]

Чотири шари, щоб сказати «ця голова виглядає як те зображення». Властивість завжди називається textures, and the value is always the base64 of that JSON shape.

З цього безпосередньо випливають дві речі:

Голова — це знімок, а не посилання на особу. URL вказує на незмінний файл текстури, а не на обліковий запис. Те, чому відповідав цей хеш під час створення голови, вона відображатиме завжди.

Дані крихітні. Запис голови — це назва, хеш і кілька тегів — зовсім без байтів зображення. Ось чому каталог може містити десятки тисяч голів як простий статичний JSON і все одно завантажуватися швидко.

Чому каталог завантажується за категоріями

База даних тут — це CC0-колекція голів від TheSilentPro, і вона завантажується по одній категорії за раз , а не всі одразу. Індекс містить перелік категорій та їхню кількість; вибір однієї завантажує лише цей файл.

Це не лінива розробка, це єдиний формат, який працює за такого розміру. Уся колекція як один JSON була б великим завантаженням для того, кому потрібно лише три голови з однієї категорії.

Обмеження рендерингу в 300 елементів — це ліміт DOM, а не пошуку

Результати відмальовуються щонайбільше по 300 за раз. Пошук однаково виконується по всьому в завантаженій категорії — обмеження стосується лише того, скільки елементів перетворюється на вузли DOM, а не скільки перевіряється.

Ця різниця важлива, коли пошук повідомляє, що показує перші 300: відсутні записи були знайдені й просто не виводяться на сторінку, а не виключені із запиту. Звуження пошуку переміщує їх у доступний діапазон замість глибшого пошуку.

Відмальовування десятків тисяч елементів одночасно — це саме те, чому запобігає це обмеження, і це реальний ліміт, а не просто кругле число для перестрахування — настільки велика сітка перестає нормально прокручуватися задовго до того, як перестане рендеритися.

Тут нічого нікуди не завантажується

Дані голів — це статичний JSON із того самого джерела. Єдиний сторонній запит — це <img> preview from mc-heads.net, which resolves a hash into a picture for display. The /give command is assembled locally from the hash, so the command works whether or not that preview loaded.

Спробувати інструмент: Player Head Database →