本教程适用人群:会安装模组、配置环境且可熟练使用ZenScript的人群。

适用版本:MMCE-1.11.1-r39。


MMCE在r39版本中加入了升级系统,目前尚未完工但基础功能已具备。

创建升级

首先,我们需要导入类:

import mods.modularmachinery.MachineUpgradeBuilder;

接下来,创建一个升级:

MachineUpgradeBuilder.newBuilder(String name, String localizedName, int level, int maxStack);
//level暂无作用;name必须唯一。

然后,您可以对创建出的MachineUpgradeBuilder对象做出许多操作:

MachineUpgradeBuilder addDescriptions(String... descriptions); //为升级添加固定工具提示,会在添加了升级的物品上显示;可为多行。

MachineUpgradeBuilder setBusGUIDescriptionHandler(IFunction<SimpleMachineUpgrade, String[]> handler); //为升级添加升级总线提示的事件监测

MachineUpgradeBuilder addCompatibleMachines(String... machineNames);
MachineUpgradeBuilder addIncompatibleMachines(String... machineNames);
//上述两个,分别为添加白名单、添加黑名单机械,未使用时默认对所有机器生效;这两个方法互相冲突。

MachineUpgradeBuilder addRecipeCheckHandler(UpgradeEventHandlerCT handler);
MachineUpgradeBuilder addRecipeStartHandler(UpgradeEventHandlerCT handler);
MachineUpgradeBuilder addRecipePreTickHandler(UpgradeEventHandlerCT handler);
MachineUpgradeBuilder addRecipePostTickHandler(UpgradeEventHandlerCT handler);
//……
//这些事件可以在源代码仓库中的
// src/main/java/hellfirepvp/modularmachinery/common/integration/crafttweaker/upgrade/MachineUpgradeBuilder.java 
// 找到。
//具体用法,参考下方示例与 src/main/java/hellfirepvp/modularmachinery/common/integration/crafttweaker/event/MMEvents.java 。
//事实上,有关升级的大部分需求都可以在此实现。

示例:

import mods.modularmachinery.MachineUpgradeBuilder as Builder;
Builder.newBuilder("upgradename","升级名",1,64).setBusGUIDescriptionHandler(
    function(SimpleMachineUpgrade){
        return ["text",] as string[];
    }).addRecipeCheckHandler(function(MachineUpgrade){
        //相关代码    
})

事件相关类

你可能注意到了一些问题,就比如SimpleMachineUpgrade和MachineUpgrade是什么东西。

SimpleMachineUpgrade可在setBusGUIDescriptionHandler事件中得到,可以由此获取存储在升级总线里的自定义IData——customData。注意,该成员同时是ZenGetter和ZenSetter;亦可以获取升级数,通过[ZenGetter] stackSize

MachineUpgrade会在所有的配方事件中得到,请用以下方式强转:

import mods.modularmachinery.MachineUpgradeHelper;

SimpleDynamicMachineUpgrade castToSimpleDynamicMachineUpgrade(MachineUpgrade upgrade);

当然还有个类叫做SimpleDynamicMachineUpgrade,但是由于上面创建的是简单升级,因此不能用这个类;但当你用DynamicMachineUpgradeBuilder创建了动态升级之后,得到的MachineUpgrade都是SimpleDynamicMachineUpgrade,请用类似方式转换。SimpleDynamicMachineUpgrade相较SimpleMachineUpgrade多了一个存储在物品上的自定义IData,即itemData,用法与customData相同。

绑定物品

import mods.modularmachinery.MachineUpgradeHelper;
addFixedUpgrade(IItemStack itemStack, String upgradeName);

没什么好说的,upgradeName就是上面注册升级时唯一的Name,使用该方法后物品将可以作为升级装入升级总线并发挥其作用。