Minecraft Wiki

除另有声明,转载时均必须注明出处若簡繁轉換出錯,請以遊戲內為準请勇于扩充与修正内容有兴趣逛逛我们的微博沟通交流,欢迎到社区专页需要协助,请在告示板留言

了解更多

Minecraft Wiki
注册
Advertisement
Disambig gray  本文章介绍的是Java版模型。关于基岩版模型,请见“基岩版附加包文档 § 几何模型”。
Information icon
此特性为Java版独有。

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

文件路径[]

在JSON文件中,使用形如命名空间:名称的命名空间ID(命名空间minecraft:可以省略)表示实际文件路径,详见命名空间ID#实际文件路径

在模型文件中,形如命名空间:名称的命名空间ID对应的实际路径为assets/命名空间/对象类型/名称.后缀名,其中名称可以使用多级子文件夹,用/分隔各级文件目录。如namespace:foo/bar/baz(foo和bar是文件目录,baz是真正的文件名)。

命名空间ID所指定的对象和其对应的对象类型后缀名如下:

对象 对象类型的值 后缀名的值
方块状态 blockstates json
模型 models json
纹理 textures png

方块状态[]

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

这些文件储存在assets/<namespace>/blockstates中。这些文件会根据名称来直接使用,因此不同名字的方块状态文件不会影响其他的方块状态文件。

  • 根标签。
    •  variants:设置变种与对应的模型,内部需要列出此方块的所有变种。
      •  <变种名>:指定某一个变种的模型。变种名为由逗号分隔的有关方块属性的键值对。不含有方块属性的方块状态使用""作为变种名。物品展示框被视为方块,不带有地图的物品展示框使用"map=false",带有地图的物品展示框使用"map=true"
        • 如果使用了多个模型,此标签为一个列表,并带有下列标签:
        • :一个模型。所有指定的模型在游戏中随机出现,标签内指定模型的属性。
          •  model:指定模型文件的命名空间ID
          •  uvlock:(可选,默认为false)设置为true将锁定方块纹理的旋转方向。这样在使用上面的 x y标签时纹理将不会跟着方块一起旋转。
          •  weight:(可选,默认为1)设置模型在游戏中被选用的权重,必须大于0。如果多于一个模型被用在同一个变种,每个模型被选中的概率将会为此模型的权重值除以所有模型权重的总和。(例如,三个权重分别为1,1和2的模型,它们权重总和为4,这三个模型被调用的概率分别为141424。)
          •  x:(可选,默认为0)模型相对于x轴的旋转,增量90度。
          •  y:(可选,默认为0)模型相对于y轴的旋转,增量90度。
          如果使用单个模型,此标签内包含下列标签:
        •  model:指定模型文件的命名空间ID
        •  uvlock:(可选,默认为false)设置为true将锁定方块纹理的旋转方向。这样在使用上面的 x y标签时纹理将不会跟着方块一起旋转。
        •  x:(可选,默认为0)模型相对于x轴的旋转,增量90度。
        •  y:(可选,默认为0)模型相对于y轴的旋转,增量90度。
    •  multipart:基于方块状态的属性来组合模型。
      • :确定一种情况,并决定应用在这种情况下的模型。
        •  when:(可选)列出使用该模型的必须满足的所有条件。当未设置时,条件总是满足。标签内只能包含下列三种标签中的一种 OR AND只能在标签内出现一次,而方块属性条件则可以多次出现,但不能检查同一个方块属性。
          •  AND:当标签包含的所有条件满足时,此标签代表的条件才会满足。
            • :一个匹配条件。内部标签定义与 when相同。
          •  OR:当标签包含的任意一个条件满足时,此标签代表的条件也就满足。
            • :一个匹配条件。内部标签定义与 when相同。
          •  <属性名>:要检查的方块属性。方块属性可以有多个值,由|来分隔,使得不同属性值均可以匹配。
        •  apply:指定使用的模型及其属性。
          • 如果使用了多个模型,此标签为一个列表,并带有下列标签:
          • :一个模型。所有指定的模型在游戏中随机出现,标签内指定模型的属性。
            •  model:指定模型文件的命名空间ID
            •  uvlock:(可选,默认为false)设置为true将锁定方块纹理的旋转方向。这样在使用上面的 x y标签时纹理将不会跟着方块一起旋转。
            •  weight:(可选,默认为1)设置模型在游戏中被选用的权重,必须大于0。如果多于一个模型被用在同一个变种,每个模型被选中的概率将会为此模型的权重值除以所有模型权重的总和。(例如,三个权重分别为1,1和2的模型,它们权重总和为4,这三个模型被调用的概率分别为141424。)
            •  x:(可选,默认为0)模型相对于x轴的旋转,增量90度。
            •  y:(可选,默认为0)模型相对于y轴的旋转,增量90度。
            如果使用单个模型,此标签内包含下列标签:
          •  model:指定模型文件的命名空间ID
          •  uvlock:(可选,默认为false)设置为true将锁定方块纹理的旋转方向。这样在使用上面的 x y标签时纹理将不会跟着方块一起旋转。
          •  x:(可选,默认为0)模型相对于x轴的旋转,增量90度。
          •  y:(可选,默认为0)模型相对于y轴的旋转,增量90度。
"uvlock": true "uvlock": false
Uvlock true Uvlock false

示例:墙上的火把[]

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

wall_torch.json
{
    "variants": {
        "facing=east": { "model": "block/wall_torch" },
        "facing=south": { "model": "block/wall_torch", "y": 90 },
        "facing=west": { "model": "block/wall_torch", "y": 180 },
        "facing=north": { "model": "block/wall_torch", "y": 270 }
    }
}

墙上的火把能被插在方块的四个侧面上,所以需要四个不同的变种,每个侧面都得有一个变种。这四个变种分别叫作"facing=east""facing=west""facing=south"以及"facing=north"。四个变种的模型都用的是"block/wall_torch", 但这个模型因"y"设置的数值而在y轴方向上旋转了几个90度,这样被插在不同侧面上的火把看起来才都十分协调。

示例:草方块[]

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

grass_block.json
{
    "variants": {
        "snowy=false": [
            { "model": "block/grass_block" },
            { "model": "block/grass_block", "y": 90 },
            { "model": "block/grass_block", "y": 180 },
            { "model": "block/grass_block", "y": 270 }
        ],
        "snowy=true":  { "model": "block/grass_block_snow" }
    }
}

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

示例:橡木栅栏[]

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

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

第一个模型,栅栏柱,是一直使用着的,而其他模型只在某些条件下使用。栅栏横带板只有在其他方块与该栅栏相邻时才出现。可横带板是有朝向的,于是横带板的模型就被旋转了几个90度来用,这样的话所需的模型数量就能减至两个了,一个是栅栏柱,一个是横带板。与在Java版1.8中用到的5个模型、16个变种相比,这算是个相当大的改进了。

示例:红石线[]

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

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": "block/redstone_dust_dot" }
        },
        {   "when": { "OR": [
                { "north": "side|up" },
                { "north": "none", "east": "none", "south": "side|up", "west": "none" }
            ]},
            "apply": { "model": "block/redstone_dust_side0" }
        },
        {   "when": { "OR": [
                { "south": "side|up" },
                { "north": "side|up", "east": "none", "south": "none", "west": "none" }
            ]},
            "apply": { "model": "block/redstone_dust_side_alt0" }
        },
        {   "when": { "OR": [
                { "east": "side|up" },
                { "north": "none", "east": "none", "south": "none", "west": "side|up" }
            ]},
            "apply": { "model": "block/redstone_dust_side_alt1", "y": 270 }
        },
        {   "when": { "OR": [
                { "west": "side|up" },
                { "north": "none", "east": "side|up", "south": "none", "west": "none" }
            ]},
            "apply": { "model": "block/redstone_dust_side1", "y": 270 }
        },
        {   "when": { "north": "up" },
            "apply": { "model": "block/redstone_dust_up" }
        },
        {   "when": { "east": "up" },
            "apply": { "model": "block/redstone_dust_up", "y": 90 }
        },
        {   "when": { "south": "up" },
            "apply": { "model": "block/redstone_dust_up", "y": 180 }
        },
        {   "when": { "west": "up" },
            "apply": { "model": "block/redstone_dust_up", "y": 270 }
        }
    ]
}

红石粉的模型是一步步地创建的。第一个情况决定了红石粉中心的点状模型redstone_dot的使用条件:东、南、西、北四个方向都为“none”,或当两个形成拐角的方向为upside时。

最后的四种情况检查west是否为up,如果是,则应用模型redstone_up

方块模型[]

文件夹assets/<namespace>/models/block存有所有方块状态文件指定的模型文件。可以更改文件的名称,但必须与方块状态文件中使用的名称一致。

  • 根标签
    •  parent:(可选)从给定的命名空间ID中加载模型文件,作为本模型的父模型。父模型中的属性将继承到本模型中,但在本模型内声明的属性会覆盖父模型的属性。父模型不能为自身,也不能循环继承。
    •  display:(可选,若无继承属性默认为无变换)列出方块对应的物品模型于不同位置下的显示设置。
      •  <位置>:设置方块物品在不同位置上的显示设置,按照缩放、旋转、平移的步骤进行变换。键名可以是thirdperson_righthand、​thirdperson_lefthand、​firstperson_righthand、​firstperson_lefthand、​gui、​head、​groundfixed
        •  scale:(可选,默认为[1, 1, 1])使模型相对于对应轴进行缩放,每个轴上的缩放都钳制在-4到4之间。
          • :某一个轴上的缩放。
        •  rotation:(可选,默认为[0, 0, 0])使模型相对于对应轴进行旋转,以角度为单位。
          • :某一个轴上的旋转。
        •  translation:(可选,默认为[0, 0, 0])使模型相对于对应轴进行平移,每个轴上的平移都钳制在-80到80之间。
          • :某一个轴上的平移。
    •  ambientocclusion:(可选,若无继承属性默认为true)是否使用环境光遮蔽
    •  gui_light:(可选,若无继承属性默认为side)如果设置为side,那么在GUI内会按照方块类似的光照方式进行渲染;如果设置为front,则在GUI内会使用扁平物品的光照进行渲染。
    •  textures:(可选)定义模型的使用的纹理变量列表。纹理变量可以从父模型继承。此列表内定义的纹理变量会覆盖父模型的纹理变量。纹理变量particle是特殊纹理变量,除了可以作为正常的纹理变量外,还控制了方块的粒子和下界传送门内的纹理。
      •  <纹理变量名>:定义一个纹理变量。可以是一个命名空间ID,也可以是另一个纹理变量(以#开头)。
    •  elements:(可选,默认继承父模型)列出模型的所有元素。这些元素只能为长方体形式。
      • :一个元素。
        •  shade:(可选,默认为true)是否渲染阴影。
        •  rotation:(可选,默认无旋转)设置元素的旋转。
          •  angle:旋转角度。只能为-45、​-22.5、​0、​22.545
          •  axis:旋转轴,可以为x、​yz
          •  origin:设置旋转中心。
            • :旋转中心在某个轴上的坐标。
          •  rescale:(可选,默认为false)是否缩放为整个长方体大小。
        •  from:指定一个模型元素长方体的起始点。数值必须为-16到32之间。
          • :长方体在某个轴上的坐标。
        •  to:指定一个模型元素长方体的终点。数值必须为-16到32之间。
          • :长方体在某个轴上的坐标。
        •  faces:模型元素的所有面。若有一个面没有定义,则不渲染此面。
          •  <>:指定某一个面的属性。面可以为down、​up、​north、​south、​westeast
            •  uv:(可选,默认根据当前面自动设置区域)按照[x1, y1, x2, y2]的格式,指定所使用的纹理图片的区域。若此值低于0或高于16,则纹理显示将会不正常。若x1x2坐标对调,纹理也将会被翻转(例:从原本的0, 0, 16, 16变为16, 0, 0, 16)。
              • :一个纹理坐标。
            •  texture:指定所使用的纹理变量(以#开头)。
            •  tintindex:(可选,默认为-1)使用硬编码的着色索引对纹理重新着色。只有下方列出的方块可以着色,其他方块设置此项无效。如果设置为-1,则不进行重新着色。
            •  rotation:(可选,默认为0)根据特定的角度旋转纹理。可以为0、90、180或270。旋转不会影响到uv所指定的纹理部分,而是此面的旋转角度。
            •  cullface:(可选,默认为当前面的同侧)指定当这个方块与指定方向上与毗邻方块接连时,这个面是否无需渲染。同时该面的亮度计算也等同于方块的指定面。方向可以为down、​up、​north、​south、​westeast
    •  overrides:指定基于物品标签谓词而覆写不同的模型,仅对于方块所对应的物品有效。所有情况都按从上到下的顺序进行检测,直到有完全匹配的谓词并覆盖本模型。
      • :一种覆盖当前物品模型的情况。
        •  predicate:这种情况发生的条件。当标签内所有条件满足时此条件满足。
        •  model:当符合条件时使用的模型的命名空间ID
方块 着色索引 描述
粉红色花簇 除0以外的数字 用于植物着色

高草丛
大型蕨

蕨盆栽
甘蔗
藤蔓
草方块
橡树树叶
深色橡树树叶
丛林树叶
金合欢树叶
红树树叶
任意
白桦树叶 用于树叶着色,固定为
 #80A755
云杉树叶 用于树叶着色,固定为
 #619961

气泡柱
装有水的炼药锅
用于水体着色
红石线 用于红石线等级着色
西瓜茎
南瓜茎
用于茎年龄着色
结果的西瓜茎
结果的南瓜茎
固定为
 #E0C71C
睡莲 固定为
 #208030

示例:直立的火把[]

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

template_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"标签下创建了三个元素,或者说三个长方体。因为只定义了两个面,所以每个长方体只有两个面会在游戏里被渲染。"uv"指定了纹理所使用的区域。纹理变量"#torch"用于指定方块的粒子纹理和元素的纹理,虽然这里的"#torch"还未定义路径。

torch.json
{
    "parent": "block/template_torch",
    "textures": {
        "torch": "blocks/torch"
    }
}

此文件为普通火把的地上摆放模型。会先读取并继承其父类文件"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" }
      }
    }
  ]
}

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

"rescale": true "rescale": false
Block model rescale true Block model rescale false

示例:将多个纹理组合到一个文件[]

使用"uv"组合,纹理可以从一个文件读取,文件的不同部分用于方块的不同面。"uv"不会按像素提取文件,而是而是按照图片大小的比例(以16为单位)。比如,使用"uv": [0,0, 16,8]会提取图片的上半部分:从坐标(016, 016)也就是(0,0),即最左上方的像素,到(1616, 816)也就是(100%,50%),即右侧中间的像素。因为是按百分比计算的,所以将纹理图片修改为到32x32、64x64等,都不需要更改模型文件。

Fletching Table textures

在这个例子中,制箭台(如图)用了组合纹理(存储于fletching_table.png):顶部的16×16像素(如果把纹理修改为32像素宽,那就是顶部的32x32,依此类推,模型文件不需要修改)作为方块的顶部纹理,中间的16x16像素作为方块的前后两面,底部16x16作为其他面。底部纹理是birch_planks白桦木板)。对于以上三个纹理,模型文件可以这样写:

{
    "parent": "block/cube",
    "textures": {
        "particle": "block/fletching_table",
        "all": "block/fletching_table",
        "bottom": "block/birch_planks"
    },
    "elements": [
        {
           "from": [ 0, 0, 0 ],
            "to": [ 16, 16, 16 ],
            "faces": {
                "down":  { "texture": "#bottom", "cullface": "bottom" },
                "up":    { "uv": [0,0, 16,5.34], "texture": "#all", "cullface": "up" },
                "north": { "uv": [0,5.35, 16,10.66], "texture": "#all", "cullface": "north" },
                "south": { "uv": [0,5.35, 16,10.66], "texture": "#all", "cullface": "south" },
                "west":  { "uv": [0,10.67, 16,16], "texture": "#all", "cullface": "west" },
                "east":  { "uv": [0,10.67, 16,16], "texture": "#all", "cullface": "east" }
            }
        }
    ]
}
Bone Block textures

如右图,在这个例子中,只有两个纹理置于一个文件,构成骨块。对于这两个纹理,模型文件代码可以这样写:

{
    "parent": "block/cube",
    "textures": {
        "particle": "block/bone_block",
        "all": "block/bone_block"
    },
    "elements": [
        {
           "from": [ 0, 0, 0 ],
            "to": [ 16, 16, 16 ],
            "faces": {
                "down":  { "uv": [0,0, 16,8], "texture": "#all", "cullface": "down" },
                "up":    { "uv": [0,0, 16,8], "texture": "#all", "cullface": "up" },
                "north": { "uv": [0,8, 16,16], "texture": "#all", "cullface": "north" },
                "south": { "uv": [0,8, 16,16], "texture": "#all", "cullface": "south" },
                "west":  { "uv": [0,8, 16,16], "texture": "#all", "cullface": "west" },
                "east":  { "uv": [0,8, 16,16], "texture": "#all", "cullface": "east" }
            }
        }
    ]
}
Barrel textures

在这个例子中,四个纹理都在同一个文件中,以构成木桶。对于这4个纹理,模型文件可以这样写:

{
    "parent": "block/cube",
    "textures": {
        "particle": "block/barrel",
        "all": "block/barrel"
    },
    "elements": [
        {
           "from": [ 0, 0, 0 ],
            "to": [ 16, 16, 16 ],
            "faces": {
                "down":  { "uv": [8,8, 16,16], "texture": "#all", "cullface": "down" },
                "up":    { "uv": [8,0, 16,8], "texture": "#all", "cullface": "up" },
                "north": { "uv": [0,8, 8,16], "texture": "#all", "cullface": "north" },
                "south": { "uv": [0,8, 8,16], "texture": "#all", "cullface": "south" },
                "west":  { "uv": [0,8, 8,16], "texture": "#all", "cullface": "west" },
                "east":  { "uv": [0,8, 8,16], "texture": "#all", "cullface": "east" }
            }
        }
    ]
}

物品模型[]

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

物品模型使用了方块模型的格式,只在父模型上有差别。物品模型可以继承于一个方块模型,这样在渲染时会自动生成对应方块的图标;也可以使用对应方块实体的模型,此时需要继承或间接继承builtin/entity;或者直接或间接继承builtin/generated,这时需要在物品模型内定义纹理变量layer0、​layer1、​layer2、​layer3layer4(除layer0外都可以省略),用于指定各个渲染层。下表中物品的部分渲染层可以进行着色。

物品 渲染层 描述

高草丛
大型蕨

藤蔓
草方块
0-4 固定为
 #7CBD6B
橡树树叶
深色橡树树叶
丛林树叶
金合欢树叶
固定为
 #48B518
红树树叶 固定为
 #92C648
白桦树叶 固定为
 #80A755
云杉树叶 固定为
 #619961
睡莲 固定为
 #71C35C
刷怪蛋 用于刷怪蛋颜色,0层为背景色,1-4层为前景色
药箭 0 用于药水箭颜色
药水
喷溅药水
滞留药水
用于药水的颜色
皮革帽子
皮革外套
皮革裤子
皮革靴子
皮革马铠
用于皮革盔甲的颜色
烟火之星 1 用于烟火之星的颜色
地图 1-4 用于地图上的颜色

示例:平面床[]

这个例子用旧版本Java版找到的纹理替换物品床的渲染,比如Red Bed 2D。这个文件位于assets/minecraft/models/item文件夹下的“red_bed.json”:

{
    "parent": "item/generated",
    "textures": {
        "layer0": "item/red_bed"
    }
}

此处的例子中,parent被设置为item/generated,表示这个物品模型是平坦的纹理。在textures中,layer0被设定为这个物品的应有纹理;此处即为red_bed,其路径为assets/minecraft/textures/item文件夹。“red”可以被替换为其他颜色的床,但必须被放在不同的JSON文件(示例:black_bed.json,green_bed.json,以此类推)。在textures/item文件夹中必须有物品纹理文件(layer0所要求的内容);可以使用下列纹理:

可将上述文件重命名为<颜色>_bed(保留扩展名.png)并放入assets/minecraft/textures/item文件夹。请注意与layer0中引用的纹理名称相匹配。

示例:立体床[]

这个例子用新版本Java版找到的纹理替换物品床的渲染,比如Red Bed JE2。这个文件由位于assets/minecraft/models/item文件夹下的两个文件“red_bed.json”和“template_bed.json”共同决定:

{
  "parent": "minecraft:item/template_bed",
  "textures": {
    "particle": "minecraft:block/red_wool"
  }
}
{
    "parent": "builtin/entity",
    "display": {
        "thirdperson_righthand": {
            "rotation": [ 30, 160, 0 ],
            "translation": [ 0, 3, -2],
            "scale":[ 0.23, 0.23, 0.23]
        },
        "firstperson_righthand": {
            "rotation": [ 30, 160, 0 ],
            "translation": [ 0, 3, 0],
            "scale":[ 0.375, 0.375, 0.375]
        },
        "gui": {
            "rotation": [ 30, 160, 0 ],
            "translation": [ 2, 3, 0],
            "scale":[ 0.5325, 0.5325, 0.5325]
        },
        "ground": {
            "rotation": [ 0, 0, 0 ],
            "translation": [ 0, 1, 2],
            "scale":[ 0.25, 0.25, 0.25]
        },
        "head": {
            "rotation": [ 0, 180, 0 ],
            "translation": [ 0, 10, -8],
            "scale":[ 1,1,1 ]
        },
        "fixed": {
            "rotation": [ 270, 0, 0 ],
            "translation": [ 0, 4, -2],
            "scale":[ 0.5, 0.5, 0.5]
        }
    }
}

此处的例子中,parent被设置为builtin/entity,表示这个物品模型由实体模型加载而来。其纹理存放在assets/minecraft/textures/entity/bed

其中,

  • thirdperson_righthand:第三人称主手时的显示方式。
  • thirdperson_lefthand:第三人称副手时的显示方式(此处未出现)。未注明,则默认使用第三人称主手时的左右对称形式。
  • firstperson_righthand:第一人称主手时的显示方式。
  • firstperson_lefthand:第一人称副手时的显示方式(此处未出现)。未注明,则默认使用第一人称主手时的左右对称形式。
  • gui:在物品栏时的显示方式。
  • ground:掉落物形式的显示方式。
  • head:戴在头上时的显示方式。
  • fixed:物品展示框的显示方式。

物品标签谓词[]

Disambig gray  本段落介绍的是根据物品标签显示不同模型的资源包机制。关于其他谓词,请见“谓词(消歧义)”。

有些物品可以使用额外的标签进行模型覆写的判断,当标签返回的值大于等于谓词内定义的值时此谓词通过。以下为可用的标签列表。

  • "angle":(指南针追溯指针,取值0-1)指南针的角度。当指南针与指向的位置不在同一个维度或在不能使用指南针的维度中时角度随机,当指南针不在实体身上时为0,其他情况下代表指向的角度。
  • "blocking":(盾牌,取值0或1)当盾牌正在格挡时为1,否则为0。
  • "broken":(鞘翅,取值0或1)鞘翅损坏时为1,否则为0。
  • "brushing":(刷子,取值0-1)刷子清刷的剩余程度,如果没有使用刷子则为0。
  • "cast":(钓鱼竿,取值0或1)当钓鱼竿浮漂已抛出时为1,否则为0。
  • "charged":(,取值0或1)当弩装填了弹射物时为1,否则为0。
  • "cooldown":(所有物品,取值0-1)物品的冷却百分比,如果物品不在玩家物品栏则为0。
  • "custom_model_data":(所有物品)返回物品NBT标签内的 tag.CustomModelData。这个数字在内部转化为单精度浮点数,导致此值在超过16777216时损失精度。如果物品不存在这个标签,则返回0。
  • "damage":(所有物品,取值0-1)物品的损坏程度。
  • "damaged":(所有物品,取值0或1)物品未损坏或无法损坏时为0,否则为1。
  • "filled":(收纳袋,取值0-1)收纳袋的填充程度。如果收纳袋内没有物品为0,如果收纳袋已满则为1。
  • "firework":(,取值0或1)当弩装填了烟花火箭时为1,否则为0。
  • "lefthanded":(所有物品,取值0或1)当物品在副手为1,否则为0。
  • "level":(光源方块,取值0-1)光源方块的亮度等级。按照亮度分为16个等级,每一等级增量116。当光源方块物品不存在亮度等级标签时为1。
  • "pull":(,取值0-1)弓或弩被拉伸的程度,没有拉伸为0,满弦为1。
  • "pulling":(,取值0或1)弓被拉伸时为1,否则为0。
  • "throwing":(三叉戟,取值0或1)当三叉戟正在被准备抛出时为1,否则为0。
  • "time":(时钟,取值0-1)代表一天中的时间。当在不能使用时钟的维度时随机。
  • "tooting":(山羊角,取值0或1)当山羊角被玩家吹响时为1,否则为0。
  • "trim_type":(所有物品,取值0-1)盔甲纹饰类型。当物品不是可纹饰的盔甲或世界没有加载启用1.20内置数据包时为0。各个数字代表的锻造原材料如下表所示:
锻造原材料 对应数字
下界石英 0.1
铁锭 0.2
下界合金锭 0.3
红石粉 0.4
铜锭 0.5
金锭 0.6
绿宝石 0.7
钻石 0.8
青金石 0.9
紫水晶碎片 1

示例:火把[]

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

torch.json
{
  "parent": "item/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"标签定义,这个物品模型使用的纹理图片同时也是方块模型使用的纹理。因为硬编码规定火把只有一个图层,所以给予火把添加额外的图层是没用的。此外,通过设置display属性,可以保证此物品模型在不同情况下的正确显示。火把不能放在玩家的头上,也在物品栏中使用平面图标,所以没必要定义戴在头上时和GUI中的display设置。为了使模型在第一人称视角和第三人称视角中与玩家的左手或右手对齐,需要旋转,平移和缩放模型,这是针对两种情况分别进行的。

示例:钓鱼竿[]

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

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

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

历史[]

Clock
此段落需要更新。

段落中某些信息已经不符合当前版本情况。

Java版
1.7.213w36a现在像高草一样,不会位于方块正中央。
1.814w06a加入了自定义方块模型。
14w07a重写模型格式。现在不仅有“平面”,而是有“平面”和“长方体”。对象的旋转也被限制为每个对象以22.5度递增的方向旋转。
14w11a固体方块上的光照不再使方块内部的部分完全变黑。
14w11b通用方块现在加载模型,而不是预设的形状。
2014年4月12日TheMogMiner发布了关于模型格式即将更改的文章。
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.2pre5标签"translation"现在被限制在-24到24之间。
标签"scale"现在被限制在4或更少。
1.915w31aUV现在是可选的,如果没有提供,它将根据元素的位置自动生成。
不同的模型/纹理对于不同的损害值、物品状态以及玩家是否以左手为主手。这种方法适用于指南针时钟和任何有耐久度的物体。它还包含钓鱼竿的附加标签。
模型现在可以基于方块状态属性(比如栅栏)组合在一起。因此,普通方块模型集削减了近300个模型。
现在方块模型JSON更严格了,不允许使用注释和没有引号的标识符。
"display"标签默认设置已经更改,"thirdperson""firstperson"标签替换为"thirdperson_righthand""thirdperson_lefthand""firstperson_righthand""firstperson_lefthand"
"parent"和"elements"标签现在可以共存,尽管顶级的elements标签覆盖了之前的整个elements标签。
删除禁用备用方块模型的选项。
1.1418w43a加入了新的物品模型属性"custom_model_data"
1.1519w39a物品栏中的方块光照由右暗改为左暗。
19w40a物品栏中方块的光照改回了右暗,即为19w39a之前形式。

语言

Advertisement