星E君
本帖最后由 天迹灬战狂神 于 2017-1-14 08:22 编辑

效果展示:


视频教程:

首作者:SimplySarc
https://www.youtube.com/user/SimplySarc


我使用到的资源包:
http://pan.baidu.com/s/1i4KZoJb

解压后使用(我压缩时多压缩了一层→_→)
文字教程:



如图,在游戏里增加方块并不会和已有的方块材质发生冲突,而且在日常游戏时,几乎发现不了游戏材质发生了变化。
原理1 就是:
我并没有增加方块的材质,而是增加了物品的材质。
我把钻石锄损伤的材质进行了更改,将他伤害从1-14的物品材质改为了方块材质。(一般性你也不会在生存用钻石锄吧...?)



材质的更改非常容易:
资源包文件中
\assets\minecraft\models\item
item文件夹内有一个diamond_hoe.json文件,这个是钻石锄的模型文件。

原版钻石锄的模型文件是这样的:

  1. {
  2.     "parent": "item/handheld",
  3.     "textures": {
  4.         "layer0": "items/diamond_hoe"
  5.     }
  6. }
复制代码

但是如果你想要在这个模型上加入别的模型,就复杂了。

这是我现在的钻石锄模型文件里的内容:


  1. {
  2.     "parent": "item/handheld",
  3.     "textures": {
  4.         "layer0": "items/diamond_hoe"
  5.     },
  6.         "overrides": [
  7.                 { "predicate": { "damage": 0.000640204866}, "model": "blocks/new_block1"},
  8.                 { "predicate": { "damage": 0.00128040973}, "model": "blocks/new_block2"},        
  9.                 { "predicate": { "damage": 0.0019206146}, "model": "blocks/new_block3"},
  10.                 { "predicate": { "damage": 0.00256081946}, "model": "blocks/new_block4"},
  11.                 { "predicate": { "damage": 0.00320102433}, "model": "blocks/new_block5"},
  12.                 { "predicate": { "damage": 0.00384122919}, "model": "blocks/new_block6"},
  13.                 { "predicate": { "damage": 0.00448143406}, "model": "blocks/new_block7"},
  14.                 { "predicate": { "damage": 0.00512163892}, "model": "blocks/new_block8"},
  15.                 { "predicate": { "damage": 0.00576184379}, "model": "blocks/new_block9"},
  16.                 { "predicate": { "damage": 0.00640204866}, "model": "blocks/new_block10"},
  17.                 { "predicate": { "damage": 0.00704225352}, "model": "blocks/new_block11"},
  18.                 { "predicate": { "damage": 0.00768245839}, "model": "blocks/new_block12"},
  19.                 { "predicate": { "damage": 0.00832266325}, "model": "blocks/new_block13"},
  20.                 { "predicate": { "damage": 0.00896286812}, "model": "blocks/new_block14"}        
  21.         ]

  22. }


复制代码

可以看到,我在后面加入了14个
  1. { "predicate": { "damage": 0.000640204866}, "model": "blocks/new_block1"},
复制代码

"predicate": { "damage": 0.000640204866}
是指我要在伤害值为0.000640204866的时候,调用我指定的模型。
而这个0.000640204866就是1/1562,即1除以钻石锄耐久值。当钻石锄减少了0.000640204866耐久时,调用我指定的模型。

第二行变成了

{ "predicate": { "damage": 0.00128040973}
是因为2/1562

第三同理

"model": "blocks/new_block1"
是指调用模型是,要调用blocks/new_block1这个模型。这个new_block1是我自己写的一个文件,它里面的内容如下:

  1. {
  2.     "parent": "block/cube_all",
  3.     "display": {
  4.         "thirdperson_righthand": {
  5.             "rotation": [ 10, -45, 170 ],
  6.             "translation": [ 0, 1.5, -2.75 ],
  7.             "scale": [ 0.375, 0.375, 0.375 ]
  8.         },
  9.         "head": {
  10.                         "rotation": [ -30, 0, 0 ],
  11.                         "translation": [ 0, -30.75, -7.25 ],
  12.                         "scale": [ 3.0125, 3.0125, 3.0125 ]
  13.                 },
  14.         "ground": {
  15.             "rotation": [ 30, 30, 30 ],
  16.             "translation": [ 0, 0, 0 ],
  17.             "scale": [ 4, 4, 4 ]
  18.         }
  19.     },
  20.     "textures": {
  21.         "all": "items/new_block1"
  22.     }
  23. }
复制代码



感觉第一页太长了→_→
翻页吧



2021.12 数据,可能有更多内容效果展示:
http://static.hdslb.com/miniloader.swf?aid=7921579&page=1


视频教程:
http://player.youku.com/player.php/sid/XMjA5MTI4MTY3Mg==/v.swf


首作者:SimplySarchttps://www.youtube.com/user/SimplySarc



我使用到的资源包:http://pan.baidu.com/s/1i4KZoJb
解压后使用(我压缩时多压缩了一层→_→)文字教程:



如图,在游戏里增加方块并不会和已有的方块材质发生冲突,而且在日常游戏时,几乎发现不了游戏材质发生了变化。原理1 就是:我并没有增加方块的材质,而是增加了物品的材质。我把钻石锄损伤的材质进行了更改,将他伤害从1-14的物品材质改为了方块材质。(一般性你也不会在生存用钻石锄吧...?)



材质的更改非常容易:
资源包文件中
\assets\minecraft\models\item
item文件夹内有一个diamond_hoe.json文件,这个是钻石锄的模型文件。


原版钻石锄的模型文件是这样的:

代码:

  1. {
  2.     "parent": "item/handheld",
  3.     "textures": {
  4.   "layer0": "items/diamond_hoe"
  5.     }
  6. }

但是如果你想要在这个模型上加入别的模型,就复杂了。


这是我现在的钻石锄模型文件里的内容:

代码:


  1. {
  2.     "parent": "item/handheld",
  3.     "textures": {
  4.   "layer0": "items/diamond_hoe"
  5.     },
  6.   "overrides": [
  7.     { "predicate": { "damage": 0.000640204866}, "model": "blocks/new_block1"},
  8.     { "predicate": { "damage": 0.00128040973}, "model": "blocks/new_block2"}, 
  9.     { "predicate": { "damage": 0.0019206146}, "model": "blocks/new_block3"},
  10.     { "predicate": { "damage": 0.00256081946}, "model": "blocks/new_block4"},
  11.     { "predicate": { "damage": 0.00320102433}, "model": "blocks/new_block5"},
  12.     { "predicate": { "damage": 0.00384122919}, "model": "blocks/new_block6"},
  13.     { "predicate": { "damage": 0.00448143406}, "model": "blocks/new_block7"},
  14.     { "predicate": { "damage": 0.00512163892}, "model": "blocks/new_block8"},
  15.     { "predicate": { "damage": 0.00576184379}, "model": "blocks/new_block9"},
  16.     { "predicate": { "damage": 0.00640204866}, "model": "blocks/new_block10"},
  17.     { "predicate": { "damage": 0.00704225352}, "model": "blocks/new_block11"},
  18.     { "predicate": { "damage": 0.00768245839}, "model": "blocks/new_block12"},
  19.     { "predicate": { "damage": 0.00832266325}, "model": "blocks/new_block13"},
  20.     { "predicate": { "damage": 0.00896286812}, "model": "blocks/new_block14"} 
  21.   ]

  22. }



可以看到,我在后面加入了14个

代码:

  1. { "predicate": { "damage": 0.000640204866}, "model": "blocks/new_block1"},

"predicate": { "damage": 0.000640204866}
是指我要在伤害值为0.000640204866的时候,调用我指定的模型。
而这个0.000640204866就是1/1562,即1除以钻石锄耐久值。当钻石锄减少了0.000640204866耐久时,调用我指定的模型。

第二行变成了

{ "predicate": { "damage": 0.00128040973}
是因为2/1562


第三同理


"model": "blocks/new_block1"
是指调用模型是,要调用blocks/new_block1这个模型。这个new_block1是我自己写的一个文件,它里面的内容如下:

代码:

  1. {
  2.     "parent": "block/cube_all",
  3.     "display": {
  4.   "thirdperson_righthand": {
  5.    "rotation": [ 10, -45, 170 ],
  6.    "translation": [ 0, 1.5, -2.75 ],
  7.    "scale": [ 0.375, 0.375, 0.375 ]
  8.   },
  9.   "head": {
  10.    "rotation": [ -30, 0, 0 ],
  11.    "translation": [ 0, -30.75, -7.25 ],
  12.    "scale": [ 3.0125, 3.0125, 3.0125 ]
  13.     },
  14.   "ground": {
  15.    "rotation": [ 30, 30, 30 ],
  16.    "translation": [ 0, 0, 0 ],
  17.    "scale": [ 4, 4, 4 ]
  18.   }
  19.     },
  20.     "textures": {
  21.   "all": "items/new_block1"
  22.     }
  23. }



感觉第一页太长了→_→
翻页吧






代码:

  1. {
  2.     "parent": "block/cube_all",
  3.     "display": {
  4.   "thirdperson_righthand": {
  5.    "rotation": [ 10, -45, 170 ],
  6.    "translation": [ 0, 1.5, -2.75 ],
  7.    "scale": [ 0.375, 0.375, 0.375 ]
  8.   },
  9.   "head": {
  10.    "rotation": [ -30, 0, 0 ],
  11.    "translation": [ 0, -30.75, -7.25 ],
  12.    "scale": [ 3.0125, 3.0125, 3.0125 ]
  13.     },
  14.   "ground": {
  15.    "rotation": [ 30, 30, 30 ],
  16.    "translation": [ 0, 0, 0 ],
  17.    "scale": [ 4, 4, 4 ]
  18.   }
  19.     },
  20.     "textures": {
  21.   "all": "items/new_block1"
  22.     }
  23. }



可以看到我自己写的这个文件有几个重点(来来来,跟我来划一下重点)


"parent"
"display"
"textures"
这三个分别是指:
指定新的模型为方块材质
新的模型的显示角度(后面会继续说明)
这个模型所要调用的材质


总的来说:
当一个钻石锄的耐久掉了1时,他的模型会调用blocks(自己创建的文件夹)里的new_block1(自己写的json文件)模型。
然后blocks/new_block1这个模型文件在把模型变成block/cube_all的同时,调用items/new_block1这个材质文件。


简单来说:
当一个钻石锄的耐久掉了1时,他的模型会变成一个方块,同时这个方块的材质会变成指定的new_block1



大约整个材质的替换就是这么简单,14个不同材质得加入过程基本都是重复的。
不过有时候如果要加入别的方块模型(比如说书架,他不是六个面全部用相同材质)


你就要在我自己写的文件里用

代码:

  1. "parent": "block/cube_column",

代替。


大约的格式就是:

代码:


  1. {
  2.     "parent": "block/cube_column",
  3.     "display": {
  4.   "thirdperson_righthand": {
  5.    "rotation": [ 10, -45, 170 ],
  6.    "translation": [ 0, 1.5, -2.75 ],
  7.    "scale": [ 0.375, 0.375, 0.375 ]
  8.   },
  9.   "head": {
  10.    "rotation": [ -30, 0, 0 ],
  11.    "translation": [ 0, -30.75, -7.25 ],
  12.    "scale": [ 3.0125, 3.0125, 3.0125 ]
  13.     },
  14.   "ground": {
  15.    "rotation": [ 30, 30, 30 ],
  16.    "translation": [ 0, 0, 0 ],
  17.    "scale": [ 4, 4, 4 ]
  18.   }
  19.     },
  20.     "textures": {
  21.   "end": "items/new_block1_2",
  22.   "side": "items/new_block1"
  23.     }
  24. }



没有多少改变,但是parent和texture要进行小小的调整。


cube变成cube_column,

代码:

  1.     "textures": {
  2.   "all": "items/new_block1"
  3.     }
变成

代码:

  1.     "textures": {
  2.   "end": "items/new_block1_2",
  3.   "side": "items/new_block1"
  4.     }
将正方体的模型换成圆柱体的模型。(如果有必要我会发个帖子详细介绍,但是这里我就不多说了)


现在,我的材质和模型已经做好了。那么我怎么把一个物品变成一个方块呢?
所以你必须想一个办法,在不更改和影响已有所有方块的使用的情况下。将这个材质覆盖上某个方块。

如果你把我做的新材质的钻石锄扔地上,你会看到这么一个奇观:



当然,大小是能改变的。需要在display,ground中的scale里进行调整。


翻页翻页翻页





所以这个方法就是:刷怪笼


如果你把我之前做出来的材质,放到盔甲架的头部,你会得到这么一个效果:




可以看到我们做出来的新材质非常的大,角度也根据我之前的display发生了改变。


代码:

  1. {
  2.     "parent": "block/cube_all",
  3.     "display": {
  4.   "thirdperson_righthand": {
  5.    "rotation": [ 10, -45, 170 ],
  6.    "translation": [ 0, 1.5, -2.75 ],
  7.    "scale": [ 0.375, 0.375, 0.375 ]
  8.   },
  9.   "head": {
  10.    "rotation": [ -30, 0, 0 ],
  11.    "translation": [ 0, -30.75, -7.25 ],
  12.    "scale": [ 3.0125, 3.0125, 3.0125 ]
  13.     },
  14.   "ground": {
  15.    "rotation": [ 30, 30, 30 ],
  16.    "translation": [ 0, 0, 0 ],
  17.    "scale": [ 4, 4, 4 ]
  18.   }
  19.     },
  20.     "textures": {
  21.   "all": "items/new_block1"
  22.     }
  23. }



第二行的display中的"head"部分


他的角度我设置为
"rotation": [ -30, 0, 0 ],
"translation": [ 0, -30.75, -7.25 ],
"scale": [ 3.0125, 3.0125, 3.0125 ]
就是为了当我把盔甲架放入刷怪笼时,这个材质能正正好好覆盖整个刷怪笼。

head以外的部分影响不大,但是如果你想浪一下的话,就自己试着调整这些数值~
比如你可以这样:


没错,这是一个骰子大小的铁矿





现在就可以开始创造新的材质的方块了。


首先你要生成一个刷怪笼,指令:

代码:

  1. /setblock ~ ~-1 ~ mob_spawner


在这里我把刷怪笼的材质进行了一个微调(移除了外面的笼子的材质)
不然做出来的方块最上方会有刷怪笼显示出来


然后将这个刷怪笼停止工作,指令:

代码:

  1. /blockdata ~ ~-1 ~ {RequiredPlayerRange:0s}






再把一个隐身的盔甲架放到刷怪笼里面,指令:

代码:

  1. /blockdata ~ ~-1 ~ {SpawnData:{id:"minecraft:armor_stand",Invisible:1,Marker:1}}






最后把有损耗的钻石锄放到盔甲架的头部:

代码:

  1. /blockdata ~ ~-1 ~ {SpawnData:{ArmorItems:[0:{},1:{},2:{},3:{id:"minecraft:diamond_hoe",Count:1b,Damage:1s,tag:{Unbreakable:1}}]}}
最后这个指令的Damage:1s部分就是变换你的材质时需要调整的伤害值。
如果换成Damage:2s,他就会调取
{ "predicate": { "damage": 0.00128040973}, "model": "blocks/new_block2"},
这部分模型,而不再是第一个。






可以发现这个方块歪了,但是你重新进入一下游戏他就近乎完美的和刷怪笼重叠了


感谢lrf8643提供的单指令创作新方块,只需要更改
3:{id:minecraft:diamond_hoe,Count:1b,Damage:1s}
中Damage后面的1改为别的数就好了


代码:



  1. /give @p minecraft:mob_spawner 1 0
  2.   {BlockEntityTag:
  3.     {id:"MobSpawner",
  4.     SpawnData:
  5.    {id:"minecraft:armor_stand",
  6.    ArmorItems:
  7.   [0:{},
  8.   1:{},
  9.   2:{},
  10.   3:{id:minecraft:diamond_hoe,Count:1b,Damage:1s}
  11.   ],
  12.    Marker:1b,
  13.    Invisible:1b
  14.    },
  15.     display:
  16.    {Name:"盔甲架"},
  17.     SpawnCount:0,
  18.     SpawnRange:4,
  19.     RequiredPlayerRange:0,
  20.     Delay:0,
  21.     MinSpawnDelay:300,
  22.     MaxSpawnDelay:1800,
  23.     MaxNearbyEntities:6,
  24.     SpawnPotentials:[]
  25.     }
  26.   }





好,那么这个教程就先到这里!


如果还有什么不理解的话欢迎回复提问,我也会尽可能回答你。


这么好的售后服务还不快给5星好评支持一下么,亲?



同时很感谢@⊙v⊙ 的帮助_(:з」∠)_
http://www.mcbbs.net/thread-660427-1-1.html


@pca006132 @乙烯_中国 @尼玛乄骑士 @lrf8643 @pineapple_



pineapple_
啊哈在这里啊,嗯很良心啊

残念战争服
好东西  收了   谢谢楼楼

719_Lokii
模型很多的话,可以写个parent文件,方便维护
eg:

new_block.json
  1. {
  2.     "parent": "block/cube_all",
  3.     "display": {
  4.         "thirdperson_righthand": {
  5.             "rotation": [ 10, -45, 170 ],
  6.             "translation": [ 0, 1.5, -2.75 ],
  7.             "scale": [ 0.375, 0.375, 0.375 ]
  8.         },
  9.         "head": {
  10.             "rotation": [ -30, 0, 0 ],
  11.              "translation": [ 0, -30.75, -7.25 ],
  12.              "scale": [ 3.0125, 3.0125, 3.0125 ]
  13.         },
  14.         "ground": {
  15.             "rotation": [ 30, 30, 30 ],
  16.             "translation": [ 0, 0, 0 ],
  17.             "scale": [ 4, 4, 4 ]
  18.         }
  19.     },
  20.    "textures": {
  21.         "all": "#str"   
  22.     }
  23. }
复制代码

new_block1.json
  1. {"parent": "block/new_block","texture": {"str": "items/new_block1"}}
复制代码
new_block2.json
  1. {"parent": "block/new_block","texture": {"str": "items/new_block2"}}
复制代码
new_blockn.json
  1. {"parent": "block/new_block","texture": {"str": "items/new_blockn"}}
复制代码

...







TNT嘉音
版本多少。

lrf8643
我又来了。发现你的材质包出问题。我给你新做了一个。只留下必要的。放在最上方不会影响其他材质包(除了刷怪笼和钻石锄)。
链接: https://pan.baidu.com/s/1kVFLOt5 密码: wzfk(伪装方块)
你应该能看懂,我就直接上图了。








指令包含在材质包里面,直接一步到位的指令。










乙烯_中国
719220502 发表于 2017-1-13 21:31
模型很多的话,可以写个parent文件,方便维护
eg:

就该这么做

无言问苍天
原来是材质包模型= =不错,支持一下

7628226
右边那个是金矿石?

lrf8643
我解压出来,你的贴图都没了。。。。
你解压看看。不知道除了什么问题。我用的360压缩。

星E君
lrf8643 发表于 2017-1-15 08:15
我解压出来,你的贴图都没了。。。。
你解压看看。不知道除了什么问题。我用的360压缩。 ...

我这里没问题啊...

用的也是360....

lrf8643
天迹灬战狂神 发表于 2017-1-15 21:38
我这里没问题啊...

用的也是360....

你看吧,item没有。看你写的json,你的贴图都在item文件夹。。。。

星E君
本帖最后由 天迹灬战狂神 于 2017-1-15 12:05 编辑
lrf8643 发表于 2017-1-15 08:28
你看吧,item没有。看你写的json,你的贴图都在item文件夹。。。。

不可能啊。。我压缩包完全没错误。。。
我再看看百度盘的文件有没有问题

langyo
可以的,之前乙烯导入出来的普通disco也是这原理

@乙烯_中国 都这样了你还不给评分?

Because.
厉害了
那么是不是也可以利用这个机制在原版添加很多物品材质
RPG地图就可以做很多的装备

星E君
Because. 发表于 2017-6-5 20:13
厉害了
那么是不是也可以利用这个机制在原版添加很多物品材质
RPG地图就可以做很多的装备 ...

物品材质的话只需要更改钻石锄就好了,不用管其他的刷怪笼什么的

zs2317433660
很不错,这很良心的。

a5527444
还有这种操作?!学习了,感谢楼主!

sjx
一般性你也不会在生存用钻石锄吧...?

当然要用:(Advancement [minecraft:husbandry/break_diamond_hoe])
  1. {
  2.     "display": {
  3.         "icon": {
  4.             "item": "minecraft:diamond_hoe"
  5.         },
  6.         "title": {
  7.             "translate": "advancements.husbandry.break_diamond_hoe.title"
  8.         },
  9.         "description": {
  10.             "translate": "advancements.husbandry.break_diamond_hoe.description"
  11.         },
  12.         "frame": "challenge"
  13.     },
  14.     "parent": "minecraft:husbandry/plant_seed",
  15.     "rewards": {
  16.         "experience": 100
  17.     },
  18.     "criteria": {
  19.         "broke_hoe": {
  20.             "trigger": "minecraft:item_durability_changed",
  21.             "conditions": {
  22.                 "item": {
  23.                     "item": "minecraft:diamond_hoe"
  24.                 },
  25.                 "durability": -1
  26.             }
  27.         }
  28.     }
  29. }
复制代码

我是小童鞋
有一些地方不懂,可否私聊帮助我?

PHontdoge棒冰
厉害了 还真说的和标题一样

1377023219



楼主,为什么我这么做会出现材质丢失?新人没有弄过材质包,想学习一下。
想把被替换的axe,掉了耐久,就重新变成钻石锄,可惜游戏里面丢失材质。

牙牙big
6666666666666666

星E君
1377023219 发表于 2017-8-24 10:09
楼主,为什么我这么做会出现材质丢失?新人没有弄过材质包,想学习一下。
想把被替换的axe,掉了耐久, ...

第一张图,第五行(就是只有一个}的那行)

你少了一个","在最后,导致texture和overrides没有分开

应该是这个问题,如果还不行的话就要问问专门画材质的大神了

1377023219
天迹灬战狂神 发表于 2017-8-29 12:29
第一张图,第五行(就是只有一个}的那行)

你少了一个","在最后,导致texture和overrides没有分开

有没有官方的材质包Demo呢?最近想去学学材质包里面的json,不知道从哪里开始。

星E君
1377023219 发表于 2017-8-28 23:55
有没有官方的材质包Demo呢?最近想去学学材质包里面的json,不知道从哪里开始。 ...

version/版本文件夹/版本.jar/assets/minecraft

就是官方的材质

wu_tian吴天2
本帖最后由 wu_tian吴天2 于 2019-3-25 20:40 编辑

LZ,我有个大胆的想法,不知对错,而且提出时间有点晚,你不要建议,就是如果把这个钻石锄换成胡萝卜吊杆会不会更好:因为它有个特性,就是特殊材质只能加入无法破坏才会显示(这很重点),原版一般不会需要无法破坏,而且就算要,我们也可以把加载模型的那一层耐久调到负数以下,这样就根本不可见,再加上个无法破坏..美滋滋2333:详见帖子:http://**/thread-278778-1-1.html

wu_tian吴天2
wu_tian吴天2 发表于 2019-3-25 20:30
LZ,我有个大胆的想法,不知对错,而且提出时间有点晚,你不要建议,就是如果把这个钻石锄换成胡萝卜吊杆会 ...

mc
.netease.
com
这样可能可以好点

星E君
wu_tian吴天2 发表于 2019-3-25 07:30
LZ,我有个大胆的想法,不知对错,而且提出时间有点晚,你不要建议,就是如果把这个钻石锄换成胡萝卜吊杆会 ...

一般性这种道具的使用,只会给冒险模式的玩家
所以无法破坏其实并没有什么区别

wu_tian吴天2
天迹灬战狂神 发表于 2019-3-28 01:22
一般性这种道具的使用,只会给冒险模式的玩家
所以无法破坏其实并没有什么区别 ...

不过这倒也是,没人会选择用钻石锄锄地(除非是炫富