Minecraft mod制作简易教程(四)——创建一个方块

本教程详细介绍了如何在Minecraft中创建自定义方块,包括方块的注册、材质设定、状态管理及复杂模型构建。从基本原理到高级技巧,涵盖了方块的全方位定制方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


方块的许多性质都可以和物品如法炮制,关于简单方块这里不加赘述

一、注册一个方块

当我们注册一个方块的时候,我们还会同时注册一个物品,对,就是玩家手里拿的其实是一个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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值