- 致编者:请牢记我们的域名wiki.mcbe-dev.net!
- 致编者:欢迎加入本Wiki的官方交流QQ群或Discord服务器!
- 基岩版1.19.31现已发布!(了解更多)
- Inner Core现已支持Xbox模组联机!(了解更多)
- 如果您是第一次来到本Wiki,欢迎注册一个账户
- 点击顶部的“编辑”或“编辑源代码”按钮即可编辑当前页面
- 请知悉:在不登录时也可以编辑和新建页面,但是您当前的IP地址会记录在编辑历史中
教程:制作附加包/地物/地物文件
概述[编辑]
地物(features)文件存放于行为包的 features 文件夹下,用于定义某个地物的生成结构。
地物文件可以单独存在,也可由多个子地物文件组合而成。事实上,在Minecraft中,大多数地物都是由多个子地物链式组合而成的(如带有蜂巢的树是由树的地物文件与生成蜂巢的地物文件组合而成)。
添加地物[编辑]
开发者可在行为包的 features 文件夹下新建 json 文件用于储存单个地物,游戏引擎在加载地物配置时,会默认强制将单个 json 文件识别为一个地物配置。
所有的地物都应当在 format_version 字段内指定对应的版本,开发者需为每个地物定义一个形如 namespace:identifier 的标识符,其中 namespace 为其命名空间,用于鉴别该地物归属于哪个行为包,命名空间的缺失会导致游戏报错,同时可能出现未知的错误;identifier 为该地物的名称。同时,地物文件名称必须与其ID相同(不含命名空间)
Json结构[编辑]
地物文件的json结构如下
{
"format_version": "1.13.0", //适配的游戏版本,最低为1.13.0
"<预制的地物配置类型>": {
"description": {
"identifier": <自定义地物的标识符>
},
//...其他属性
}
}
官方为开发者提供了如下9种不同类型的地物配置:
minecraft:single_block_feature[编辑]
单方块地物(Single Block Feature)用于在特定位置生成单个方块。
成功条件:方块被成功放置
失败条件:方块放置失败
数据结构[编辑]
属性名称 | 变量类型 | 描述 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
minecraft:single_block_feature | 对象 | 单方块地物
当此属性省略时,被放置的方块将可覆盖任意方块。 |
范例[编辑]
放置单个南瓜方块
{
"format_version": "1.13.0",
"minecraft:single_block_feature": {
"description": {
"identifier": "example:single_pumpkin_feature"
},
"places_block": "minecraft:pumpkin",
"enforce_placement_rules": true,
"enforce_survivability_rules": true,
"may_place_on": [
"minecraft:grass"
],
"may_replace": [
"minecraft:air"
]
}
}
minecraft:ore_feature[编辑]
矿石地物(Ore Feature)用于生成脉状方块群以模拟矿藏。尽管其名称为“矿石地物”,但实际上,任何方块都可以作为此地物的组成方块。
成功条件:至少一个方块被成功放置
失败条件:所有方块都放置失败
数据结构[编辑]
属性名称 | 变量类型 | 描述 | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
minecraft:ore_feature | 对象 | 矿石地物
|
范例[编辑]
沙子与安山岩中的油藏
{
"format_version": "1.13.0",
"minecraft:ore_feature": {
"description": {
"identifier": "example:oil_deposit_feature"
},
"places_block": "example:oil_block",
"count": 12,
"may_replace": [
"minecraft:sand",
{
"name": "minecraft:stone",
"states": {
"stone_type": "andesite"
}
}
]
}
}
minecraft:structure_template_feature[编辑]
结构模板地物(Structure Template Feature)可用于放置以 .mcstructure为后缀的结构。结构文件可由结构方块导出得到,放置于行为包的 structures 文件夹下;引用来自其他包的结构文件也是可行的。
成功条件:结构被成功放置
失败条件:结构放置失败
数据结构[编辑]
属性名称 | 变量类型 | 描述 | ||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
minecraft:structure_template_feature | 对象 | 结构模板地物
|
范例[编辑]
放置一个“漂浮”于空气中的热气球结构
{
"format_version": "1.13.0",
"minecraft:structure_template_feature": {
"description": {
"identifier": "example:hot_air_balloon_feature"
},
"structure_name": "example:hot_air_balloon",
"adjustment_radius": 8,
"facing_direction": "random",
"constraints": {
"unburied": {},
"block_intersection": {
"block_allowlist": [
"minecraft:air"
]
}
}
}
}
minecraft:aggregate_feature[编辑]
聚合地物(Aggregate Feature)用于以任意顺序放置一个地物集合,集合中所有子地物的输入坐标都相同。由于无法保证所有地物一定都能被放置,其子地物不应互相依赖。
成功条件:至少一个地物被成功放置
失败条件:所有地物都放置失败
数据结构[编辑]
属性名称 | 变量类型 | 描述 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
minecraft:aggregate_feature | 对象 | 聚合地物
|
范例[编辑]
在神殿周围散布多种不同植物
{
"format_version": "1.13.0",
"minecraft:aggregate_feature": {
"description": {
"identifier": "example:monument_with_flowers_feature"
},
"features": [
"monument_feature",
"scatter_white_flowers_feature",
"scatter_yellow_flower_feature"
]
}
}
minecraft:sequence_feature[编辑]
序列地物(Sequence Feature)用于按顺序放置多个地物,这里的顺序取决于它们在数组中的先后。放置过程中,上一个地物的输出位置为下一个地物的输入位置,例如:一颗树被放置于 (0, 0, 0) ,并且该地物最后一个方块被放置于 (0, 10, 0) ,则序列中的下一个地物的输入坐标为 (0, 10, 0) 。
成功条件:序列中所有地物被成功放置
失败条件:序列中任一地物放置失败。后续未被放置的地物将会被跳过。
数据结构[编辑]
属性名称 | 变量类型 | 描述 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
minecraft:sequence_feature | 对象 | 序列地物
|
范例[编辑]
在树冠上散布水果
{
"format_version": "1.13.0",
"minecraft:sequence_feature": {
"description": {
"identifier": "example:oak_tree_then_apples_feature"
},
"features": [
"oak_tree_feature",
"scatter_apples_feature"
]
}
}
minecraft:scatter_feature[编辑]
分散地物(Scatter Feature)可通过设置地物生成位置相对输入位置的偏移量和地物的生成概率来实现将地物分散到区块中的效果。
成功条件:至少放置成功了一个地物。
失败条件:未能成功放置任何地物。
数据结构[编辑]
属性名称 | 变量类型 | 描述 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
minecraft:scatter_feature | 对象 | 分散地物
|
范例[编辑]
在海平面上散布花朵
{
"format_version": "1.13.0",
"minecraft:scatter_feature": {
"description": {
"identifier": "example:scatter_flowers_feature"
},
"places_feature": "example:flower_feature",
"iterations": 10,
"scatter_chance": 50.0,
"x": {
"distribution": "uniform",
"extent": [ 0, 15 ]
},
"y": 64,
"z": {
"distribution": "uniform",
"extent": [ 0, 15 ]
}
}
}
minecraft:search_feature[编辑]
搜寻地物(Search Feature)可为指定的地物在指定范围内遍历搜寻一个有效的放置位置。搜寻地物会遵从 "search_axis" 属性所设定的轴向顺序在 "search_volume" 所设定的范围内进行遍历搜寻。例如,当 "search_axis" 值为 "-x" ,"search_volume" 在[0, 0, 0]与[5, 5, 5]之间时,该地物将会从x轴坐标值较大的位置开始沿x轴坐标值减小的方向遍历搜寻,即从x=5的层级开始搜寻,当搜寻范围内所有符合x=5的位置都检测完毕后,它才会开始检测所有符合x=4的搜寻范围内的位置,以此类推,直至搜寻范围内所有位置都被检测完毕。其余轴向条件下同理。
成功条件:有效的放置位置数与 "required_successes" 指定的数量相等。
失败条件:有效的放置位置数少于 "required_successes" 指定的数量。
数据结构[编辑]
属性名称 | 变量类型 | 描述 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
minecraft:search_feature | 对象 | 搜寻地物
|
范例[编辑]
将苹果附着到树上
{
"format_version": "1.13.0",
"minecraft:search_feature": {
"description": {
"identifier": "example:find_valid_apples_feature"
},
"places_feature": "example:apple_feature",
"search_volume": {
"min": [ -3, -3, -3 ],
"max": [ 3, 3, 3 ]
},
"search_axis": "-y",
"required_successes": 3
}
minecraft:weighted_random_feature[编辑]
加权随机地物(Weighted Random Feature)可根据权重随机选择并放置地物。每个地物的权重等于其权重值占所有地物权重值总和的百分比,权重越高,该地物被放置的可能性就越大。
成功条件:选中的地物成功被放置。
失败条件:未能成功选中的地物。
数据结构[编辑]
属性名称 | 变量类型 | 描述 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
description | 对象 |
| |||||||||
features | 数组 | 储存了所有[地物标识,权重]数组,其子元素数据结构如下:
|
范例[编辑]
选择并放置花的变种
{
"format_version": "1.13.0",
"minecraft:weighted_random_feature": {
"description": {
"identifier": "example:select_flower_feature"
},
"features": [
[ "example:white_flower_feature", 1 ],
[ "example:red_flower_feature", 2 ],
[ "example:blue_flower_feature", 1 ],
[ "example:yellow_flower_feature", 4 ]
]
}
}
minecraft:tree_feature[编辑]
方块指定[编辑]
在地物中可通过如下两种数据结构来指定方块
变量类型 | 描述 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
字符串 | 方块ID | |||||||||
对象 |
|
你知道吗[编辑]
- 自1.16版本开始mojang才强制要求开发者必须为每个地物文件的名称定义命名空间,在此之前无需定义命名空间。
- 地物文件必须依赖地物规则文件才能在游戏中发挥效用。