Skip to content

如何添加双化学反应台和化学反应台(最终型)的配方?

耿悠博 edited this page Nov 1, 2024 · 3 revisions

(模组版本1.0.0~)
首先你需要知道的是双化学反应台的合成文件在哪?
在github/com/gengyoubo/Minecraft_Science/procedures里
你看到了这串代码

public DualReactionProcess() {
        // 添加 NaCl 反应
        addReaction(new ChemicalReaction("mcse:hcl", 1, "mcse:naoh", 1, "mcse:nacl", 1, "mcse:h2o", 1));
        // 添加水的电解反应
        addReaction(new ChemicalReaction("mcse:h2o", 1, null, 0, "mcse:h2", 2, "mcse:o2", 1)); // null 表示没有第二个物品
    }

你只要按照上面的方式写代码就可以了。那么有人会问了:“我需要写调换的情况吗?”,完全没有必要,因为我已经加了这串代码了。所以在这点你尽管放心。那么该如何添加?

如何添加?

如果你不会写mixin的话可以看看我的一个教程如何制作并且维护你的mod?(forge版)(只支持1.18.X)的mixin篇。
别忘了导入mixin库,在这里我只讲如何写代码。
首先创建一个DRrecipes(也可以自己起名字)

@Mixin(DualReactionProcess.class)
public class DRrecipes{

}

然后使用mixin的尾插入(你也可以头插入,但是为了防止出现bug,听我的)

@Mixin(DualReactionProcess.class)
public class DRrecipes{
@Inject(method = "<init>", at = @At(value = "TAIL")
public NewDualReactionProcess() {
        try {
            // 获取 addReaction 方法
            Method addReactionMethod = DualReactionProcess.class.getDeclaredMethod("addReaction", DualReactionProcess.Reaction.class);
            addReactionMethod.setAccessible(true);  // 确保可访问

            // 获取 ChemicalReaction 构造函数
            Class<?> chemicalReactionClass = Class.forName("github.com.gengyoubo.Minecraft_Science.procedures.DualReactionProcess$ChemicalReaction");
            Constructor<?> constructor = chemicalReactionClass.getConstructor(String.class, String.class, String.class, String.class, int.class, int.class);

            // 创建 ChemicalReaction 实例,下面的是个例子↓
            Object reactionInstance = constructor.newInstance("mcse:co2",1 "mcse:h2o",1, "mcse:c6h12o6",6, "mcse:o2",6  );

            // 调用 addReaction 方法将新的反应添加到反应列表
            addReactionMethod.invoke(this, reactionInstance);

        } catch (Exception e) {
            e.printStackTrace();
        }
}
}

这样就可以添加配方了! 至于最终型的基本格式为

        reactions.add(new ChemicalReaction("minecraft:nahco3", 2, null, 0, null, 0, "minecraft:na2co3", 1, "minecraft:co2", 1, "minecraft:h2o", 1));

剩下的基本一样

没有更好的注册方法吗?

我有在尝试用json注册法,但是失败了。等我成功了就会继续更新!