Quadros e discos personalizados exigem dois pacotes, e instalar apenas um deles é a falha mais comum
O datapack registra o conteúdo; o pacote de recursos fornece a textura e o som. Só com o datapack, o conteúdo é registrado sem nada para mostrar. Além disso, o limite de 16×16 e o que a duração do disco realmente controla.
Quadros e discos de música são registros de verdade no Java moderno, o que significa que você pode adicionar novos em vez de substituir os originais. Nada do que você adiciona desloca um quadro ou disco já existente.
O problema é que o conteúdo fica dividido entre dois tipos diferentes de pacote, e cada um é inútil sozinho.
O que vai onde
O datapack registra o item:
data/<ns>/painting_variant/<id>.json asset_id, width, height, title, author
data/<ns>/jukebox_song/<id>.json sound_event, description, length_in_seconds, comparator_output
O pacote de recursos fornece o que você vê e ouve:
assets/<ns>/textures/painting/<id>.png
assets/<ns>/sounds/<id>.ogg
assets/<ns>/sounds.json
Instale apenas o datapack e o conteúdo será registrado com sucesso — ele existe, o /give o encontra, e simplesmente não há textura nem áudio. Esse resultado é bem mais confuso do que uma falha completa, e é a razão mais comum de um quadro personalizado "não funcionar". A ferramenta desta página entrega os dois em um único zip justamente para que não possam ser separados.
Observe os dois arquivos pack.mcmeta. São pacotes separados, com identidades separadas; não existe um formato combinado que contenha ambos.
Os ids de registro são mais rígidos que os nomes de arquivo
Um id pode conter apenas a-z, 0-9, _, . e - (além de / para subpastas). Qualquer outro caractere faz o jogo ignorar aquele arquivo, com uma linha "Invalid path" no log — o pacote carrega, e a entrada simplesmente nunca existe, o que é mais difícil de perceber do que uma falha. Letras maiúsculas e espaços são os dois casos que pegam as pessoas, porque ambos são perfeitamente normais no nome de arquivo que você arrastou.
Quadros: até 16×16, e 17 quebra o pacote
Os quadros originais vão de 1 × 1 a 4 × 4 blocos, e esta ferramenta oferece a mesma faixa. O formato permite mais: a versão 26.3 lê width e height como blocos inteiros de 1 a 16, e um quadro de 16 × 16 carrega, pendura e permanece em qualquer parede com 16 × 16 blocos de espaço — testado em um servidor 26.3. O que decide se um quadro fica pendurado é o espaço, não o tamanho: um que não cabe onde foi pendurado cai como item, e um 1 × 1 original sem nada atrás cai exatamente da mesma forma.
Acima de 16, o jogo não limita o número: ele o recusa. "width": 17 falha com "Value must be within range [1;16]", todo o carregamento do registro para junto, e o mundo não abre até que o pacote seja removido.
O tamanho é declarado no JSON como width e height, em blocos. Ele não é deduzido do PNG, então um quadro de 3 × 1 cuja textura é quadrada é um arquivo válido que aparece esticado.
A duração do disco não é só um rótulo
length_in_seconds é quando o jogo decide que a faixa acabou. Um segundo após a duração declarada, o Toca-Discos corta o som, para as notas musicais e desliga o sinal de redstone que emite enquanto uma música toca — força total, para os blocos ao redor, exatamente enquanto ele acha que a faixa ainda está rolando.
Então uma duração imprecisa não é um erro cosmético. Declare uma faixa de 200 segundos como 100 e a música é cortada na metade, com o sinal caindo no mesmo instante; declare como 300 e o Toca-Discos mantém o sinal ligado durante 100 segundos de silêncio. De qualquer forma, um circuito de redstone esperando o disco terminar dispara na hora errada. Esta ferramenta lê a duração real do arquivo em vez de pedir que você a digite, exatamente por esse motivo.
Um comparador lê outra coisa: comparator_output, um número fixo de 0 a 15 que se mantém enquanto o disco estiver no Toca-Discos, tocando ou já terminado. Ele não sobe ao longo da faixa, e a duração não o altera — os discos originais usam isso para se distinguir uns dos outros (13 dá 1, Gato dá 2, blocks dá 3).
As faixas também são gravadas com "stream": true em sounds.json. Música é longa, e carregar uma faixa inteira na memória antes de tocar causa engasgos — streaming é o padrão certo para qualquer coisa com duração de disco, e o errado para um efeito sonoro curto.