本篇是讲述如何制作机器的外观的,内容来源于官方wiki,仅作翻译。

机器的外观将定义这台机器的模型,纹理,声音的基本信息。

机器自然也有不同的状态,我们可以为机器不同的状态分别制作出不同的外观,分别是:

idle(闲置),running(运作),errored(发生错误),paused(暂停)。

以下是例子:

"appearance": {
    "property1": "defaultValue",
    "property2": 1,
    "idle": {
        "property1": "value",
        "property2": 42
    },
    "running": {
        "property1": "some_value",
        "property2": 23
    },
    "errored": {
        "property1": "another_value",
        "property2": 666
    },
    "paused": {
        "property1": "again_another_value",
        "property2": 56487
    }
}
  • 如果你没有自定义外观,那么这台机器会启用默认的外观模式。

  • 如果你自定义了外观,那么自定义的属性将会覆盖默认的属性,反之同理。

  • 所有的外观选择都具有默认值。

属性

机器外观目前有10个可选属性:

方块外观block

使用方块外观有两种方式:当前游戏里现成的方块,或者自定义的外观所创建的方块。


现成的方块

该属性可以直接使用namespace:block_id[state1=value,state2=value...]采用到方块状态。

blockstates 状态是可选的,你可以直接使用namespace:block_id来获取方块默认状态。

例子

"appearance": {
    "block": "minecraft:furnace[lit=true]"
}

那么这台机器就会显现出原版的熔炉燃烧时候的样子。


自定义的模型

如果你不想使用游戏里现成的方块,你就需要使用block属性来指向你的模型位置。

模型必须是minecraft的json模型,且你使用过资源包加载过这个模型。

这个模型必须位于assets/namespace/models/machine或以下的位置,否则不起作用。

例子

假设你有一个模型位于assets/namespace/models/machine/my_machine.json,那么block属性的定义就应该是namespace:machine/my_machine。

那么代码则是:

"appearance": {
    "block": "custommachinery:machine/my_model"
}

请不要画蛇添足在代码后面写上.json,block属性会补齐你的后缀名。

使用自定义模型需要重启游戏才能显示。


物品外观item

默认情况下,机器的物品外观将会和方块外观一致,但你可以使用这个属性来定制这台机器在手中的样子。

和block属性一样,item属性也同样可以使用现成的物品外观,或者是自定义的模型。

现成的物品

//机器拿在手上时将会显示成钻石的样子
"appearance": {
    "item": "minecraft:diamond"
}

注:如果这个物品含有动画效果:如弓,指南针,钟等,可能会导致一些渲染问题,如果使用更加复杂的模型,如三叉戟,箱子,盔甲架等,这将会不起作用。


自定义的模型

和block属性相同,item的模型位置也必须在asset/namespace/models/machine文件夹下。

例子

假设你有一个模型位于asset/namespace/models/machine/my_machine.json,那么item属性的定义就应该是namespace:machine/my_machine。

那么代码则是:

"appearance": {
    "item": "custommachinery:machines/my_model"
}

同样,你需要重启游戏才能看见自定义模型的应用。


声音sound

声音与物品和方块完全不同,声音由于需要在游戏内注册过才能使用,因此你需要使用一些mod或者资源包才能自定义特有的声音,且声音的文件后缀必须为.ogg。

因此,你默认情况下只能使用游戏内已经存在的声音来源。

//自定义机器声音的方法
"appearance": {
   "sound": "namespace:sound_location"
}

如果你没有使用这个属性,那么机器将不会产生声音。


自发光亮度light

机器支持自发光,如果你要让这个机器发光,那么就要运用到这个属性。

这个属性支持原版的光照亮度,也就是0-15级且为整数。(例如火把是14,红石火把是7)。

//自定义机器声音的方法
"appearance": {
   "lightlevel": 15
}

如果你没有使用这个属性,那么机器将不会发光。


机器对于自身的色彩调用color


硬度指数hardness

这个方块的挖掘硬度,默认为3.5,支持浮点数。


防爆指数resistance

这个方块的爆炸抗性指数,默认为3.5,支持浮点数。


破坏该机器所需的工具类型tool_type

这台机器需要用所对应的工具破坏,否则将会减慢破坏速度,并且不会掉落机器本身,但会掉落出机器内部储存的物品。

默认为:pickaxe(镐),你也可以使用:shovel(锹),axe(斧),hoe(锄),sword(剑),hand(空手)


破坏该机器需要几级工具mining_level

需要一个正整数定义,默认为:1(石制工具),你也可以使用:0(木/金制工具),2(铁制工具),3(钻石工具),4(下界合金工具)。


碰撞箱shape

一般来说,机器的碰撞体积为一整个方块。

你可以自定义这个方块的碰撞体积,但不得大于一个方块。

机器的碰撞体积不会跟随着机器方向的旋转而改变,因此如果这个方块旋转过,那么碰撞体积有可能会产生问题。

你可以使用现成的方块碰撞体积,例如半砖,楼梯等,你也可以使用自定义的碰撞箱。

现成的碰撞箱

"appearance": {
   "shape": "minecraft:repeater[property1=value1,property2=value2]"
}

[]可以被省略,那么使用该例子的机器碰撞体积将会是红石中继器那么大。


注:如果有其他mod使用了普通的工具注册方式注册过特殊的工具方式,那么tool_type和mining_level属性可以拓展到其他工具里。


定制的碰撞箱

你可以自定义一个碰撞箱,这个碰撞箱的写法为:[minX, minY, minZ, maxX, maxY, maxZ]。

所有框值必须在 0.0 和 1.0 之间,完整的碰撞箱为 [1, 1, 1, 1, 1, 1]。

//半砖
"appearance": {
   "shape": [[0.0, 0.0, 0.0, 1.0, 0.5, 1.0]]
}


默认的机器外观

如果以上有任意属性没有自定义,那么那个属性将会使用默认的数值:

"appearance": {
    "block": "custommachinery:block/custom_machine_block",
        "item": "custommachinery:block/custom_machine_block", 
        "sound": "", 
        "lightlevel": 0,
        "color": 16777215,
        "hardness": 3.5, 
        "resistance": 3.5,
        "tool": "pickaxe",
        "mininglevel": 1,
        "shape": [[0, 0, 0, 1, 1, 1]]
}


示例

示例1

"appearance": {
     "block": "minecraft:tnt",
      "sound": "minecraft:block.anvil.place", 
      "lightlevel": 10
}

使用这个示例的机器将会是TNT的外观,运行时会发出铁砧的声音,并冒出10级的光照度。


示例2

"appearance": {
    "block": "minecraft:furnace",
    "running": {
        "block": "minecraft:furnace[lit=true]",
        "lightmode": 15
    }
}

使用这个示例的机器将会是熔炉闲置时的外观,且如果这台机器正在运行则会改变自身的外观为熔炉烧制物品时的外观。