本篇教程由作者设定未经允许禁止转载。

模块化机械:社区版 从入门到入土 —— Part.3.2 配方适配器

本篇教程皆在引导模块化机械与模块化机械:社区版的初学者入门,本教程包含配方适配器在 CraftTweaker 中的基础运用与高级运用。

本教程主要使用的模组为模块化机械:社区版 - 1.11.1-r33、CraftTweaker

注意:本教程内容可能随时都有变化,请仔细对照本教程使用的模组版本,以免引起模组更新导致莫名其妙的报错问题。

教程目录:

  • Part.1 基本机械创建

  • Part.2 基本配方创建

  • Part.3.1 高级配方运用

  • Part 3.2 配方适配器 RecipeAdapter(当前)

  • Part.3.3 机械事件系统(未完成)

  • Part.4.1 并行配方处理(未完成)

  • Part.4.2 工厂系统(未完成)

  • Part.4.3 工厂事件系统(未完成)

  • Part.4.4 智能数据接口(未完成)

  • Part.4.5 单方块 / 多方块机械升级(未完成)

  • Part.4.6 自定义 GUI 信息(未完成)

  • Part.5 配置文件解析(未完成)

环境准备

本教程强烈推荐使用 Visual Studio Code(以下简称 VSCode),可以大大减少你的魔改工作量。

使用 VSCode,你可以利用它的强大的功能来更快的完成复杂的操作,同时拥有代码提示,大大减少代码阅读难度和出错率,同时可以安装插件来扩展功能,使其更加强大。

阅读本教程即代表你已熟悉 ZenScript 的大部分高级运用,并且已经了解基本的机械创建与配方创建。

安装模组

如果你已安装 CraftTweaker 和模块化机械本体且已启动游戏,你可以跳过此段描述。

要创建配方,你需要使用 CraftTweaker(任意版本)。

前言

在创建机械的过程中,我们可能希望创建某个机械的升级版(例如 xxx 机械 MK.1,xxx 机械 MK.2)。

但是每个机械的配方都是有对应的机械,导致我们需要为每个机械创建配方,难免会造成大量无用的代码,且浪费时间。

因此,配方适配器(RecipeAdapter)为我们实现了复制其他机械的所有配方的功能,同时还能够在复制过程中微调配方的内容。

RecipeAdapterBuilder

RecipeAdapterBuilder 是 MMCE 向 CraftTweaker 提供的一个类,它包含了所有关于 RecipeAdapter 的内容。

基础示例

import mods.modularmachinery.RecipeAdapterBuilder;

RecipeAdapterBuilder.create("assembler_mk2", "assembler_mk1").build()

上方代码创建了一个配方适配器的构建器,并在最后调用了 build() 方法。

运行此内容后,模组将会为名为 `assembler_mk2` 的机械添加名为 `assembler_mk1` 的机械中的所有配方

配方修改器

除了可以复制所有配方之外,我们还可以为适配器添加配方修改器。

示例:

import mods.modularmachinery.RecipeAdapterBuilder;

RecipeAdapterBuilder.create("assembler_mk2", "assembler_mk1")
    .addModifier(RecipeModifierBuilder.create("modularmachinery:duration", "input", 0.5, 1, false).build())
    .addModifier(RecipeModifierBuilder.create("modularmachinery:energy",   "input", 5.0, 1, false).build())
    .build()

运行此内容后,模组将会为名为 `assembler_mk2` 的机械添加名为 `assembler_mk1` 的机械中的所有配方

同时 `assembler_mk2` 中所有配方的工作时间均为 `assembler_mk1` 机械配方的一半,能量消耗均为 `assembler_mk1` 机械配方中的 5 倍。

额外输入

在上方的两个基础上,我们还可以为配方添加额外的输入。

所有的方法都可以像 RecipeBuilder 和 RecipePrimer 一样调用,换句话说 RecipeBuilder 和 RecipePrimer 的绝大部分方法,RecipeAdapterBuilder 都可以使用。

示例:

import mods.modularmachinery.RecipeAdapterBuilder;

RecipeAdapterBuilder.create("assembler_mk2", "assembler_mk1")
    .addModifier(RecipeModifierBuilder.create("modularmachinery:duration", "input", 0.5, 1, false).build())
    .addModifier(RecipeModifierBuilder.create("modularmachinery:energy",   "input", 5.0, 1, false).build())
    .addFluidInput(<liquid:ic2coolant> * 50)
    .build()

运行此内容后,模组将会为名为 `assembler_mk2` 的机械添加名为 `assembler_mk1` 的机械中的所有配方

同时 `assembler_mk2` 中所有配方的工作时间均为 `assembler_mk1` 机械配方的一半,能量消耗均为 `assembler_mk1` 机械配方中的 5 倍。

并且,在这些的配方的基础上,还会为每个配方都添加 50mb 的 IC2 冷却液的输入。

内置模组配方支持

配方适配器在支持复制自定义机械的配方的基础上,还支持部分模组的机械的配方。

同时也支持添加配方修改器与额外输入。

下方将会列出所有支持的模组的适配器(截止 MMCE-R33 版本)。

熔炉

import mods.modularmachinery.RecipeAdapterBuilder;

RecipeAdapterBuilder.create("target_machine", "minecraft:furnace").build()

此适配器会为目标机械添加熔炉中的所有配方。

(高级)同时还会在 ActiveMachineRecipe(通过配方事件中的 ZenGetter:activeRecipe 获取) 中的 customData 中写入一个键值为 "experience" 的浮点数,对应熔炉中产物的经验。

IC2 压缩机

需要安装模组 工业时代 2

import mods.modularmachinery.RecipeAdapterBuilder;

RecipeAdapterBuilder.create("target_machine", "ic2:te_compressor").build()

此适配器会为目标机械添加所有 IC2 压缩机的配方。

匠魂 2 合金配方

需要安装模组 匠魂 2

import mods.modularmachinery.RecipeAdapterBuilder;

RecipeAdapterBuilder.create("target_machine", "tconstruct:smeltery_alloy").build()

此适配器会为目标机械添加所有匠魂 2 中的合金配方。

匠魂 2 冶炼配方

需要安装模组 匠魂 2

import mods.modularmachinery.RecipeAdapterBuilder;

RecipeAdapterBuilder.create("target_machine", "tconstruct:smeltery_melting").build()

此适配器会为目标机械添加所有匠魂 2 中的冶炼配方。

(高级)同时还会在 ActiveMachineRecipe(通过配方事件中的 ZenGetter:activeRecipe 获取) 中的 customData 中写入一个键值为 "temperatureRequired" 的整数,对应冶炼炉中熔化此物品需要的温度。

核电工艺:重制版

需要安装模组 核电工艺:重制版

import mods.modularmachinery.RecipeAdapterBuilder;

RecipeAdapterBuilder.create("target_machine", "nuclearcraft:alloy_furnace").build()

此适配器会为目标机械添加所有核电工艺:重制版中的合金炉配方。


import mods.modularmachinery.RecipeAdapterBuilder;

RecipeAdapterBuilder.create("target_machine", "nuclearcraft:chemical_reactor").build()

此适配器会为目标机械添加所有核电工艺:重制版中的化学反应器配方。


import mods.modularmachinery.RecipeAdapterBuilder;

RecipeAdapterBuilder.create("target_machine", "nuclearcraft:infuser").build()

此适配器会为目标机械添加所有核电工艺:重制版中的流体注入器配方。


import mods.modularmachinery.RecipeAdapterBuilder;

RecipeAdapterBuilder.create("target_machine", "nuclearcraft:melter").build()

此适配器会为目标机械添加所有核电工艺:重制版中的融化机配方。