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
.
- Параметр