719_Lokii
本帖最后由 719220502 于 2017-7-15 21:07 编辑

↑直接点击对应文字可翻页击论坛顶部“切换到宽版”浏览,效果更佳


资源包模型教程-1.9新特性研究
      方块模型规定游戏中所有的方块的外观,特征,形状,材质等;
      物品模型规定物品在不同位置的不同形态:戴在头上时、拿在手上时、丢在地上时、是否拉弓、工具损坏程度等。
      多变的模型组合可以在游戏的背后,刻画出一个崭新的世界。准备好了吗?


优秀代表作品:3D原版材质包
推荐使用模型编辑器,可以大大节省编写时间和减少错误:
opl's Model Creater       (免费,感谢flashtt的提供和719823597的汉化)
BDcraft Cubik LITE       (普通版下载,专业版请去官网购买)



本教程所指的目录均为minecraft.jar中的目录,而非游戏目录
转载不需经过本人同意,但需要遵守 CC-BY-NC-SA 3.0 协议,贴上本帖地址以及WIKI地址



2021.12 数据,可能有更多内容
↑直接点击对应文字可翻页击论坛顶部“切换到宽版”浏览,效果更佳



资源包模型教程-1.9新特性研究
   方块模型规定游戏中所有的方块的外观,特征,形状,材质等;
   物品模型规定物品在不同位置的不同形态:戴在头上时、拿在手上时、丢在地上时、是否拉弓、工具损坏程度等。
   多变的模型组合可以在游戏的背后,刻画出一个崭新的世界。准备好了吗?


优秀代表作品:3D原版材质包

推荐使用模型编辑器,可以大大节省编写时间和减少错误:
opl's Model Creater    (免费,感谢flashtt的提供和719823597的汉化)或BDcraft Cubik LITE    (普通版下载,专业版请去官网购买)



本教程所指的目录均为minecraft.jar中的目录,而非游戏目录转载不需经过本人同意,但需要遵守 CC-BY-NC-SA 3.0 协议,贴上本帖地址以及WIKI地址


一、状态文件
   某些方块会有几个特殊的状态,每个方块都会有与其他方块不同的状态。这些状态都储存在assets/minecraft/blockstates中。   状态文件和模型文件不是同一个概念,它们是分开储存的,但是是密不可分的。   自1.9开始,方块多种状态的状态文件将合并在一个文件之中   状态文件的合并不会对方块的外观,行为方式,NBT,状态等有任何的影响
方块状态文件如下:(括号内为值的数据类型)
点击论坛顶部“切换到宽版”浏览,效果更佳
(The root tag)
 └ variants:包含着多个状态。(Compound)
 │ ├ (A variant):储存方块的状态(状态的名称及其值)。(Compound)
 │ │  └ (A model):储存方块的状态,A variant下的每一个对象。(Compound)
 │ │    ├ model:在 assets/minecraft/models/blocks 下寻找指定的模型文件。(String)
 │ │    ├ x:将模型在x轴上旋转指定的角度,值为90的整数倍。(Int)
 │ │    ├ y:将模型在y轴上旋转指定的角度,值为90的整数倍。(Int)
 │ │    ├ uvlock:是否锁定模型的旋转。当值为false时,模型才可以旋转,默认为false。(Byte)*
 │ │    └ weight:该模型被随机到的概率,默认为1(100%)。(Int)
 │ ├ model:在 assets/minecraft/models/blocks 下寻找指定的模型文件。(String)
 │ ├ x:将模型在x轴上旋转指定的角度,值为90的倍数。(Int)
 │ ├ y:将模型在y轴上旋转指定的角度,值为90的倍数。(Int)
 │ └ uvlock:是否锁定模型材质的旋转。当值为false时,模型材质才可以旋转,默认为false。(Byte)*
  └ multipart:用于结合多种方块状态。(List)
    └ (A case):确定一个方块状态和此状态下应使用的方块模型。(Compound)
       ├ when:相当于逻辑与门,如果集对象内的方块状态全部满足其值或返回true,那么使用 apply 集合下的模型,如果不满足任何一项或返回false,则跳过 apply 及其子项。如果未设置此集合, apply 集合将永远启用。(Compound)
       │   ├ OR:相当于逻辑或门,只要满足值中的任意对象,返回true。反之,如果不满足值中的任何对象,返回false。(List)
       │   │  └ (A condition):相当于逻辑与门,对象中所有的方块状态符合其值时,返回true。(Compound)
       │   │     └ (A case):A condition对象中的单个数据的数据,多个值之间用“|”隔开。 (String)
       │   └ (A case):when对象中的单个数据的数据,多个值之间用“|”隔开,注意,这是when的子项,而不是OR的子项(A condition的数据),不可混淆。 (String)
       └ apply:在when返回值为true时执行。储存方块的状态。(Compound)
        ├ (A model):方块的状态数据(名称及其值)。(String)
        │  ├ model:在 assets/minecraft/models/blocks 下寻找指定的模型文件。(String)
        │  ├ x:将模型在x轴上旋转指定的角度,值为90的整数倍。(Int)
        │    ├ y:将模型在y轴上旋转指定的角度,值为90的整数倍。(Int)
        │    ├ uvlock:是否锁定模型材质的旋转。当值为false时,模型材质才可以旋转,默认为false。(Byte)*
        │    └ weight:该模型被随机到的概率,默认为1(100%)。(Int)
          ├ model:在 assets/minecraft/models/blocks 下寻找指定的模型文件。(String)
          ├ x:将模型在x轴上旋转指定的角度,值为90的倍数。(Int)
        ├ y:将模型在y轴上旋转指定的角度,值为90的倍数。(Int)
        └ uvlock:是否锁定模型材质的旋转。当值为false时,模型材质才可以旋转,默认为false。(Byte)*

提示:
1.如果该方块没有任何状态,那么状态名称即以“normal”命名。
查看方块有什么状态的方法如下:1.打开游戏
2.随机进入一个世界,按下F3,打开调试界面
3.将准星指向你要查看的方块
4.在红框框出的地方会列出该方块的所有状态

可以看到,草方块有一个snowy状态(是否有雪)
方块的状态不止有一个,值也不一定局限于true/false,如红石:

也有部分方块没有任何方块状态,如灵魂沙:

如何处理这种没有状态的方块,前文已提到所有方块状态一览:
  Block states(英文,推荐)
  方块状态(中文,不推荐)
    中文版可能滞后或翻译错误,所有条目请以英文版为准
2.如果在A variant下有很多个对象且没有设置出现几率(weight),那么它们就会以同等的几率出现(有四个,每个就是1/4几率)

注释:
1.uvlock
当值为false时,模型材质才可以旋转(当值为true时,材质,仅仅是材质,不会旋转)
"uvlock":"false"(默认):

"uvlock":"true":

可以看到,即使uvlock打开,模型依然会旋转,但是模型材质的方向被锁定了


2.名称带括号的条目


包括(The root tag),(A variant),(A model),(A case-对象),(A condition),(A case-List)
带括号的条目使用时不使用括号内的内容,而是随情况改变
(The root tag) = 整个JSON(头尾两个花括号)
(A variant) = variants子项下的每一个条目
(A model) = A variant子项下的每一个条目
(A case-Compound) = multipart数组下的每一个条目
(A condition) = OR数组下的每一个条目
(A case-String) = A condition子项下的每一个数据
例子(grass.json):
{    //The root tag
    "variants": {
  "snowy=false": [
   { "model":"grass_normal" },  //第一个A model
   { "model":"grass_normal", "y": 90 },  //第二个A model(以此类推)
   { "model":"grass_normal", "y": 180 },
   { "model":"grass_normal", "y": 270 }
  ],  //本行至第三行都是第一个A variant
  "snowy=true":{ "model":"grass_snowed" }    //第二个A variant
    }
}   //The root tag(两个括号之间都是The root tag(整个JSON))

例子2(Oak Fence):
{
    "multipart": [
  {    "apply": { "model": "oak_fence_post" }},
  {    "when": { "north": "true" },
   "apply": {"model": "oak_fence_side", "uvlock": true }
  },  //本行至第三行都是第一个A case-Compound
  {    "when": { "east": "true" },
   "apply": {"model": "oak_fence_side", "y": 90,"uvlock": true }
  },  //第二个A case-Compound(以此类推)
  {    "when": { "south": "true" },
   "apply": {"model": "oak_fence_side", "y": 180,"uvlock": true }
  },
  {    "when": { "west": "true" },
   "apply": {"model": "oak_fence_side", "y": 270,"uvlock": true }
  }
    ]
}
例子3(不完整的redstone_wire.json):
{
    "multipart": [
  {    "when": { "OR": [
    {"north":"none", "east": "none", "south":"none", "west": "none"},  //第一个A condition
    {"north":"side|up", "east": "side|up" },   //第二个A condition
    {"east":"side|up", "south": "side|up" },    //一个A case-String,值为side和up(两个值之间用|隔开)
    {"south":"side|up", "west": "side|up"},    //另一个A case-String
    {"west":"side|up", "north": "side|up"}
   ]},
   "apply": {"model": "redstone_dot" }
  },
以下省略

3.数据类型
“数据类型”指值的应该是什么类型的数据,不同的数据类型对值的处理方式不同,不可混用。
  • Compound:即“对象”,值为花括号。例"when": { "east": "true" }
  • List:即“数组”,值为方括号,如果是多个对象的集合,也使用方括号。例"multipart": []
  • String:即“字符串”,值为文本。例"model": "grass_normal"
  • Int:即“数值”,值为任何数字。虽然Int为整数数据类型,但是使用小数不会发生错误。例"x": 90
  • Byte:即“字节”,值为布尔值(true/false)。例"north": "true"


例子:
1.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 }   
    }
}
variants表示花括号内包含多个(五个)方块状态
variants下的五个子项表示五种不同的方块状态(朝上,朝东南西北,也就是直立在地上和在墙上)
使用normal_torch和normal_torch_wall两种模型(直立在地上的模型和在墙上的模型),都存于assets/minecraft/models/blocks中
用"y"来确定模型的旋转角度,以保证可以正确的放在一面墙上(朝向正确)
(下面的举例就不染得这么杀马特了233)


2.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(A variant)值应该是一个对象,用方括号的原因是因为有很多个对象,所以当做一个数组集合起来
不难发现snowy=false下有四个对象,且没有分配出现几率(weight),那么每个情况出现的几率为1/4


3.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 }
  }
    ]
}
切记,multipart是一个数组,使用方括号而不是花括号
apply没有设置when,所以总是执行(木桩柱总是存在)
下面四个when和apply的组合就是不同面的木桩围栏,注意,尽管有"y",但是因为uvlock的开启使材质不会旋转,旋转的仅仅是方块模型
这个模型在1.9Snap以前被写成:

代码:

  1. {
  2.     "variants": {
  3.   "east=false,north=false,south=false,west=false": { "model": "oak_fence_post" },
  4.   "east=false,north=true,south=false,west=false": { "model": "oak_fence_n", "uvlock": true },
  5.   "east=true,north=false,south=false,west=false": { "model": "oak_fence_n", "y": 90, "uvlock": true },
  6.   "east=false,north=false,south=true,west=false": { "model": "oak_fence_n", "y": 180, "uvlock": true },
  7.   "east=false,north=false,south=false,west=true": { "model": "oak_fence_n", "y": 270, "uvlock": true },
  8.   "east=true,north=true,south=false,west=false": { "model": "oak_fence_ne", "uvlock": true },
  9.   "east=true,north=false,south=true,west=false": { "model": "oak_fence_ne", "y": 90, "uvlock": true },
  10.   "east=false,north=false,south=true,west=true": { "model": "oak_fence_ne", "y": 180, "uvlock": true },
  11.   "east=false,north=true,south=false,west=true": { "model": "oak_fence_ne", "y": 270, "uvlock": true },
  12.   "east=false,north=true,south=true,west=false": { "model": "oak_fence_ns", "uvlock": true },
  13.   "east=true,north=false,south=false,west=true": { "model": "oak_fence_ns", "y": 90, "uvlock": true },
  14.   "east=true,north=true,south=true,west=false": { "model": "oak_fence_nse", "uvlock": true },
  15.   "east=true,north=false,south=true,west=true": { "model": "oak_fence_nse", "y": 90, "uvlock": true },
  16.   "east=false,north=true,south=true,west=true": { "model": "oak_fence_nse", "y": 180, "uvlock": true },
  17.   "east=true,north=true,south=false,west=true": { "model": "oak_fence_nse", "y": 270, "uvlock": true },
  18.   "east=true,north=true,south=true,west=true": { "model": "oak_fence_nsew", "uvlock": true }
  19.     }
  20. }
及其冗长的代码穷举出了东南西北所有会出现的情况,过多的情况组合可能会扰乱人的思维,且要定义出六个模型不是件容易的事情
在1.9Snap+代码得到了很大的改进,更具可读性的代码和只有两个模型,会让编译者轻松不少
(hhh虽然1.9以前有编辑器(哭))


4.redstone_wires.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,(A condition),计算是从内到外的
1.(A condition):OR数组下一个的一个对象,如果这个对象内的数据全部满足其值,返回true给OR数组
举例:如第四行

代码:

  1. {"north":"none", "east": "none", "south":"none", "west": "none"}
只有当"north","east","shouth","west"的值为none的时候,这个对象((A condition))才会返回true给OR数组返回true
如果四个面都返回的是none(即没有红石线与之相连),那么这个方块就是一个“红石点”,很好理解
在这种情况下,对象(A condition)会返回true

(因为对象中没有规定power,所以对power没有要求)


2.OR:只有当OR数组下的任意一个对象((A condition))返回true时才向when返回true
3.当when下的所有子项都返回true时,返回true
4.对于(A case),两个值之间用|隔开
下面都是普通的when和apply的组合



5.soul_sand.json
{
  "variants": {
   "normal": { "model": "soul_sand" }
  }
}
可以看到,灵魂沙没有任何方块状态,所以使用"normal"作为(A variant)的名称,模型则使用灵魂沙



————状态文件部分结束————回首页


二、方块模型
所有的方块模型文件都储存在assets/minecraft/models/block目录下,这些文件的文件名可以更改,但必须与状态文件中的指定文件名吻合(不建议这么做)
方块模型文件如下:(括号中为数据类型)击论坛顶部“切换到宽版”浏览,效果更佳
(The root tag)  ├ parent:从 assets/minecraft/models 中加载方块模型作为父类。(String)*  ├ ambientocclusion:是否使用环境光遮蔽,默认为true。(Byte)*
  ├ display:显示物品模型的不同地方。(对象)  │  └ thirdperson_righthand, thirdperson_lefthand, firstperson_righthand, firstperson_lefthand, gui, head, ground, fixed:分别指:第三人称视角右手的物品,第三人称视角左手的物品,第一人称视角右手的物品,第一人称视角左手的物品,GUI内的物品,头上戴的物品,在地面上的物品,和物品的帧数(物品展示框的旋转角度等)。(Compound)  │     ├ rotation:在x,y,z轴上确定模型旋转的角度。格式为[x, y, z]。(List)  │     ├ translation:在x,y,z轴上确定模型平移的距离,单位为像素,值在-24至24之间。格式为[x, y, z]。(List)  │     └ scale:在x,y,z轴上确定模型在x, y, z轴上缩放的倍数,值在0至4之间。格式为[x, y, z]。(List)  ├ textures:从 assets/minecraft/textures 中载入材质作为模型的材质,也可以使用材质变量。(Compound)  │  ├ particle:决定模型被破坏时的粒子材质。(String)  │  └ (A texture variable):定义一个材质变量,从 assets/minecraft/textures 中载入材质。(String)*  └ elements:该模型的所有组成元素,这些元素都应为方块形式。(List)    └ (An element):单个元素,多个元素组成一个方块。(Compound)*      ├ from:选择区域的起点坐标,值在-16~32之间。格式为[x, y, z]。(List)*      ├ to选择区域的终点坐标,值在-16~32之间。格式为[x, y, z]。(List)*      ├ rotation:定义一个元素的旋转属性。(Compound)      │  ├ origin:设置旋转的中心,格式为[x, y, z],默认值为[8, 8, 8]。(List)      │  ├ axis:定义旋转方向,值为"x"或"y"或"z"。(String)      │  ├ angle:定义旋转的角度,值在-45至45之间,必须为22.5的倍数。默认为0。(Int)      │    └ rescale:规定每个旋转后面是否会缩放到单个面的大小,默认为false。(Byte)      ├ shade:是否渲染阴影,默认为true。(Byte)      └ faces:规定方块六个面的材质,如果有一个面没有规定材质,那么它将会显示错误方块(紫黑方块)。(Compound)        └ down, up, north, south, west, east:保存方块六个面的数据。(Compound)           ├ uv:使用规定的材质的某个区域作为方块模型某个部分的材质。格式为[x1,y1,x2,y2]。(List)*           ├ texture:规定指定面使用的材质,在材质变量前面前缀"#"以使用材质变量。(String)           ├ cullface:值为down, up, north, south, west, east,这一面接触其他元素时,不渲染(String)           ├ rotation:旋转材质的角度,值为90的倍数。(Int)           └ tintindex:是否将材质使用colormap文件夹内的色谱进行着色。按照文件名排序从0开始索引,-1则为不着色(Int)

注释:1.parent既然这是“父模型”那么肯定也有对应的“子模型”。技术上说,可以不必规定父子模型,但是父模型会大大让模型简洁且容易阅读。典型的例子:torch.json ├ normal_torch.json ├ lit_redstone_torch.json └ unlit_redstone_torch.json其中torch.json是父模型,下面三个是子模型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" }
   }
   }
  ]
}
可以看到,在任何需要引用材质文件的地方都使用了"torch"变量(#和变量会在下面的注释仔细讲),显然,这是不可以直接读取材质的,它只是规定此模型各种元素的组成,形状,而没有规定材质再来看子模型(只列举一个):normal_torch.json:
{
  "parent": "block/torch",
  "textures": {
   "torch": "blocks/torch_on"
  }
}
第一步就使用parent调用了父模型torch.json第二步,定义一个叫"torch"的变量,且规定了材质文件从父模型torch.json来看,有关材质的部分都使用的是材质变量"torch",而在子文件中就规定了材质变量的值("block/torch_on")其它两个子模型文件也是用这种方法规定的材质当然,像我说的,如果不使用torch.json父模型,那么normal_torch.json将被写成这样:

代码:

  1. {
  2.     "ambientocclusion": true,
  3.     "textures": {
  4.   "particle": "block/torch_on"
  5.     },
  6.     "elements": [
  7.   {   "from": [ 7, 0, 7 ],
  8.    "to": [ 9, 10, 9 ],
  9.    "shade": false,
  10.    "faces": {
  11.     "down": { "uv": [ 7, 13, 9, 15 ], "texture": "block/torch_on" },
  12.     "up":   { "uv": [ 7,6, 9,8 ], "texture": "block/torch_on" }
  13.    }
  14.   },
  15.   {   "from": [ 7, 0, 0 ],
  16.    "to": [ 9, 16, 16 ],
  17.    "shade": false,
  18.    "faces": {
  19.     "west": { "uv": [ 0, 0, 16, 16 ], "texture": "block/torch_on" },
  20.     "east": { "uv": [ 0, 0, 16, 16 ], "texture": "block/torch_on" }
  21.    }
  22.   },
  23.   {   "from": [ 0, 0, 7 ],
  24.    "to": [ 16, 16, 9 ],
  25.    "shade": false,
  26.    "faces": {
  27.     "north": { "uv": [ 0, 0, 16, 16 ], "texture": "block/torch_on" },
  28.     "south": { "uv": [ 0, 0, 16, 16 ], "texture": "block/torch_on" }
  29.    }
  30.   }
  31.     ]
  32. }
看起来没有什么区别,但是另外两个子文件也要写这么长,过多的代码重复(只修改材质)会大大降低可读性
2.ambientocclusion即Ambient Occlusion,简称AO,环境光遮蔽,对不规则形状的方块使用效果较为明显。
AO是来描绘物体和物体相交或靠近的时候遮挡周围漫反射光线的效果,可以解决或改善漏光、飘和阴影不实等问题,解决或改善场景中缝隙、褶皱与墙角、角线以及细小物体等的表现不清晰问题,综合改善细节尤其是暗部阴影,增强空间的层次感、真实感,同时加强和改善画面明暗对比,增强画面的艺术性。可以说:AO特效在直观上给我们玩家的感受主要体现在画面的明暗度上,未开启AO特效的画面光照稍亮一些;而开启AO特效之后,局部的细节画面尤其是暗部阴影会更加明显一些。—— 百度百科



3.(A texture variable)定义:如果定义了一个材质变量,就无需多次输入材质的储存路径了,注意它是textures的子项格式为"变量名称": "从assets/minecraft/textures载入的材质路径"变量名称可以随意变换,但最好符合一定的规律以便使用子模型中定义的变量可在父模型内使用,不同子模型可以使用相同的变量名例子:
{
  "textures": {
   "torch": "block/torch_on"
  }
}
这里定义了一个叫torch的变量,变量的值为block/torch_on,就等于assets/minecraft/textures/block/torch_on.png
调用:调用你也可以理解为“读取”,只要在变量名之前加入一个#即可完成调用例子:
"south": {"uv": [ 0, 0, 16, 16 ], "texture": "#torch" }
可以看到texture的值原本应为一个材质路径,但因为torch变量本身就是一个材质路径,所以可以直接调用节省时间注意调用前加#号
4.(An element)指单个元素,多个元素才能组成一个方块,elements则是多个元素的集合举例:
{
  "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" }
   }
   }
  ]
}
黄色部分是一个元素(An element)
5.from, tofrom, to的xyz坐标为一个方块内的顶点坐标连接from, to两点可得到一个对角线,就确定一个立方体(原理和圈地相同,不详细介绍)
简单来说,from, to规定了一个元素的形状
黑科技:from, to的取值范围(-16~32)限制了方块的最大大小(4x4),不过配合"rotation"标签是可以避开这一限制的详见 http://www.mcbbs.net/thread-637959-1-1.html chyx的研究
6.uv截取选定材质(texture)的一部分作为方块模型某个部分的材质,格式为[x1,y1,x2,y2]一个16x16的材质,坐标分布图如下:
在实际应用中,不会将每个元素每个面的材质都单独制作出来,往往需要截取某材质的一部分这样既可以防止出错,又避免了繁琐如果要截取以下部分:
数出对角线两个端点的坐标后
可以得到第一点的xy坐标为[5, 6],第二点的为[7, 8]得出代码

代码:

  1. { "uv": [ 5, 6, 7, 8 ], "texture": "#example" }

需要注意的问题:
  • uv的格式是[x1,y1,x2,y2],而不是[x1,x2,y1,y2]
  • 以下情况可能会导致发生意料外的情况:
   - x1的值大于x2,或y1的值大于y2(因为本条的限制,所以对角线必须是从左上到右下)(根据WIKI的说法,这么做会导致选取的部分180°倒转,而不会发生读取错误导致出现紫黑方块)   - 选取范围超出材质的画布大小(>16)   - 值为负数

例子:1.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" }
   }
  }
    ]
}
注意到uv的值为[ 0, 0, 16, 16 ],这将会选取整个方块,包括透明部分,这和直接选取中心的火把部分效果是一样的down和up两面没有特定的材质,于是就从火把材质中截取一部分来用(可参考注释6理解)
2.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下的cullface值为down表示如果底面朝下底面就不渲染(节省内存),其它面同理
3.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" }
   }
  }
    ]
}
小数的存在表示数组内(Int数据类型)可以储存小数,这将可以更为灵活地应用模型和制造出很多的细节沿着y轴旋转45度,中心为[8, 8, 8](origin的默认值),且在旋转后缩放缩放的原因:旋转后方块模型从某个角度看会变得很窄,使用缩放后会让它的形状更加趋近正常的方块大小对比图:"rescale": true
"rescale": false
图片来自WIKI

————方块模型部分结束————回首页
[/td][/tr]
[/table]
三、物品模型
物品模型没有不同的状态,因此不需要状态文件。模型文件存储在assets/minecraft/models/item中。这些模型文件的名称为硬编码,不可修改。

击论坛顶部“切换到宽版”浏览,效果更佳
(The root tag)
  ├ parent:从 assets/minecraft/models 中加载方块模型作为父类。(String)*
  ├ textures:从 assets/minecraft/textures 中载入材质作为模型的材质,也可以使用材质变量。(Compound)
  │  ├ layer#:从 assets/minecraft/models 中加载物品在物品栏中显示的图标,#为一个数字,表示第几层图标,从0起始。有些模型不止有一层(如刷怪蛋)。模型的层数是由硬编码规定的,不可增加。只可以当"parent"的值为"builtin/generated"时使用(String)
  │  ├ particle:决定物品的粒子材质,默认为"layer0"的值。(String)
  │  └ (A texture variable):定义一个材质变量,从 assets/minecraft/textures 中载入材质。(String)
  ├ elements:该模型的所有组成元素,这些元素都应为方块形式。(List)*
  │  └ (An element):单个元素,多个元素组成一个物品。(Compound)
  │    ├ from:选择区域的起点坐标,值在-16~32之间。格式为[x, y, z]。(List)  │    ├ to:选择区域的终点坐标,值在-16~32之间。格式为[x, y, z]。(List)  │    ├ rotation:定义一个元素的旋转属性。(Compound)  │    │  ├ origin:设置旋转的中心,格式为[x, y, z],默认值为[8, 8, 8]。(List)  │    │  ├ axis:定义旋转方向,值为"x"或"y"或"z"。(String)  │    │  └ angle:定义旋转的角度,值在-45至45之间,必须为22.5的倍数。默认为0。(Int)  │    └ faces:规定物品六个面的材质,如果有一个面没有规定材质,那么它不会被渲染。(Compound)  │      └ down, up, north, south, west, east:保存物品六个面的数据。(Compound)  │         ├ uv:使用规定的材质的某个区域作为物品模型某个部分的材质。格式为[x1,y1,x2,y2]。(List)  │         ├ texture:规定指定面使用的材质,在材质变量前面前缀"#"以使用材质变量。(String)  │         ├ cull:是否渲染不可见的元素。(Byte)  │         ├ rotation:旋转材质的角度,值为90的倍数。(Int)  │         └ tintindex:是否将材质使用硬编码进行着色。(Int)  ├ display:规定模型在不同地方的不同显示状态。(Compound)
  │ └ thirdperson_righthand, thirdperson_lefthand, firstperson_righthand, firstperson_lefthand, gui, head, ground, fixed:分别指:第三人称视角右手的物品,第三人称视角左手的物品,第一人称视角右手的物品,第一人称视角左手的物品,GUI内的物品,头上戴的物品,在地面上的物品,和锁定物品的帧数(使用第几帧的物品)。(Compound)  │      ├ rotation:在x,y,z轴上确定模型旋转的角度。格式为[x, y, z]。(List)  │      ├ translation:在x,y,z轴上确定模型平移的距离,单位为像素,值在-24至24之间。格式为[x, y, z]。(List)  │      └ scale:在x,y,z轴上确定模型在x, y, z轴上缩放的倍数,值在0至4之间。格式为[x, y, z]。(List)  └ overrides:使用物品标签确定不同状态下物品的模型及材质。(List)
    ├ (a case):单个标签。(Compound)
    │  └ predicate:储存多个物品标签。(Compound)
    │   └ (a case):单个物品标签,详见注释。(String)*
    └ model:从 assets/minecraft/models/ 中调用模型的路径。(String)

注释:
1.parent


具体用法详见方块模型页,以下为物品模型特性:
  • 值可以为"builtin/generated",通过文件名寻找适合的方块模型作为物品模型。
  • 值可以为"builtin/entity",通过文件名寻找适合的实体材质作为物品模型。
  • 指南针的parent设置为"builtin/compass",钟设置为"builtin/clock"
    └ 这只是省略掉了大部分的物品标签(后文会介绍),钟和指南针也可以使用builtin/generated,如果你需要精确修改每一角度(时间)的材质的话
"builtin/compass"可以写成:

代码:

  1. {
  2.     "parent": "builtin/generated",
  3.     "textures": {
  4.   "layer0": "items/compass_16"
  5.     },
  6.     "display": {
  7.   "thirdperson": {
  8.    "rotation": [ -90, 0, 0 ],
  9.    "translation": [ 0, 1, -3 ],
  10.    "scale": [ 0.55, 0.55, 0.55 ]
  11.   },
  12.   "firstperson": {
  13.    "rotation": [ 0, -135, 25 ],
  14.    "translation": [ 0, 4, 2 ],
  15.    "scale": [ 1.7, 1.7, 1.7 ]
  16.   }
  17.     },
  18.     "overrides": [
  19.   { "predicate": { "angle": 0.000000 }, "model": "item/compass" },
  20.   { "predicate": { "angle": 0.015625 }, "model": "item/compass_17" },
  21.   { "predicate": { "angle": 0.046875 }, "model": "item/compass_18" },
  22.   { "predicate": { "angle": 0.078125 }, "model": "item/compass_19" },
  23.   { "predicate": { "angle": 0.109375 }, "model": "item/compass_20" },
  24.   { "predicate": { "angle": 0.140625 }, "model": "item/compass_21" },
  25.   { "predicate": { "angle": 0.171875 }, "model": "item/compass_22" },
  26.   { "predicate": { "angle": 0.203125 }, "model": "item/compass_23" },
  27.   { "predicate": { "angle": 0.234375 }, "model": "item/compass_24" },
  28.   { "predicate": { "angle": 0.265625 }, "model": "item/compass_25" },
  29.   { "predicate": { "angle": 0.296875 }, "model": "item/compass_26" },
  30.   { "predicate": { "angle": 0.328125 }, "model": "item/compass_27" },
  31.   { "predicate": { "angle": 0.359375 }, "model": "item/compass_28" },
  32.   { "predicate": { "angle": 0.390625 }, "model": "item/compass_29" },
  33.   { "predicate": { "angle": 0.421875 }, "model": "item/compass_30" },
  34.   { "predicate": { "angle": 0.453125 }, "model": "item/compass_31" },
  35.   { "predicate": { "angle": 0.484375 }, "model": "item/compass_00" },
  36.   { "predicate": { "angle": 0.515625 }, "model": "item/compass_01" },
  37.   { "predicate": { "angle": 0.546875 }, "model": "item/compass_02" },
  38.   { "predicate": { "angle": 0.578125 }, "model": "item/compass_03" },
  39.   { "predicate": { "angle": 0.609375 }, "model": "item/compass_04" },
  40.   { "predicate": { "angle": 0.640625 }, "model": "item/compass_05" },
  41.   { "predicate": { "angle": 0.671875 }, "model": "item/compass_06" },
  42.   { "predicate": { "angle": 0.703125 }, "model": "item/compass_07" },
  43.   { "predicate": { "angle": 0.734375 }, "model": "item/compass_08" },
  44.   { "predicate": { "angle": 0.765625 }, "model": "item/compass_09" },
  45.   { "predicate": { "angle": 0.796875 }, "model": "item/compass_10" },
  46.   { "predicate": { "angle": 0.828125 }, "model": "item/compass_11" },
  47.   { "predicate": { "angle": 0.859375 }, "model": "item/compass_12" },
  48.   { "predicate": { "angle": 0.890625 }, "model": "item/compass_13" },
  49.   { "predicate": { "angle": 0.921875 }, "model": "item/compass_14" },
  50.   { "predicate": { "angle": 0.953125 }, "model": "item/compass_15" },
  51.   { "predicate": { "angle": 0.984375 }, "model": "item/compass" }
  52.     ]
  53. }

"builtin/clock"可以写成:

代码:

  1. {
  2.     "parent": "builtin/generated",
  3.     "textures": {
  4.   "layer0": "items/clock_00"
  5.     },
  6.     "display": {
  7.   "thirdperson": {
  8.    "rotation": [ -90, 0, 0 ],
  9.    "translation": [ 0, 1, -3 ],
  10.    "scale": [ 0.55, 0.55, 0.55 ]
  11.   },
  12.   "firstperson": {
  13.    "rotation": [ 0, -135, 25 ],
  14.    "translation": [ 0, 4, 2 ],
  15.    "scale": [ 1.7, 1.7, 1.7 ]
  16.   }
  17.     },
  18.     "overrides": [
  19.   { "predicate": { "time": 0.0000000 }, "model": "item/clock" },
  20.   { "predicate": { "time": 0.0078125 }, "model": "item/clock_01" },
  21.   { "predicate": { "time": 0.0234375 }, "model": "item/clock_02" },
  22.   { "predicate": { "time": 0.0390625 }, "model": "item/clock_03" },
  23.   { "predicate": { "time": 0.0546875 }, "model": "item/clock_04" },
  24.   { "predicate": { "time": 0.0703125 }, "model": "item/clock_05" },
  25.   { "predicate": { "time": 0.0859375 }, "model": "item/clock_06" },
  26.   { "predicate": { "time": 0.1015625 }, "model": "item/clock_07" },
  27.   { "predicate": { "time": 0.1171875 }, "model": "item/clock_08" },
  28.   { "predicate": { "time": 0.1328125 }, "model": "item/clock_09" },
  29.   { "predicate": { "time": 0.1484375 }, "model": "item/clock_10" },
  30.   { "predicate": { "time": 0.1640625 }, "model": "item/clock_11" },
  31.   { "predicate": { "time": 0.1796875 }, "model": "item/clock_12" },
  32.   { "predicate": { "time": 0.1953125 }, "model": "item/clock_13" },
  33.   { "predicate": { "time": 0.2109375 }, "model": "item/clock_14" },
  34.   { "predicate": { "time": 0.2265625 }, "model": "item/clock_15" },
  35.   { "predicate": { "time": 0.2421875 }, "model": "item/clock_16" },
  36.   { "predicate": { "time": 0.2578125 }, "model": "item/clock_17" },
  37.   { "predicate": { "time": 0.2734375 }, "model": "item/clock_18" },
  38.   { "predicate": { "time": 0.2890625 }, "model": "item/clock_19" },
  39.   { "predicate": { "time": 0.3046875 }, "model": "item/clock_20" },
  40.   { "predicate": { "time": 0.3203125 }, "model": "item/clock_21" },
  41.   { "predicate": { "time": 0.3359375 }, "model": "item/clock_22" },
  42.   { "predicate": { "time": 0.3515625 }, "model": "item/clock_23" },
  43.   { "predicate": { "time": 0.3671875 }, "model": "item/clock_24" },
  44.   { "predicate": { "time": 0.3828125 }, "model": "item/clock_25" },
  45.   { "predicate": { "time": 0.3984375 }, "model": "item/clock_26" },
  46.   { "predicate": { "time": 0.4140625 }, "model": "item/clock_27" },
  47.   { "predicate": { "time": 0.4296875 }, "model": "item/clock_28" },
  48.   { "predicate": { "time": 0.4453125 }, "model": "item/clock_29" },
  49.   { "predicate": { "time": 0.4609375 }, "model": "item/clock_30" },
  50.   { "predicate": { "time": 0.4765625 }, "model": "item/clock_31" },
  51.   { "predicate": { "time": 0.4921875 }, "model": "item/clock_32" },
  52.   { "predicate": { "time": 0.5078125 }, "model": "item/clock_33" },
  53.   { "predicate": { "time": 0.5234375 }, "model": "item/clock_34" },
  54.   { "predicate": { "time": 0.5390625 }, "model": "item/clock_35" },
  55.   { "predicate": { "time": 0.5546875 }, "model": "item/clock_36" },
  56.   { "predicate": { "time": 0.5703125 }, "model": "item/clock_37" },
  57.   { "predicate": { "time": 0.5859375 }, "model": "item/clock_38" },
  58.   { "predicate": { "time": 0.6015625 }, "model": "item/clock_39" },
  59.   { "predicate": { "time": 0.6171875 }, "model": "item/clock_40" },
  60.   { "predicate": { "time": 0.6328125 }, "model": "item/clock_41" },
  61.   { "predicate": { "time": 0.6484375 }, "model": "item/clock_42" },
  62.   { "predicate": { "time": 0.6640625 }, "model": "item/clock_43" },
  63.   { "predicate": { "time": 0.6796875 }, "model": "item/clock_44" },
  64.   { "predicate": { "time": 0.6953125 }, "model": "item/clock_45" },
  65.   { "predicate": { "time": 0.7109375 }, "model": "item/clock_46" },
  66.   { "predicate": { "time": 0.7265625 }, "model": "item/clock_47" },
  67.   { "predicate": { "time": 0.7421875 }, "model": "item/clock_48" },
  68.   { "predicate": { "time": 0.7578125 }, "model": "item/clock_49" },
  69.   { "predicate": { "time": 0.7734375 }, "model": "item/clock_50" },
  70.   { "predicate": { "time": 0.7890625 }, "model": "item/clock_51" },
  71.   { "predicate": { "time": 0.8046875 }, "model": "item/clock_52" },
  72.   { "predicate": { "time": 0.8203125 }, "model": "item/clock_53" },
  73.   { "predicate": { "time": 0.8359375 }, "model": "item/clock_54" },
  74.   { "predicate": { "time": 0.8515625 }, "model": "item/clock_55" },
  75.   { "predicate": { "time": 0.8671875 }, "model": "item/clock_56" },
  76.   { "predicate": { "time": 0.8828125 }, "model": "item/clock_57" },
  77.   { "predicate": { "time": 0.8984375 }, "model": "item/clock_58" },
  78.   { "predicate": { "time": 0.9140625 }, "model": "item/clock_59" },
  79.   { "predicate": { "time": 0.9296875 }, "model": "item/clock_60" },
  80.   { "predicate": { "time": 0.9453125 }, "model": "item/clock_61" },
  81.   { "predicate": { "time": 0.9609375 }, "model": "item/clock_62" },
  82.   { "predicate": { "time": 0.9765625 }, "model": "item/clock_63" },
  83.   { "predicate": { "time": 0.9921875 }, "model": "item/clock" }
  84.     ]



2.(a case)-String(物品标签):物品标签有如下几种,表示物品在特定情况下的状态:
  • "angle":指南针的不同角度
  • "blocking":确定盾是否处于格挡状态,如果是,值为1
  • "broken":确定鞘翅是否损坏,如果损坏,值为1
  • "cast":确定鱼竿是否投出钓线,如果投出,值为1
  • "cooldown":确定末影珍珠和紫颂果的剩余冷却时间,值在0到1之间
  • "damage":物品的耐久度,值为 1 - 当前耐久/总耐久,值在0到1之间
  • "damaged":确定物品是否被损坏,如果损坏,值为1
  • "lefthanded":确定左手持物品的模型
  • "pull":弓的蓄力程度,值小于1
  • "pulling":是否正在拉弓,如果是,值为1
  • "time":钟的不同时间,值小于1

单个标签使用不同值时,值从小到大排列,例:


  "overrides": [
  {"predicate":{"damage": 0.1},"model":"item/sample1"},
  {"predicate":{"damage": 0.15},"model":"item/sample2"},
  {"predicate":{"damage": 0.2 },"model":"item/sample3"},

单个模型匹配多个标签时,使用逗号分隔,例
bow.json
{
  "parent": "item/generated",
  "textures": {
   "layer0": "items/bow_standby"
  },
  "display": { },
  "overrides": [
   {
   "predicate": {
    "pulling": 1
   },
   "model":"item/bow_pulling_0"
   },
   {
   "predicate": {
    "pulling": 1,
    "pull": 0.65
   },
   "model":"item/bow_pulling_1"
   },
   {
   "predicate": {
    "pulling": 1,
    "pull": 0.9
   },
   "model":"item/bow_pulling_2"
   }
  ]
}




例子:
1.torch.json
{
  "parent": "item/generated",
  "textures": {
   "layer0": "blocks/torch_on"
  }
}
parent的值为builtin/generated,由程序生成一个2D的火把模型

材质通过layer0决定,为火把材质


2.fishing_rod.json
{
    "parent":"item/handheld_rod",
    "textures": {
  "layer0":"items/fishing_rod_uncast"
    },
    "overrides": [
  {
   "predicate": {
    "cast": 1
   },
   "model":"item/fishing_rod_cast"
  }
    ]
}
使用了predicate,所以包括了物品标签,标签为cast,即是否扔出钓线,当扔出钓线的时候(cast的的值为1),使用物品模型fishing_rod_cast.json,否则即使用fishing_rod_uncast.json作为钓竿材质(因为扔出钓线前后钓竿的倾斜角度不同,所以要分开规定模型)

————物品模型部分结束————回首页

[/td][/tr]
[/table]
四、更新历史
  本页用作引用WIKI的“history”部分,如果需要亲自编写模型,请务必仔细阅读本页,确定所编写版本是否拥有某标签,以免发生意料外的错误,本页仅做PC的更新  由于方块模型的快速更新且MINECRAFT不作兼容处理,所以编译或使用带有方块模型的材质请仔细对应版本
  虽然兼容性大大降低,但是MINECRAFT不会因为方块模型的编译错误而导致崩溃,请编译完一套的方块模型之后仔细地查看有无错误的方块,也要注意检查在物品栏内不显示的方块

划线的为影响兼容性的更新
1.9(15w31a
  • 方块/物品模型有了不同的损害值/物品标签(物品标签系统加入)
  • 同一模型的多种属性可以放在一个模型里,比如栅栏
  • JSON模型现在更为严格,注释将不被允许
  • display标签改变,由原来的"thirdperson"和"firstperson"改为"thirdperson_righthand","thirdperson_lefthand"和"firstperson_righthand","firstperson_lefthand"
  • "parent"标签和"elements"标签现在可以在同一级,这在1.9以前不被允许
  • 删除显示设置中的“是否使用替选模型”项
1.8.2(per5
  • translation标签的值改为-24至24
  • scale标签的值改为小于4
1.8(14w30b
  • 物品模型parent标签的值可以为builtin/entity"了
1.8(14w27b
  • 方块模型允许使用随机模型了
1.8(14w27a
  • 将(程序内部处理的以)方块的数据值(命名的方块状态)替换为方块名称,但尚未全部替换完毕,这略微提高方块模型对将来版本的兼容性
  !以下版本过旧,不建议在以下版本中编辑方块模型,这会导致兼容度大大降低以至完全不可使用!
1.8(14w25a
  • 删除uv标签下的"textureFacing"数据,并且用"texture"替换
  • 将useAmbientOcclusion更名为ambientocclusion
  • 将rotateVariantTextures更名为uvlock
  • 方块模型下的cull(而不是物品模型的cull)改名为cullface
  • 精简rotation及其子项的代码
  • 模型的储存位置从models/blocks/meshes改为models/block
  • 加入blockstates(方块状态)
  • 支持自定义物品模型
1.8(14w17a
  • 可以更改更多方块的方块模型了
  • 添加rotateVariantTextures,用于固定模型材质的旋转(在14w25a改名为uvlock)
1.8(14w11b
  • 模型的定义更加清晰明确,加入了许多可编辑的模型
1.8(14w11a
  • 修复发光物体照明的一些BUG
1.8(14w07a
  • 更改模型格式,旋转的方向被固定
1.8(14w06a
  • 允许自定义方块模型
1.7.2(13w36a
  • 花的模型更改,在此版本中不可自定义方块模型

————更新历史部分结束————回首页
[/td][/tr]
[/table]


恭喜发现彩蛋~
记得加分哦



1XWJ
怎么翻页?

gggbbb
人气亮了

719_Lokii

点那几个字啊= =

524399hjn
逼精华,赞{ps:大触你哪找到的}

flash0tt
试了一下,怎么感觉方块模型和物品模型的display的fixed、ground好像没效果呢……难道是我1.8的版本太低?等下试试1.8.8看看……
话说fixed是不是也包括了放在物品展示框时的状态?

719_Lokii
flash0tt 发表于 2015-9-5 00:21
试了一下,怎么感觉方块模型和物品模型的display的fixed、ground好像没效果呢……难道是我1.8的版本太低? ...

display及其子项是1.9快照才更新的~

flash0tt
719220502 发表于 2015-9-5 15:31
display及其子项是1.9快照才更新的~

display这个半年前还是1.8版本我看的时候就有了~但是我不太记得当时子项是不是有这么多……

顺便这块是不是区分一下1.8和1.9,1.8版本是没有后面区分左右手的后缀的~

sabo970
看都看不不懂。。。。

flash0tt
对了 有些不是具体某个方块的父模型可以拿出来列个表讲一下~例如cube、cube_all、cube_column等等~

MCMADAO
好高端,看不懂

719_Lokii
flash0tt 发表于 2015-9-6 21:55
对了 有些不是具体某个方块的父模型可以拿出来列个表讲一下~例如cube、cube_all、cube_column等等~ ...

这些感觉格式都比较简单,蛮好理解的
找时间写一下,毕竟这几天要上学
感谢支持~

UAC_MagicK
好厉害 高手  大触    膝盖归你了{:10_514:}

沐苽
额 小白完全不懂

1爽yy
谢谢分享!

hukk
719220502 发表于 2015-9-7 19:02
这些感觉格式都比较简单,蛮好理解的
找时间写一下,毕竟这几天要上学
感谢支持~ ...

恩,总体结构较1.8没什么特别大的变化.
状态文件增加了更多可定制参数.....
另外翻译的很棒,浅显易懂


skyrim24
赞一个!!!!!!!!!

flash0tt
试了一下,display=fixed确实包括了方块/物品在物品展示框里面显示所用的模型。但是1.8里面要在1.8.8版本才能正常显示,之前的版本是不行的。

格林
那是不是以后制作材质包方式要改变?

1814209846
719人生第1精GET√
1814人生第1精ING……

719_Lokii
格林 发表于 2015-9-13 21:29
那是不是以后制作材质包方式要改变?

不用

wscyh123

lz辛苦了 点个赞 祝你作品越来越棒

哈鱼
完全不懂。。资源包为啥需要程序?

719_Lokii
哈鱼 发表于 2015-9-18 12:51
完全不懂。。资源包为啥需要程序?

如果只是改外观的话,不需要用模型文件的= =

zhjjhz

这是如何做到的好神奇啊
学习学习一下撒!
教教我

Guardier
感觉并不是很好,,大部分人几乎都看不懂。。。。希望弄个如何制作方块模型的软件....并发出教程!!!{:10_492:}

Guardier
Guardier 发表于 2015-9-19 00:34
感觉并不是很好,,大部分人几乎都看不懂。。。。希望弄个如何制作方块模型的软件....并发出教程!!!{:10 ...

对了!1.9可以自定义生物模型

719_Lokii
Guardier 发表于 2015-9-19 00:32
对了!1.9可以自定义生物模型

文件里面没有找到,维基也没有看到,你从哪里听说?

719_Lokii
zhjjhz 发表于 2015-9-18 21:58
这是如何做到的好神奇啊
学习学习一下撒!
教教我

目录功能,发帖的菜单栏里面有

龙隐尘L
哇塞,不明觉历啊

Guardier
719220502 发表于 2015-9-19 10:10
文件里面没有找到,维基也没有看到,你从哪里听说?

籽岷做过视频  Wiki:方块模型

zhjjhz
719220502 发表于 2015-9-19 10:13
目录功能,发帖的菜单栏里面有

第几个什么颜色,第几排。截个图可以么

719_Lokii
Guardier 发表于 2015-9-19 12:04
籽岷做过视频  Wiki:方块模型

我的这篇教程就是从model搬来的,如果有可否给个地址?

fs200
迷之精华
另外有模型制作器XD

s994154391
大神留名

laoyeQAQ
支持楼主

Guardier
719220502 发表于 2015-9-19 13:44
我的这篇教程就是从model搬来的,如果有可否给个地址?

http://minecraft-zh.gamepedia.com/1.9   

719_Lokii
Guardier 发表于 2015-9-20 18:28
http://minecraft-zh.gamepedia.com/1.9

以英文维基为准没有找到
可能是先前计划然后删除

gundamMC
在模型里面应用了藤蔓的材质游戏里面不会上色肿么办QAQ _(:зゝ∠)_

WangJiarun2004
表示不懂

WangJiarun2004
但我觉得还是不错

WangJiarun2004
沐苽 发表于 2015-9-9 00:03
额 小白完全不懂

呵呵,升下级,水一下

WangJiarun2004
还是水一下            

小寒2015
小白表示完全看不懂

逆达
太棒了!大触!

MsYqgzt
http://www.mcbbs.net/thread-479128-1-1.html
楼主能讲讲这个么?

719_Lokii
MsYqgzt 发表于 2015-9-21 19:57
http://www.mcbbs.net/thread-479128-1-1.html
楼主能讲讲这个么?

不是相同的么?
物品模型里面有写

Guardier
719220502 发表于 2015-9-20 21:55
以英文维基为准没有找到
可能是先前计划然后删除

也许吧!

telunsu
感觉完全看不懂啊{:10_527:}

末地烛
719220502 发表于 2015-9-3 15:50
@冥王星人 @sabo970 6000字申精~

版主的悲哀

下一页 最后一页