- 致编者:请牢记我们的域名wiki.mcbe-dev.net!
- 致编者:欢迎加入本Wiki的官方交流QQ群或Discord服务器!
- 基岩版1.19.31现已发布!(了解更多)
- Inner Core现已支持Xbox模组联机!(了解更多)
- 如果您是第一次来到本Wiki,欢迎注册一个账户
- 点击顶部的“编辑”或“编辑源代码”按钮即可编辑当前页面
- 请知悉:在不登录时也可以编辑和新建页面,但是您当前的IP地址会记录在编辑历史中
教程:制作附加包/方块
来自Minecraft基岩版开发Wiki
本教程版本为基岩版1.16及以上版本。在阅读本教程前,请先确保自身已有一定的附加包基础。如果还未掌握,请先浏览教程/开始之前,教程/包的构建,教程/运行、调试与导出和教程/本地化页面后再来学习本教程。在浏览完本教程之后,你将学会如何创建一个全新的自定义方块。
概述
自定义方块是在基岩版beta 1.12.0.2中的新增内容。[注 1]在基岩版1.16.100.56及之后的部分版本更新中, Mojang 为自定义方块提供了大量的接口,这使得自定义方块的功能大大增加,不过现在仍有绝大多数的接口未被开放。
通过自定义方块,您可以在游戏中创造出属于您的全新方块,并通过添加属性、组件和事件等内容赋予它许多有趣的特性。
添加方块
您可在行为包中的 blocks
文件夹下新增自定义的方块配置文件。其数据结构如下:
{
"format_version": "1.16.0",
"minecraft:block": {
"description": {
}, //描述
"components": {
}, //组件
"events": {
}, //事件
"permutations" [
] //置换内容
}
}
如上,方块配置文件由描述、组件、事件与置换内容四部分构成。
描述
描述 (description) 对象储存了用于描述该方块的基础信息,其数据结构如下:
属性名称 | 数据类型 | 描述 |
---|---|---|
identifier | String | 设置此方块的标识符。须包含命名空间但不得使用minecraft: 作为命名空间。(除非所编辑的方块为原版方块)
|
is_experimental | Boolean | (可选)决定了该方块是否为实验性方块。默认值为 false 。若此属性值为 true ,则该方块需开启实验性玩法才可获得。
|
properties | Object | 设置此方块所具有的一个或多个属性。例如:"test:block_property": [ 0, 1, 2, 3 ] ,其中test:block_property 为属性名称,数组中的参数为该方块此属性可能拥有的值(游戏默认该方块初始属性为所有属性数组中的第一个参数)。数组的参数类型可以为整数、小数、布尔值或字符串[注 2]。
|
register_to_creative_menu | Boolean | 设置此方块是否出现在创造模式物品栏。(基岩版1.15.0至今由于不明原因导致此API失效,待修复) |
组件
组件(components)对象决定了该方块的功能属性,您可选择并添加您需要的组件属性。
组件分为一般组件和触发器。一般组件用于定义该方块的属性,触发器用于在特定条件下使方块触发事件。
事件
事件(events)对象储存了该方块可能用到的所有事件。
您可以在一个事件中添加多个方块响应事件来使一个触发器触发多个事件:
示例:
"events": {
"test_event": {
"set_block_property": {
"minecraft:direction": 1
},
"run_command": {
"command": "say Hello world"
}
}
}
使用序列将事件并列起来也可以使一个触发器触发多个事件:
- <test_event>:事件名称
- sequence:序列
- <index>:序列的元素
- trigger:触发器[注 3]
- event:事件名称
- target:事件执行的目标,默认为self
- trigger:触发器[注 3]
- <index>:序列的元素
- sequence:序列
示例:
"events": {
"test_event": {
"sequence": [
{
"trigger": {
"event": "event_1"
}
},
{
"trigger": {
"event": "event_2"
}
}
]
},
"event_1": {
"set_block_property": {
"minecraft:direction": 1
}
},
"event_2": {
"run_command": {
"command": "say Hello world"
}
}
}
置换
置换(permutations)数组储存了该方块在对应条件下会置换或新增的对应所有组件。一般使用 query.block_property[注 4] 来获取方块属性并以此作为置换条件。
示例
{
"format_version": "1.16.0",
"minecraft:block": {
"description": {
"identifier": "test:on_interact_change_state_block",
"properties": {
"minecraft:direction": {
}
}
},
"components": {
"minecraft:loot": "loot_tables/blocks/test.json",
"minecraft:destroy_time": 0.55,
"minecraft:explosion_resistance": 2.5,
"minecraft:friction": 0.1,
"minecraft:map_color": "#FFFFFF",
"minecraft:block_light_absorption": 15,
"minecraft:block_light_emission": 15,
"minecraft:on_interact": {
"event": "test_event"
}
},
"events": {
"test_event": {
"set_block_property": {
"minecraft:direction": 1
}
}
},
"permutations" [
"condition": "query.block_property('minecraft:direction') == 1",
"components": {
"minecraft:geometry": "geometry.test"
}
]
}
}
- ↑ 基岩版1.15后,方块不能被注册到创造模式物品栏且旧版本的自定义方块无法在新版本中使用。
- ↑ 示例:
{ "minecraft:block": { "description": { "identifier": "example:test_block", "properties": { "example:integer_property": [0, 1, 2, 3], "example:string_property": ["small", "middle", "large"], "example:boolean_property": [true, false] } } } }
- ↑ 已知问题:目前无法在对象中添加事件的触发条件(
condition
)。 - ↑ query.block_property 是MoLang中的一项查询功能。
定义资源
block.json
定义纹理
动态纹理
你知道吗
- 自定义方块的Json文件名称并不要求必须与物品ID相同。