java版盔甲架怎么手持东西_java

 

        上次说的方块种类先放放。最近因为在mcreator和纯java中徘徊导致进度慢了很多。感觉mcreator虽然好用,但是生成的代码不是人看的加上有些功能无法实现,怕以后转不回来所以还是来学java。

        好,进入正题:这次我们浅谈一下关于配方(工作台,熔炉等原版工具方块配方)的写法与方块掉落(以情况比较多的1 . 16版钻石矿为例子,因为任务量比较大就放下一篇)。

        先看一下官方关于钻石块配方与钻石矿掉落的内容:

java版盔甲架怎么手持东西_玩游戏_02

 

        配方这玩意的包含内容很多,比如工作台配方,熔炉配方,切石机配方等等——甚至可以包含自己做的机器的配方,这或许涉及到相关的读取方法调用。

工作台配方(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最右边,按照对游戏的理解大概都能猜到意思。