官方文档给我干懵了,我研究了一个下午加晚上还翻了源代码,人都麻了
特别鸣谢: [ET2] 玄理2 (EnigTech 2)
IMachineRegistry - CraftTweaker Documentation (blamejared.com)
diy一个发电机
在我们写机器的zs文件之前,我们需要为机器准备正面贴图,这个需要前置 [RL] 资源加载 (Resource Loader)
我们需要在
.minecraft\versions\“你的整合包名字”\resources
里新建一个文件夹,名字是英文+小写
然后在里面新建一个文件夹textures(必须是这个)
最后我们把需要用到的贴图全部塞进去(你可以去把exu2的预设贴图全部搬过来)
大概是这个样,出于分类的考虑,我在textures目录下多创了一个block文件夹,这个是不影响的,只要我们后面路径写对了即可(所有贴图必须在textures下)
好的我们开始写scripts了:
#loader preinit
import extrautilities2.Tweaker.IMachineRegistry;
import extrautilities2.Tweaker.IMachineSlot;
import extrautilities2.Tweaker.IMachine;
//测试用发电机(注意这里的函数是“generator”)
IMachineRegistry.createNewGenerator(
"generator_test", //机器名称
10000, //电量缓存
4000, //最大输出
[
IMachineSlot.newFluidSlot("test_liquid", 4000,true,null), //流体槽(槽位名称,流体容量,是否可选,流体过滤器)
IMachineSlot.newItemStackSlot("test_item",true,64) //物品槽(槽位名称,是否可选,槽位容量)
], //这个中括号里边的是输入槽
[], //输出槽(由于是发电机所以没写输出槽,写当然是可以写的,可以参考后面机器的写法)
"test:block/generator_off", //待机时的正面贴图(没有textures和.png)
"test:block/generator_on", //工作时的正面贴图(没有textures和.png)
0xe8f100 //颜色代码,可以不写,默认是ffffff
);
多槽位意味着我们必须把“是否可选”改成“true”,不然会出现:配方里只需要物品槽的物品,但是流体槽是必选的,这个配方就运作不了的情况
注意,由于exu2在写流体槽创建函数的时候没有把“是否可选”和“过滤器”分开,所以如果要让槽位可选,就不得不加上后面的过滤器
注注意,由于#loader preinit,机器的过滤器功能无法获取任何流体或物品,所以只能写null
补充,没有#loader preinit会导致机器没有正面贴图(但是可以使用exu2已有机器的贴图,预设贴图不行,必须是已加载的)
接下来我们添加本地化(在resources文件夹里新建exu2的文件夹及其language文件夹)
resources\extrautils2\lang
新建文件zh_cn.lang
写法为
machine.crafttweaker:注册名=本地化名称
machine.crafttweaker:generator_test=测试用发电机
然后我们另开一个zs写机器配方
import extrautilities2.Tweaker.IMachineRegistry;
import extrautilities2.Tweaker.IMachineSlot;
import extrautilities2.Tweaker.IMachine;
var generator_test = IMachineRegistry.getMachine("crafttweaker:generator_test");
generator_test.addRecipe({
test_item : <minecraft:iron_ingot>*2, //注意,exu2虽然支持矿词,但是这会导致只能输入输出一个物品
},
{}, 10000, 100, {}); //配方添加(输入物品或流体,输出物品或流体,产出能量,持续时间,产出物概率)
generator_test.addRecipe({
test_liquid : <liquid:test>*4000
},
{}, 10000, 100, {});
generator_test.addRecipe({
test_item : <ore:ingotTest>, //这里的矿词就只能*1了,不能写*2以上
test_liquid : <liquid:test>*4000
},
{}, 30000, 100, {});
注意,配方输入输出的写法是关联数组,为花括号{ }里key值对应的物品或流体(key值为槽位名称)
如果没有输出物品就写个空数组即可
成了
diy一个机器
#loader preinit
import extrautilities2.Tweaker.IMachineRegistry;
import extrautilities2.Tweaker.IMachineSlot;
import extrautilities2.Tweaker.IMachine;
//注意这里的函数名称变了
IMachineRegistry.createNewMachine(
"alloy_furnace",
65565,
4064,
[
IMachineSlot.newItemStackSlot("item1"),
IMachineSlot.newItemStackSlot("item2"),
IMachineSlot.newItemStackSlot("item3"),
IMachineSlot.newItemStackSlot("item4")
],
[IMachineSlot.newItemStackSlot("output")],
"test:block/alloy_furnace_off",
"test:block/alloy_furnace_on",
0x576363
);
然后是本地化
machine.crafttweaker:alloy_furnace=四槽合金炉
最后是配方
import extrautilities2.Tweaker.IMachineRegistry;
import extrautilities2.Tweaker.IMachineSlot;
import extrautilities2.Tweaker.IMachine;
var alloy_furnace = IMachineRegistry.getMachine("crafttweaker:alloy_furnace");
alloy_furnace.addRecipe({
item1 : <ore:ingotIron>,
item2 : <ore:ingotNickel>,
item3 : <ore:ingotManganese>,
item4 : <ore:ingotChrome>
}, //由于我用了矿词,所以输入输出不能写多个
{output : <ore:ingotModularium>}, 10000, 100, {output : 1.0 as float}); //注意这里的产出概率的写法也是数组
好了,教程结束,如果有误请帮我指出
exu2的diy机器非常不完善,bug还多,不推荐用来做非常复杂的机器,做个发电机过过瘾就差不多了