用户:MashKJo/1.12.2模组开发教程/9.第一个方块:修订间差异

→‎添加方块对应的物品形式:​ // Edit via Wikiplus
 
== 为方块和ItemBlock提供模型和材质文件 ==
和物品不同,方块的模型文件,并不是通过代码来指定的,而是通过<code>assets/[modid]/blockstates</code>路径下的与方块注册名同名的.json文件来指定的,例如,对于我们给前文添加的红宝石块:
 
<code>src/main/resources/assets/tutorial_mod/blockstates/ruby_block.json:</code>
 
{
"variants":{
"normal":{
"model":"tutorial_mod:ruby_block"
}
}
}
 
这个文件的各部分内容都是什么意思,会在后面讲到,不过有一处是显而易见的:该文件把我们的方块的模型文件映射到了<code>assets/[modid]/models/block/ruby_block.json</code>这个文件。那么,再来看看模型文件的内容:
 
<code>src/main/resources/assets/tutorial_mod/models/block/ruby_block.json:</code>
 
{
"parent": "block/cube_all",
"textures":{
"all": "tutorial_mod:blocks/ruby_block"
}
}
 
由于我们要添加的红宝石块是类似于原版的铁块、金块等方块的——六个面的材质都一样,所以我们直接指定该模型文件的父模型为<code>assets/minecraft/models/block/cube_all.json</code>,然后我们就可以指定所有(all)面的材质文件了。我们可以看出,"parent"用于指定模型的父模型文件。之前讲过的物品模型文件,其父模型文件实际上是<code>assets/minecraft/models/item/generated.json</code>,这个模型文件主要设定了物品材质的默认几何变换。
 
读者翻阅原版的模型文件时,会发现这些模型的最终父模型是"builtin/generated",这实际上不指代一个具体的模型文件,它的意思是“交给相关的渲染代码处理”。
 
如果我想新增一个六个面材质不是全相同的方块呢?你可以继承原版其他的模型文件,如:<code>block/cube_column</code>、<code>block/cube_directional</code>等等。或者你就可以直接继承<code>block/cube</code>,然后你手动指定方块的六个面的材质和粒子效果材质的文件路径,也可以,但是一般没必要。
 
把绘制好的材质文件放到对应路径中,进入游戏,就可以看到世界中的方块的材质已经被正确渲染了。
 
但是,方块的物品形式仍然是紫黑色的,我们还需要给它声明模型。首先用<code>ModelLoader#setCustomModelResourceLocation</code>将它和一个ModelResourceLocation绑定,再:
 
<code>src/main/resources/assets/tutorial_mod/models/item/ruby_block.json:</code>
 
{
"parent": "tutorial_mod:block/ruby_block"
}
 
没错,我们把它的父模型指定为之前的方块模型即可,MC的相关代码会自动把该物品的样子渲染成方块斜着放的样子的。
 
现在进入游戏测试,应该真的没什么问题了。
行政员、​优秀编辑者、​界面管理员、​监督员、​管理员、​小部件编辑者
3,334

个编辑