1. Wiki
  2. /实体
  3. /生成规则

生成规则

用生成规则让自定义生物在 Minecraft Bedrock 中自然生成:生物群系过滤器、光照等级、群体大小、权重、密度上限等等。

没有生成规则时,生物只能通过刷怪蛋或 /summon 出现。生成规则告诉游戏它可以在何时何地自己出现:在哪些生物群系、需要多暗、一次出现几只,以及与其他生物相比出现得有多频繁。

本页使用实体文件中的红宝石傀儡。想了解完整的生物,请从你的第一个自定义生物开始。

文件结构

行为包
BP/
  entities/
    ruby_golem.json
  spawn_rules/
    ruby_golem.json

文件名无关紧要。把规则和生物联系起来的是文件里的 identifier。

生物必须可生成

只有当生物行为文件的 description 中有 "is_spawnable": true 时,生成规则才会生效。

第一条生成规则

红宝石傀儡会在白天出现在沙漠和恶地的沙子或红沙上,成小群出现:

BP/spawn_rules/ruby_golem.json
{
  "format_version": "1.8.0",
  "minecraft:spawn_rules": {
    "description": {
      "identifier": "wiki:ruby_golem",
      "population_control": "animal"
    },
    "conditions": [
      {
        "minecraft:spawns_on_surface": {},
        "minecraft:spawns_on_block_filter": ["minecraft:sand", "minecraft:red_sand"],
        "minecraft:brightness_filter": {
          "min": 7,
          "max": 15,
          "adjust_for_weather": false
        },
        "minecraft:weight": { "default": 6 },
        "minecraft:herd": { "min_size": 1, "max_size": 2 },
        "minecraft:biome_filter": {
          "any_of": [
            { "test": "has_biome_tag", "value": "desert" },
            { "test": "has_biome_tag", "value": "mesa" }
          ]
        }
      }
    ]
  }
}

几乎所有原版生成规则都仍在使用 "format_version": "1.8.0",你也可以这样用。

description 部分

字段作用
identifier生物的 ID。必须与实体文件中的完全一致。
population_control生物计入哪个数量池。每个池都有自己的上限,所以你的生物不会挤满整个世界。

最常用的数量池:

数量池使用者
animal陆地动物,比如牛、猪和羊
water_animal鱼、鱿鱼、海豚和美西螈
monster敌对生物,比如僵尸和骷髅
ambient小型背景生物,比如蝙蝠

原版还有几个特殊的池,比如 cat 和 pillager,专供个别生物使用。

条件

conditions 是一个列表。每一项都是一套完整的规则。如果游戏找到一个与任意一项匹配的位置,生物就可以在那里生成。

在一项内部,每个组件都必须通过。所以上面的规则意思是“在地表 并且 在沙子上 并且 在白天 并且 在沙漠或恶地生物群系中”。

想让生物出现在两个截然不同的地方,比如夜晚的洞穴和白天的海滩?在列表中添加第二项,而不是把所有东西都塞进一项里。

在哪里:地表、地下还是水中

至少需要其中一个,否则生物就没有地方可以生成。它们是空对象:只要写上就会开启。

组件生物生成的位置
minecraft:spawns_on_surface地面上,头顶是开阔的天空
minecraft:spawns_underground洞穴中,头顶有方块
minecraft:spawns_underwater水中
minecraft:spawns_lava熔岩中,就像炽足兽

它们可以组合使用。原版美西螈同时使用 spawns_underground 和 spawns_underwater,从而出现在洞穴的水中。

哪些方块

条件内部
"minecraft:spawns_on_block_filter": ["minecraft:sand", "minecraft:red_sand"],
"minecraft:spawns_on_block_prevented_filter": ["minecraft:cactus"]
  • spawns_on_block_filter:生物脚下的方块必须是其中之一。只有一个方块时可以直接写成字符串。
  • spawns_on_block_prevented_filter:生物绝不会在这些方块上生成。

哪些生物群系

minecraft:biome_filter 是一个普通的过滤器,通常使用 has_biome_tag 测试。每个生物群系都带有几个标签,比如 desert、forest、ocean、frozen、overworld 或 nether。测试标签比一个个列出生物群系更好,因为它还能覆盖生物群系的变种以及其他附加包中的生物群系。

条件内部
"minecraft:biome_filter": [
  { "test": "has_biome_tag", "value": "overworld" },
  { "test": "has_biome_tag", "operator": "not", "value": "ocean" }
]

单纯的列表效果与 all_of 相同:这里的意思是“在主世界,但不在海洋中”。每个生物群系有哪些标签,请在原版生物群系中查阅;生物群系如何获得标签,请看生物群系标签。

animal 和 monster 标签

大多数陆地生物群系都带有 animal 和 monster 标签。原版的牛在 has_biome_tag 中使用 animal,僵尸使用 monster。用它们来表达“任何普通生物能生存的地方”非常方便。

光照等级

条件内部
"minecraft:brightness_filter": {
  "min": 0,
  "max": 7,
  "adjust_for_weather": true
}

光照从 0(漆黑一片)到 15(完全的日光)。动物通常使用 7 到 15,怪物使用 0 到 7。把 adjust_for_weather 设为 true 后,下雨和雷暴会让光照按更暗来计算,这样怪物就能在暴风雨天出现。

多频繁:权重

条件内部
"minecraft:weight": { "default": 6 }

游戏在某个位置挑选要生成的生物时,权重越大的生物被选中得越频繁。参考一下:原版的牛是 8,蝙蝠是 10,僵尸是 100。稀有生物先从较低的值开始,测试时再逐步调高。

几只:群体

条件内部
"minecraft:herd": {
  "min_size": 2,
  "max_size": 4,
  "event": "minecraft:entity_born",
  "event_skip_count": 2
}
  • min_size 和 max_size:一起生成多少只。
  • event(可选):群体中的生物生成时对它们触发的事件。
  • event_skip_count:在事件开始触发之前先生成多少只。

上面的例子是原版用来生成一家子的小技巧:前 2 只作为普通成年个体生成,其余的会收到 minecraft:entity_born。在这些生物的实体文件中,这个事件会添加幼年组,所以其余的都是幼崽。狐狸和美西螈正是这样做的。

多拥挤:密度上限

条件内部
"minecraft:density_limit": {
  "surface": 4,
  "underground": 2
}

这是在数量池上限之外,专门针对这个生物的上限。周围已经有这么多只时,地表(或地下)就不会再生成。适合那些不应该成群出现的强大或稀有生物。

难度

条件内部
"minecraft:difficulty_filter": {
  "min": "easy",
  "max": "hard"
}

难度有 peaceful、easy、normal 和 hard。敌对生物通常从 easy 开始,这样它们永远不会在和平难度下出现。

更多条件

组件检查内容
minecraft:height_filter生物可以生成的高度范围(min、max)
minecraft:distance_filter它必须离玩家多远(min、max)
minecraft:world_age_filter世界要存在多久之后生物才能出现(min)
minecraft:disallow_spawns_in_bubble阻止它在气泡柱中生成
minecraft:permute_type有时按权重改为生成另一种生物。僵尸用它来生成少量僵尸村民。

夜间版本

想让洞穴里也出现愤怒的红宝石傀儡?添加第二个条件,使用不同的规则:

BP/spawn_rules/ruby_golem.json (conditions)
"conditions": [
  {
    "minecraft:spawns_on_surface": {},
    "minecraft:spawns_on_block_filter": ["minecraft:sand", "minecraft:red_sand"],
    "minecraft:brightness_filter": { "min": 7, "max": 15, "adjust_for_weather": false },
    "minecraft:weight": { "default": 6 },
    "minecraft:herd": { "min_size": 1, "max_size": 2 },
    "minecraft:biome_filter": { "test": "has_biome_tag", "value": "desert" }
  },
  {
    "minecraft:spawns_underground": {},
    "minecraft:brightness_filter": { "min": 0, "max": 4, "adjust_for_weather": false },
    "minecraft:height_filter": { "min": -64, "max": 0 },
    "minecraft:weight": { "default": 2 },
    "minecraft:herd": { "min_size": 1, "max_size": 1, "event": "wiki:become_angry" },
    "minecraft:density_limit": { "underground": 2 },
    "minecraft:biome_filter": { "test": "has_biome_tag", "value": "overworld" }
  }
]

第二项会在地下深处生成落单的傀儡,并立即对它们触发 wiki:become_angry。这个事件来自实体事件页面。

测试生成规则

自然生成测试起来很慢,所以要让它变得简单些:

  1. 创建一个创造模式的新世界,如果你的生物是敌对的,把难度设为简单或更高。
  2. 测试时把 weight 调得很高(比如 100),之后再调低。
  3. 在对应的生物群系里飞来飞去。生物只会在离玩家一定距离之外生成。
  4. 用 /kill @e[type=wiki:ruby_golem] 清除它们,然后观察新的出现。

出问题时

你看到的现象最可能的原因
从来不生成is_spawnable 是 false、identifier 不匹配,或者条件中没有 spawns_on_surface 这类“在哪里”的组件
在某个生物群系中从不生成该生物群系没有那个标签。查看原版生物群系。
数量太多了降低 weight 或 max_size,或者添加 density_limit
敌对生物在和平难度下从不出现这正是 difficulty_filter 在发挥作用
白天出现怪物adjust_for_weather 已开启,并且正在下雨

更多帮助请看故障排除。下一篇:过滤器。

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