创建:食谱钩子

创建:食谱钩子

为基于配方的模组/附加组件/脚本等创建库...

创建

Create Recipe Hooks

Create Recipe Hooks 是一个用于 Minecraft 1.20.1(Forge 和 Fabric)的服务端库,当 Create 机械完成配方处理,以及当 Create 机械处理世界方块时(钻头挖掘、收割机收割、锯木机砍树),会触发事件。它提供了一个统一的 API,使得任务书、自动化脚本、分析工具等集成模组能够响应 Create 的生产过程,而无需编写自己的 Mixin。

功能

该模组在字节码层面切入 Create 的机械,并触发三个事件:

  • recipeFinished – Create 机械完成了一个配方(盆、风扇、压力机、磨石、粉碎轮、锯、合成器、机械手、注液器、物品排出器、砂纸、序列组装、CEI 打印机)
  • blockProcessed – 机械处理了一个世界方块:机械钻头每破坏一个方块、机械收割机每收割一株植物、水平机械锯每切割一个独立方块,均触发一次事件
  • treeCut – 机械锯砍倒了一整棵树,附带精确的原木和树叶数量

每个事件携带的信息:

  • 来源 – 执行工作的机械
  • 玩家归属 – 放置该机械的玩家的 UUID(对于粉碎轮:投掷物品的玩家,如果通过传送带或漏斗输入则回退为放置粉碎轮的玩家)。该信息在服务器重启后仍会保留,并随移动装置传递
  • 配方 ID、物品输入和输出、流体输出 – 针对配方事件
  • 方块 ID、方块状态、装置标记、原木数量 – 针对方块事件
  • 方块位置 – 事件发生的世界坐标

支持的机械

机械 来源常量 事件
盆(搅拌/压实) BASIN recipeFinished
粉碎轮 CRUSHING_WHEEL recipeFinished
机械锯(配方) MECHANICAL_SAW recipeFinished
注液器(配方和桶装) SPOUT_FILLING recipeFinished
磨石 MILLSTONE recipeFinished
机械压力机(传送带和世界) MECHANICAL_PRESS recipeFinished
机械合成器 MECHANICAL_CRAFTER recipeFinished
机械手 DEPLOYER_BELT recipeFinished
外壳风扇(传送带和世界) FAN_BLASTING / FAN_HAUNTING / FAN_SPLASHING / FAN_SMOKING recipeFinished
物品排出器(配方、桶、药水) ITEM_DRAIN_EMPTYING recipeFinished
砂纸 SAND_PAPER recipeFinished
序列组装(最终步骤) SEQUENCED_ASSEMBLY recipeFinished
CEI 打印机(可选,仅 Forge) CEI_PRINTER recipeFinished
机械钻头(固定式和装置) MECHANICAL_DRILL blockProcessed
机械收割机(装置) MECHANICAL_HARVESTER blockProcessed
机械锯,水平(固定式和装置) MECHANICAL_SAW treeCut / blockProcessed

KubeJS 脚本,无需额外加载项

CRH 注册了自己的 KubeJS 事件组。同一脚本在 Forge 和 Fabric 上无需修改即可运行,配有可选的来源过滤器和内置的所有者解析:

CRHEvents.recipeFinished('MILLSTONE', event => {
    const player = event.getOwner();
    if (!player) return;
    player.server.runCommandSilent('give ' + player.name.string + ' minecraft:emerald 1');
});

CRHEvents.treeCut('MECHANICAL_SAW', event => {
    // event.getLogCount(), event.getBlockId(), event.getOwner()
});

现成可用的脚本示例(FTB Quests 集成、输出过滤、按玩家计数器、钻头挖掘任务、原木计数)可在 README 中找到。

为何需要此模组

如果你在构建任务集成(如 FTB Quests 等),你可以在 Create 机械完成工作的瞬间触发任务进度,并正确归属给对应的玩家——而不仅仅是当物品进入容器时。像“用风扇熔炼 64 个铁锭”、“用钻头挖掘 500 个石头”或“用锯砍倒 50 棵树”这样的任务,每个只需一个简短的脚本。

如果你在服务器上编写分析或日志工具,你可以获得一个统一的、可靠的事件流来追踪所有 Create 的生产过程。

此模组自身没有任何可见的效果。它是一个库——你不会看到任何游戏内 UI、物品或方块。当其他模组或脚本需要它时才安装。它仅服务端运行:没有该模组的客户端可以加入安装了该模组的服务器。单人游戏时,请在你的实例中安装它。

前置要求

  • Minecraft 1.20.1
  • Forge版本:Forge 47 或更新,Create 6.0.8 或更新。也可在 NeoForge 1.20.1 上运行,已在客户端和专用服务器上验证
  • Fabric版本:Fabric Loader 0.15+,Fabric API,Create Fabric 6.0.8.1 或更新。可在 Quilt 上运行
  • KubeJS – 可选,仅用于 JS 脚本(无需 EventJS 或其他加载项)
  • Create Enchantment Industry – 可选软依赖(仅 Forge);CEI 打印机事件仅在安装了 CEI 时触发

面向开发者

在模组初始化期间注册监听器,两个加载器上的写法一致:

CreateRecipeHooks.register(ctx -> {
    if (ctx.getSource() == RecipeSource.BASIN) {
        // ctx.getRecipeId(), ctx.getItemOutputs(), ctx.getBlockPos(), ...
    }
});

CreateRecipeHooks.registerBlockProcessed(ctx -> {
    // ctx.getBlockId(), ctx.isContraption(), ctx.getMetadata()
});

CreateRecipeHooks.registerTreeCut(ctx -> {
    // ctx.getLogCount(), ctx.getLeafCount()
});

在 Forge 上,事件也会通过事件总线发布(CreateRecipeFinishedEvent、CreateBlockProcessedEvent、CreateTreeCutEvent);在 Fabric 上,它们为标准回调(CreateRecipeFinishedCallback、CreateBlockProcessedCallback、CreateTreeCutCallback)。

Forge 上提供调试模式用于测试。启动时添加 JVM 参数 -Dcrh.debug=true 可将每次配方完成记录写入 logs/crh-events.log。

完整的 API 文档可在 GitHub 仓库 中各加载器对应的 README 中找到。

许可证

LGPL-3.0-or-later – 可在公共和私人模组包中自由使用,并可作为其他模组的依赖项。分支和衍生模组须在相同许可证下保持开源并注明出处。