KubeJEI — продвинутая интеграция JEI и KubeJS для Minecraft

KubeJEI даёт разработчикам полный контроль над JEI через KubeJS: свои категории, рецепты и события для Minecraft.

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-кода. Если вы серьёзно занимаетесь модпаками, этот мод заслуживает места в вашей сборке.