Minecraft mod制作简易教程(四)——创建一个方块
方块的许多性质都可以和物品如法炮制,关于简单方块这里不加赘述
一、注册一个方块
当我们注册一个方块的时候,我们还会同时注册一个物品,对,就是玩家手里拿的其实是一个ItemBlock。我们需要这样实现:
BlockLoader.java(部分):
@SubscribeEvent
public static void registerBlocks(RegistryEvent.Register< Block> event) {
for(Block block : blocks){
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(block),0,new ModelResourceLocation(block.getRegistryName(), “inventory”));
event.getRegistry().register(block);
}
}
@SubscribeEvent
public static void registerItems(RegistryEvent.Register< Item> event) {
for(Block block : blocks){
Item itemBlock = new ItemBlock(block).setRegistryName(block.getRegistryName());
ModelLoader.setCustomModelResourceLocation(itemBlock,0,new ModelResourceLocation(block.getRegistryName(), “inventory”));
event.getRegistry().register(itemBlock);
}
}
可以看到先注册了方块本身,再注册了对应的方块物品。
二、方块的材质与方块状态(初级)
关于模型与方块状态更多更全的教程请前往 https://minecraft-zh.gamepedia.com/模型 了解更多,本贴主要用于入门。
一个物品对应一个json文件,而一个方块需要至少三个。这里以方块Cracked Stone为例,首先是表示方块状态。
什么是方块状态
举例而言,放置一个火把,它可能竖直插在地上,也肯斜插在四个面上,一共有5种状态。一般的方块只有一种状态,可以这样写:
src\main\resources\assets\realmining\blockstates\cracked_stone.json:
{
“variants”: {
“normal”:
{ “model”: “realmining:cracked_stone” }
]
}
}
"model"句指定了这种状态对应的方块模型,对应的文件是:
src\main\resources\assets\realmining\models\block\cracked_stone.json:
{
“parent”: “block/cube_all”,
“textures”: {
“all”: “realmining:blocks/cracked_stone”
}
}
"parent"语句表示这个方块模型继承了cube_all,其主要作用是规定了自动生成物品方块材质的视角;“all”语句定义了方块的六个面都是src\main\resources\assets\realmining\textures\blocks\cracked_stone.png
我们还需要定义它对应的方块物品的模型
src\main\resources\assets\realmining\models\item\cracked_stone.json::
{
“parent”: “realmining:block/cracked_stone”,
“display”: {
“thirdperson”: {
“rotation”: [ 10, -45, 170 ],
“translation”: [ 0, 1.5, -2.75 ],
“scale”: [ 0.375, 0.375, 0.375 ]
}
}
}
其中parent表示这个物品模型由models\block\cracked_stone.json制作而来。
三、方块的材质与方块状态(中级)
我们打开游戏,发现所有的cracked stone都千篇一律,我们希望加入随机性。我们看一下src\main\resources\assets\realmining\blockstates\cracked_stone.json,发现其中有“variants”(变种)选项。参考草方块的blockstate:
{
“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” }
}
}
其中"y": 90 表示旋转90度,即加载的每一个草方块都是四种旋转状态中随机的一种。但是我想加入更丰富的纹理,我做了四种材质,希望以随机的方式出现。所以我们需要这样修改代码:
src\main\resources\assets\realmining\models\block\cracked_stone.json:
{
“variants”: {
“normal”: [
{ “model”: “realmining:cracked_stone_1” },
{ “model”: “realmining:cracked_stone_2” },
{ “model”: “realmining:cracked_stone_3” },
{ “model”: “realmining:cracked_stone_4” }
]
}
}
然后我要分别写四个block model文件,分别对应四个材质文件。我们还需要指定item model对应哪一个block model
上一张效果图:
四、方块的材质与方块状态(高级)
如果你翻看了wiki中有关模型的介绍,你会了解到模型是由一个或多个长方体组合而成的,每一个都是一个element
现在我要做一个石子方块,由大量的石子(扁平的小长方体)构成
这段代码构建了一个小立方体:
“elements”:[
{
“from”: [ 1, 0, 0 ],
“to”: [ 3, 1, 2 ],
“faces”: {
“up”: { “uv”: [ 0, 0, 2, 2 ], “texture”: “#stones” },
“down”: { “uv”: [ 2, 2, 0, 0 ], “texture”: “#stones” , “cullface”: “down” },
“north”: { “uv”: [ 2, 1, 0, 0 ], “texture”: “#stones” },
“south”: { “uv”: [ 0, 1, 2, 2 ], “texture”: “#stones” },
“west”: { “uv”: [ 1, 0, 2, 2 ], “texture”: “#stones” },
“east”: { “uv”: [ 0, 0, 1, 2 ], “texture”: “#stones” }
}]
其中各个语句的含义详见wiki。事实上,由于一共要做31个element,手输太慢,我不得不写了一个小程序帮我输出代码。
同时我们的blockstate是这样的:
{
“variants”: {
“normal”: [
{ “model”: “realmining:stones” },
{ “model”: “realmining:stones”, “y”: 90 },
{ “model”: “realmining:stones”, “y”: 180 },
{ “model”: “realmining:stones”, “y”: 270 }
]
}
}
这样我们就有了四种方向的石子。
打开游戏看看效果吧(这能大幅增加游戏卡顿!):
上一篇:Minecraft mod制作简易教程(三)——创建一个物品
https://blog.csdn.net/lyh20000420/article/details/83659172
下一篇:Minecraft mod制作简易教程(五)——本地化和国际化
https://blog.csdn.net/lyh20000420/article/details/83683966
回到目录:https://blog.csdn.net/lyh20000420/article/details/83659423