袭击机制详解

袭击机制详解

作者:橘猫sama · 2026年10月17日 00:35 cv53471290 · 实体机制 English

目前 Minecraft 的袭击机制相比于 1.16 有了许多明显的新变化,但是底层架构是基本一致的。这篇文章归纳并总结了最新的代码挖掘和测试结果,希望能帮助大家理解袭击的底层机制。


袭击触发

袭击系统与村庄密切相关,可以先阅读文章了解村庄的基本知识名词:

村庄机制limx2

袭击(Raid)是一种生成多波次大量袭击者攻击村庄的不祥事件。由于微软翻译问题,也被称作劫掠。

当玩家喝下不祥之瓶产生不祥之兆,若难度不为和平,且村庄没有进行袭击,则当玩家进入 村庄范围 AABB 时,不祥之兆转化为 30s 的袭击之兆效果,并在buff结束后给玩家挂上袭击触发器(触发器属于组件 component 系统),添加后玩家将刷新自身组件触发袭击事件,并由袭击触发系统在原本保存的袭击坐标处搜索村庄并创建袭击。

他这个组件系统 bug 很多,某些操作比如改变村庄中心会导致喝完药就立刻开始读条,但实际上只是 30s 的读条前摇只是变成了后摇罢了,总时长不变。


袭击生成

在袭击事件中,袭击的总波数由游戏难度决定,简单难度下为 3 波,普通为 5 波,困难为 7 波。基岩版的袭击总波数与袭击之兆的效果等级无关,同时也不会生成额外波次。

wiki中关于生物数量的描述
wiki中关于生物数量的描述

前情提要

MCBE 袭击(Raid)事件生成区域解析

Boss栏读条完成后,会进行袭击生成尝试。在 6gt 内依次尝试在 6 种不同的生成区域内寻找生成点。若生成点 6 次尝试全都找不到,袭击直接结束。生成点必须距离玩家 128 格内。

生成区域

(此处借鉴SAC的老文章。文章是1.16写的,村庄范围不一样,图的数据我就不改了,丰富了内容描述并修改了错误)

人工村庄范围(65×25×65)
人工村庄范围(65×25×65)

图中是一张人工村庄俯视图,其实就是一张床加一只村民。由于未经扩村(POI能扩大村庄),村庄中心在床头正中央,橙色的 村庄范围 AABB 是 65×25×65格(1.18.30 以前的旧版位于床头西南床尾西北 64×24×64),白点为村庄中心。粉色小点为玩家位置,蓝色表示袭击生成区域,绿色表示基准点形成范围,绿色区域内也能生成袭击者。

为了方便表示,下图内的颜色没有深浅之分,仅代表是否存在,而不是实际的概率密度,实际上有概率差异的。

第1次尝试

袭击区域1
袭击区域1

第一种生成区域的形状如上图,首先游戏会在村庄范围的边界以相等的概率随机选取一 Y 轴距离村庄中心 ≤8 格的点,然后沿着村庄中心到此点的连线向外延伸 16 格;此过程循环 10 次,找到基准点为止。基准点选中后,再以此点为中心,在周围 17×17×17 的区域内随机选取村庄外一点判定是否可以生成 10 次。

第2次尝试

袭击区域2
袭击区域2

第二种生成区域的形状如上图,当玩家在村庄内或玩家距离村庄范围的边界小于 16 格时,游戏会生成一个 R∈[32,48]R\in [32, 48] 的随机半径,然后以玩家位置为圆心,R 为半径,朝向村庄中心与玩家位置连线向外的半圆弧上随机选取一 Y 轴距离村庄中心 ≤8 格的点;此过程循环 10 次,找到基准点为止。基准点选中后,再以此点为中心,在周围 17×17×17 的区域内随机选取一点判定是否可以生成 10 次。

玩家相对中心处于不同方向时区域2的形状
玩家相对中心处于不同方向时区域2的形状

第3次尝试

袭击区域3
袭击区域3

第三种生成区域的形状如上图,首先游戏会在村庄范围的边界以相等的概率随机选取一 Y 轴距离村庄中心 ≤8 格的点;此过程循环 10 次,找到基准点为止。基准点选中后,再以此点为中心,在周围 17×17×17 的区域内随机选取村庄外一点判定是否可以生成 10 次。

第4次尝试

袭击区域4
袭击区域4

第四种生成区域的形状如上图,首先游戏会在以村庄中心为圆心,半径 0.5 的圆上以相等的概率随机选取一 Y 轴距离村庄中心 ≤8 格的点;此过程循环 10 次,找到基准点为止。基准点选中后,再以此点为中心,在周围 17×17×17 的区域内随机选取村庄内一点判定是否可以生成 10 次。

第5次尝试

袭击区域5
袭击区域5

第五种生成区域的形状如上图,首先游戏会在以村庄中心为圆心,半径 8 的圆上以相等的概率随机选取一 Y 轴距离村庄中心 ≤8 格的点;此过程循环 10 次,找到基准点为止。基准点选中后,再以此点为中心,在周围 17×17×17 的区域内随机选取村庄内一点判定是否可以生成 10 次。

第6次尝试

文章配图

第六种生成区域的形状如上图,首先游戏会在以村庄中心为圆心,半径 8 的圆上以相等的概率随机选取一点,基准点必须是具有碰撞箱的非露天方块(树叶和玻璃不行,但被树叶覆盖的方块可以);此过程循环 10 次,找到基准点为止。基准点选中后,再在此点选取 Y 轴最高处的固体方块判定是否可以生成 10 次。


袭击者生成检测机制

总的来说,前 5 种尝试在村庄中心 Y 坐标 ±8格范围内寻找基准点,第 6 种尝试会从世界最高点向下寻找基准点,再以基准点为中心 17×17×17 范围内寻找方块生成。六种生成尝试都是先选择基准点,进行 10 次尝试;找到基准点就选择生成点,也尝试 10 次。10 次找基准点都失败了就跳到下一波次,除非六种都失败。

袭击者的生成点方块检测如下:

袭击者脚下的生成点 P 必须是有碰撞箱的可支撑方块,能立足就符合条件,栅栏门、墙甚至活塞臂什么的都行,但不能是树叶;

上边两格不能有碰撞箱阻碍,另外 P+1 格不能是树叶, P+2 格不能是树叶、熔岩或水;

P+3 格不能是完整固体方块;

如果基准点选中了,但所有生成点尝试都不成立,就直接结束袭击进度条。

袭击生物位于方块西北角
袭击生物位于方块西北角

MCBE 劫掠生成类方块检测机制

选取基准点套用和生成点一样的检测,除了第六次尝试:第六次使用 heightmap 检测的是某 XZ 坐标下的最高点,所以露天的树叶和玻璃都会直接跳过,并且基准点上边盖树叶和玻璃也能通过选点尝试。(但实际应用中,由于玻璃也是生成点,我们一般只用方块盖树叶的技巧锚定基准点,再做一个小型生成平台。)

我的世界:萌新也能做秒杀式绿宝石农场?(兼容网易,1.18.30+)

P+3 格也不需要判断,因为生成点头顶第三格要求是完整固体方块这个规则,疑似是游戏bug,实际代码不是这么设计的,真佩服mojang的程序员。因为基准点不需要判断但生成点需要,所以高度为 2 格的夹层有很大概率会导致袭击者生成失败,进而袭击结束。

最下方的石头层大概率被选为基准点,但由于p+3为树干方块直接生成失败
最下方的石头层大概率被选为基准点,但由于p+3为树干方块直接生成失败

另外需要注意的是,代码中虽然是随机相等概率抽取基准点,但由于生成点会在基准点 17317^3 范围内再随机抽取,导致越接近村庄中心,被选中为生成点的概率就越高。


Boss栏

袭击的 Boss 栏进度条记录了这波袭击生物的总血量,后来加入的袭击生物只要在 村庄范围 AABB 内,也会被记录进 Boss 栏总血量中,但村庄范围外的生物哪怕加入了袭击也不会被记录在 Boss 栏中,大概率是 bug。

每一轮袭击结束后, Boss 栏会进入 2s 的换波时间;随后进度条从左往右加载,显示下一波袭击抵达时间,这个抵达冷却时间是 15s。袭击事件结算为胜利后,Boss 栏会显示 袭击-胜利 总共 30s;此时喝不祥之瓶不会产生任何效果;如果村民头顶一格没有遮挡的方块,他们则会燃放烟花。

如果无法生成袭击者,则袭击会直接终止,Boss 栏直接消失。

袭击计时会持续进行 48000 gt(40分钟),如果 48001 gt 仍未结束,则袭击会直接中止,以平局告终。此时,Boss 栏也会直接消失,并且出现一条消息: “一次劫掠已过期”。


袭击加载范围

值得注意的是,如果没有玩家处于村庄加载范围内,村庄不会更新,此时袭击不加载,袭击计时也会停止。这意味着如果玩家卡在村庄加载范围外挂机,利用前哨站的掠夺者加入袭击产出绿宝石就不会触发平局。

袭击加载范围就等于村庄加载范围,在这个范围内,袭击才会正常地读条和生成。村庄加载范围等于村庄范围 AABB 每个方向往外扩展 模拟距离×8 格,整体上就是:

村庄加载范围 = 村庄范围AABB + (模拟距离 ×8) ×2

村庄加载范围平面图 by莵道三室戸
村庄加载范围平面图 by莵道三室戸

Boss 栏显示范围等于村庄范围 AABB 每个方向往外扩展 32格。注意,此处的 Boss 栏显示范围中心一般就是村庄中心,但如果袭击开始后改变村庄中心,Boss 栏中心不会变。

在模拟距离 = 4 时,Boss 栏显示范围恰好等于袭击加载范围。


袭击迁移

袭击生成后,袭击者遵循就近加入原则。

当袭击者通过 A 村庄生成,但离 B 村庄的村庄中心更近,且袭击者脱离 A 村庄的袭击迁移检测范围时,袭击者会迁出 A 村庄,Boss 栏则会更新进度。

袭击迁移检测范围等于村庄范围 AABB 每个方向往外拓展 d = 10 格。袭击者处于此范围内则无法迁移至其他村庄。

堆村秒杀
堆村秒杀

上述机制往往被用于堆村秒杀,但是,我们在实际应用中还会遇到一种单村秒杀的情况。

袭击者也算一种村庄中敌对的“居民”,因此也存在着迷失机制。袭击者在袭击迷失范围外超过 20 分钟,则会直接移除出村庄,同时跳过 Boss 栏的袭击进度条。

袭击迷失范围就等于村庄迷失范围,袭击者连续超出这个范围 20 分钟则会迷失并被清除出袭击。村庄迷失范围等于村庄范围 AABB 每个方向往外扩展 48 格。

值得注意的是,如果袭击生成时他们本身就位于迷失范围外,比如利用第六种生成在村庄中心 61 格以外(13+48)生成袭击者,则 Boss 栏直接清空并完成这一波,实现秒杀。这大概率是代码bug……

值得注意的是,有三名掠夺者因此不幸摔落,他们分别是维亚切斯拉夫·巴兰尼科夫、安东·尤丁采夫和尼基塔·布亚诺夫……

单村秒杀
单村秒杀

另外,一个存档开启超过20分钟后才会出现村庄范围 48 格外生成的袭击者被瞬间清空 Boss 栏进度条的情况。如果这些掠夺者在一开始的20分钟内任意时间生成,不会立刻被秒杀。

到20分钟时,如果这些袭击者从未进入过袭击迷失范围内,他们就会被立即清出 Boss 栏,反之则被保留在进度条中。(这可能是因为超出迷失范围的袭击者没有被村庄记录,所以直接当做这一波袭击者迷失而处理掉了)

被单村秒杀的生物和自然生成的生物一样,会存在 R>32 格延迟清除和 R>128 格立即清除的机制。


加入袭击

袭击存在中途加入机制,不处于本波次袭击的袭击者(所有灾厄村民、女巫和劫掠兽)都可以中途加入袭击。

当试图加入的袭击者碰撞箱与某个已加入的袭击者碰撞箱 ≤16 格(切比雪夫距离),且已加入的袭击者位于触发袭击的村庄范围内时,试图加入的袭击者会加入本波次袭击。

如果试图加入的袭击者位于村庄范围内,则更新 Boss 栏总血量;若不处于村庄范围内,依旧可加入袭击,但不会被 Boss 栏统计到。

若玩家不在村庄加载范围内,加入袭击依然可以正常发生,且不会消耗 40min 的袭击计时。

中途加入的袭击者
中途加入的袭击者

掠夺者前哨站

掠夺者会在掠夺者前哨站自然生成。

除伴随前哨站一同生成的掠夺者外,生成在大瞭望塔的掠夺者会在 1 个、2 个或 4 个特殊的柱状硬编码生成区域(Hard-Coded Spawn Area,HSA)生成。

在 1.21.10.24 以后,因为官方修改了 HSA底层结构(把 bug 做成机制并加入开关),导致了 HSA 也可出现于瞭望塔之外子结构的 bug,如铁傀儡笼子,悦灵笼子和羊毛帐篷。木头堆和稻草人的 HSA 生成点位因为太矮被压没了。

瞭望塔 HSA 生成点的数量取决于结构生成的方向(也可以通过跨多少区块判断),其数量根据结构的方向而变化。具体位置如下:

当顶层向上的楼梯朝南时,生成点有1个(25%概率)
当顶层向上的楼梯朝南时,生成点有1个(25%概率)
文章配图
当顶层向上的楼梯朝东/朝西时,生成点有2个(50%概率)
当顶层向上的楼梯朝东/朝西时,生成点有2个(50%概率)
当顶层向上的楼梯朝北时,生成点有4个(25%概率)
当顶层向上的楼梯朝北时,生成点有4个(25%概率)

上图展示了掠夺者硬编码生成位置,金块代表生成点,蓝线代表区块边界。

HSA 是柱状的,从底层入口处地板开始,垂直向上 18 格方块,掠夺者可以在这条生成柱内生成(coralfans 等插件看到的 hsa 顶上三格实际上不能生成,这三格在代码中被额外阉割掉了)。

除大瞭望塔之外,掠夺者还会生成在木笼子以及羊毛帐篷中。同大瞭望塔一致,生成点与子结构跨区块有关,有 1 个、2 个或者 4 个。

HSA 其实就位于这个子结构的位置中心,如果子结构被区块切割,那么 HSA 会变成 2 个或者 4 个(取决于跨几个区块),几个 HSA 则位于各自被区块切割后的几个结构的位置中心。

具体子结构的 HSA 位置我就不介绍了,感兴趣的可以去看:

MCBE 1.21.10.24哨塔子结构及hsa介绍

找对高度以后,用玻璃板卡住掠夺者找位置也是可行的。

由于基岩版的结构生成尝试源于集群生成尝试,因此需要保证结构所在的区块不能是纯虚空,或出现所有可进行生成尝试的方块均被下层台阶所覆盖的情况。尽可能要保证区块内留有一层可进行生成尝试的方块。集群生成尝试也可能导致硬编码生成区域以外的其他位置刷出生物。


掠夺者自然生成机制

除了灾厄巡逻队,掠夺者只会在掠夺者前哨站生成。

掠夺者会在 HSA 生成柱范围内最高可生成位置的西北角处生成,无亮度限制,可生成位置需要至少 2×2×2 的空间,该空间内任何实心固体方块都会抑制生成,树叶、玻璃等方块则不会阻碍生成,在hsa生成范围内至少需要一个空气类型的方块以满足生成条件(包括延续空气类)。

普通掠夺者和掠夺者队长的生成概率为 1:1。

掠夺者的生成其实全是 bug,虽然掠夺者队长有 50% 概率生成,但我们平常看到的单维度刷怪塔里队长没那么多。这是因为,掠夺者的种群控制上限本来是8,独立于怪物、动物、水生生物之外,但是实际的上限为 7(普通掠夺者)+1(掠夺者队长)。

种群控制上限限定了生物的密度。生物生成时,生物当前区块为中心的 9×9 区块范围内不能超过种群控制上限,该范围被称作区块密度检测范围。

而最难绷的是,普通掠夺者和掠夺者队长会互相抢上限!如果第 1 个刷的是掠夺者队长,后面最多再刷出 6 个普通掠夺者;如果第 1 个刷的是普通掠夺者,后面则不会刷新任何掠夺者队长!

与此同时,袭击生成的掠夺者同样会占用自然生成在掠夺者前哨站的掠夺者的上限。这也是为什么有些袭击塔下方永远刷不出掠夺者队长。

所以只要在前哨站周围漏掉一个普通掠夺者,你这辈子都别想在这个塔里刷出掠夺者队长了~

做加入袭击式绿宝石农场时也要注意,别抓普通的掠夺者用来招募袭击,否则也会导致刷不出掠夺者队长出来。

一个 bug 是 bug ,一堆 bug 能 work ,这就是我们的 bugjump工作室。

嘟嘟嘟嘟,嘟嘟嘟嘟,嘟嘟嘟嘟,嘟↑嘟↓嘟←嘟→
嘟嘟嘟嘟,嘟嘟嘟嘟,嘟嘟嘟嘟,嘟↑嘟↓嘟←嘟→

最后,我十分感谢对文章做出贡献的大佬:

@藏青茶壶 理论指导与部分结论

@苏望安 测试验证内容与部分结论

@8848yyds 提供了源码支持

@离殇之枫 @曲奇 提供了生成点方块数据

@_hhhxiao  @莵道三室戸 @OEOTYAN 前人对袭击机制的积极探索

希望这篇文章对大家有所帮助!

原专栏链接 » « 返回实体机制栏目 « 返回文章列表