上次说的方块种类先放放。最近因为在mcreator和纯java中徘徊导致进度慢了很多。感觉mcreator虽然好用,但是生成的代码不是人看的加上有些功能无法实现,怕以后转不回来所以还是来学java。
好,进入正题:这次我们浅谈一下关于配方(工作台,熔炉等原版工具方块配方)的写法与方块掉落(以情况比较多的1 . 16版钻石矿为例子,因为任务量比较大就放下一篇)。
先看一下官方关于钻石块配方与钻石矿掉落的内容:
配方这玩意的包含内容很多,比如工作台配方,熔炉配方,切石机配方等等——甚至可以包含自己做的机器的配方,这或许涉及到相关的读取方法调用。
工作台配方(minecraft:crafting)
分为type(告知配方种类),pattern(合成表,仅有序合成),key(对应物品,仅有序合成),ingredients(成分,仅无序合成),result(输出物品)四个部分。
type:可填入crafting_shaped(有序合成,像剑这样的)或crafting_shapeles(无序合成,如打火石)。
分支1:有序合成:
在 crafting_shaped基础上,有pattern部分,大概长这样:
"pattern": [
"###",
"###",
"###"
],
是的,就长这样——正好对应着工作台的九个格子。每个符号对应着key中的一个物品,如果这个格子不需要放置物品,直接输入空格即可。
举个例子:镐子的pattern写法可以是:
"pattern": [
"###",
" ! ",
" ! "
]
#与!各自对应着物品——这就是接下来讲的部分key。注意不要漏掉空格。
在有序合成对应的key中:大概长这样,还是以钻石块为例
"[指定符号]":{"item":"[modid,原版物品就是minecraft]:[物品id]"}。如此重复。
如下是我的赤金剑的一个配方实例:
{
"type": "minecraft:crafting_shaped",
"pattern": [
" # ",
" # ",
" ! "
],
"key": {
"#": {
"item": "arkdust:pure_gold_ingot"
},
"!":{
"item": "minecraft:stick"
}
},
"result": {
"item": "arkdust:pure_gold_sword",
"count": 1
}
}
分支2:无序合成:
crafting_shapeles基础上就不需要再写pattern部分了,直接跳到ingredients:大概长这样
"ingredients": [{"item": "minecraft:diamond_block"},{"item": "minecraft:gold_block"}]
这是一个例子,写的是金块和钻石块无序合成。把json缩到一行了所以显得有点奇怪。写的时候按json标准换行即可。还是附上一个打火石的配方:
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "minecraft:iron_ingot"
},
{
"item": "minecraft:flint"
}
],
"result": {
"item": "minecraft:flint_and_steel"
}
}
看这个"tag"位置的"forge:ingots/iron",在我的知识范围内这个是forge对原版mc覆写添加的,而这里的tag是写在物品nbt里的,和游戏内的(为单独的物品添加tag)不同。这样的好处就是可以样所有有这个标签的物品都能参与相应的行为——有点类似于更好的矿物词典(最初为了使mod间的矿物兼容而设置)。
最后是都有的result。item为获得的物品,也可以添加"count"来定义获得的数量。
熔炉配方(minecraft:smelting)
直接上个熔炉配方写法图:
{
"type": "minecraft:smelting",
"experience": 3.2,
"cookingtime": 120,
"ingredient": {
"item": "arkdust:pure_gold_ore"
},
"result": {
"item": "arkdust:pure_gold_ingot"
}
}
"type"如上,ingerdient和result区别不大。
"experience"是经验,每烧炼一个物品就可以获得这个值的经验。
"cookingtime"是烧炼时间,每20点对应一秒钟。
炼药配方
这玩意并非数据包形式,难度较大。到时候或许会在药水效果等地方讲。它不是一个数据包,而是需要对原版对应内容的覆写。
爆炸(高炉)配方(minecraft:blasting)
物品炸一下?似乎原版没有类似的机制。
好吧,有没有一种可能,这个指的是高炉配方。我的世界高炉叫做Blast Furnace,也就是可能是将物品放在高炉里烧得到。
和熔炉配方相比,除了type没有任何区别。
烟雾(烟熏炉)配方(minecraft:smoking)
同上,字面意思。
篝火(营火)配方(minecraft:campfire_cooking)
同上,字面意思。
切石机配方(minecraft:stonecutting)
切石机中使用的配方。大概长这样:
{
"type": "minecraft:stonecutting",
"ingredient": {
"item": "minecraft:…… "
},
"result": "minecraft:……",
"count": …
}
result写法和上面的有些许不同。两个minecraft:的位置都是填入mc物品id,模组物品记得把minecraft改成对应的modid。
"count"这一项写的是配方获得物品的数量。像方块切成俩半砖,这个count写2就行,依此类推。
铁砧配方(minecraft:smithing)
在铁砧中使用的配方,长这样:
{
"type": "minecraft:smithing",
"base": {
"item": "……"
},
"addition": {
"item": "……"
},
"result": {
"item": "……"
}
}
base是铁砧中最左边格子里的物品,addition则是中间的。result最右边,按照对游戏的理解大概都能猜到意思。