本教程适用人群:会安装模组、配置环境且可熟练使用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,使用该方法后物品将可以作为升级装入升级总线并发挥其作用。