索引
概述
地物是散布在世界各地的装饰品。树木、植物、花朵、泉水、矿石和珊瑚等事物都是地物。基本上,如果它不是地形或生物,它可能是一个地物!地物可以是独立的,也可以由多个子地物组成。在实践中,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' 根据权重值随机选择并放置一个地物。权重是相对的,值越高,选择的可能性就越大。如果出现以下情况,则成功:放置所选地物。如果出现以下情况,则失败:无法放置所选地物。 示例:选择并放置花朵的变种。附加地物
地物必须附加到至少一个生物群系才能显示在世界中。在世界生成过程中,生物群系会尝试逐块放置其附着的地物。可以通过地物规则定义附加地物返回顶部地物规则
地物规则是单独的 JSON 定义文件,位于行为包的 “feature_rules” 子文件夹中。地物规则遵循与地物相同的文件名规则。每个地物规则只控制一个地物,并用作地物数据链的根。要使用地物规则将地物附加到生物群系,“conditions”对象必须包含 “minecraft:biome_filter” 字段。这是对每个生物群系执行的过滤器测试列表,用于确定是否应附加该地物。最相关的是 “has_biome_tag” 测试。 下面是一个地物规则示例地物规则架构
Coordinate Evaluation Order(坐标评估顺序)
CoordinateEvaluationOrder 枚举器,支持的值为:“xyz”、“xzy”、“yxz”、“yzx”、“zxy”、“zyx”。名称 | 类型 | 必选? | 描述 |
---|---|---|---|
xyz | "xyz", "xzy", "yxz", "yzx", "zxy", "zyx" | 自选 | |
xzy | "xyz", "xzy", "yxz", "yzx", "zxy", "zyx" | 自选 | |
yxz | "xyz", "xzy", "yxz", "yzx", "zxy", "zyx" | 自选 | |
yzx | "xyz", "xzy", "yxz", "yzx", "zxy", "zyx" | 自选 | |
zxy | "xyz", "xzy", "yxz", "yzx", "zxy", "zyx" | 自选 | |
zyx | "xyz", "xzy", "yxz", "yzx", "zxy", "zyx" | 自选 |
Coordinate Range(坐标范围)
表示坐标 (x/y/z) 上的散射分布,也可以通过表达式构建。名称 | 类型 | 必填? | 描述 |
---|---|---|---|
distribution | "uniform", "gaussian", "inverse_gaussian", "triangle", "fixed_grid", "jittered_grid" | 必填 | 分布类型。支持的分布由 “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”。名称 | 类型 | 必选? | 描述 |
---|---|---|---|
fixed_grid | "uniform", "gaussian", "inverse_gaussian", "triangle", "fixed_grid", "jittered_grid" | 自选 | |
gaussian | "uniform", "gaussian", "inverse_gaussian", "triangle", "fixed_grid", "jittered_grid" | 自选 | |
inverse_gaussian | "uniform", "gaussian", "inverse_gaussian", "triangle", "fixed_grid", "jittered_grid" | 自选 | |
jittered_grid | "uniform", "gaussian", "inverse_gaussian", "triangle", "fixed_grid", "jittered_grid" | 自选 | |
triangle | "uniform", "gaussian", "inverse_gaussian", "triangle", "fixed_grid", "jittered_grid" | 自选 | |
uniform | "uniform", "gaussian", "inverse_gaussian", "triangle", "fixed_grid", "jittered_grid" | 自选 |
Scatter Chance(散布几率)
由表达式或具有分子和分母的对象表示的散布概率。名称 | 类型 | 必填? | 描述 |
---|---|---|---|
denominator | 整数 | 必填 | 散布概率的分母。 |
numerator | 整数 | 必填 | 散布概率的分子。 |
Scatter Params(散布参数)
控制特定对象的散布分布。名称 | 类型 | 必填? | 描述 |
---|---|---|---|
coordinate_eval_order | "xyz", "xzy", "yxz", "yzx", "zxy", "zyx" | 自选 | 坐标的计算顺序。当一个坐标依赖于另一个坐标时,应使用。如果省略,则默认为 “xzy”。支持的顺序由 “Coordinate Evaluation Order” 定义。 |
iterations | 结构 SharedTypes::Legacy::ExpressionNode类型的对象 | 必填 | 要生成的分散位置数。 |
scatter_chance | 散布几率类型的对象 | 自选 | 发生此分散的概率。不评估每次迭代;要么不运行迭代,要么运行所有迭代。 |
x | 坐标范围类型的对象 | 必填 | 坐标的分布(每次迭代评估)。 |
y | 坐标范围类型的对象 | 必填 | 坐标的分布(每次迭代评估)。 |
z | 坐标范围类型的对象 | 必填 | 坐标的分布(每次迭代评估)。 |