前言

自定义物品4这个MOD可以使用简单的JSON文件创建方块,物品,GUI等等,支持forge1.10——1.12版本。而我在学习此模组的顺便将此模组英文wiki翻译,希望能帮助到使用此模组的玩家们。

此Wiki中的代码为json,但使用JavaScript插入。

正文

入门

要开始CS4,你需要在你安装的minecraft的mods目录下创建一个新的文件夹(译注:名称可以自定义,建议英文)。在该文件夹中创建一个名为cs4mod.json的文件,内容如下:

{  
"id": "mymod",
"name": "My Mod",
"version": "1.0.0"
}

“id”是你的MOD的ID,可替换其他字符。该ID必须只包含小写字母(a-z)、数字(0-9)和下划线。
“name”是你的MOD的名字,(译注:将会在模组菜单中显示)可替换其他字符。
“verstion”是你MOD的版本,1.0.0替换为你的MOD的版本。(译注:请注意并不是游戏版本,另外要加双引号)

你现在可以启动Minecraft,它将创建必要的文件让你的MOD工作。注意,你的MOD只会在第二次启动Minecraft后出现在模组菜单中。现在应该在cs4mod.json旁边有一个叫做cs4mod的文件夹。(译注:1.12还有一个asset文件夹)
这就是了。你已经设置好了一切。

要改变你的MOD的版本,请先编辑cs4mod.json文件,删除cs4mod文件夹并启动Minecraft。确保在Minecraft第二次启动前不要加载世界,因为你的MOD在那之前不会被加载。

添加内容

要添加内容,你必须创建一个名为main.json的新文件。这个文件包含所有被添加到游戏中的内容。然而你可以将任何东西外包给另一个文件。每个json文件都由命名的列表组成,这些列表中的每个条目都会添加一个或多个相同类型的东西,例如成型的配方。

对于一个简单的熔炼配方,文件可能看起来像这样:

{
  "content": [
    {
      "type": "smeltingRecipe",
      "entries": [
        {
          "input": "minecraft:stone",
          "result": "minecraft:obsidian"
        }
      ]
    }
  ]
}

列表的名称以及这里的内容完全是任意的,只是增加了一点其他结构。你可以有一个配方的列表,另一个是燃料的列表。
这就是你需要做的,添加一些内容。

--------------------------------------------------译注--------------------------------------------------

"content"译为内容,表示你要写出一个东西;

"type"译为类型,表示一个类型,比如是工作台有序还是无序,熔炉等等。"smeltingRecipe"应是熔炉配方;

"input"译为输入,意义是熔炉的物品槽中添加什么东西,这里的"minecraft:stone"是原版中的石头;

"result"译为结果或输出,意义是熔炉的成品槽,这里的"minecraft:obsidian"是原版的黑曜石;

所以,这个json的意义就是在熔炉中添加一个将石头烧制成黑曜石的配方。

---------------------------------------------------------------------------------------------------------

如果你想使用多个文件,而不是挤在一个里面,例如将配方放在它自己的文件中,你可以这样做:

{
  "content": [
    {
      "file": "recipes.json"
    }
  ]
}

以这种方式加载的文件与main.json的工作方式完全相同。这意味着你可以让一个文件加载另一个文件,而这个文件本身又加载一些文件。例如,你可以让recipes.json加载 crafting_recipes.json 和 smelting_recipes.json。

--------------------------------------------------译注--------------------------------------------------

"file"译为文件,将你的存储配方的(文件名称).json写在里面,main.json就会自动加载你的json。

---------------------------------------------------------------------------------------------------------

你也可以给一个内容条目添加条件,只有在满足条件时才加载该内容。例如,你可以只在加载一个特定的mod时添加某些配方可以联动了(囍)

{
  "content": [
    {
      "file": "recipes.json",
      "requireModsLoaded": ["chesttransporter"],
      "requireModsNotLoaded": ["morefurnaces"],
    }
  ]
}

这对文件和条目都有效。
只有在满足所有条件的情况下才会加载内容。在上面的例子中, 含有chesttransporter模组时recipes.json必须被加载,而含有morefurnaces模组则不能。

Json格式

这是一个关于如何在json中指定某些东西的列表。

资源位置

资源定位用于定义纹理、模型的位置,或者用于项目或块的标识符。有两种方法来定义一个资源位置。

简短的版本:

"minecraft:stone"

"minecraft:textures/gui/bars.png"

较长的版本:

{
  "domain" : "minecraft",
  "path" : "stone"
}

{
  "domain" : "minecraft",
  "path" : "textures/gui/bars.png"
}

复合型NBT标签(暂译)

一个复合型NBT标签被定义为一个包含NBT数据的字符串:

"{display:{Name:\"Some Obsidian\"}}"

ItemStack

有多种方法来指定一个ItemStack:

{
  "item" : "minecraft:stone",
  "metadata" : 10,
  "amount" : 42,
  "nbt" : "{display:{Name:\"Some Obsidian\"}}"
}

除项目外,其他都是可选的。元数据默认为0,数量默认为1。

对于某些配方,你可能想允许所有的元数据变体。这可以像这样做:

{
  "item": "minecraft:stone",
  "metadata": "all",
  "amount": 42
}

或者像这样:

{
  "item": "minecraft:stone@all",
  "amount": 42
}

也有一个定义项目堆栈的简短版本。然而那样的话,你只能定义项目和元数据:

"minecraft:stone"

"minecraft:stone@1"

"minecraft:stone@all"

这将定义一个数量为 1 的堆栈。省略元数据部分将默认为元数据 0。

实例

以下是一个熔炉配方。输入和结果都是ItemStack:

{
  "input": "minecraft:stone@all",
  "result": {
    "item": "minecraft:obsidian",
    "amount": 3,
    "nbt": "{display:{Name:\"Custom Obsidian\"}}"
  }
}

其他待更新……

其他

此篇教程为机翻加上个人润色,如有不对的地方请指出,作者会进行修改。