1. Wiki
  2. /世界生成
  3. /地物和地物规则

地物和地物规则

用地物和地物规则为 Minecraft Bedrock 世界生成添加矿石、植物、树木和结构,附红宝石矿石示例和所有地物类型。

所有装点大地的东西都是地物:矿脉、树木、花、草、巨石、泉水、珊瑚。只要它不是基础地形,也不是生物,那多半就是地物。

要让地物出现在世界中,你需要两个文件:

  • 地物说明放置什么:一条矿脉、一棵树、一个方块。
  • 地物规则说明放在哪里、多频繁:哪些生物群系、每个区块多少次、在什么高度。

在本指南中,你将让红宝石矿石出现在每个主世界生物群系的地下。

文件一览

行为包
BP/
  blocks/
    ruby_ore.json
  features/
    ruby_ore_feature.json
  feature_rules/
    ruby_ore_rule.json

第 1 步:矿石方块

首先你需要一个用来放置的方块。做一个普通的自定义方块,命名为 wiki:ruby_ore,配上纹理和战利品表。如果你还没做过方块,请按照你的第一个自定义方块操作。

第 2 步:地物

BP/features/ruby_ore_feature.json
{
  "format_version": "1.13.0",
  "minecraft:ore_feature": {
    "description": {
      "identifier": "wiki:ruby_ore_feature"
    },
    "count": 6,
    "replace_rules": [
      {
        "places_block": "wiki:ruby_ore",
        "may_replace": [
          "minecraft:stone",
          "minecraft:granite",
          "minecraft:diorite",
          "minecraft:andesite"
        ]
      }
    ]
  }
}
  • 根键(这里是 minecraft:ore_feature)就是地物类型。每个文件只有一个。本页底部的表格列出了所有类型。
  • count 是一条矿脉尝试放置的方块数量。钻石的矿脉小,煤的矿脉大。
  • replace_rules 说明哪个方块放在哪里。矿石只会替换 may_replace 中列出的方块,所以它不会悬浮在洞穴中,也不会把泥土吃穿。

深板岩版本

在 replace_rules 中再加一个条目,写上 "places_block": "wiki:deepslate_ruby_ore" 和 "may_replace": ["minecraft:deepslate"]。这样一条矿脉在两个岩层中都会使用正确的外观,和原版矿石一样。

命名规则

  • 每个文件一个地物。
  • 文件名必须和标识符的名称部分一致。wiki:ruby_ore_feature 放在 ruby_ore_feature.json 中。命名空间不参与匹配。
  • 如果两个包使用了完全相同的标识符,列表中排在更上面的包优先。这就是替换原版地物的方法。

第 3 步:地物规则

在地物规则把地物绑定到生物群系之前,地物什么都不会做:

BP/feature_rules/ruby_ore_rule.json
{
  "format_version": "1.13.0",
  "minecraft:feature_rules": {
    "description": {
      "identifier": "wiki:ruby_ore_rule",
      "places_feature": "wiki:ruby_ore_feature"
    },
    "conditions": {
      "placement_pass": "underground_pass",
      "minecraft:biome_filter": [
        {
          "test": "has_biome_tag",
          "operator": "==",
          "value": "overworld"
        }
      ]
    },
    "distribution": {
      "iterations": 4,
      "coordinate_eval_order": "zyx",
      "x": {
        "distribution": "uniform",
        "extent": [0, 16]
      },
      "y": {
        "distribution": "triangle",
        "extent": [-48, 16]
      },
      "z": {
        "distribution": "uniform",
        "extent": [0, 16]
      }
    }
  }
}

规则由三部分组成。

description

  • identifier 是规则的名称。和地物一样,名称部分必须和文件名一致。
  • places_feature 是这条规则放置的地物。一条规则控制一个地物。

conditions

minecraft:biome_filter 选择生物群系。它是一个过滤测试列表,你几乎每次都会用到的是 has_biome_tag。每个生物群系都会检查这个过滤器:通过的就会生成这个地物。

你可以用 all_of 和 any_of 组合测试。下面这个选择的是不属于海洋的温暖主世界生物群系:

在 conditions 内
"minecraft:biome_filter": [
  { "test": "has_biome_tag", "operator": "==", "value": "overworld" },
  {
    "any_of": [
      { "test": "has_biome_tag", "operator": "==", "value": "desert" },
      { "test": "has_biome_tag", "operator": "==", "value": "mesa" }
    ]
  },
  { "test": "has_biome_tag", "operator": "!=", "value": "ocean" }
]

要让红宝石矿石只出现在红宝石林地中,就测试它自己的标签:"value": "ruby_grove"。

placement_pass 说明这个地物相对于其他地物何时放置。各阶段按以下顺序运行:

阶段适用于
first_pass其他所有东西都要在其上生成的内容。
before_underground_pass、underground_pass、after_underground_pass矿石、成团的泥土或沙砾、洞穴装饰。
before_surface_pass、surface_pass、after_surface_pass树木、花、草、巨石。
before_sky_pass、sky_pass、after_sky_pass空中的东西。
final_pass在所有其他内容之后做最后的修饰。
pregeneration_pass仅用于洞穴雕刻器。

同一阶段中的地物之间没有固定的顺序。

distribution

它决定每个区块中尝试生成多少个副本,以及生成在哪里。

字段作用
iterations每个区块尝试多少次。这里是 4 条矿脉。
x、y、z每次尝试落在哪里。可以是固定数字、范围或 Molang 表达式。
scatter_chance可选。整个区块的生成概率,比如 { "numerator": 1, "denominator": 4 } 表示四个区块中有一个。如果没通过,就一次都不会尝试。
coordinate_eval_order计算坐标的顺序,比如 "xzy"(默认)或 "zyx"。当一个坐标用到另一个坐标时,这个顺序就很重要。

在地物规则中,x 和 z 从区块的角落开始计算,所以 [0, 16] 覆盖整个区块。y 是世界高度。

每个范围都有一个 distribution 类型,决定值的分布方式:

类型结果
uniform每个值出现的概率相同。
triangle大多数值靠近范围中间,两端较少。非常适合矿石。
gaussian集中在中间,像一口钟。
inverse_gaussian集中在两端,中间很少。
fixed_grid均匀间隔的步长,用 step_size 和 grid_offset 设置。
jittered_grid一个网格,每个点都随机偏移一点。

对于地面上的东西,比如植物,用 Molang 设置 y,让它落在地表上:

在 distribution 内
"y": "query.heightmap(variable.worldx, variable.worldz)"

矿石只出现在新区块中

地物只在区块首次生成时生成一次。去很远的地方探索,或者新建一个世界,才能看到你的矿石。已经探索过的地方永远不会有。

测试

  1. 在新世界中启用这个包。
  2. 用 /gamemode spectator 进入旁观模式,飞到 Y 0 附近的地下。
  3. 在石头中寻找红宝石纹理。太稀有了?调高 iterations 或 count。

如果什么都没出现,请打开内容日志。常见原因有:文件名和标识符不一致、places_feature 名称写错,或 places_block 中的方块名有拼写错误。

所有地物类型

每个地物文件都使用以下其中一个作为根键。有些会放置方块,有些只负责在其他地物之间做选择、移动或重复。大多数原版装饰都会把好几个串在一起:比如一个散布地物运行一个搜索地物,搜索地物再运行一棵树。

类型作用
minecraft:aggregate_feature在同一位置放置一组地物,没有固定顺序。
minecraft:beards_and_shavers填高或削平地形,为另一个地物(通常是结构)腾出一块平整空旷的地方。
minecraft:cave_carver_feature在本区块及相邻区块中挖出主世界洞穴。需要 pregeneration_pass。
minecraft:conditional_list按顺序检查一组地物,放置第一个条件通过的地物。
minecraft:fossil_feature用骨块加上你选择的矿石方块搭建一具埋在地下的骨架。
minecraft:geode_feature生成一个圆形晶洞,带有分层的外壳和可替换的内部填充物。
minecraft:growing_plant_feature从地面向上或从顶部向下长出一列植物,有茎和尖端,比如洞穴藤蔓。
minecraft:height_difference_filter_feature只有当该位置周围的地面通过高度检查时,才允许放置另一个地物。
minecraft:horizontal_tree_decoration_feature把一个方块朝随机方向贴在某物的侧面,比如原木上的层架菇。
minecraft:multi_block_feature放置一个由多个部分组成的方块,可选择随机旋转方向。
minecraft:multiface_feature放置贴附在地面、墙壁或天花板上的薄方块,比如发光地衣。
minecraft:multipart_block_column_feature堆叠一列最多由四种方块(底部、中部、收窄部分和尖端)组成的柱子,方向任意。
minecraft:nether_cave_carver_feature在下界挖出洞穴。需要 pregeneration_pass。
minecraft:ore_feature放置一条只替换你允许的方块的矿脉。所有矿石都用它。
minecraft:partially_exposed_blob_feature放置一团大部分埋在地下、只露出一面的方块。
minecraft:rect_layout用网格状的区域铺满区块表面,每个区域放一个地物,并留出一些空白。
minecraft:scan_surface遍历区块表面的每一列,并在每一列上尝试放置一个地物。
minecraft:scatter_feature在某个位置周围多次放置另一个地物,使用和地物规则相同的 x、y、z 范围。
minecraft:sculk_patch_feature蔓延出一片幽匿块。游戏尚未提供文档。
minecraft:search_feature在一个盒状空间中逐层搜索,寻找能放下另一个地物的位置。
minecraft:sequence_feature依次放置多个地物,每个都从上一个结束的地方开始。
minecraft:single_block_feature放置一个方块,或从加权列表中随机选一个,并有它能放在什么上面的规则。
minecraft:snap_to_surface_feature在放置另一个地物之前,把位置移到最近的地面、天花板或墙上。
minecraft:structure_template_feature放置行为包 structures 文件夹中保存的 .mcstructure。
minecraft:surface_relative_threshold_feature只有当位置在地表以下足够深时,才放置另一个地物。
minecraft:tree_feature用树干、树冠和可选的树根搭建一棵树,有大量形状选项。
minecraft:underwater_cave_carver_feature在海平面以下挖出洞穴。需要 pregeneration_pass。
minecraft:vegetation_patch_feature用一种方块覆盖一片地面,然后在上面长出植物,比如苔藓地块。
minecraft:weighted_random_feature从列表中随机选一个地物。权重越大,被选中的概率越高。

下一步

We use cookies to improve your experience and analyse site traffic. Learn more