附加包小册 §07:第一个方块

方琉璃 Lv3

附加包也允许我们通过数据驱动的方式添加一个方块,与物品类似,方块的数据驱动文件也由两部分构成:

  • 行为文件
  • 资源文件

行为文件

在我们的行为包下新建blocks文件夹,然后创建一个<方块ID>.json文件。

[!TIP]
文件不一定必须按照<方块ID>.json的格式进行命名,这里这么做是为了方便后续查找;

我们也可以把这个文件创建在blocks的子文件夹下。

在这个文件中写入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
{
"format_version": "1.21.40",
"minecraft:block": {
"description": {
"identifier": "example:first_block",
"menu_category": {
"category": "construction"
}
},
"components": {}
}
}

format_version是文件使用的格式版本,这里是 1.20.40;

description中:

  • identifier设置了方块的命名空间 ID,注意这里的命名空间是example,在实际的项目中不建议使用;
  • menu_category设置了方块在创造模式物品栏的位置,category会设置物品的分类,group会设置物品的分组;
    • 一般地,category可以填natureequipmentconstructionitems
    • 一般地,group可以填任意原版分组的本地化字符串,注意设置的分组要与分类相对应;
    • 我们也可以通过item_catalog添加自定义分组。

components中,我们可以为方块添加组件,每一个组件都可以为方块添加相应的功能,接下来我们就为其添加一些基础组件。

添加组件

components对象下添加如下内容:

1
2
3
4
5
6
7
8
"minecraft:destructible_by_mining": {
"seconds_to_destroy": 3
},
"minecraft:destructible_by_explosion": {
"explosion_resistance": 3
},
"minecraft:map_color": "#ffffff",
"minecraft:loot": "loot_tables/blocks/first_block.json"

这些组件的功能为:

  • minecraft:destructible_by_mining组件设置了挖掘方块所需要的时间,这里统一设置为 3;
  • minecraft:destructible_by_explosion组件设置了方块的爆炸抗性,这里设置为 3;
  • minecraft:map_color设置了方块在地图上显示的颜色;
  • minecraft:loot设置了方块被挖掘后掉落的战利品。

现在,我们的文件应该是这样的了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"format_version": "1.21.40",
"minecraft:block": {
"description": {
"identifier": "example:first_block",
"menu_category": {
"category": "construction"
}
},
"components": {
"minecraft:destructible_by_mining": {
"seconds_to_destroy": 3
},
"minecraft:destructible_by_explosion": {
"explosion_resistance": 3
},
"minecraft:map_color": "#ffffff",
"minecraft:loot": "loot_tables/blocks/first_block.json"
}
}
}

资源文件

进行到这一步进入游戏,与自定义物品类似,我们就可以在创造模式物品栏的「建筑」分类看到我们的自定义物品了,然而这时它使用了默认纹理,并且名称为一大串英文字符。

接下来,我们将会学习如何为自定义方块的添加客户端资源。

添加纹理

因为我们的方块没有应用自定义模型,所以在资源包根目录下的blocks.json下定义纹理即可:

1
2
3
4
5
6
7
{
"format_version": "1.21.40",
"example:first_block": {
"textures": "example.first_block", // 将纹理名设置为`example.first_block`
"sound": "stone"
}
}

我们将方块的纹理名设置为了example.first_block,为了使游戏正常读取纹理,我们需要在资源包的textures文件夹创建一个terrain_texture,映射纹理名和纹理路径。

假定我们的纹理为textures/blocks/first_block.png,则应该在其中写入:

1
2
3
4
5
6
7
8
9
10
11
{
"texture_name": "atlas.terrain",
"resource_pack_name": "第一个附加包",
"padding": 8,
"num_mip_levels": 4,
"texture_data": {
"example.first_block": {
"textures": "textures/blocks/first_block"
}
}
}

其中:

  • resource_pack_name设置了资源包的名称;
  • texture_name设置纹理类型,因为要定义方块纹理名,因此只能填写atlas.terrain
  • texture_data对象中定义了所有方块的纹理名,其按照如下格式:
1
2
3
4
5
6
7
8
9
10
11
"texture_data": {
"<纹理名1>": {
"textures": "<纹理路径1>"
},
"<纹理名2>": {
"textures": "<纹理路径2>"
},
"<纹理名3>": {
"textures": "<纹理路径3>"
}
}

[!IMPORTANT]
纹理路径中不要出现后缀名

应用纹理与模型

回到我们的行为文件,我们这时需要利用minecraft:geometry组件为方块添加一个模型,例如:

1
2
3
"minecraft:geometry": {
"identifier": "minecraft:geometry.full_block"
}

再使用minecraft:material_instances组件为方块的面分配纹理:

1
2
3
4
5
"minecraft:material_instances": {
"*": {
"texture": "example.first_block"
}
}

在其中,*表示所有方块的所有面,texture设置了要应用的纹理名。

当然,我们可以为方块的每一个面分配不同的纹理,如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
"minecraft:material_instances": {
"down": {
"texture": "..."
},
"up": {
"texture": "..."
},
"north": {
"texture": "..."
},
"*": {
"texture": "..."
}
}

此时,*代表了除了downupnorth之外的所有面。

方块名称

在语言文件中添加如下内容:

1
tile.example:first_block.name=第一个方块

这时,将附加包导入进游戏,我们就可以看到新添加的自定义方块了拥有了完整的行为与资源了。

小结

在本节中,我们了解了:

  • 如何加入自定义方块;
  • 如何为自定义方块添加资源。

接下来,我们将会了解最困难的一部分——自定义实体。

  • 标题: 附加包小册 §07:第一个方块
  • 作者: 方琉璃
  • 创建于 : 2026-01-07 00:00:00
  • 更新于 : 2026-08-13 19:23:00
  • 链接: https://fanglimao.github.io/2026/01/06/addons/block/
  • 版权声明: 本文章采用 CC BY-SA 4.0 进行许可。
评论