Requious Frakto(以下简称REF)作为一个功能强大的、可以方便快捷创建单方块机器的mod,相关的文档却比较少,所以笔者撰写这篇教程来让更多人可以使用REF来实现自己想要的功能。

本人能力有限,如有错误,欢迎指出。

1.前期准备
请确认你安装了Resource Loader 和 Crafttweaker。这两个mod是使用REF必不可少的(其实你可以不安装Resource Loader,但那种情况如何给机器自定义外观就不在本教程的范围内了)


2.注册一个单方块机器
在下载mod并运行后,REF会生成配置文件。
打开REF的配置文件中的assembly文件(.minecraft/config/requious/assembly.json)

创建一个机器的傻瓜式教程-第1张图片


可以看到该文件包含一个 JSON 对象的单一列表, 其中一些已预先填充了默认值。
如下几个参数是很重要的,其他的填充默认值即可(其实我也不知道有什么用,目前完全没有文档可以参考)
placeType:决定了玩家放置机器的方向(应该是吧) 可选Any Up Down Horizontal Vertical HorizontalUp HorizontalDown
hasGUI:决定了该机器是否有GUI 可选true false
resourceName:机器的注册名(下文记为registername),不可重复,否则进不去游戏。(不推荐非英文)
model:机器的模型,不过实际上是指向blockstate文件,(推荐和resourceName相同)
hardness:机器的硬度,参考Minecraft Wiki填写即可


3.设置机器外观

如果你下载了Resource Loder,那么在根目录下的resource文件夹内按照如下格式创建相关文件夹
.minecraft/resources/requiousfrakto/blockstates
.minecraft/resources/requiousfrakto/models/block
.minecraft/resources/requiousfrakto/textures/blocks
.minecraft/resources/requiousfrakto/lang
首先,推荐用BlockBench来创建你机器的模型(只能使用java原版模式,并且推荐在这里把材质贴在模型上),之后导出的.json文件放入models/block文件夹内
在blockstates文件夹内创建一个文件,文件名要和在上一步在assembly文件里,"model"后所填的名字相同。
然后复制如下代码放入其中

{
"forge_marker": 1,
"defaults": {
"model": "requiousfrakto:registername",
"transform": "forge:default-block"
},
"variants":{
"normal":[{}],
"inventory":[{}],
"facing": {
"down": { "x": 180 },
"up": { },
"north": { "x": 90 },
"south": { "x": 90, "y": 180 },
"west": { "x": 90, "y": 270 },
"east": { "x": 90, "y": 90 }
},
"active": {
"true": {},
"false": {}
}
}
}



registername处填入你在models/block文件内的那个模型的文件名即可

最后,在lang文件夹内创建语言文件(en_us,zh_cn这种)
一个机器对应两个key,分别是机器名和配方名(就是这种机器的用途,用JEI按U键查看时上方显示的那个)
tile.registername.name=xx
requious.jei.recipe.registername=xx

这样,一个机器的资源到这里就设置好了。

4.设置槽位

1.类的介绍
REF添加了如下几种类,主要的有


1.Assembly:指代一个机器

2.MachineContainer:用于一些高级操作,在某些函数内提供了实例。

3.AssemblyRecipe:用于配方


Assembly类可以通过尖括号调用,方法为<assembly:xxx>(xxx就是机器的注册名)

2.注意事项
你可以把整个GUI看成一个铺满了45个槽位的平面直角坐标系,原点是最左上角的槽位(即这个点坐标为(0,0)),在使用时不要忘记“0”的存在。
设置槽位时,组名尽量不要相同,否则可能会出现BUG

3.开始操作
具体方法去看wiki吧,这部分还是比较容易读懂的。


5.添加配方

看如下这段代码

var recipe =AssemblyRecipe.create(function(container){
container.addItemOutput("output",OutPut);})
.requireItem("input",Input);

这里设置一个变量,是为了之后添加配方方便,推荐。

这里类和方法的关系比较复杂,具体如下:
首先调用了AssemblyRecipe.create(function(container)){}这个函数,函数提供一个MachineContainer的实例。
之后调用了MachineCotainer类的addItemOutput方法,给这个配方添加一个输出物品(IItemStack)到“output”槽。
再之后的requireItem方法同样在AssemblyRecipe类下,给这个配方添加一个要求,要求从“input”槽输入一个物品(IIngredient)。
如果你觉得复杂,直接把Output换成想要输出的物品,Input换成想输入的物品(可以通过/mt hand查看),然后与前面的槽位进行一下匹配就行了。

到此,一个机器的创建就结束了。大家可以跟着这篇教程尝试一下。如有任何问题,欢迎在帖子下方反馈。