Guías / Construcción y recursos
Los cuadros y discos personalizados necesitan dos paquetes, y la instalación de uno de ellos es el fallo habitual
El paquete de datos registra el contenido; el paquete de recursos aporta la textura y el sonido. Solo con el paquete de datos, el contenido se registra sin nada que mostrar. Además, el límite de 16×16 y lo que realmente controla la duración del disco.
Los cuadros y los discos de música son registros reales en Java moderno, lo que significa que puedes añadirlos en lugar de reemplazar los de vanilla. Nada de lo que añadas desplaza a un cuadro o disco existente.
El problema es que el contenido se reparte entre dos tipos de paquete distintos, y cada uno es inútil por sí solo.
Qué va dónde
El paquete de datos registra el objeto:
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
El paquete de recursos aporta lo que ves y oyes:
assets/<ns>/textures/painting/<id>.png
assets/<ns>/sounds/<id>.ogg
assets/<ns>/sounds.json
Si instalas solo el paquete de datos, el contenido se registra correctamente: existe, /give lo encuentra, y simplemente no hay textura ni audio. Ese resultado confunde mucho más que un fallo directo, y es la razón habitual por la que un cuadro personalizado "no funcionó". La herramienta de esta página incluye ambos en un solo zip precisamente para que no se puedan separar.
Fíjate en los dos archivos pack.mcmeta. Son paquetes separados con identidades separadas; no existe un formato combinado que contenga ambos.
Los ids de registro son más estrictos que los nombres de archivo
Un id solo puede contener a-z, 0-9, _, . y - (además de / para subcarpetas). Cualquier otra cosa y el juego omite ese archivo con una línea "Invalid path" en el registro: el paquete se carga y la entrada simplemente nunca existe, lo cual es más difícil de detectar que un fallo. Las mayúsculas y los espacios son los dos que pillan a la gente, porque ambos son perfectamente normales en el nombre de archivo que arrastraste.
Cuadros: hasta 16×16, y 17 rompe el paquete
Los cuadros de vanilla van de 1 × 1 a 4 × 4 bloques, y esta herramienta ofrece el mismo rango. El formato permite más: 26.3 lee width y height como bloques enteros de 1 a 16, y un cuadro de 16 × 16 se carga, se cuelga y se mantiene en cualquier pared con 16 × 16 bloques de espacio — probado en un servidor 26.3. Lo que decide si un cuadro se mantiene es el espacio, no el tamaño: uno que no cabe donde se cuelga cae como objeto, y un 1 × 1 de vanilla sin nada detrás cae exactamente igual.
Pasado 16, el juego no limita el número, lo rechaza. "width": 17 falla con "Value must be within range [1;16]", toda la carga del registro se detiene con él, y el mundo no se abrirá hasta que se elimine el paquete.
El tamaño se declara en el JSON como width y height, en bloques. No se deduce del PNG, así que un cuadro de 3 × 1 cuya textura es cuadrada es un archivo válido que se muestra estirado.
La duración del disco no es una etiqueta
length_in_seconds es cuando el juego decide que la pista ha terminado. Un segundo después de la duración declarada, el tocadiscos corta el sonido, detiene las notas musicales y apaga la señal de redstone que emite mientras suena una canción: a plena potencia, hacia los bloques de alrededor, durante exactamente el tiempo que cree que la pista sigue sonando.
Así que una duración inexacta no es un error cosmético. Declara una pista de 200 segundos como 100 y la música se corta a mitad, con la señal cayendo en ese mismo momento; declárala como 300 y el tocadiscos mantiene su señal encendida durante 100 segundos de silencio. En cualquier caso, la redstone que espera a que termine un disco se activa en el momento equivocado. Esta herramienta lee la duración real del archivo en lugar de pedirte que la escribas, precisamente por eso.
Un comparador lee otra cosa: comparator_output, un número fijo de 0 a 15 que se mantiene mientras el disco está en el tocadiscos, sonando o terminado. No aumenta a lo largo de la pista, y la duración no lo cambia: vanilla lo usa para distinguir discos (13 da 1, cat 2, blocks 3).
Las pistas también se escriben con "stream": true en sounds.json. La música es larga, y cargar una pista completa en memoria antes de reproducirla provoca tirones: el streaming es lo correcto por defecto para cualquier cosa de la duración de un disco, y lo incorrecto para un efecto de sonido corto.