我的世界1.18mod开发学习(8)-合成
合成
目前我们的物品没有办法进行合成,在生存模式下无法合成,只能靠创造拿,所以需要在游戏内加入合成配方,默认情况下,forge会读取./data/{modid}/recipes下的所有配方,一般放在resources下,配方的文件类型为json文件,下面给出一个例子用于创建多彩方块:
1 | { |
这个配方创建了多彩方块,使用8个钻石和1个金锭,最终结果为:
各个json名分析
- type:分为无序和有序合成,如无序,则为
minecraft:crafting_shapeless
,如有序,则为minecraft:crafting_shaped
这些为默认的合成配方,你也可以自定义自己的合成配方,日后可能会介绍 - pattern:在有序合成中为每个物品放置的位置,如果你需要2*2的,直接将行和列改成2*2即可,里面的字母在后面的key中有说明
- key:每个key代表pattern代表的是什么物品,可能注意到有两个注释,一个为item,一个为tag,item比较好理解,就是物品,tag则为标签,在文章后面会介绍
- result:输出结果,item为输出物品,count为多少个
下面为无序合成的标签
- ingredients:为一个数组,里面直接写item或者tag,案例:
1 | "ingredients": [ |
标签
在上面已经看到了合成表中可以是用标签来代替item,这一章将会介绍如何创建自己的标签以及使用原版中存在的标签
创建自己的标签
在./data/{modid}/tags/
文件夹下新建blocks和items文件夹,分别放置方块和物品的标签,接下来在items中创建useful_items.json
,对于blocks标签暂不创建,接下来在里面写入:
1 | { |
这样就创建了一个新的标签,为useful_items(虽然并不是),里面含有我们的红石锭,json标签的意思为:
- replace:替换之前加入的这一类标签的物体,之前注册在这一标签的都会被删除,默认为false,建议默认就好
- values:一个数组,里面为需要加入该标签的物体,id为物体id,required为是否需要,如果找不到该物体,并且require没有写为false则会报错
使用原版标签
在./data/minecraft/tags/
文件夹下新建blocks和items文件夹,用于分别放置方块和物品标签,接下来在blocks中创建mineable_pickaxe.json
,暂不加入items标签,接下来在里面写入
1 | { |
这样就将我们的多彩方块加入了原版标签mineable_pickle
中,所有原版标签请看这个链接,如这个文件所示,可以直接用名字代表物体id,不需要加required,但required默认为true
在游戏内按F3,对准多彩方块,在右边应该就能看到多彩方块多了一个#minecraft:mineable_pickaxe
,表示标签添加成功了
在代码中使用标签
先上代码,上面一行代表代表使用自己的标签,下面的两行代表获得该item的标签,为:
1 | public static final Tag.Named<Item> USEFUL_ITEMS = ItemTags.bind("examplemod:useful_items"); |
这样即可使用自己的标签等,forge文档给出了一个方法为item.is({tag})来判断某个item在不在某个标签内,但我试的时候貌似没这个方法,只有一个getTags用于获得所有标签