Для пользовательских картин и дисков нужны два пака, и установка одного из них — типичная ошибка
Датапак регистрирует контент; ресурспак предоставляет текстуру и звук. Один только датапак регистрирует, но ничего не показывает. Плюс ограничение 4×4 и почему длина диска — это не просто косметика.
Картины и музыкальные диски — это полноценные реестры в современной Java-версии, что означает, что вы можете добавлять их, а не заменять ванильные. Ничто из того, что вы добавите, не вытеснит существующую картину или диск.
Загвоздка в том, что контент разделён между двумя разными типами паков, и каждый из них бесполезен по отдельности.
Что куда идёт
Датапак регистрирует предмет:
data/<ns>/painting_variant/<id>.json asset_id, width, height, title, author
data/<ns>/jukebox_song/<id>.json sound_event, description, length, comparator
Ресурспак предоставляет то, что вы видите и слышите:
assets/<ns>/textures/painting/<id>.png
assets/<ns>/sounds/<id>.ogg
assets/<ns>/sounds.json
Установите только датапак, и контент успешно зарегистрируется — он существует, /give его находит, но просто нет текстуры и звука. Это гораздо более запутанный результат, чем явный сбой, и это обычная причина, по которой пользовательская картина «не сработала». Инструмент на этой странице поставляется в одном ZIP-архиве именно для того, чтобы их нельзя было разделить.
Обратите внимание на два файла pack.mcmeta. Это отдельные паки с отдельными идентификаторами; нет комбинированного формата, который бы содержал оба.
Идентификаторы реестра строже, чем имена файлов
Идентификатор может содержать только a-z, 0-9, _, . и -. Всё остальное, и пак не загрузится — не одна повреждённая запись, а весь пак. Заглавные буквы и пробелы — это две вещи, которые сбивают с толку, потому что оба совершенно обычны в имени файла, который вы перетащили.
Картины: от 1×1 до 4×4
Ванильные размеры варьируются от 1 × 1 до 4 × 4 блоков, что даёт шестнадцать возможных форм. Вариант за пределами этого диапазона всё равно будет отображаться — игра не отклонит его — но его нельзя будет повесить на стену ожидаемого игроками размера, поэтому он фактически неразмещаем в обычной постройке.
Размер объявляется в JSON как width и height, в блоках. Он не выводится из PNG, поэтому картина 3 × 1, текстура которой квадратная, является допустимым файлом, который отображается растянутым.
Длина диска — это не просто метка
length_in_seconds управляет двумя вещами: временем воспроизведения проигрывателя (Jukebox) и нарастанием сигнала компаратора — сигнал, который компаратор считывает с играющего проигрывателя, увеличивается в течение заявленной продолжительности трека.
Таким образом, неточная длина — это не косметическая ошибка. Объявите 200-секундный трек как 100-секундный, и компаратор завершит своё нарастание на полпути, что незаметно нарушит любую редстоун-схему, привязанную к окончанию диска. Этот инструмент считывает реальную продолжительность из файла, а не просит вас ввести её, именно по этой причине.
Треки также записываются с "stream": true в sounds.json. Музыка длинная, и загрузка полного трека в память перед воспроизведением вызывает заикания — потоковая передача (streaming) является правильным поведением по умолчанию для всего, что имеет длину диска, и неправильным для короткого звукового эффекта.