生成
生成(Spawn)是指生物在世界中被创造的过程和行为。
玩家生成[编辑 | 编辑源代码]
世界出生点[编辑 | 编辑源代码]

每个世界都有一个世界出生点。当玩家刚加入世界或个人出生点不存在或无效时,玩家会生成在这个出生点周围。
当服务器处于冒险模式时,玩家将直接在世界出生点生成,面朝南方。如果世界出生点是一个有碰撞箱的方块,则生成位置自动向上直到找到一个不存在碰撞的位置。
当服务器处于除冒险模式以外的其他模式时,玩家会在世界出生点及其周围的区域生成。这个区域默认为边长21格的正方形,能通过游戏规则spawnRadius
更改。当玩家生成时,系统会随机寻找一个合适的位置作为玩家的生成位置,这个位置必须满足下面的要求:
找到合适的位置后,玩家会生成在这个位置上最高的可阻挡移动且碰撞箱上表面完整的方块上方,面朝南方。如果这个位置是一个有碰撞箱的方块,则生成位置自动向上找到不存在碰撞的位置。如果找不到合适的位置,则类似处于冒险模式时的生成,玩家直接在世界出生点生成,面朝南方,并自动向上找到一个不存在碰撞的位置。
世界出生点由搜索算法决定,以避免让玩家生成在海洋或河流中。每一个位置都有它的“适合度”,越接近非河流的陆地适合度越高,越接近(0,0)适合度也越大。搜索算法先将生成点设置在XZ坐标各为0的位置上,之后在半径512、1024、1536和2048格的圆上选取一些位置并计算它们的适合度。如果能找到一个更合适的位置,就把生成点设置在找到的位置上。然后继续以当前生成点为圆心,以32格为间隔画16个圆,在这些圆上选取一些位置,计算适合度。如果这些位置中含有更合适的位置,则将世界出生点定为这个位置;如果没有找到,那么世界出生点就是当前的出生点位置。
除世界生成时决定世界出生点外,使用/setworldspawn
也可以改变世界出生点。
个人出生点[编辑 | 编辑源代码]
玩家可以通过床、充能的重生锚或使用/spawnpoint
命令来更改个人出生点。如果玩家死亡时个人出生点被阻挡(或被破坏等),他们将被迫重生在世界出生点。
当玩家重生时,系统会避免玩家重生在错误的位置。一个合适的重生位置满足下列要求:
- 这个位置必须位于世界边界内。
- 这个位置上的方块和它上方的方块都不能带有
#invalid_spawn_inside
标签。 - 这个位置上的方块碰撞箱不会和处在方块中心的玩家碰撞箱产生碰撞,这使得玩家不会在阻止移动的方块内生成。
- 这个位置下方的方块必须具有碰撞箱,所有可攀爬的方块在这里都被认为没有碰撞箱,这使得玩家不会在梯子、藤蔓之类的方块上生成。
当有多个位置满足上方要求时,系统会优先选择满足下列要求的位置:
如果玩家的个人出生点是床,那么可用的重生位置是床的四周和床的上方。如果这张床的下面还有一张床,那么可用的重生位置是下面那张床的四周和上面床的上方。重生时玩家视线水平看向床头。如果所有可用重生位置都不合适,那么这个出生点就被阻挡,玩家将重生在世界出生点。
如果玩家的个人出生点是重生锚,那么可用的重生位置是重生锚的四周及它的上方,重生时玩家视线水平看向重生锚。如果所有可用重生位置都不合适,玩家也会重生在世界出生点。
如果玩家的个人出生点是由/spawnpoint
设置的,那么在重生时只会检查重生位置和它的上方方块的类型,重生后玩家视线看向命令指定的角度。如果这两个方块都不是固体方块或液体,那么玩家会在此生成,否则玩家会在世界出生点重生。
伴随区块生成[编辑 | 编辑源代码]
动物和一些特殊的结构生物在区块创建时生成,这些生成在每个区块内只能发生一次,且不受游戏规则doMobSpawning
影响。由于这些生成与世界生成绑定,所以对于每个种子相同的世界,这些生物都会在固定位置固定角度生成。
初始动物生成[编辑 | 编辑源代码]

在区块创建时,区块生成系统会向地形的表面生成动物。如果区块处于积雪平原和冰刺之地生物群系中,则有7%的概率尝试生成动物;如果区块处于其他生物群系,则有10%的概率尝试生成动物。如果第一次成功判定尝试生成动物,无论生成成功与否,都进行第二次判定是否继续尝试,如果判定失败则停止尝试,否则在这次尝试后继续进行判定,直到判定失败为止。生成方式类似于周期生成,但生成游走范围不会超过本区块,且不检查生物上限。
如果世界噪声设置中的disable_mob_generation被设置为true,则初始动物不会生成。
结构生物生成[编辑 | 编辑源代码]
一些结构片段中带有实体数据,这些实体会跟随结构片段的放置而生成。下列这些结构都会生成对应的生物:
- 村庄内的村民、铁傀儡、猪、牛、绵羊、骆驼和马。
- 一只单独的女巫和黑猫会在沼泽小屋生成时一起生成。
- 三只远古守卫者会作为海底神殿的一部分生成。
- 潜影贝会作为末地城的一部分生成。
- 卫道士和唤魔者会作为林地府邸的一部分生成。
- 悦灵有概率作为掠夺者前哨站的深色橡木笼子和林地府邸的3种监狱房的一部分生成。
- 一只村民和一只僵尸村民会作为雪屋地下室的一部分生成。
- 溺尸会作为海底废墟的一部分生成。
[仅Java版]
周期生成[编辑 | 编辑源代码]
周期生成是游戏在运行时每游戏刻都会进行的生成操作。如果游戏规则doMobSpawning
为false,游戏就不会进行周期生成。
Java版[编辑 | 编辑源代码]
生物类别与生物上限[编辑 | 编辑源代码]
生物被划分为8种类别,分别为怪物(Monster)、动物(Creature)、环境生物(Ambient)、美西螈(Axolotls)、地下水生生物(Underground Water Creature)、水生生物(Water Creature)、水下环境生物(Water Ambient)和其他(Misc)。僵尸、骷髅等敌对生物属于怪物类别,绵羊、牛、鸡等生物属于动物类别。特例为豹猫,它生成时属于怪物类别,计算上限时属于动物类别。[1]其他类别不用于生成,只用于统计。将生物划分类别是为了防止一类生物过多,也能大致调整生物的比例。
类别 | 上限乘数 | 友好生物 | 自动清除 | 清除半径 |
---|---|---|---|---|
怪物 | 70 | 否 | 是 | 128 |
动物 | 10 | 是 | 否 | 128 |
环境生物 | 15 | 是 | 是 | 128 |
美西螈 | 5 | 是 | 是 | 128 |
地下水生生物 | 5 | 是 | 是 | 128 |
水生生物 | 5 | 是 | 是 | 128 |
水下环境生物 | 20 | 是 | 是 | 64 |
其他 | -1 | 是 | 否 | 128 |
为了阻止生物无限生成,每个生物类别都有它们的生成上限数量。生成上限数量不仅与类别本身有关,也与玩家有关。以每个玩家所在区块为中心的17×17区块都被认为是可生成区块,而每个生物类别的生成上限m是可生成区块数量c、生物类别上限乘数a之积除以289得到的,即。
在单人游戏中,只会有一个玩家,其可生成区块数量恒定为289,这时各生物类别上限数量等于其上限乘数。
在多人游戏中,如果玩家互相远离16个区块以上,则生成上限数量等于玩家数量与上限乘数之积。如果玩家相互靠近,可生成区块的数量就会因为范围重叠而减少,使得生物上限也随之减少。如果所有玩家都在同一个区块,这时玩家的可生成区块范围都互相重叠,总体可生成区块数量为289,各生物类别上限数量等于其上限乘数。
在生成周期开始时,游戏会计算各生物类别的数量。被统计的生物必须满足以下条件:
- 必须处于强加载、弱加载或加载边界区块。
- PersistenceRequired必须为false,具体条件见下文清除。
- 不能正在骑乘其他实体。
- 不能是从桶中放出的鱼和美西螈。
- 不能是手持方块的末影人。
- 不能参与袭击。
在生成周期中,每个生成候选区块在执行生成前都会检查一次当前生物类别是否达到了上限。如果达到了上限,则停止这一类别生物的生成;如果未达到上限,则检查周围的玩家,如果某一个玩家周围128格内所有生成候选区块内的生物数量超出了对应类别的上限乘数,则也不进行对应生物类别的生成。只有当前面两个判定都通过后,才能继续尝试生成,生成的生物将加入计数器,防止一次生成的生物数量过多。
由于生物上限的存在,生物数量很快就会达到饱和。为了使生物刷新的更快,生物就必须死亡或避免统计得够快使总体计数达不到上限。同时,也可以让一个位置存储很多同种类别的生物,用于抑制本类别生物的刷新。
Java版生物上限是每个维度单独计算,互不影响。
渲染距离有可能会影响生物生成。[2]
生成周期与生成候选区块[编辑 | 编辑源代码]
游戏每游戏刻都会进行一次生成判定,但动物类别的生成每400游戏刻(20秒)才会执行一次,以防止生成数量过多又无法自动清除。
为了防止生物生成过远,一些区块不能进行生成。能进行生成的区块都是生成候选区块,它需要满足下列情况:
可生成位置[编辑 | 编辑源代码]

选定生成候选区块后,系统也不能保证所有位置都能进行生成。有些位置可能不适合生物生成,例如含有可以使生物受到伤害的方块或距离玩家过近。一个允许进行生成的位置,即可生成位置,需要满足下面的条件:
- 距离世界出生点和任何玩家24格(欧几里得距离)以外。
- 与最近玩家的距离小于对应生物类别的清除半径,即水下环境生物不能超过64格,其他类型生物不能超过128格,动物类别的生物、掠夺者和潜影贝则无视此条件。
- 以方块位置底面中心为底面中心的实体碰撞箱范围内不存在其他碰撞箱与之碰撞。比如在一格空气且上方为一个上半活板门的位置苦力怕可以生成,但僵尸却不可以生成。
- 对于生成在水体内的生物(鱼、美西螈、溺尸、守卫者等),生成位置必须为水且上方方块不能是红石导体。
- 对于生成在熔岩内的生物(炽足兽),生成位置必须为熔岩。
- 对于生成在地面上的生物,有下面这些额外条件:
- 位置下方的方块必须为可生成方块。
- 位置上的方块和位置上方的方块必须为有效空方块。
- 某一具体生物可能还具有额外的检查条件,详见各生物的生成章节。
- 绝大部分动物都要求位置下方方块必须是带有
#animals_spawnable_on
的方块,且方块光照或天空光照大于8。 - 绝大部分怪物都要求非和平难度。
- 对于主世界怪物,方块光照必须为0,内部光照不大于7,且内部光照越低生成概率越大。
- 对于下界怪物,只要求内部光照不大于7。
- 绝大部分动物都要求位置下方方块必须是带有
生成势[编辑 | 编辑源代码]

在灵魂沙峡谷和诡异森林生物群系中,为了控制生物密度,生物生成时会额外检查“生成势”。这个系统将生物赋予了势能,并向它的周围扩散这种势能。如果一个位置的总势能大于生物的最高势能,则生物就无法在这里生成。
假设在一个空间内有N个具有生成势的生物,每个生物的生成势为,则对于空间内的点P,它的势能,其中为点P到对应生物位置的欧几里得距离,c为要生成生物的生成势。以诡异森林的末影人举例,它的生成势为1,那么对其他末影人,以它的中心半径为1的球上势能都为1,半径为2势能为0.5,半径为8势能为0.125,而末影人本身的最大生成势为0.12,即如果一个位置的势能超过0.12那么它就无法生成,所以在诡异森林中末影人在生成时至少会间隔9格。
成群生成[编辑 | 编辑源代码]

在每个生成周期内,游戏会尝试在每个生成候选区块每种生物类别尝试进行一次成群生成。生成系统先在区块内随机选择一个水平坐标作为生成起始点的水平坐标,再计算此坐标上的最高方块高度(高度图world_surface
,即调试屏幕中SH行的S值,又被称为lc值[3])和维度最低建筑高度,在区间内随机选择出一个整数作为生成起始点的高度。如果生成起始点高度正好为维度最低建筑高度,那么此次生成失败,不进行接下来的生成操作。如果生成起始点是一个红石导体,生成也会直接失败。
每次生成都分为三次更基础的生成。基础生成只会指定一种生物进行生成,即一次生成内最多生成三种生物。每次基础生成开始时,系统先将生成点水平移动,XZ方向各移动-5~5格,移动距离越远概率越小,这种移动被称为生成游走。[4]在游走完毕后,系统检查出生点是否距离玩家或世界出生点24格远,如果在24格内,则继续游走直到找到满足条件的位置。如果游走超过了1-4次还没有找到满足条件的位置,此次基础生成失败,开始下一次基础生成。
如果找到了满足条件的位置,系统会计算这个位置对应生物类别可以生成什么生物,并决定这次要生成什么生物和生成的数量。一个位置可以生成什么生物是由这个位置的生物群系和生成结构决定的,生成结构的生物判定优先于生物群系的生物判定,这些生成数据都可以在对应生物群系和生成结构条目找到。如果这个位置不允许生成对应生物类别的生物,则直接中止这次基础生成。对于一些生物群系和生成结构,生成系统有特殊判定:
- 如果生物类别是水下环境生物,且位于带有
#reduce_water_ambient_spawns
标签的生物群系,则只有2%的概率会生成生物。 - 如果生物类别是怪物,且位于下界要塞范围内,如果位置下方方块是下界砖块或位于结构片段内则使用下界要塞的生物生成表,否则使用对应生物群系的生物生成。
决定生物及其数量后,开始尝试生物放置。如果放置位置是一个可生成位置,则生物成功生成;如果放置位置不是可生成位置,则不进行生物生成。无论生物生成是否成功,只要没有达到指定的放置数量,生成点就会继续游走决定新的放置位置并尝试生成,直到达到放置数量(生成失败也算一次放置)。如果本次生物类别成功生成总数超过了当前生成生物的最大群体数量限制(通常为4,恶魂和掠夺者为1,狼和鱼为8,马类生物为6),则整个生成结束,开始下一个生物类别或下一个区块的生成。
由于生成游走本身不会修改生成点的高度,所以一个位置越平坦,成群生成的效率就越高。同时,因为生成点高度与最高方块高度有关,最高方块越低对应着每一层高度被选中的概率越大,如果整个维度只有一层可生成方块且放在最低建筑高度,那么每游戏刻成功找到一个合适的生成位置的概率为50%;相反,如果一个区块的最高建筑高度上放满了方块,它区块内的每一层被选中的概率就会很小,导致生成生物在高度上变得更加分散。
基岩版[编辑 | 编辑源代码]

基岩版的自然生成与Java版的有某些相似之处。其有两种主要生成行为:集群生成与结构生成。结构生成指生物作为结构的一部分生成(如掠夺者前哨站、海底神殿、下界要塞、沼泽小屋等)。集群生成负责其他所有自然生成,包括单独生成的生物。

在基岩版中,生物生成的范围取决于模拟距离n。若模拟距离为4,那么生物生成在距玩家欧几里得距离24-44格远处;否则(模拟距离大于4)生成在欧几里得距离24-128格远且曼哈顿距离小于等于n-1个区块处。每一游戏刻每一区块有11⁄2000的概率运行生成算法。
生物上限[编辑 | 编辑源代码]
有两种主要的生物上限影响生成:全局生物上限、种群控制上限。个别生物除种族控制上限外还有自己的密度上限。无论难度如何,自然生成的全局上限总是200。全局上限仅影响自然生成,不影响繁殖、刷怪蛋、/summon
、刷怪笼或其他种类的生成。只有玩家周围通过模拟距离加载的区块和通过/tickingarea
手动设置的常加载区域中的生物计入全局生物上限;未加载的生物不计入。
除全局生物上限之外,还有种群控制上限,种群控制上限限定了生物的密度。生物生成时,生物当前区块为中心的9×9区块范围内不能超过种群控制上限,该范围被称作区块密度检测范围。只要在模拟距离所控制的区块加载范围内(与生物生成范围无关)或通过/tickingarea
设置的常加载区域内,已生成的生物就会影响种群控制上限。种群上限分为截然不同的两类:地表生物上限和洞穴生物上限。洞穴生物不会计入地表生物上限中,反之亦然。决定生物计入哪个上限是其生成时的位置,而非当前所在的位置。对于集群生成,Y坐标从上往下遍历到的第一个固体方块上方生成的生物(可能生成失败)计入地表上限,其他则计入洞穴上限。结构生成的生物(女巫除外[5])和转化的生物永远计入洞穴上限,而刷怪笼生成的生物计入地表上限。
生物分为以下五种:环境生物、动物、怪物、掠夺者和水生生物。每一个维度下每种生物的在不同地点的种群控制上限如表中所示(以星号标记的上限出现在代码中,但未被使用):
类别 | 地点 | 主世界 | 下界 | 末地 |
---|---|---|---|---|
环境 | 地表 | 0 | 0 | 0 |
洞穴 | 2 | 0 | 2* | |
动物 | 地表 | 4 | 0 | 4* |
洞穴 | 0 | 4 | 0 | |
怪物 | 地表 | 8 | 0 | 10 |
洞穴 | 16 | 16 | 8 | |
掠夺者 | 地表 | 8 | 0 | 8* |
洞穴 | 8 | 0 | 8* | |
水生 | 地表 | 36 | 0 | 36* |
洞穴 | 36 | 0 | 0 |
某些生物亦有其自己的密度上限,这使得其数量略小于种群控制上限。密度上限和种群控制上限的检查方式相同。
生物 | 地表上限 | 洞穴上限 |
---|---|---|
![]() |
20 | 不生成 |
![]() |
5 | 无限制(受种群控制上限的限制) |
![]() |
5 | 不生成 |
![]() |
5(海洋) 2(河流) |
5(溶洞) |
![]() |
不生成 | 2 |
![]() |
3 | 不生成 |
![]() |
10(海洋) 4(河流) |
不生成 |
![]() |
4 | 不生成 |
![]() |
20(预设图案) 20(随机图案) |
不生成 |
生成条件[编辑 | 编辑源代码]
绝大多数生物生成时必须满足空气检测和空间检测,当生物碰撞箱与某些方块碰撞箱重合时可能会阻碍生物生成。完全不阻碍生成方块指生物碰撞箱与方块碰撞箱重合时仍可生成的方块;阻碍生成方块指生物碰撞箱与方块碰撞箱重合时不能生成的方块;部分不阻碍生成方块指对于部分生物可生成,对于部分生物不可生成的方块。
空气检测[编辑 | 编辑源代码]

生成点上方一格方块(以苦力怕为例,其脚部位置方块)的类型必须属于空气类型。
对于生成在陆地的生物而言,这格方块必须是空气;对于生成在水中的生物而言,这格方块必须是水;对于炽足兽而言,这格方块必须是熔岩。
当生成点上方一格为真空气方块时,空气检测通过,属于完全不阻碍生成方块。生存模式中可用的真空气方块包括:空气、水、熔岩和无水气泡柱。
生物也可以生成在伪空气方块中,但是伪空气方块的上方一格必须为真空气方块。伪空气方块可以堆叠多格,只要保证最上面一格伪空气上方一格为真空气方块即可。比如,当生成点上方第一格为脚手架,第二格为水流时,因为脚手架是伪空气方块,且脚手架上方一格的水流属于真空气方块,所以空气检测通过。因此,每个伪空气方块的作用就是把空气检测的位置提高一格。
所有的完全不阻碍生成方块或部分不阻碍生成方块,均属于伪空气方块。
即便伪空气方块能够将空气检测的位置提高一格,但决定生成点是生成陆地生物还是生成水生生物依然取决于生成点上方第一格是否含水或水流。
集群生成的生物进行的空气检测上移超过了建筑高度上限时,由于建筑高度上限外是空气,此时空气检测成功。
在硬编码生成点中进行空气检测时,伪空气方块不能把空气检测的位置上移到生成范围之外,若范围内无真空气方块则生成失败。
不是所有生物生成都会启用空气检测,如僵尸猪灵的生成,试炼刷怪笼的生成等等。
空间检测[编辑 | 编辑源代码]





各种方块可以根据其不同的性质人为地分成如下几种类别,这些方块不同的性质会在生物生成中造成不同的影响。
挤压类方块指不阻碍生物自然生成的方块,其大多属于完全不阻碍生成方块或部分不阻碍生成方块。
部分挤压类方块具有碰撞箱,因而它们能在生物生成时挤压生物,使其实际生成后的位置出现偏移,从而快速处理怪物。挤压类方块也因此常见于各类刷怪塔中。
常见的挤压类方块包括:所有伪空气方块、玻璃、玻璃板、树叶、普通冰、海晶灯、信标、荧石等。此外,栅栏、栅栏门和墙这类超出1格高度以外部分的碰撞箱也被视为挤压类方块。
限制类方块能让与它碰撞箱重叠的尝试生成的生物生成失败,其属于阻碍生成方块。限制类方块会让生物生成时检测其碰撞箱与方块的碰撞箱是否重叠。值得注意的是,由于上述原因,范围内的所有挤压类方块在生成时也被视为限制类方块。在限制类方块中,按钮与拐角栅栏是特殊的,它们依据轮廓箱而非碰撞箱限制生物生成。
由于限制类方块可以基于碰撞箱检测抑制部分生物的生成,因此它们在刷怪塔中常常用于限制特定生物的生成,如苦力怕刷怪塔、烈焰人刷怪塔、去蜘蛛和末影人全怪塔等。
一般来说,除去挤压类方块与体积相对完整(指完整方块或者上表面或侧面缺少一格像素)的各种红石导体,其他方块均为限制类方块。
阻挡类方块是指如果位于生成点上方第二格,就会阻止全部生物生成的方块,其属于阻碍生成方块。
此外,还有一些性质相对特殊的方块,它们被称为部分不阻碍生成方块。这类方块,对于部分生物,其性质与挤压类方块相同;但对于另一部分生物,其又表现出了限制类方块的性质。如仙人掌、铁轨及其变种、红石粉、红石比较器、红石中继器等。
对于生成点来说,其上方第二格方块不能为阻挡类方块,否则所有生物均不会生成;对于随机到某生物后的生成尝试来说,该生物尝试生成的碰撞箱不能与限制类方块或者被视为限制类方块的挤压类方块的碰撞箱重叠。若以上两种条件均通过,则空间检测通过。
一般来说,体积相对完整的各种红石导体均为阻挡类方块,如石头、岩浆块、蜂蜜块等。特别地,荧石不属于阻挡类方块。
以下规则适用于绝大多数生物:
- 该生物必须生成在一个平整的固体表面之上;该生物不能生成在无生成尝试的方块,如玻璃、树叶、栅栏、活板门、下半台阶、向上的楼梯和箱子等方块上。
- 绝大多数主世界怪物不能在方块光照高于0或天空光照高于7的地点生成。
- 绝大多数主世界动物不能在方块光照和天空光照低于7的地点生成。
除此之外,一些生物也有特殊的规则:
- 对于水生生物(不包括美西螈)来说,营火、红石中继器、红石比较器,铁轨、拉杆、绊线钩等方块完全不阻碍生物生成,但对于其他一些生物来说属于部分不阻碍生物生成的方块。
- 僵尸猪灵只启用碰撞箱检测,不能被玻璃等方块挤压。
- 部分生物只能在特定的方块上生成,如多数主世界动物只能在草方块上生成,兔子只能在草方块、沙子、雪块、雪上生成,犰狳只能在草方块、砂土、红沙以及未染色、红色、橙色、黄色、棕色、白色和淡灰色陶瓦上生成等等。
- 海洋和河流中的鱼只在高度Y=50至Y=64之间的水中自然生成,鱼生成在距离玩家欧几里得范围12-32格处,超过40格距离则消失。
- 幻翼以玩家上方28格为中心,21×15×21的范围生成。
- 对于能够生成并飘浮在空气中或漂浮在水中的生物,水生生物检查生成条件的方块是该生物生成位置向下第一个生成点之上紧邻的水方块和其方块上方生成位置的方块,而幻翼生成也会检测生成点之上紧邻的空气方块(主要检测范围)和生成位置的空气方块(次要检测范围)[6]。因此,幻翼不能在铺满地毯的平原上空生成,鱼也不能在铺满下半台阶的海洋之中生成,因为其不能通过空气检测。
- 铁傀儡和猫会在玩家进入村庄加载范围内后生成。
- 在村庄范围内,灾厄巡逻队不会尝试生成。
集群生成[编辑 | 编辑源代码]
绝大多数生物采用集群生成。集群生成分为地表生物和洞穴生物。集群生成首先会更新种群控制上限,接着在被计算的区块内随机选择X和Z坐标。
找到一个X和Z坐标后,Y坐标从世界最高处向下搜索,找到第一个固体方块和上方的空气类方块尝试生成生物。生成算法会将该方块当作地表方块,同时尝试生成一群地表生物,但可能生成失败;此后,生成算法继续向下搜索至下一个合适的,上方一格完全不阻碍生成的方块。找到满足上述要求的方块后,生成算法会尝试在该方块处生成洞穴生物。洞穴生成会一直持续至Y坐标达到世界底部,并且不会在生成生物后停止。这些生成数据都可以在生成/集群生成(生物群系)找到。
尝试集群生成地表或洞穴生物时,生成算法会通过以下步骤得到生成何种、多少生物。
- 选择一种随机生物。
- 若当前生成位置为液体,选择随机水生生物。
- 若光照等级大于等于7,当前位置上方没有其他方块且当前位置为草方块,则选择随机动物。
- 否则,按怪物生成所需要的亮度条件生成怪物。
- 选择随机数字作为该集群的生物数量。每种生物各有最小和最大数量,且该数量受生物群系的影响。游戏会生成一个0到1间的随机浮点数R,生物数量由以下公式计算:
生物数量=最小数量+R2×(最大数量-最小数量)
,并四舍五入取整。 - 确保生成位置满足生成条件。
- 由全局生物上限限制生成生物的数量。若生物数量已经达到或者超过生物上限则阻断生成。
- 对于每个集群,检查以其所在区块为中心的9×9区块内的同类生物的数量是否超过种群控制上限或是生物密度上限,若生物的数量已经达到或者超过种群控制上限或是生物密度上限则阻断生成。
- 最后,尝试生成该生物。
- 生成生物可能失败,比如生成在方块或是墙壁当中时。
结构生成[编辑 | 编辑源代码]

结构生成以集群生成的生成尝试为基础,游戏会尝试于自然生成的结构中的特定相对X、Z坐标(称为“硬编码生成点”)进行结构生成。
含有硬编码生成点的结构包括沼泽小屋、海底神殿、掠夺者前哨站和下界要塞。每当含有硬编码生成区域(Hard-coded Spawn Area,简称HSA)的区块中进行了一次成功的集群生成,环境生成算法亦会尝试进行结构生成。注意,此处的成功的集群生成指找到可生成的方块,即使由于光照或是密度检查等原因而未能生成生物也是如此。若某个X、Z坐标没有集群生成(如仅有空气方块或所有可生成位置被下半台阶覆盖等情况),则不会有结构生成尝试。结构生成遵循和上述集群生成相同的规则和步骤,只有以下不同:
- 硬编码生成点的Y坐标搜索的起止点由结构的硬编码生成点区域决定,而非从世界高度开始至基岩结束。结构生成仅在该区间内第一个可生成方块(即最高的可生成方块)处尝试一次。
- 硬编码的生成区域位于组成结构的各种子结构的中心,若子结构被区块切割,则在每个区块内该子结构的中心均有一个硬编码生成区域。
- 选择的生物取决于结构:沼泽小屋生成女巫,海底神殿生成守卫者,掠夺者前哨站生成掠夺者(包含巡逻队长),下界要塞生成骷髅、凋灵骷髅、烈焰人、僵尸猪灵和岩浆怪。
- 对于结构生成的尝试,有效的种群控制上限提高一个。
生物生成的执行顺序[编辑 | 编辑源代码]
已加载的区块会以一定顺序更新。在更新每一个区块时,都会有11⁄2000的概率进行一次生成尝试,同时会更新该区块密度检测范围内的各种类别生物的密度。
若要进行一次生成尝试,则会在区块内随机一个X、Z坐标,并从世界最高点开始往下遍历所有方块,并对每个方块进行空气检测。
对于第一个通过空气检测的方块,执行露天生成尝试,其他则进行洞穴生成尝试。执行露天生成尝试的同时,若区块内存在硬编码生成点,会进行一次结构生成尝试。
对于每次露天或者洞穴生成尝试,都会根据生成点的亮度,高度,是否在村庄范围内,是否露天等因素从权重表中选取所有可以生成的生物,再按每种可生成生物的权重从中随机选取一种待生成的生物。选取生物种类后,再根据权重表中的数据随机选择待生成生物的数量。若随机结果为0,则不会生成生物。之后,再根据选取的生物种类的碰撞箱,进行空间检测,并检查生成点是否在玩家周围的可生成范围中。若以上检测顺利通过,则生成成功,同时会更新密度检测范围内的各种类别生物的密度。
其他生成[编辑 | 编辑源代码]
计划周期生成[编辑 | 编辑源代码]
- 猫生成系统会每1200游戏刻(60秒)检查玩家附近的村庄或沼泽小屋,并决定是否生成一只新的猫。
- 灾厄巡逻队会在游戏时间达到100分钟(5个游戏日)后自然生成。若此条件满足,系统每隔10-11分钟会尝试生成一支巡逻队(成功概率为20%)。
- 幻翼每1200游戏刻(60秒)~2400游戏刻(120秒)尝试生成一次,会自然生成在至少72000游戏刻(60分)未在床睡眠超过5秒的玩家上空。
[仅Java版] - 每晚的午夜(昼夜更替中的第18000刻),系统有10%的概率尝试安排一次僵尸围城。如果此时有玩家正在村庄内,则有可能触发这次僵尸围城,在村庄内产生大量的僵尸。
[仅Java版] - 在世界创建的24000游戏刻(20分)后,游戏将开始尝试生成流浪商人和行商羊驼,并在此后每24000刻进行一次尝试。
方块事件生成[编辑 | 编辑源代码]
- 如果玩家建造出正确的结构,即可生成雪傀儡、铁傀儡和凋灵。
- 当玩家位于刷怪笼16格范围内时,刷怪笼会在其周围的8×3×8区域尝试生成生物。
- 当虫蚀方块被破坏或周围有蠹虫遭到攻击时会生成蠹虫。
- 蜜蜂可在蜂巢或蜂箱被未带有精准采集的魔咒的工具破坏时生成。当蜂巢或蜂箱内有蜜蜂时蜜蜂也可以自然生成在周围,同时减少方块内的蜜蜂数量。
- 当下界传送门方块接收到随机刻时有概率生成一只僵尸猪灵。
实体事件生成[编辑 | 编辑源代码]
- 动物和一部分其他生物可以使用它们感兴趣的食物进入“求爱模式”,两只进入求爱模式的同种生物可以繁殖生成新的幼年生物个体或对应的蛋类方块。
- 一个村庄中,村民可以自然生成铁傀儡。
- 恼鬼可被唤魔者召唤而生成。
- 带有不祥之兆的玩家进入村庄可以触发一次袭击,袭击中会自然生成女巫、卫道士、唤魔者、掠夺者和劫掠兽。
- 雷暴中生成的骷髅陷阱马在玩家接近时生成骷髅骑士。
- 在Java版中,僵尸、尸壳、溺尸和僵尸猪灵受伤时可能生成增援。
- 杀死大型或中型的史莱姆和岩浆怪会生成更多更小的个体。
- 如果末影龙战斗仍然处于激活的状态,而末影龙实体失踪,游戏会生成末影龙。
- 幼年僵尸、幼年僵尸猪灵、幼年溺尸
[仅Java版] 、幼年尸壳和幼年僵尸村民在周期生成时有概率附带一只鸡,它们作为一个整体生成成为鸡骑士。 - 一只打开壳的潜影贝被另一只潜影贝(或自己)的子弹击中时,有概率在原地生成一只潜影贝。
物品事件生成[编辑 | 编辑源代码]
生物转化生成[编辑 | 编辑源代码]
- 猪被闪电击中时会被替换为新生成的僵尸猪灵。
- 村民被闪电击中时会被替换为新生成的女巫。
- 如果猪灵和疣猪兽被运送至主世界或末地,其会在15秒后变为僵尸猪灵和僵尸疣猪兽。
- 被僵尸杀死的村民有一定概率(普通难度为50%,困难难度为100%)生成僵尸村民。
- 僵尸村民被治愈为村民。
- 僵尸保持浸泡在水中900游戏刻(45秒)会变为溺尸,尸壳保持浸泡在水中900游戏刻(45秒)会变为僵尸。
- 骷髅在细雪中440游戏刻(22秒)会变为流浪者。
- 蝌蚪成长为青蛙。
外部命令生成[编辑 | 编辑源代码]
清除[编辑 | 编辑源代码]
为防止生物一直存在导致卡顿,同时也为了刷新生物,生物有自然清除的机制。生成每游戏刻都进行一次,而清除也是每游戏刻进行一次,这样可以达到生物数量的动态平衡。
Java版[编辑 | 编辑源代码]

生物是否能被自然清除主要取决于它距离最近玩家有多远与生物本身的特性。根据距离最近玩家的远近,自然清除分为两种:
- 立刻清除:如果一个可被清除的生物距离最近玩家超过其生物类别的清除半径(欧几里得距离),则立刻被清除。通常生物此半径为128格,而水下环境生物为64格。
- 延迟清除:如果一个可被清除的生物距离最近玩家超过32格(欧几里得距离),且无动作计数器超过600,则每游戏刻有1⁄800的概率被清除。
无动作计数器是用于记录生物有多长时间没有进行任何行为的计数器。同时,它也控制一些生物是否能随机走动。当无动作计数器超过100时,除铁傀儡、村民、美西螈、骆驼、青蛙、山羊、嗅探兽、疣猪兽、僵尸疣猪兽、猪灵、猪灵蛮兵、监守者、旋风人和嘎枝外的所有生物都不会进行随机走动。
对于所有生物,无动作计数器每游戏刻增长1;对于怪物,如果内部光照等级超过12,则每游戏刻额外增加2;对于所有灾厄村民、劫掠兽、恼鬼和女巫,每游戏刻额外增加2。如果生物符合以下条件之一,则无动作计数器清零:
- 生物距离最近玩家小于32格。
- 生物受到伤害,无论什么类型的伤害都会重置计数器。
- 这个生物是凋灵。
- 掠夺者、猪灵拉弩。
- 在袭击中将铁傀儡和玩家作为攻击目标的灾厄村民。
- 在袭击中正在扫荡村庄的灾厄村民。
- 正在破门的卫道士。
由于无动作计数器的存在,在32格外但在清除半径内的生物都有最小存活时间。对于可被清除的普通生物,在距离玩家32格以外持续600游戏刻(30秒)才有可能被清除,平均1400游戏刻(70秒)会被清除;对于可被清除的灾厄村民和在亮处的怪物,在距离玩家32格外至少200游戏刻(10秒)后才可能被清除,平均1000游戏刻(50秒)会被清除。
满足下列条件时,生物可以被自然清除:
为防止生物被错误清除,满足下列条件的生物不会被自然清除:
- PersistenceRequired为true的生物不会被清除,下列生物的此项标签为true:
- 骑乘其他实体的生物不会被自然清除。
- 从桶中放出的鱼和美西螈不会被自然清除。
- 手持方块的末影人不会被自然清除。
- 参与袭击的生物不会被自然清除。
- 铁傀儡、雪傀儡、村民、流浪商人、监守者、潜影贝、悦灵、末影龙和绝大部分动物不会被自然清除。
- 巡逻状态下的灾厄村民不能被延迟清除。
- 正在转变的僵尸村民不能被自然清除。
- 与玩家交易过的村民转变而成的僵尸村民不会被自然清除。
除自然清除外,一些生物有特殊的清除方式。这种清除只要求生物在强加载区块中,不要求最近玩家的距离。
- 自然生成的流浪商人和行商羊驼会在48000游戏刻(40分)后被清除。
- PersistenceRequired为false的末影螨在生成2400游戏刻(120秒)后被清除。
- 监守者在钻回地下后立刻清除。
基岩版[编辑 | 编辑源代码]
在基岩版中,模拟距离为4个区块时,生物如果移动至距离玩家44格以外,则会立刻被清除。
- 当前几乎所有自然生成的生物在模拟距离为4时都会在距离玩家44格或更远时被清除。模拟距离为6或更高时,生物会在模拟距离边界处(距最近的玩家至多128格)被清除。
- 所有鱼都会在距离玩家至少40格时被清除,无论模拟距离为何。
- 如果生物在距最近的玩家32至44格处,其必须在30秒内没有受伤,然后就会有1⁄800的概率被清除。
具有持久性NBT标签的生物不会被清除。以下方式会使生物拥有持久性:
- 该生物与玩家互动:
- 该生物是伴随结构生成的:
以下实体总是拥有持久性:
历史[编辑 | 编辑源代码]
请协助补充相关内容的描述,讨论页可能有更多细节。
Java版Classic | |||||||
---|---|---|---|---|---|---|---|
2009年8月25日 | 生物现在成群生成。 | ||||||
? | 生成区域曾经是17×17个区块而不是15×15。该区域被缩小了,但是旧的大小仍然被用于计算生物容量。 | ||||||
并不总是能通过防止生物在其他地方生成来够驱使它们聚集于一个生成空间里。一些更早的关于“生成”的资料或许可以作为参考。 | |||||||
大量的空余空间曾经能促进一般地区的生物生成。这一点对于一个小一点的规模仍然有效,且由于成组生成的机制而只对水平分布有效。 | |||||||
Java版Alpha | |||||||
v1.2.0 | ? | 0,0区块(X为0-16且Z为0-16)不再总是首先进行生物生成判定。如果一个人在此区块建了一个暗室,那所有的生物都会生成在其中,而导致其他地方都没有。 | |||||
Java版Beta | |||||||
1.8 | pre1 | 玩家的出生点必然位于特定的生物群系中,而非此前的必然在沙子上。玩家可以生成在森林、沼泽和针叶林中。 | |||||
Java版 | |||||||
1.0.0 | ? | 在此之前,生成只被光照等级所决定而不是当前区块的属性。攻击型生物在光照等级7或更低的地方生成而被动型生物在光照等级9或更高的地方生成。因为这一点,尽管在有光照的地方仍有很小的概率生成攻击型生物,归因于它们在无光照的空中生成。另外如果你带了很多火把下矿,然后返回,你很可能将会看到你的房子里面有一些牛、猪、鸡或绵羊在里面到处跑。 | |||||
1.1 | 12w01a | 对玩家的生成位置的有效生物群系进行了调整。玩家现在能生成在森林、平原、针叶林、繁茂的丘陵和针叶林丘陵里。 | |||||
1.2.1 | 12w03a | 玩家的出生点现在可能在丛林和丛林丘陵生物群系里。 | |||||
1.8 | 14w25a | 成群生成的大多数限制被移除。在此之前必须为空气,现在可以为任意透明方块。 | |||||
1.9 | 15w46a | 当生成敌对生物时,要求生成点的方块不能阻止生物的移动(以前只是不透明的),不能是任何类型的铁轨。此外,上面的方块不能再是液体。 | |||||
15w51a | 添加spawnRadius 游戏规则以控制玩家能在距离世界出生点多远的位置重生。 | ||||||
pre2 | 调整了成群生成的机制。“12次尝试”现在为“至多12次尝试”,且中心的生成权重更大。 | ||||||
1.15 | 19w37a | 可繁殖的生物自然生成为一群时,这群生物可能包括幼年个体。(概率为5%或10%,取决于生物种类) | |||||
1.18 | exp1 | 现在按照普通机制生成的主世界敌对生物都只会在方块光照等级为0时自然生成,此版本之前它们在光照等级不高于7时即可生成。 | |||||
exp2 | 将僵尸、骷髅、蜘蛛和洞穴蜘蛛刷怪笼刷怪区域的方块光照等级上限提高到11。 | ||||||
exp3 | 生物的生成速度不再在低处增加或在高处减少。新生成速度类似于1.17中高度为64处的速度。 | ||||||
exp5 | 撤回了1.18-exp3的更改。 | ||||||
21w37a | 撤回了1.18-exp2的更改。 | ||||||
21w40a | 鳕鱼、鲑鱼、河豚、热带鱼、鱿鱼和海豚现在仅生成于高度在50至64之间的水中,在此之前的高度范围是46至62。 | ||||||
21w42a | 重新设计了世界出生点算法,现在会根据与控制生物群系放置和世界生成一致的气候参数来选取。玩家不应再会在海洋或其他不方便活动的地方出生。 | ||||||
基岩版 | |||||||
1.21.0 | 1.21.0.20 | 现在生物集群生成时会生成在方块正中心而不是西北角。[7] |
参考[编辑 | 编辑源代码]
- ↑ MC-1788
- ↑ MC-2536 — 漏洞状态为“等待回应”。
- ↑ lc值最早来源于调试屏幕中的lc,代表玩家所在区块的渲染子区块最大高度。虽然现在游戏系统已经不使用最高子区块高度计算,但此名称也一直被玩家使用。
- ↑ 玩家群体中也将这种游走称作刷怪游走。
- ↑ MCPE-60552 — 漏洞状态为“已修复”。
- ↑ https://www.bilibili.com/video/BV12V411T7To
- ↑ MCPE-99315 — 漏洞状态为“已修复”。
外部链接[编辑 | 编辑源代码]
- 来自Marglyph的论坛帖子讨论了Beta 1.2中的生成算法。
- 来自fr0stbyte124的论坛帖子讨论了从Alpha v1.1.2_01至万圣节更新之前生物生成的变化。