Una testa personalizzata memorizza un URL racchiuso in JSON base64, non un'immagine
Il componente profile contiene il base64 di {textures:{SKIN:{url:…}}}. Ecco perché l'aspetto di una testa è fisso al momento della creazione e perché il database può contenere decine di migliaia di voci.
Una testa del giocatore personalizzata non contiene un'immagine. Contiene un hash della texture, racchiuso in JSON, racchiuso in base64, che risiede nel componente profile dell'oggetto.
I livelli
Partendo da un hash, il comando viene strutturato così:
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>"}]}]
Quattro livelli per dire "questa testa assomiglia a quell'immagine". La proprietà si chiama sempre textures, and the value is always the base64 of that JSON shape.
Ne conseguono direttamente due cose:
Una testa è un'istantanea, non un collegamento a una persona. L'URL punta a un file di texture immutabile, non a un account. Mostrerà sempre qualsiasi cosa a cui quell'hash corrispondeva al momento della creazione della testa.
I dati sono minuscoli. La voce di una testa è composta da un nome, un hash e alcuni tag — nessun byte di immagine. Ecco perché un catalogo può contenere decine di migliaia di teste come semplice JSON statico e caricarsi comunque rapidamente.
Perché il catalogo si carica per categoria
Il database qui presente è la raccolta di teste CC0 di TheSilentPro, e viene recuperato una categoria alla volta invece di tutto in una volta. Un indice elenca le categorie e i rispettivi conteggi; selezionandone una si recupera solo quel file.
Non si tratta di pigrizia ingegneristica, è l'unica struttura che funziona con queste dimensioni. L'intera raccolta in un unico JSON costituirebbe un download pesante per chi desidera solo tre teste da una singola categoria.
Il limite di rendering di 300 elementi è un limite del DOM, non della ricerca
I risultati vengono mostrati al massimo 300 alla volta. La ricerca viene comunque eseguita su tutto ciò che si trova nella categoria caricata — il limite si applica a quanti elementi vengono trasformati in nodi DOM, non a quanti ne vengono considerati.
Questa distinzione è importante quando una ricerca indica che sta mostrando i primi 300: le voci mancanti sono state trovate e sono trattenute dalla pagina, non escluse dalla query. Affinare la ricerca le rende visibili, piuttosto che cercare in modo più approfondito.
Renderizzare decine di migliaia di elementi contemporaneamente è ciò che questo limite mira a prevenire, ed è un limite reale piuttosto che una cifra tonda precauzionale — una griglia così grande smette di essere scorrevole molto prima di smettere di essere renderizzabile.
Niente qui effettua caricamenti
I dati delle teste sono JSON statico same-origin. L'unica richiesta di terze parti è il <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.