KubeJEI

KubeJEI

KubeJS 的高级 JEI 支持

KubeJS

KubeJEI

为 KubeJS 提供高级 JEI 支持,允许开发者完成 JEIPlugin 几乎能做的所有事情。

功能特性:

  • 将 JEIPlugin 中的所有功能通过事件重定向到 KubeJS
  • 自定义 JEI 分类
  • 提供“屏蔽”分类和配方的相关事件。通过提前过滤而非在加载完成后隐藏,可以省去几乎全部相关计算。
  • 辅助工具,用于创建复合 IDrawables、实体渲染以及自定义计时器
  • 提供 /kube_jei reload 命令快捷方式,用于重新加载 KubeJS 和 JEI

示例(适用于 1.21.1 neoforge 的 2.0.0 版本)

屏蔽一个分类及其所有配方:

KubeJEIEvents.denyCategory(event => {
    event.deny("minecraft:campfire_cooking")
})

KubeJEIEvents.denyRecipe(event => {
    event.denyAllInCategory("minecraft:campfire_cooking")
})

为自定义配方创建自定义分类:

/** @type {{input: Internal.$ItemStack_, catalyst: Internal.$FluidStack_, output: Internal.$ItemStack_}[]} */
const recipes = [
    {
        input: "ae2:1k_crafting_storage",
        catalyst: "minecraft:milk",
        output: "ae2:16k_crafting_storage"
    }
]

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(20 * 4, 18)
        builder.title = Component.literal("Random Conversion")

        // 实际上你可以直接使用 (...) => {...},而不用写 { setRecipe(...) {...} }
        // 但不幸的是,使用 lambda 时将无法获得类型提示(截至 ProbeJS 8.0.3)。希望未来能修复
        builder.recipeSetHandler = {
            setRecipe(builder, recipe, focuses) {
                /** @type {typeof recipes[0]} */
                const data = recipe.data
                const catalyst = Fluid.of(data.catalyst)

                builder.addInputSlot(0, 0).addItemStack(data.input)
                builder.addInputSlot(20, 0).addFluidStack(catalyst.fluid, catalyst.getAmount(), catalyst.componentsPatch)
                builder.addOutputSlot(20 * 3, 0).addItemStack(data.output)
            }
        }

        builder.drawHandler = {
            draw(recipe, graphics, mouseX, mouseY) {
                helpers.guiHelper.recipeFlameFilled.draw(graphics, 40, 1)
            }
        }
    })
})

KubeJEIEvents.registerRecipes(event => {
    event.custom("my:example_category").addAll(recipes)
})

仅适用于 1.16 版本

请注意,所有 1.4.0+ 版本需要运行 Rhizo 而非 Rhino,这是因为适用于 Minecraft 1.16 的 Rhino 早已停止维护,缺少我们用于生成 JSDoc 所需的功能。

事件列表:

  • kube_jei.on_runtime_available
  • kube_jei.register_advanced
  • kube_jei.register_categories
  • kube_jei.register_fluid_subtypes
  • kube_jei.register_gui_handlers
  • kube_jei.register_ingredients
  • kube_jei.register_item_subtypes
  • kube_jei.register_recipe_catalysts
  • kube_jei.register_recipes
  • kube_jei.register_recipe_transfer_handlers
  • kube_jei.register_vanilla_category_extensions
  • kube_jei.deny.recipes
  • kube_jei.deny.categories