MC Toolkit

Руководства / Строительство и ресурсы

Пользовательские картины и пластинки требуют двух пакетов, и установка только одного из них — обычная ошибка

Датапак регистрирует содержимое; ресурспак предоставляет текстуру и звук. Только датапак — и содержимое регистрируется, но показывать нечего. Плюс ограничение 16×16 и то, чем на самом деле управляет длина пластинки.

Картины и музыкальные пластинки в современном Java — это настоящие реестры, а значит их можно добавлять, а не заменять ванильные. Ничего из добавленного не вытесняет существующую картину или пластинку.

Загвоздка в том, что содержимое разделено между двумя разными типами пакетов, и каждый по отдельности бесполезен.

Что где лежит

Датапак регистрирует объект:

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

Ресурспак предоставляет то, что вы видите и слышите:

assets/<ns>/textures/painting/<id>.png
assets/<ns>/sounds/<id>.ogg
assets/<ns>/sounds.json

Установите только датапак — и содержимое успешно зарегистрируется: оно существует, /give его находит, и просто нет ни текстуры, ни звука. Это куда более запутанный результат, чем явная ошибка, и именно поэтому пользовательская картина «не работает». Инструмент на этой странице кладёт оба пакета в один zip специально, чтобы их нельзя было разделить.

Обратите внимание на два файла pack.mcmeta. Это отдельные пакеты с отдельными идентичностями; объединённого формата, который вмещал бы оба, не существует.

Идентификаторы реестра строже имён файлов

Идентификатор может содержать только a-z, 0-9, _, . и - (плюс / для подпапок). При любом другом символе игра пропускает этот файл со строкой «Invalid path» в логе — пакет загружается, а записи просто никогда не существует, и заметить это труднее, чем ошибку. Чаще всего люди спотыкаются на заглавных буквах и пробелах, потому что и то и другое совершенно обычно в имени файла, который вы перетащили.

Картины: до 16×16, а 17 ломает пакет

Ванильные картины бывают от 1 × 1 до 4 × 4 блоков, и этот инструмент предлагает тот же диапазон. Формат допускает больше: 26.3 читает width и height как целые блоки от 1 до 16, и картина 16 × 16 загружается, вешается и держится на любой стене, где есть 16 × 16 блоков места — проверено на сервере 26.3. Держится картина или нет, решает место, а не размер: та, что не помещается там, где висит, выпадает предметом, и ванильная 1 × 1 без опоры за ней выпадает точно так же.

После 16 игра не ограничивает число, а отказывается его принимать. "width": 17 завершается ошибкой «Value must be within range [1;16]», вместе с ней останавливается загрузка всего реестра, и мир не откроется, пока пакет не уберут.

Размер задаётся в JSON как width и height, в блоках. Он не выводится из PNG, поэтому картина 3 × 1 с квадратной текстурой — валидный файл, который отображается растянутым.

Длина пластинки — это не просто подпись

length_in_seconds — это момент, когда игра решает, что трек закончился. Через секунду после объявленной длины проигрыватель обрывает звук, останавливает музыкальные ноты и выключает редстоун-сигнал, который он выдаёт, пока играет песня — полной силы, на блоки вокруг, ровно столько, сколько, по его мнению, трек ещё идёт.

Так что неточная длина — не косметическая ошибка. Объявите 200-секундный трек как 100 — и музыка оборвётся на середине, а сигнал пропадёт в тот же момент; объявите как 300 — и проигрыватель будет держать сигнал ещё через 100 секунд тишины. В любом случае редстоун, ждущий окончания пластинки, сработает не вовремя. Этот инструмент считывает реальную длительность из файла, а не просит вас ввести её вручную, именно поэтому.

Компаратор читает другое: comparator_output, одно фиксированное число от 0 до 15, которое держится всё время, пока пластинка лежит в проигрывателе — играет она или уже закончилась. Оно не растёт по ходу трека, и длина на него не влияет — в ванили им различают пластинки (13 даёт 1, cat — 2, blocks — 3).

Треки также записываются с "stream": true в sounds.json. Музыка длинная, и загрузка полного трека в память перед воспроизведением вызывает рывки — потоковая передача правильна по умолчанию для всего, что длиной с пластинку, и неправильна для короткого звукового эффекта.

Свои картины и музыкальные пластинки →

Другие руководства

Смотреть все →