
创建:食谱钩子
为基于配方的模组/附加组件/脚本等创建库...
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 – 可在公共和私人模组包中自由使用,并可作为其他模组的依赖项。分支和衍生模组须在相同许可证下保持开源并注明出处。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。