KubeJEI: полный контроль над JEI через KubeJS
Если вы когда-нибудь пытались добавить собственную категорию в JEI, не трогая Java-код, то вы знаете, насколько это муторно. KubeJEI решает эту проблему радикально: теперь всё, что умеет обычный JEIPlugin, можно сделать прямо из скриптов KubeJS. Мод создан для разработчиков модпаков и авторов кастомных рецептов, которым нужна гибкость без компиляции.
Что умеет KubeJEI
По сути, KubeJEI перенаправляет весь функционал JEIPlugin в KubeJS через события. Вы получаете доступ к тем же инструментам, что и Java-разработчики, но пишете на JavaScript. Основные возможности:
- Регистрация собственных категорий JEI с иконками, фоном и заголовками.
- События для «запрета» категорий и рецептов — причём фильтрация происходит на раннем этапе, до полной загрузки, что экономит вычисления.
- Хелперы для создания составных IDrawable, рендеринга сущностей и кастомных таймеров тиков.
- Команда
/kube_jei reloadдля быстрой перезагрузки KubeJS и JEI без перезапуска игры.
Отдельно стоит упомянуть события: kube_jei.register_categories, kube_jei.register_recipes, kube_jei.deny.recipes, kube_jei.deny.categories и другие. Они покрывают практически все сценарии, с которыми сталкивается разработчик при работе с JEI.
Поддерживаемые версии и загрузчики
Актуальные сборки KubeJEI ориентированы на Minecraft 1.21.1 с загрузчиком NeoForge (примеры в документации идут именно для 2.0.0). Также существуют версии для 1.16, но здесь есть важный нюанс: все сборки 1.4.0+ требуют Rhizo вместо Rhino, поскольку Rhino для 1.16 давно не поддерживается и не имеет нужных функций для генерации JSDoc. Если вы работаете на старых версиях, учитывайте это при установке.
Для тех, кто предпочитает не возиться с ручной установкой модов, лаунчер foxygame.net предлагает установку KubeJEI в один клик — достаточно выбрать нужную сборку, и все зависимости подтянутся автоматически. Это особенно удобно, когда нужно быстро протестировать новый скрипт на совместимость с разными версиями Minecraft.
Как установить KubeJEI
Установка не отличается от стандартной процедуры для модов Minecraft. Вам понадобится:
- Скачать KubeJEI для Minecraft подходящей версии (NeoForge для 1.21.1 или Forge для 1.16 с Rhizo).
- Убедиться, что установлены KubeJS и JEI — без них мод не заработает.
- Поместить файл мода в папку
mods. - Запустить игру и проверить работу команды
/kube_jei reload.
Если вы используете лаунчер с каталогом дополнений, KubeJEI можно найти прямо в списке модов и добавить в сборку без ручного копирования файлов. После установки достаточно открыть любой скрипт KubeJS и начать писать события — изменения подхватятся после перезагрузки.
Примеры использования
Допустим, вы хотите запретить категорию готовки на костре вместе со всеми её рецептами. В KubeJEI это делается буквально парой строк:
KubeJEIEvents.denyCategory(event => {
event.deny("minecraft:campfire_cooking")
})
А если нужно убрать только рецепты, но оставить категорию, используйте denyAllInCategory. Гораздо интереснее создание собственных категорий. Например, можно сделать категорию «Random Conversion», где предмет превращается в другой с помощью жидкости. В коде вы описываете массив рецептов, задаёте иконку, фон, заголовок и обработчики отрисовки. Всё это доступно через KubeJEIEvents.registerCategories и KubeJEIEvents.registerRecipes.
Вот как выглядит регистрация кастомной категории в общих чертах:
KubeJEIEvents.registerCategories(event => {
const helpers = event.registration.jeiHelpers
event.custom("my:example_category", builder => {
builder.icon = helpers.guiHelper.createDrawableItemStack("minecraft:gold_ingot")
builder.background = helpers.guiHelper.createBlankDrawable(80, 18)
builder.title = Component.literal("Random Conversion")
builder.recipeSetHandler = {
setRecipe(builder, recipe, focuses) {
const data = recipe.data
builder.addInputSlot(0, 0).addItemStack(data.input)
builder.addOutputSlot(60, 0).addItemStack(data.output)
}
}
})
})
Обратите внимание: в документации указано, что при использовании лямбда-выражений вместо объектов вы не получите подсказки типов в ProbeJS 8.0.3. Это временное ограничение, но о нём стоит помнить, если вы привыкли к автодополнению.
Зачем это нужно
KubeJEI открывает возможности, которые раньше требовали написания отдельного мода. Вы можете динамически управлять содержимым JEI, создавать уникальные категории под свои механики и отключать лишнее на раннем этапе. Для авторов модпаков это означает меньше кода на Java и больше гибкости в скриптах. Если вы ещё не пробовали, скачать KubeJEI стоит хотя бы для того, чтобы оценить, насколько проще стало работать с JEI через KubeJS.
В итоге KubeJEI — это мост между мощью JEI и удобством KubeJS. Он не заменяет JEI, а расширяет его, давая разработчикам инструменты, которые обычно доступны только на уровне Java-кода. Если вы серьёзно занимаетесь модпаками, этот мод заслуживает места в вашей сборке.