FEATURES DOCUMENTATION
Version: 1.21.50.7

索引

概述
JSON 格式
添加地物
支持的地物
minecraft:aggregate_feature
minecraft:sequence_feature
minecraft:beards_and_shavers
minecraft:cave_carver_feature
minecraft:conditional_list
minecraft:fossil_feature
minecraft:geode_feature
minecraft:growing_plant_feature
minecraft:nether_cave_carver_feature
minecraft:multiface_feature
minecraft:ore_feature
minecraft:partially_exposed_blob_feature
minecraft:rect_layout
minecraft:scan_surface
minecraft:scatter_feature
minecraft:sculk_patch_feature
minecraft:search_feature
minecraft:single_block_feature
minecraft:snap_to_surface_feature
minecraft:structure_template_feature
minecraft:surface_relative_threshold_feature
minecraft:underwater_cave_carver_feature
minecraft:tree_feature
minecraft:vegetation_patch_feature
minecraft:weighted_random_feature
附加地物
地物规则
地物规则架构
Coordinate Evaluation Order(坐标评估顺序)
Coordinate Range(坐标范围)
Feature Rule Conditions(地物规则条件)
Feature Rule Definition(地物规则定义)
Feature Rule Description(地物规则描述)
Filter Group(过滤器组)
Filter Test(过滤器测试)
Random Distribution Type(随机分布类型)
Scatter Chance(散布几率)
Scatter Params(散布参数)
返回顶部

概述

地物是散布在世界各地的装饰品。树木、植物、花朵、泉水、矿石和珊瑚等事物都是地物。基本上,如果它不是地形或生物,它可能是一个地物!
地物可以是独立的,也可以由多个子地物组成。在实践中,Minecraft 中的大多数地物都定义为两个或多个地物的链。这些链通常以在世界中放置方块的地物结束。其他地物类型控制流程,例如条件分布、顺序分布或随机分布。
返回顶部

JSON 格式

所有地物都必须通过 “format_version” 字段指定其目标版本。其余数据包含在每个受支持地物类型的独立 JSON 子对象中。这些地物类型定义地物的行为,并包含特定于该行为的属性。要有效,定义必须恰好包含这些类型对象之一。有关更多详细信息和受支持地物类型的完整列表,请参阅下面的完整地物架构。

这是一个地物示例

返回顶部

添加地物

地物是从行为包的 “features” 子文件夹中的 JSON 文件中读取的。加载将强制每个文件使用一个地物;文件名和地物的名称必须匹配。地物名称可以包含 “namespace:feature_name” 形式的命名空间,以帮助将它们与其他行为包中的地物区分开来。将文件名与地物名称匹配时,不考虑此命名空间。例如,在名为 “my_tree_feature.json” 的文件中,“my_tree_feature” 和 “my_pack_name:my_tree_feature” 都是有效的标识符。如果两个行为包定义了相同的地物名称(包括命名空间),则将使用堆栈中优先级最高包中的地物。这允许用户根据需要覆盖基本地物。
返回顶部

支持的地物

minecraft:aggregate_feature

'minecraft:aggregate_feature' 将一系列地物按任意顺序排列。集合中的所有地物都使用相同的输入位置。地物不应相互依赖,因为无法保证地物放置的顺序。
如果出现以下情况,则成功:至少成功放置了一个地物。
如果出现以下情况,则失败:无法放置所有地物。

示例:在纪念碑周围散布多种不同的植物。

返回顶部

minecraft:sequence_feature

'minecraft:sequence_feature' 按照它们在数据中出现的顺序依次放置一组地物。前一个地物的输出位置将用作下一个地物的输入位置。例如,树地物放置在 (0,0,0) 处,并放置最多 (0,10,0) 的方块。序列中的下一个地物从 (0,10,0) 开始。
成功条件:已成功放置序列中的所有地物。
如果出现以下情况,则失败:序列中的任何地物未能放置。在失败时尚未放置的地物将被跳过。

示例:将水果散布在树冠上。

返回顶部

minecraft:beards_and_shavers

'minecraft:beards_and_shavers' 将构建一个 '胡须' 或 '剃须' 空间,以便为放置地物提供一个清晰的空间。
如果出现以下情况,则成功:放置了胡须/剃须(这应该总是发生)。
如果出现以下情况,则失败:将始终返回放置位置,但不能保证内部地物放置。

示例:提供用于内部结构放置的区域

返回顶部

minecraft:cave_carver_feature

'Minecraft:cave_carver_feature' 在当前区块中穿过世界,并在当前区块周围的每个区块中以 8 径向模式雕刻一个洞穴。此地物也仅在专门放置在通道 “pregeneration_pass” 中时有效。

示例:正常雕刻洞穴。

返回顶部

minecraft:conditional_list

'minecraft:conditional_list' 将第一个合适的地物放在集合中。
将按顺序评估这些条件地物。
如果出现以下情况,则成功:条件已成功解决。
如果出现以下情况,则失败:未成功解决任何条件。

示例:为表达式分配地物

返回顶部

minecraft:fossil_feature

'Minecraft:fossil_feature' 生成一个由骨块和参数化矿石块组成的骨骼结构。
如果出现以下情况,则成功:放置化石。
在以下情况下失败:未放置化石,因为它与其他结构重叠,或者因为其边界框的角太多,被空气或流体占据。

示例:由骨块和煤矿石块组成的化石。

返回顶部

minecraft:geode_feature

'Minecraft:geode_feature' 生成岩层以模拟水晶洞。水晶洞的每一层和其中的方块都可以替换。
成功条件:在晶洞中至少放置一个方块。
如果出现以下情况,则失败:无法放置水晶洞中的所有方块。

示例:内部有绿宝石块,外部有黑曜石的钻石晶洞。

返回顶部

minecraft:growing_plant_feature

'Minecraft:growing_plant_feature' 在世界上放置了一棵正在生长的植物。生长植物是根据其生长方向锚定在天花板或地板上的柱子。
生长中的植物有一个主体和一个头部,其中头部是植物的尖端,主体由其余的方块组成。
此地物可用于定义具有可变“主体方块”和“头部方块”的生长植物,例如发光浆果。

示例:定义具有可变主体和头部方块以及高度分布的生长植物地物。

返回顶部

minecraft:nether_cave_carver_feature

'minecraft:nether_cave_carver_feature' 在当前区块的下界中凿出一个洞穴,并在当前区块周围的每个区块中以 8 个径向模式凿出一个洞穴。此地物也仅在专门放置在通道 “pregeneration_pass” 中时有效。

示例:正常雕刻下界洞穴。

返回顶部

minecraft:multiface_feature

'Minecraft:multiface_feature' 在地板/墙壁/天花板上放置一个或几个多面方块。尽管名称如此,但此地物可以放置任何方块。在放置过程中,会检查现有的世界方块,看看是否可以根据 'can_place_on' 字段中提供的列表将此地物放置在它们上面。如果未指定 'can_replace_on' 字段,则可以将 'place_block' 方块放置在任何现有方块上。
此地物还会尝试将 'place_block' 方块分布在放置该地物的世界中的位置。
成功条件:至少成功放置一个方块。
如果出现以下情况,则失败:所有方块放置都失败。

示例:洞穴中的蓝色藤蔓。

返回顶部

minecraft:ore_feature

'Minecraft:ore_feature' 放置了一条矿脉来模拟矿床。尽管名称如此,但此地物可以放置任何方块。在放置过程中,会检查现有的世界方块,看看它们是否可以根据 'replace_rules' 条目的 'may_replace' 字段中提供的列表被新的矿石方块替换。如果在 'replace_rule' 条目中没有指定 'may_replace' 字段,则矿石方块可以替换任何现有方块。
成功条件:至少成功放置了一个矿石方块。
在以下情况下失败:所有矿石方块放置都失败。

示例:不同材质的孔雀石矿石(malachite_ore)。

示例:沙子中的石油沉积物。

返回顶部

minecraft:partially_exposed_blob_feature

'minecraft:partially_exposed_blob_feature' 生成具有指定尺寸的指定方块的团簇,在大多数情况下该团簇嵌入到指定的表面中,但允许暴露单个面。

示例:嵌入被淹没的洞穴地板中的岩浆块。

返回顶部

minecraft:rect_layout

'minecraft:rect_layout' 扫描区块的表面,在每个方块列的表面上调用 place()。
成功条件:地物已成功放置在区块中。
如果出现以下情况,则失败:无法在区块中放置任何地物。

示例:扫描方块的表面并在可能的情况下放置一个地物

返回顶部

minecraft:scan_surface

'minecraft:scan_surface' 扫描区块的表面,在每个方块列的表面上调用 place()。
成功条件:在扫描期间成功放置了地物。
如果出现以下情况,则失败:在扫描过程中未放置任何地物。

示例:扫描区块的表面并在可能的情况下放置一个地物

返回顶部

minecraft:scatter_feature

'minecraft:scatter_feature' 将地物分散到整个区块中。'x'、'y' 和 'z' 字段是每个坐标的参数。请注意,坐标表示与输入位置的偏移量,而不是绝对位置。坐标可以是单个值、随机分布或解析为数值的 Molang 表达式。提供 'coordinate_eval_order' 字段是为了更精细地控制坐标分辨率(尤其是在使用 '网格' 分布时)。“iterations”控制如果“scatter_chance”检查成功,应进行多少个单独的投放。“scatter_chance”检查只进行一次,因此要么运行所有版面,要么不运行任何版面。
如果出现以下情况,则成功:至少有一个地物放置成功。
如果出现以下情况,则失败:所有地物放置都失败。

示例:将海平面上的花散布在生物群系中一半的区块中。

返回顶部

minecraft:sculk_patch_feature

地物类型“minecraft:sculk_patch_feature”尚未记录。
返回顶部

minecraft:search_feature

'minecraft:search_feature' 扫描一个卷,为其引用的地物搜索有效的放置位置。'search_volume' 字段指定定义搜索边界的轴对齐边界框。搜索将沿 'search_axis' 字段定义的轴逐层扫描。例如,如果 'search_axis' = '-x',则 x 值较大的块将在 x 值较小的块之前被检查。在沿轴移动到下一层之前,将从左下角到右上角搜索每层。默认情况下,只能找到一个有效位置,但这可以通过指定 'required_successes' 字段来更改。如果找到的成功数少于所需的成功数,则不会发生放置。
如果出现以下情况,则成功:有效位置的数量等于 'required_successes' 指定的值。
如果出现以下情况,则失败:有效位置的数量小于 'required_successes' 指定的值。

示例:将苹果连接到树冠上

返回顶部

minecraft:single_block_feature

'Minecraft:single_block_feature' 在世界中放置一个方块。'places_block' 字段支持单个方块或加权方块列表,其中权重定义该方块被选中的可能性。'may_attach_to' 和 'may_replace' 字段是允许列表,用于指定可以放置阻止的位置。如果省略这些字段,则可以将块放置在任何位置。'may_not_attach_to' 字段是一个拒绝列表,用于指定哪些方块不能靠近放置位置。'randomize_rotation' 字段将随机化方块的基数方向。方块的内部生存能力和放置规则可以选择使用 'enforce_survivability_rules' 和 'enforce_placement_rules' 字段来强制执行。这些规则是按方块指定的,通常旨在生成高质量的游戏或自然行为。但是,启用此强制可能会使调试放置失败变得更加困难。
如果出现以下情况,则成功:方块已成功放置在世界中。
如果出现以下情况,则失败 :放置方块失败。

示例:将单个南瓜或雕刻南瓜放置在雕刻南瓜不太可能出现的地方。

返回顶部

minecraft:snap_to_surface_feature

Minecraft:snap_to_surface_feature' 将地物放置 pos 的 y 值捕捉到提供的 'vertical_search_range' 内的地板或天花板。放置生物群系被保留。如果对齐位置超出放置生物群系,则放置将失败。

示例:定义一个将“cave_vine_feature”捕捉到天花板的地物。

返回顶部

minecraft:structure_template_feature

'Minecraft:structure_template_feature' 在世界中放置了一个结构。该结构必须作为 .mcstructure 文件存储在行为包的 “structures” 子目录中。可以引用属于其他行为包的结构,它们不需要来自与此地物同一个行为包。可以定义条件以指定允许放置结构的位置。在放置过程中,该地物将在 'adjustment_radius' 中搜索满足所有条件的位置。如果未找到,则不会放置结构。
如果出现以下情况,则成功:结构被放置在世界中。
如果出现以下情况,则失败:无法将结构放置在世界中。

示例:放置一个“漂浮”在空中的热气球结构。

返回顶部

minecraft:surface_relative_threshold_feature

'minecraft:surface_relative_threshold_feature' 确定提供的位置是否低于世界的预估的地表高度,如果低于,则放置一个地物。如果提供的位置位于配置的表面上方或表面不可用,则放置将失败。此地物仅适用于使用世界生成 1.18 或更高版本的主世界生成器。

示例:定义一个放置 'underwater_magma_snap_to_surface_feature' 的地物,如果给定位置至少比预估的地表高度低两个方块。

返回顶部

minecraft:underwater_cave_carver_feature

'Minecraft:underwater_cave_carver_feature' 在当前区块中穿过世界,并在当前区块周围的每个区块中以 8 个径向模式雕刻一个洞穴。此地物将专门针对仅在海平面以下创建洞穴。
此地物也仅在专门放置在通道 “pregeneration_pass” 中时有效。

示例:正常雕刻洞穴。

返回顶部

minecraft:tree_feature

'Minecraft:tree_feature' 将在世界中放置一棵树。一棵树由一根锚定在基座上的柱子组成,该柱子具有设置的参数来放置它,以及从柱子延伸的树冠。
树木支持多种类型的树冠、树干和根。树木只会在某些生物群系中生长,前提是 'may_grow_on' 属性包括该生物群系表面常见的方块。
如果出现以下情况,则成功:树被放置在世界中。
如果出现以下情况,则失败:无法将树放置在世界中。

示例:杜鹃花树。

返回顶部

minecraft:vegetation_patch_feature

'minecraft:vegetation_patch_feature' 在一个区域中散布植被地物。可以通过调整植被地物将生成的半径和深度来修改植被地物的外观。
在以下情况下成功:至少放置了一个 ground base block。
如果出现以下情况,则失败:未放置地面基座方块。

示例:带有垂滴叶的粘土池。

返回顶部

minecraft:weighted_random_feature

'minecraft:weighted_random_feature' 根据权重值随机选择并放置一个地物。权重是相对的,值越高,选择的可能性就越大。
如果出现以下情况,则成功:放置所选地物。
如果出现以下情况,则失败:无法放置所选地物。

示例:选择并放置花朵的变种。

返回顶部

Feature schema

这是完整的地物架构



附加地物

地物必须附加到至少一个生物群系才能显示在世界中。在世界生成过程中,生物群系会尝试逐块放置其附着的地物。可以通过地物规则定义附加地物
返回顶部

地物规则

地物规则是单独的 JSON 定义文件,位于行为包的 “feature_rules” 子文件夹中。地物规则遵循与地物相同的文件名规则。每个地物规则只控制一个地物,并用作地物数据链的根。要使用地物规则将地物附加到生物群系,“conditions”对象必须包含 “minecraft:biome_filter” 字段。这是对每个生物群系执行的过滤器测试列表,用于确定是否应附加该地物。最相关的是 “has_biome_tag” 测试。

下面是一个地物规则示例

返回顶部

地物规则架构

Coordinate Evaluation Order(坐标评估顺序)

CoordinateEvaluationOrder 枚举器,支持的值为:“xyz”、“xzy”、“yxz”、“yzx”、“zxy”、“zyx”。
返回顶部

Coordinate Range(坐标范围)

表示坐标 (x/y/z) 上的散射分布,也可以通过表达式构建。

名称 类型 必填? 描述
distribution 必填 分布类型。支持的分布由 “Random Distribution Type” 定义。
extent 数组 必填 散布范围的下限和上限(包括)作为要从输入点到散布的偏移量。
grid_offset 整数 自选 当分布类型为 grid 时,定义沿此轴的偏移。
step_size 整数 自选 当分布类型为 grid 时,定义沿此轴的阶梯之间的距离。
返回顶部

Feature Rule Conditions(地物规则条件)

名称 类型 必填? 描述
minecraft:biome_filter 过滤组类型的对象 自选 用于确定此规则将附加到哪些生物群系的过滤器测试列表。
placement_pass 字符串 必填 何时应相对于其他地物放置地物。保证列表中较早的传递发生在较晚的传递之前。不保证每次通过的顺序。
返回顶部

Feature Rule Definition(地物规则定义)

名称 类型 必填? 描述
conditions 地物规则条件类型的对象 必填 用于控制地物放置位置和时间的参数。
description 地物规则描述类型的对象 必填 要放置的地物规则和地物的标识符。
distribution 散布参数类型的对象 自选 控制地物初始散布的参数。
返回顶部

Feature Rule Description(地物规则描述)

名称 类型 必填? 描述
identifier 字符串 必填 此地物规则的名称,格式为 'namespace_name:rule_name'。'rule_name' 必须与文件名匹配。
places_feature 字符串 必填 对此规则控制的地物的命名引用。
返回顶部

Filter Group(过滤器组)

过滤器允许数据对象指定允许其使用的测试条件。过滤器可以由单个对象 (Filter Test)、测试数组、集合组或这些对象的组合来定义。

名称 类型 必填? 描述
AND 过滤组类型的对象 自选 评估在组中的所有测试,所有测试都必须通过才能使组通过。
NOT 过滤组类型的对象 自选 评估在组中的所有测试,所有测试都必须失败才能使组通过。
OR 过滤组类型的对象 自选 评估在组中的所有测试,必须通过一个或多个才能使组通过。
all 过滤组类型的对象 自选 评估在组中的所有测试,所有测试都必须通过才能使组通过。
all_of 过滤组类型的对象 自选 评估在组中的所有测试,所有测试都必须通过才能使组通过。
any 过滤组类型的对象 自选 评估在组中的所有测试,必须通过一个或多个才能使组通过。
any_of 过滤组类型的对象 自选 评估在组中的所有测试,必须通过一个或多个才能使组通过。
none_of 过滤组类型的对象 自选 评估在组中的所有测试,所有测试都必须失败才能使组通过。
返回顶部

Filter Test(过滤器测试)

名称 类型 必填? 描述
domain 对象 自选 应在其中执行测试的域。
operator 对象 自选 要和'value'应用的比较。
subject 对象 自选 此过滤器测试的主题。
test 字符串 必填 要应用的测试的名称。
value 对象 自选 与测试进行比较的值。
返回顶部

Random Distribution Type(随机分布类型)

RandomDistributionType 枚举器,支持的值为:“uniform”、“gaussian”、“inverse_gaussian”、“triangle”、“fixed_grid”、“jittered_grid”。
返回顶部

Scatter Chance(散布几率)

由表达式或具有分子和分母的对象表示的散布概率。

名称 类型 必填? 描述
denominator 整数 必填 散布概率的分母。
numerator 整数 必填 散布概率的分子。
返回顶部

Scatter Params(散布参数)

控制特定对象的散布分布。

名称 类型 必填? 描述
coordinate_eval_order 自选 坐标的计算顺序。当一个坐标依赖于另一个坐标时,应使用。如果省略,则默认为 “xzy”。支持的顺序由 “Coordinate Evaluation Order” 定义。
iterations 结构 SharedTypes::Legacy::ExpressionNode类型的对象 必填 要生成的分散位置数。
scatter_chance 散布几率类型的对象 自选 发生此分散的概率。不评估每次迭代;要么不运行迭代,要么运行所有迭代。
x 坐标范围类型的对象 必填 坐标的分布(每次迭代评估)。
y 坐标范围类型的对象 必填 坐标的分布(每次迭代评估)。
z 坐标范围类型的对象 必填 坐标的分布(每次迭代评估)。
返回顶部