本站文本内容除另有声明外,转载时均必须注明出处。(详情…本站文本内容除另有声明外,转载时均必须注明出处。(详情…中文Minecraft Wiki是完全公开的。请勇于扩充与修正内容!中文Minecraft Wiki是完全公开的。请勇于扩充与修正内容!Minecraft中文Wiki微博正在更新!或许有兴趣去看看Minecraft中文Wiki微博正在更新!或许有兴趣去看看想与其他用户进行编辑上的沟通?社区专页正是为此创建的。想与其他用户进行编辑上的沟通?社区专页正是为此创建的。翻译或创建页面之前,不妨看看译名标准化Wiki条例页面。翻译或创建页面之前,不妨看看译名标准化Wiki条例页面。需要管理员的协助?在管理员告示板留言也许可以帮到您。需要管理员的协助?在管理员告示板留言也许可以帮到您。

模型

来自Minecraft Wiki
(重定向自方块模型
跳转至: 导航搜索

方块模型 用于显示游戏里的所有方块,而 物品模型 用于显示在玩家手上、头上(头盔栏)、地上、物品栏里、物品展示框中和盔甲架上的物品。 因为某些方块有不同的变种, 方块状态 用作连接对应状态的模型。每个模型和方块状态拥有各自的 .json 格式文件。用在物品栏的显示状态也在这些文件中定义。

方块状态[编辑 | 编辑源代码]

某些方块拥有不同的变种(例如可以开关的),因此每个方块有各自的方块状态文件来列出所有存在的变种并连接到对应的模型。方块也可以同时由不同的模型组合,称为“multipart”。然后模型会根据当前方块的状态而被调用。 这些文件储存在assets/minecraft/blockstates 中。这些文件会根据名称来直接使用, 因此不同名字的方块状态文件不会影响其他的方块状态文件。


  • 根标签

    •  variants:变种列表,列出此方块的所有变种。

      •  A variant:变种的名字,由逗号分隔相关的方块状态组成。只有一个变种的方块状态使用"normal"为变种名。每个变种可以拥有单个模型或者模型数组以及它的属性。如果被设置为数组,将会通过选项在组内随机选择一个模型,每个选项都被指定了不同的
        标签。

        •  A model: 包含模型的属性,如果不止一个模型用于同一个变种。替代所有在游戏中指定的模型。

          •  model:指定模型文件的路径,起始于assets/minecraft/models/block

          •  x:模型相对于x轴的旋转,90度增量。

          •  y:模型相对于y轴的旋转,90度增量。

          •  uvlock:可为truefalse(默认)。设置为true将锁定方块贴图的旋转。这样贴图将不会在使用上面的
             x
             y标签时跟着方块旋转。

          •  weight:设置模型在游戏中被选用的几率,默认为1(=100%)。如果多于一个模型被用作同一个变种,每个模型被选中的几率将会为此模型的weight除以所有模型weight的总和。(例如,三个weight分别为1,1和2的模型。他们weight的总和为4(1+1+2)。这三个模型被调用的几率则分别为1/4,1/4和2/4,也可以说为25%,25%和50%。)

        •  model:指定模型文件的路径,起始于assets/minecraft/models/block

        •  x:模型相对于x轴的旋转,90度增量。

        •  y:模型相对于y轴的旋转,90度增量。

        •  uvlock:可为truefalse(默认)。设置为true将锁定方块贴图的旋转。这样贴图将不会在使用上面的
           x
           y标签时跟着方块旋转。

    •  multipart:取代了
       variants,基于方块状态属性以来组合模型。

      •  A case确定一种情况,并决定应用在这种情况下的模型。

        •  when:为了使模型被应用而必须满足的情况的列表。当未设置时,模型总是应用的。

          •  OR:如果该标签包含了的情况中的任意一个情况返回true时匹配。不能同时设定其他情况。

            •  A condition当方块必须匹配为返回true时的情况列表。

              •  A case在单一情况下方块匹需配的方块状态。它可以设为一个列表,由|来分隔,以便允许多个值匹配。

          •  A case在单一情况下方块匹需配的方块状态。它可以设为一个列表,由|来分隔,以便允许多个值匹配。不能和
             OR标签同时设定。

        •  apply:决定了模型的应用及其属性。可以拥有单一模型或者模型数组以及它的属性。如果被设置为数组,将通过给出的选项随机选择一个模型,每个选项都被指定了不同的
          标签。

          •  A model:包含模型的属性,如果不止一个模型用于同一个变种。替代所有在游戏中指定的模型。

            •  model:指定模型文件的路径,起始于assets/minecraft/models/block

            •  x:模型相对于x轴的旋转,90度增量。

            •  y:模型相对于y轴的旋转,90度增量。

            •  uvlock:可为truefalse(默认)。设置为true将锁定方块贴图的旋转。这样贴图将不会在使用上面的
               x
               y标签时跟着方块旋转。

            •  weight:设置模型在游戏中被选用的几率,默认为1(=100%)。如果多于一个模型被用作同一个变种,每个模型被选中的几率将会为此模型的weight除以所有模型weight的总和。(例如,三个weight分别为1,1和2的模型。他们weight的总和为4(1+1+2)。这三个模型被调用的几率则分别为1/4,1/4和2/4,也可以说为25%,25%和50%。)

          •  model:指定模型文件的路径,起始于assets/minecraft/models/block

          •  x:模型相对于x轴的旋转,90度增量。

          •  y:模型相对于y轴的旋转,90度增量。

          •  uvlock:可为truefalse(默认)。设置为true将锁定方块贴图的旋转。这样贴图将不会在使用上面的
             x
             y标签时跟着方块旋转。
"uvlock": true "uvlock": false
Uvlock true.png Uvlock false.png

示例:火把[编辑 | 编辑源代码]

火把有若干个变种: 它能被插在地上或墙上,而在墙上时火把还能朝向四个不同方向。以下这个示例取自文件 wall_torch.json,你能在assets/minecraft/blockstates路径下找到该文件。

File: wall_torch.json

{
    "variants": {
        "facing=up": { "model": "normal_torch" },
        "facing=east": { "model": "normal_torch_wall" },
        "facing=south": { "model": "normal_torch_wall", "y": 90 },
        "facing=west": { "model": "normal_torch_wall", "y": 180 },
        "facing=north": { "model": "normal_torch_wall", "y": 270 }
    }
}

"facing=up" 指的是火把立在地上的那个变种,该变种连接到与它对应的模型 "normal_torch"。而火把又能被插在方块的四个侧面上,所以自然又需要四个不同的变种,每个侧面都得有一个变种。这四个变种分别叫作"facing=east""facing=west""facing=south" 以及 "facing=north".。四个变种的模型都用的是 "normal_torch_wall" , 但这个模型因 "y" 设置的数值而在y轴方向上旋转了几个90度,这样被插在不同侧面上的火把看起来才都十分协调。

示例:草方块[编辑 | 编辑源代码]

草方块有两个变种,第一个变种有四个不同的模型。以下这个示例取自文件 grass.json,你能在 assets/minecraft/blockstates路径下找到该文件。

File: grass.json

{
    "variants": {
        "snowy=false": [
            { "model": "grass_normal" },
            { "model": "grass_normal", "y": 90 },
            { "model": "grass_normal", "y": 180 },
            { "model": "grass_normal", "y": 270 }
        ],
        "snowy=true":  { "model": "grass_snowed" }
    }
}

不被雪所覆盖的草方块 ("snowy=false") 拥有四个模型, 这四个模型都使用的是同一个方块模型,但模型被旋转了几个90度。因为有四个模型而其中任何一个都没用上 weight标签,所以在你放置一个(无雪的)草方块的时候,每个模型都有25%的几率被使用,也就是说这个草方块朝向东南西北任何一个方向都有可能。

示例:橡木栅栏[编辑 | 编辑源代码]

橡木栅栏使用了 multipart 这个格式.。以下这个示例取自 assets/minecraft/blockstates路径下的文件 fence.json

{
    "multipart": [
        {   "apply": { "model": "oak_fence_post" }},
        {   "when": { "north": "true" },
            "apply": { "model": "oak_fence_side", "uvlock": true }
        },
        {   "when": { "east": "true" },
            "apply": { "model": "oak_fence_side", "y": 90, "uvlock": true }
        },
        {   "when": { "south": "true" },
            "apply": { "model": "oak_fence_side", "y": 180, "uvlock": true }
        },
        {   "when": { "west": "true" },
            "apply": { "model": "oak_fence_side", "y": 270, "uvlock": true }
        }
    ]
}

第一个模型,栅栏桩(the fence post),是一直使用着的,而其他模型只在某些情况下使用。栅栏边( the sides of the fence)只有在其他方块与该栅栏相邻时才出现 。 可栅栏边是有朝向的,于是栅栏边的模型就被旋转了几个90度来用,这样的话所需的模型数量就能减至两个了,一个是栅栏桩,一个是栅栏边。与在1.8中用到的5个模型、16个变种相比,这算是个相当大的改进了。

示例:红石线[编辑 | 编辑源代码]

红石线模型也使用了 multipart这个格式。以下这个示例取自 assets/minecraft/blockstates路径下的文件 redstone_wire.json

{
    "multipart": [
        {   "when": { "OR": [
                {"north": "none", "east": "none", "south": "none", "west": "none"},
                {"north": "side|up", "east": "side|up" },
                {"east": "side|up", "south": "side|up" },
                {"south": "side|up", "west": "side|up"},
                {"west": "side|up", "north": "side|up"}
            ]},
            "apply": { "model": "redstone_dot" }
        },
        {   "when": { "OR": [
                { "north": "side|up" },
                { "north": "none", "east": "none", "south": "side|up", "west": "none" }
            ]},
            "apply": { "model": "redstone_side0" }
        },
        {   "when": { "OR": [
                { "south": "side|up" },
                { "north": "side|up", "east": "none", "south": "none", "west": "none" }
            ]},
            "apply": { "model": "redstone_side_alt0" }
        },
        {   "when": { "OR": [
                { "east": "side|up" },
                { "north": "none", "east": "none", "south": "none", "west": "side|up" }
            ]},
            "apply": { "model": "redstone_side_alt1", "y": 270 }
        },
        {   "when": { "OR": [
                { "west": "side|up" },
                { "north": "none", "east": "side|up", "south": "none", "west": "none" }
            ]},
            "apply": { "model": "redstone_side1", "y": 270 }
        },
        {   "when": { "north": "up" },
            "apply": { "model": "redstone_up" }
        },
        {   "when": { "east": "up" },
            "apply": { "model": "redstone_up", "y": 90 }
        },
        {   "when": { "south": "up" },
            "apply": { "model": "redstone_up", "y": 180 }
        },
        {   "when": { "west": "up" },
            "apply": { "model": "redstone_up", "y": 270 }
        }
    ]
}

红石粉的模型是动态创建的。第一个条件决定了红石粉东、南、西、北四个方向都不被连接时,或当两个不相对的面为upside时,redstone_dot模型才被使用。

最后一种情况只检查一个条件,它检查west是否为up,如果是,则应用模型 redstone_up

方块模型[编辑 | 编辑源代码]

文件夹assets/minecraft/models/block保存所有变种指定的模型文件。 可以更改文件的名称,但必须对应于方块状态文件中使用的名称。


  • 根标签

    •  parent:assets/minecraft/models引用其他模型。如果同时设置了"parent""elements",此模型的"elements" 标签将覆盖父类模型""parent下的"elements"标签。
      • 可以设置为"builtin/generated"以使用从指定图标创建的模型。请注意,仅支持一层,且只能通过方块状态文件来实现旋转。

    •  ambientocclusion:是否使用环境遮挡,默认为 true。如果设置了"parent",则即使将"ambientocclusion"设置为false,其在游戏中也会被当作true处理。[1]

    •  display: 保存物品模型于不同位置下的显示设置。

      •  thirdperson_righthand, thirdperson_lefthand, firstperson_righthand, firstperson_lefthand, gui, head, ground, or fixed: 物品模型于不同位置下的显示设置。设置分别为旋转,位移和缩放。 fixed 指的是当被摆放在物品展示框上时,其他的显示位置如同其名。值得注意的是位移比旋转优先应用模型。

        •  rotation: 根据 [x, y, z] 格式,使模型相对于对应轴进行旋转。

        •  translation: 根据 [x, y, z] 格式,使模型相对于对应轴进行移动。若数值大于80,数值则为80。若数值小于-80,数值则为-80。

        •  scale: 根据 [x, y, z] 格式,使模型相对于对应轴进行缩放。若数值大于4,数值则为4。

    •  textures: 模型材质的路径,起始于assets/minecraft/textures,也可以是另一个材质变量。

      •  particle: 模型的粒子材质。如果你在下界传送门,将会使用此材质。注意:所有非模型的方块的粒子破坏效果为硬编码。

      •  A texture variable: 定义一个贴图的名字和此贴图的文件路径。

    •  elements: 包含模型的所有"An element",这些元素只能为立方体形态。如果同时设置了"parent""elements",此模型的"elements" 标签将覆盖父类模型"parent"下的"elements"标签。

      •  An element

        •  from: 根据 [x, y, z] 格式,指定一个方块的起始点。数值必须为-16到32之间。

        •  to: 根据 [x, y, z] 格式,指定一个方块的结束点。数值必须为-16到32之间。

        •  rotation:"element"的旋转设置。

          •  origin: [x, y, z]所旋转的原点/中心点,默认为[8, 8, 8]

          •  axis: 旋转的一个且只能为一个轴,可以为"x""y""z"

          •  angle: 旋转的角度。可以为45到-45度,以22.5度为增量。默认为0。

          •  rescale: 是否缩放为整块。可以为"true""false"。默认为"false"

        •  shade: 是否渲染阴影。可以为"true""false"。默认为"true"

        •  faces: 包含单个"element"的所有面。若有一个面没有定义,则不渲染此面。

          •  down, up, north, south, west or east: 包含指定面的所有属性。

            •  uv: 根据 [x1, y1, x2, y2] 格式,指定所使用的贴图区域。如果没指定,则默认根据此element的xyz坐标设置。若此element低于0或高于16,则指定的默认贴图将会不一致。若x1x2坐标对调,贴图也将会被翻转(例:从原本的0, 0, 16, 16变为16, 0, 0, 16)。UV为可设置项,若未指定,则会自动根据element的位置生成。

            •  texture: 指定所使用的贴图变量,变量前加上#。贴图变量于"A texture variable"定义。

            •  cullface: 指定当前面在指定的面被方块接触时,是否不渲染。指定的面可以为:down, up, north, south, west, 或 east。同时当前面的亮度计算等同于指定的面,若未设置,默认为side。

            •  rotation: 根据特定的角度旋转贴图。可以为0,90,180或270。默认为0。旋转不会影响到uv所指定的贴图部分,而是此部分的旋转角度。

            •  tintindex: 是否使用硬编码着色贴图。默认不使用着色和任何着色数值。注意只有特定方块可以着色,其他方块设置此项无效。

示例:直立的火把[编辑 | 编辑源代码]

为简单起见,此示例只介绍直立的火把,代码由储存于assets/minecraft/models/block中的文件torch.jsonnormal_torch.json定义。

File: torch.json

{
    "ambientocclusion": false,
    "textures": {
        "particle": "#torch"
    },
    "elements": [
        {   "from": [ 7, 0, 7 ],
            "to": [ 9, 10, 9 ],
            "shade": false,
            "faces": {
                "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#torch" },
                "up":   { "uv": [ 7,  6, 9,  8 ], "texture": "#torch" }
            }
        },
        {   "from": [ 7, 0, 0 ],
            "to": [ 9, 16, 16 ],
            "shade": false,
            "faces": {
                "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" },
                "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" }
            }
        },
        {   "from": [ 0, 0, 7 ],
            "to": [ 16, 16, 9 ],
            "shade": false,
            "faces": {
                "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" },
                "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" }
            }
        }
    ]
}

此文档被用于创建火把的模型,此模型被普通火把和红石火把使用。因此"elements"标签下创建了三个element,或者说立方体。因为只定义了两个面,所以每个立方体只有两个面会在游戏里被渲染。"uv"指定了材质所使用的区域。材质变量"#torch"用于指定方块的粒子贴图和立方体定义的材质,虽然这里的"#torch"还未定义路径。

File: normal_torch.json

{
    "parent": "block/torch",
    "textures": {
        "torch": "blocks/torch_on"
    }
}

此文件为普通火把的地上摆放模型。会先读取并继承其父类文件"parent"(torch.json)下的定义。然后给予父类文件下材质路径定义,定义为普通火把的材质路径(定义路径时不需要#)。自此,这个普通火把的模型就为父类定义的模型,而材质和粒子贴图则为自己定义的路径材质。

示例: 标准方块[编辑 | 编辑源代码]

此示例为Minecraft里大部分方块的基本结构。这部分方块使用同一个基本模型,以此模型定义他们的材质,如上例子。此cube.json示例取自assets/minecraft/models/block

cube.json
{
  "elements": [
    {
      "from": [ 0, 0, 0 ],
      "to": [ 16, 16, 16 ],
      "faces": {
        "down":  { "texture": "#down", "cullface": "down" },
        "up":    { "texture": "#up", "cullface": "up" },
        "north": { "texture": "#north", "cullface": "north" },
        "south": { "texture": "#south", "cullface": "south" },
        "west":  { "texture": "#west", "cullface": "west" },
        "east":  { "texture": "#east", "cullface": "east" }
      }
    }
  ]
}

上文中提到过的将不会再复述。使用"cullface": "down"会在方块底面有相邻方块时,不渲染此面。其他几个面同理。

示例:树苗[编辑 | 编辑源代码]

此示例为所有树苗使用的基本结构(无需为树苗指定材质)。此模型为cross.json,材质(假设)就会在oak_sapling.json里被定义。这两个文件都存放在assets/minecraft/models/block文件夹下。

cross.json
{
  "ambientocclusion": false,
  "textures": {
    "particle": "#cross"
  },
  "elements": [
    {
      "from": [ 0.8, 0, 8 ],
      "to": [ 15.2, 16, 8 ],
      "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true },
      "shade": false,
      "faces": {
        "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross" },
        "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross" }
      }
    },
    {
      "from": [ 8, 0, 0.8 ],
      "to": [ 8, 16, 15.2 ],
      "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true },
      "shade": false,
      "faces": {
        "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross" },
        "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross" }
      }
    }
  ]
}

一个普通的树苗形状,为两个element片旋转45度。因此要把原点和指定的旋转轴设置为对应的数值,然后角度设为45,并把"rescale"设置为true"rescale": true的作用是让旋转之后的贴图拉伸为旋转前的宽度(见下图)。

"rescale": true "rescale": false
Block model rescale true.png Block model rescale false.png

物品模型[编辑 | 编辑源代码]

因为物品模型没有变种,所以没有设置变种的必要。文件路径assets/minecraft/models/item下存放着所有的物品模型文件。文件的名字为硬编码,因此不应修改文件名。


  • 根标签

    •  parent:从assets/minecraft/models引用其他模型。如果同时设置了"parent""elements",此模型的"elements" 标签将覆盖父类模型""parent下的"elements"标签。
      • 可以设置为"builtin/generated"以使用从指定图标创建的模型。
      • 可以设置为"builtin/entity"以加载实体模型。你不可以指定使用的实体模型,同时并不适用于所有物品(仅适用于箱子末影箱生物头颅盾牌旗帜)。
      • 设置为"builtin/compass""builtin/clock"用于指南针时钟

    •  textures:模型材质的路径,起始于assets/minecraft/textures,也可以是另一个材质变量。

      •  layer#:仅用于指定在物品栏内使用的物品的图标。允许有超过一层(比如刷怪蛋),但是可能的层数对每个物品都是硬编码的。只有在与"builtin/generated"组合时能用。

      •  particle:从材质加载颗粒效果。用于确定食品产生的碎屑颗粒,以及确定屏障颗粒(但它总是使用items/barrier.png作为破坏方块粒子),否则将使用"layer0"。

      •  材质参数:定义一个材质参数并分配材质。

    •  elements:包含模型的所有元素。可以只有一种立方体形式。不可以与"parent"设置共存。

      • 一个元素。

        •  from:根据[x, y, z]格式,指定一个方块的起始点。数值必须为-16到32之间。

        •  to:根据[x, y, z]格式,指定一个方块的结束点。数值必须为-16到32之间。

        •  rotation:定义元素的旋转。

          •  origin:根据坐标[x, y, z]设置旋转中心,默认为[8, 8, 8]

          •  axis:指定旋转方向,可以是"x""y""z"

          •  angle:指定旋转角度,可以是在45和-45之间,默认为0。

        •  faces:该立方的所有面。若有一个面没有定义,则不渲染此面。

          •  方向:该标签的名称可以是down、up、north、south、west或 east。包含指定面的参数状态。

            •  uv:定义需要使用材质的区域,根据坐标[x1, y1, x2, y2]。如果未设置,它的默认值等于元素的xyz位置。如果UV延伸到0以下或16以上,材质的行为将不一致。如果交换了x或y值,材质就会朝这个方向翻转。UV是可选的,如果没有提供,它将根据元素的位置自动生成。

            •  texture:以材质变量的形式指定材质,该材质变量的前缀是#

            •  cullface:指定当在指定位置有方块接触某个面时,是否不显示这个面。这个面可以是:downupnorthsouth, west,或east。这个标签还会决定方块的哪个面由光照水平照亮表面,如果未设置,默认为侧面。

            •  rotation:旋转材质,90的倍数。

            •  tintindex:确定是否使用硬编码的着色索引来着色材质。默认情况下不着色,任何数字都会决定着色器使用颜色(除了刷怪蛋,设置为0会使它使用第一种颜色,设置为1会使它使用第二种颜色)。请注意,只有特定的物品或物品的特定层(例如药水)具有着色索引,其他物品不受影响。

    •  display:模型显示时的不同位置。

      •  位置:该标签名称为thirdperson_righthand、thirdperson_lefthand、firstperson_righthand、firstperson_lefthand、gui、head、ground或fixed。设置模型显示的位置。确保它的旋转,平移和比例为指定的情况。fixed指的是物品框架,而其余的是他们的名称状态。

        •  rotation:指定模型的旋转角度,根据坐标[x, y, z]

        •  translation:指定模型的位置,根据坐标[x, y, z]。如果值大于80,会作为80处理,小于-80时则看作-80。

        •  scale:指定模型的尺寸,根据[x, y, z]。当值大于4时,效果等同于4。

    •  overrides:指定基于物品标签的显示不同模型的情况。

      • 某一种情况。

        •  predicate指定情况。

          •  一种情况:一个情况标签。参见物品标签查阅所有可用的标签。

        •  model:当符合情况时的模型路径,以assets/命名空间/models/开始。

物品标签[编辑 | 编辑源代码]

有些物品可以使用额外的标签进行模型覆盖的判断。以下为可用的标签列表。

  • "angle":角度,判断指南针的角度,以十进制小于1的数值表达。
  • "blocking":格挡,判断盾牌是否为格挡状态。格挡时为1
  • "broken":破损,判断鞘翅是否破损。破损时为1
  • "cast":抛掷,判断钓鱼竿是否已抛出。已抛出时为1
  • "cooldown":冷却,判断末影珍珠/紫颂果的剩余冷却时间,以十进制,0到1之间的数值表达。
  • "damage":损伤值,判断拥有耐久值的物品的已受损程度,以十进制,0到1之间的数值表达。
  • "damaged":受损, 判断拥有耐久值的物品是否为已受损状态。已受损时为1。若物品拥有Unbreakable标签时,此数值为0,且"damage"标签的数值可以不为0。
  • "lefthanded":指定被左手玩家使用的模型,会影响其在物品栏的显示样式,以及玩家被看见拿起或穿在身上时。
  • "pull":拉伸程度,判断弓被拉伸的程度,以十进制,0到1之间的数值表达。没被拉伸时为0,被完全拉伸时为1
  • "pulling":拉伸,判断弓是否被拉伸。被拉伸时为1
  • "time":时间,判断时钟的时间,以十进制,0到1之间的数值表达。
  • "custom_model_data": 自定义模型,用于使用自定义模型的物品,用整数表达。

示例:火把[编辑 | 编辑源代码]

此例子为火把为物品时的显示模型。模型为存放在assets/minecraft/models/item下的torch.json

torch.json
{
  "parent": "builtin/generated",
  "textures": {
    "layer0": "block/torch"
  },
  "display": {
    "thirdperson_righthand": {
      "rotation": [ -90, 0, 0 ],
      "translation": [ 0, 1, -3 ],
      "scale": [ 0.55, 0.55, 0.55 ]
    },
    "firstperson_lefthand": {
      "rotation": [ 0, -135, 25 ],
      "translation": [ 0, 4, 2 ],
      "scale": [ 1.7, 1.7, 1.7 ]
    }
  }
}

因为"parent"标签下所使用的父类模型为"builtin/generated",所以物品形态的火把模型使用游戏内置生成的2D图像模型。而生成所使用的图像由"layer0"标签定义,这个物品模型使用的贴图同时也是方块模型使用的贴图。因为硬编码规定火把只有一个图层,所以给予火把添加额外的图层是没用的。此外,通过设置显示属性,可以保证此物品模型在不同情况下的正确显示。由于火把戴在玩家头上时使用的并不是物品模型而是方块模型,所以没必要定义戴在头上时的显示设置。游戏会根据当前显示的方式,读取此显示状态下的各项设置,也就是旋转的角度、移动造成的位置差、和缩放的大小。

示例:钓鱼杆[编辑 | 编辑源代码]

此处以1.9钓鱼竿为例。模型为存放在assets/minecraft/models/item下的fishing_rod.json

{
  "parent": "item/handheld_rod",
  "textures": {
    "layer0": "item/fishing_rod_uncast"
  },
  "overrides": [
    {
      "predicate": {
        "cast": 1
      },
      "model": "item/fishing_rod_cast"
    }
  ]
}

此钓鱼竿的贴图在非投掷的情况下为layer0所指向的贴图路径文件fishing_rod_uncast.png。当投掷出去后(cast1时),改为使用"item/fishing_rod_cast"路径下的物品模型和此模型下的定义贴图路径"items/fishing_rod_cast"

历史[编辑 | 编辑源代码]

Java版
1.7.2 13w36a 花现在被放置时像高草一样不会位于方块中间。
1.8 14w06a 加入了自定义方块模型
14w07a 重写模型格式。现在不仅有“平面”,还有“平面”和“立方体”。对象的旋转也被限制为每个对象以22.5度递增的方向旋转。
14w11a 固体方块上的光照不再使方块内部的部分黑咕隆咚一片。
14w11b 通用方块现在加载模型,而不是预设的形状。
April 12, 2014TheMogMiner发布了关于模型格式即将更改的文章。
14w17a 将剩余的大部分固体方块转换为模型格式。
添加"rotateVariantTextures"通过旋转保存uv细节。
14w25a 从uv定义中移除方向属性,并将其替换为显式材质引用。"textureFacing""texture"参数替换,其前缀为哈希符号(#)。
"useAmbientOcclusion"重命名为"ambientocclusion"
"rotateVariantTextures"重命名为"UV lock"
"cull"重命名为"cullface",指定选择的相邻面的反面
旋转变得更加冗长,现在它变得更清晰因为它只能发生在一个轴上。"cross"模型的两个面之一的旋转现在是:"rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true },
删除了文件夹models/blocks/meshes,模型文件现在存储在models/block.
添加了方块状态文件夹,并在models/block存储了以前在其中找到的模型选择文件。
模型格式现在支持自定义物品模型。
14w27a 用能够更好地显示内部数据的数据替换方块状态名。现在还没有显示某些方块的所有数据。将在将来的版本中切换到使用实际存储的数据,为此,数值化数据值将完全删除,方块状态替代。
14w27b 方块状态文件现在支持随机模型的模型数据。
14w30a 加入了物品模型"builtin/entity".
1.8.2 pre5标签"translation"现在被限制在-24到24之间。
标签"scale"现在被限制在4或更少
1.9 15w31a UV现在是可选的,如果没有提供,它将根据元素的位置自动生成。
不同的模型/材质对于不同的损害值,物品状态,以及玩家是否是左撇子。这种方法适用于指南针、时钟和任何有耐久度的物体。它还包含弓和钓竿的附加标签。
模型现在可以基于方块状态属性(比如栅栏)组合在一起。因此,普通方块模型集削减了近300个模型。
现在方块模型JSON更严格了,不允许使用注释和无引用标识符。
"display"标签默认设置已经更改,"thirdperson""firstperson"标签替换为"thirdperson_righthand""thirdperson_lefthand""firstperson_righthand",和"firstperson_lefthand"
"parent"和"elements"标签现在可以共存,尽管顶级元素标签覆盖了以前的所有标签。
删除禁用备用方块模型的选项。