Kubejs IU

Kubejs IU

用于Industrial Upgrade机器配方的KubeJS桥接:可在脚本中检查、添加、移除和替换这些配方。包含游戏内命令。

KubeJS

KubeJS IU

从 KubeJS 编写 Industrial Upgrade (IU) 的机器加工配方。

问题所在

IU 拥有两套完全独立的配方系统:

合成配方 机器加工配方
位置 数据包 data/industrialupgrade/recipe/*.json Java 内存:com.denfop.api.recipe.RecipesCore.map_recipes
示例 合成机器方块 粉碎矿石、制作 ME 存储组件
配方 id 有 无
能否从 KubeJS 编辑 可以(ServerEvents.recipes) 完全不行

因此整合包作者会撞上这样的死胡同:

  • event.remove({ id: 'industrialupgrade:...' }) 无法删除粉碎机配方——它不是数据包配方。
  • event.replaceInput(...) 对 IU 的自定义配方类型静默无效;对于没有 schema 的配方类型,KubeJS 会回退到空操作实现。
  • 机器配方根本没有 id,所以没有任何东西可以定位。

本模组将 IU 的内部配方 API 暴露为普通的静态方法,KubeJS(或任何其他模组)可以通过 Java.loadClass 调用它们。

快速开始

// kubejs/startup_scripts/iu_machine.js   -- 必须放在 startup_scripts 中
StartupEvents.postInit(event => {
    const iu = Java.loadClass('com.kubejsiu.recipe.IURecipeBridge')

    // 粉碎机:末影珍珠 -> 末影粉
    iu.addItemRecipe('macerator', 'minecraft:ender_pearl', 1, 'ae2:ender_dust', 1)

    // 带温度的多槽机器:芯片制造机(5 槽)
    iu.addMultiRecipe('microchip',
        ['ae2:cell_component_1k', 'ae2:certus_quartz_crystal',
         'industrialupgrade:itemdust/silicon_dust', 'industrialupgrade:itemingots/osmium',
         'industrialupgrade:itemingots/yttrium'],
        [1, 1, 1, 1, 1],
        'ae2:cell_component_4k', 1, 0, 4500)
})

在游戏内查看配方

/kubejs_iu machines               列出所有机器名称、槽位数量和配方数量
/kubejs_iu recipes macerator      列出某个机器的所有配方
/kubejs_iu dump                   将完整机器列表写入日志

机器名称按字面匹配,拼写错误会被静默忽略,因此请务必先检查名称。

API

添加配方

方法 备注
addItemRecipe(machine, in, inCount, out, outCount) 单物品到物品
addItemRecipeTag(machine, tag, inCount, out, outCount) 接受 #c:plates/iron 之类的标签;每个标签成员生成一个配方
addMachineRecipe(machine, in, inCount, out, outCount, energy) 带能量消耗
addMultiRecipe(machine, ids[], counts[], out, outCount[, energy][, temperature]) 多槽机器
addFluidRecipe(machine, inFluid, inMb, outFluid, outMb) 流体机器
addFluidItemRecipe(machine, fluid, mb, in, inCount, out, outCount) 流体 + 物品到物品
addCentrifugeRecipe(in, inCount, out, outCount) 热力离心机
addSeedBagRecipe(in, cropId) 压缩机种子袋

查看

listMachines() - describeMachine(machine) - countRecipes(machine) - listRecipes(machine) - dumpMachines()

移除与替换

方法 备注
removeByInput(machine, in, inCount) 移除第一个输入匹配的配方
removeByOutput(machine, out, outCount) 移除产出该物品的配方
clearMachine(machine) 清空该机器(物品和流体),返回移除的数量
removeFluidRecipe(machine) 仅清空该机器的流体配方
replaceItemRecipe(machine, ...) - replaceFluidRecipe(machine, ...) 先清空,再注册
reloadRecipes(className) 重新运行某个注册类的默认配方(传类名,而不是机器名)

所有方法在失败时返回 false / 0 并记录一条警告,而不是向 KubeJS 抛出异常。

规则与注意事项

  1. 在 kubejs/startup_scripts/ 中的 StartupEvents.postInit 里调用 API。此时 IU 的配方表已经存在,且 addRecipe 是追加操作——若把它放在 server_scripts 中,每次 /reload 都会重复添加配方。
  2. 修改这些脚本后请重启游戏;/reload 不会重新运行启动脚本。
  3. energy / temperature 值为 0 表示“使用机器默认值”。

需求

  • Minecraft 1.21.1,NeoForge 21.1.x
  • Industrial Upgrade —— 必需
  • KubeJS —— 可选;桥接代码未引用任何 KubeJS 类,因此其他模组也可以调用

说明

  • 3 个类,0 个 mixin,0 个方块,0 个物品,0 个数据包。仅服务端安装即可运行。
  • 不包含 Industrial Upgrade 的任何代码、资源或数据;IU 仅为编译时依赖。
  • 许可证:MIT。