JSON-модели блоков и предметов
Помните этот чрезвычайно громоздкий и абсолютно нечитабельный код добавления вариаций кастомного блока, зарегистрированного в Java? Было непозволительно оставить это так и подвергнуть Java-разработчиков страданиям от тех сумасшедших последовательных вызовов с JSONObjectами and JSONArrayами. Поэтому было принято решение (почти) полностью портировать парсер JSON-моделей блоков и предметов с Minecraft: Java Edition.
Для понимания JSON-формата моделей блоков и предметов, есть эта статья на официальной вики Майнкрафт (англ.).
Все директории blockstates/ и models/ должны быть внутри директории ресурсов KEX, более подробно об этом читайте в предыдущей статье. Имена JSON-файлов в директориях blockstates/ и models/item/ должны быть такими же, как строковые ID блоков и предметов, которые вы зарегистрировали, чтобы присвоить им эти модели. Например:
BlockRegistry.register(new MyBlock("my_block"));
ItemRegistry.register(new MyItem("my_item"));
Следовательно, вы должны будете создать файлы blockstates/my_block.json и models/item/my_item.json.
Для того, чтобы вы не создавали самостоятельно такие базовые шаблонные модели, как куб, колонна, крестовина и т.д., KEX предоставляет вам 56 таких моделей. Их список вы можете увидеть, зайдя в директорию мода KernelExtension и перейдя в kex-res/models/block/, или зайдя в эту папку в публичном GitHub-репозитории KernelExtension.
Список различий между JSON-парсером моделей блоков и предметов KEX и оригинальным в Java-Майнкрафте.
- Различия в JSON-формате
blockstates:- Параметр
variantsдолжен быть массивом вместо объекта. Индекс каждого JSON-описания варианта в этом массиве соответствует значению даты, на которую этот вариант модели будет установлен. Добавление поддержки блок-стейтов планируется в будущих обновлениях. - В
multipartподдерживаются только ICRender-группы. В условияхnorth,south,westиeast, вместоsideилиupвы должны писать название ICRender-группы, или несколько групп, разделённых с помощью|. Также дополнительно поддерживается операторНЕ. Если вы добавите!перед названием ICRender-группы, это пропарсится какНЕ(группа). Добавление поддержки остальных блок-стейтов планируется в грядущих обновлениях.
- Параметр
- Различия в JSON-формате
models:- Параметр
ambientocclusionне поддерживается - В параметре
displayподдерживаются только ключи"hand"и"gui"("hand"вместо"thirdperson_righthand","thirdperson_lefthand","firstperson_righthand"and"firstperson_lefthand"вместе взятых) - Параметр
shadeв кубах (элементах) не поддерживается - Параметры
cullfaceиtintindexв гранях кубов (элементов) не поддерживаются - В моделях предметов, параметры
gui_lightиoverridesне поддерживаются (поддержкаoverridesпланируется в будущих обновлениях) - В текстурах моделей предметов, формат
"layerN"не поддерживается, если вы хотите предмет с дефолтной (плоской) моделью, не используйте JSON-модели, просто вызывайтеsetIconили имплементируйте компонентIHasDynamicIcon.
- Параметр