爆炸

来自Minecraft Wiki
跳转到导航 跳转到搜索
  关于Minecraft Dungeons里的魔咒,请见“MCD:爆炸”。
TNT制造的爆炸

爆炸(Explosion)是一种在一定范围内破坏方块、冲击并伤害实体、并产生大量粒子的效果。

爆炸机制

爆炸是一种有多种造成因素的效果,总的来说是破坏性的。爆炸在发生时就会瞬间完成对方块和实体的状态变更,在爆炸发生后不会持续造成更多的影响,尽管部分因素会持续地制造多个爆炸。

爆炸会造成3种效果:影响方块,影响实体,以及生成粒子。这三种效果各自独立生效且实现并不一致,因此可能会出现反直觉的对生物的爆炸半径比对方块的爆炸半径更大的情况。

影响爆炸强度的基本变量是爆炸的爆炸威力(Explosion power)。爆炸威力的强弱直接决定了这个爆炸能够覆盖多大的范围,能够破坏何种方块,以及对实体会造成多高的伤害。方块对抗爆炸破坏效果的基本属性是方块的爆炸抗性(Blast resistance),爆炸抗性越高,方块阻挡爆炸的能力就越高。

方块的爆炸抗性通常是一个固定值,但含水会使方块的爆炸抗性被提升为水的爆炸抗性,即100。这也包括总是含水的方块,如气泡柱海草海带,故它们原始的爆炸抗性不会体现。

爆炸来源

来源 爆炸威力 最大伤害(100%接触率) 说明
简单难度 普通难度 困难难度
TNT矿车 4-11.5 29.5(♥ × 14.75)82(♥ × 41) 57(♥ × 28.5)162(♥ × 81) 85.5(♥ × 42.75)243(♥ × 121.5) 爆炸威力受到多种因素修正。被激活铁轨激活而爆炸时,忽略各种铁轨和铁轨下的方块。游戏规则tntExplosionDropDecayfalse(该游戏规则的默认值)时破坏的方块总是会掉落。
凋灵(生命值下降到一半时的冲撞攻击)[仅基岩版] 8 - - - 爆炸不造成伤害,不生成爆炸粒子,不使用爆炸音效。受爆炸影响的方块(除了基岩末地传送门方块末地折跃门方块末地传送门框架命令方块结构方块结构空位屏障)的爆炸抗性视为不超过0.8。游戏规则mobGriefingfalse时不影响方块。
凋灵(在生成时、生命值下降到一半时或死亡时[仅基岩版] 7 50.5(♥ × 25.25) 99(♥ × 49.5) 148.5(♥ × 74.25) 游戏规则mobGriefingfalse时不影响方块。
末地水晶 6 43.5(♥ × 21.75) 85(♥ × 42.5) 127.5(♥ × 63.75) 末影龙复活而爆炸时不影响方块。
闪电苦力怕 6 43.5(♥ × 21.75) 85(♥ × 42.5) 127.5(♥ × 63.75) 被炸死的生物会掉落生物头颅。游戏规则mobGriefingfalse时不影响方块。
重生锚 5 36.5(♥ × 18.25) 71(♥ × 35.5) 106.5(♥ × 53.25) 可以生成
使用死者被[刻意的游戏设计]杀死了”[仅Java版]死者被[Intentional Game Design]杀死了[原文如此][仅基岩版]死亡消息
TNT 4 29.5(♥ × 14.75) 57(♥ × 28.5) 85.5(♥ × 42.75) 游戏规则tntExplosionDropDecayfalse(该游戏规则的默认值)时破坏的方块总是会掉落。
水下TNT[仅基岩版和​教育版] 4 29.5(♥ × 14.75) 57(♥ × 28.5) 85.5(♥ × 42.75) 爆炸计算时忽略范围内的。游戏规则tntExplosionDropDecayfalse(该游戏规则的默认值)时破坏的方块总是会掉落。
苦力怕 3 22.5(♥ × 11.25) 43(♥ × 21.5) 64.5(♥ × 32.25) 游戏规则mobGriefingfalse时不影响方块。
蓄风 3-5 - - - 游戏规则mobGriefingfalse时不影响方块。
爆炸不造成伤害,且不破坏方块,生成狂风粒子。风爆范围内的部分方块可以响应此风爆,从而改变自身方块状态。
风爆魔咒 I:1.2
II:1.75
III:2.2
- - -
旋风人风弹 3 - - -
物品风弹 1.2 - - - 游戏规则mobGriefingfalse时不影响方块。
爆炸不造成伤害,且不破坏方块,生成狂风粒子。风爆范围内的部分方块可以响应此风爆,从而改变自身方块状态。造成实体击退的速度增加10%。
火球 1 8.5(♥ × 4.25) 15(♥ × 7.5) 22.5(♥ × 11.25) 可以生成,游戏规则mobGriefingfalse时不影响方块。
黑色凋灵之首 1 8.5(♥ × 4.25) 15(♥ × 7.5) 22.5(♥ × 11.25) 游戏规则mobGriefingfalse时不影响方块。
蓝色凋灵之首 1 8.5(♥ × 4.25) 15(♥ × 7.5) 22.5(♥ × 11.25) 受爆炸影响的方块(除了屏障基岩末地传送门方块末地传送门框架末地折跃门方块命令方块结构方块结构空位拼图方块光源方块强化深板岩)的爆炸抗性视为不超过0.8。游戏规则mobGriefingfalse时不影响方块。

爆炸对方块的效果

比较闪电苦力怕(左)、TNT(中)和苦力怕(右)的爆炸坑大小

爆炸会影响附近的方块,可能将其破坏、改变状态或生成

苦力怕恶魂火球凋灵风弹造成的爆炸会因游戏规则mobGriefing被设置为false而不影响方块,对方块的破坏、改变方块状态、生成火的效果均不会生效。

破坏方块

射线从爆炸中心延伸到以此为中心的边长为2的立方体表面均匀分布的点处(此图仅表示射线方向,并不代表实际长度)
爆炸摧毁方块形成的大致球状结构

爆炸可以破坏周围的方块。爆炸破坏方块的基本方式是从爆炸中心向周围发射出1352条向外延伸的射线,并清除射线上的方块。

如右图所示,计算爆炸效果时,从爆炸中心发射出大量射线,每条射线分别计算对各个方块的爆炸影响。

这里以P表示爆炸威力R表示爆炸抗性n表示射线采样衰减的段数。下文同。

  1. 假设围绕爆炸中心存在一个立方体,立方体外表面划分为16×16×16的网格。则爆炸中心到网格上每个交点都会形成一条射线,总计1352条射线。
  2. 每条射线都有一个初始强度:I0=(1.0±0.3)P
  3. 射线沿自身方向每前进0.3格(一段),强度衰减0.225:In+1=In0.3×0.75=In0.225
    穿过非空气方块时,强度值进一步衰减:In+1=In[0.225+0.3(R+0.3)]=In0.3R0.315
  4. 任何衰减分段采样点上未能使射线强度衰减于0的方块都会被破坏。

爆炸对方块的效果只考虑射线所在方块网格内方块的爆炸抗性,即使方块的形状或性质允许射线通过而不产生碰撞,如台阶蜘蛛网

从以上过程,可以推导出下面的结论:

  • 最大爆炸半径(假设没有方块吸收)
    =1.3P0.225×0.3[注 1]
    = 10.2(闪电苦力怕),6.9 (TNT),5.1 (苦力怕),1.5(恶魂火球
    例如,TNT爆炸可以摧毁7个方块外的火把。然而爆炸究竟能摧毁多少方块是不确定的,并且还取决于爆炸发生的具体位置。
  • 对于发生在空气中的爆炸,能够吸收最大爆炸强度的方块的最小爆炸抗性(即能够完全抵抗某种爆炸的最低爆炸抗性)
    =1.3P0.225n0.30.3
    为了不被破坏,方块需要在其内的第一个衰减分段采样点就吸收所有的爆炸强度。
    • n(衰减段数)取决于碰撞体积。在空气中的爆炸衰减段数至少为1。TNT苦力怕的碰撞箱大小使它们的爆炸总是离最近方块0.49格和0.5格,即衰减段数至少为2;而火球爆炸可发生在任何地方,故衰减段数至少为1。
    • 因此,要完全抵抗相应的爆炸,方块的最小爆炸抗性分别为24.2(闪电苦力怕)、15.534(TNT)、11.2(苦力怕)、3.284(恶魂火球)。
    • 由上,、静止的熔岩黑曜石基岩不能被一般的爆炸破坏,而栅栏等爆炸抗性更小的方块可以被恶魂火球摧毁。这些都是理论值,实际情况中爆炸抗性较小的方块并不总是被破坏。
TNT爆炸射线的采样点的视觉化效果(只展示了射线上采样点的第十次迭代时的长度,并非实际的射线长度)

注意:

  • 多个的爆炸效果,无论爆炸时间差距怎样少,在一个方块上都是独立计算,并连续地为每次爆炸计算影响。而在爆炸的历史上,方块从没有过"临时生命"或类似的性质。这意味着爆炸对方块并没有累积性效应。
  • 虽然爆炸时获得“将会被影响的方块”被使用“射线上的方块”描述,但实际上获得“将会被影响的方块”的方式为:从爆炸中心开始,每间隔0.30000001192092896格进行一次采样,采样时将这个采样点的坐标向下取整以获得“将被影响的方块”。

方块掉落

被爆炸破坏的方块有一定概率不会掉落。

被爆炸破坏的方块有1PP表示爆炸威力)的概率使其战利品表掉落条件minecraft:survives_explosion得到满足,否则方块不会掉落。例如普通苦力怕的爆炸威力为3,那么被它炸毁的方块将有13的概率掉落,使其留下的爆炸坑很难被坑中剩下的方块掉落物填平。

龙蛋信标潮涌核心生物头颅潜影盒总是在被炸毁后掉落,因为它们的掉落无需minecraft:survives_explosion,尽管这些掉落物可能被随后的爆炸所摧毁。

多个游戏规则控制了什么类型爆炸的会导致方块有概率不掉落:

  • blockExplosionDropDecay:由方块引发的爆炸,包括床和重生锚的爆炸。默认为true[仅Java版]
  • mobExplosionDropDecay:由生物引发的爆炸,如苦力怕的爆炸。默认为true[仅Java版]
  • tntExplosionDropDecay:由TNT和TNT矿车引发的爆炸。默认为false

tntExplosionDropDecay默认为false,因此被TNTTNT矿车炸毁的方块总是会掉落。

生成火

能够生成火的爆炸在摧毁一个方块后,若该位置下方是一个完全固体渲染方块,则这个有13的概率在该位置生成

恶魂的火球、床和重生锚造成的爆炸可以生成火。

更改方块状态

风爆可以更改下列方块的方块状态,模拟“被风吹动”的效果:

爆炸对实体的效果

点燃的TNT的采样点与即将被其伤害的盔甲架的采样点

爆炸对实体造成两个效果:造成爆炸伤害和增加实体向爆炸相反方向的动量。如果一个实体位于爆炸伤害半径 r = P×2中,它会被炸伤并弹开。

爆炸对实体的“伤害半径”与爆炸对方块产生影响的“影响范围”是不同的。同时,爆炸对实体的效果无法被方块完全挡住,这意味着爆炸物可以在水中或隔着墙将实体炸伤并炸飞,很容易破坏墙后的物品展示框[仅Java版]

下文以d表示实体到爆炸中心的距离,α表示爆炸接触率(见下文),m表示所有盔甲的最大爆炸保护魔咒等级。爆炸会对实体造成以下效果:

  1. 对于每个距离爆炸中心爆炸伤害半径r=2P之内的实体,定义爆炸击退力:F=(1dr)α
  2. 对实体造成的伤害为7(F2+F)P+1
  3. 计算伤害后,爆炸接触率将减小:α1=(10.15m)α
  4. 实体根据更新后的爆炸接触率沿着从爆炸中心到实体眼睛位置的方向被推动(速度加以重新计算的F)。

最后,如果爆炸伤害不是玩家来源,[仅基岩版]爆炸对玩家造成的伤害总是会受到难度影响,无论是否有实体来源,若普通难度下受到的爆炸伤害为D,则在困难难度下为1.5D,在简单难度下为min(D,0.5D+1),在和平难度下会变为0并被玩家免疫[仅Java版]

除风爆以外,爆炸对实体造成爆炸伤害,会受到抗性提升的减少,受到护甲值的减少,以及保护爆炸保护魔咒魔咒提供对爆炸伤害的减少。

从以上过程,可以推导出下面的结论:

  • 如果实体在伤害半径内,它们总是至少会受1点伤害(♥),不论其爆炸接触率大小。
  • 实体所可能承受的最大伤害(在爆炸中心与其100%接触,普通难度下)
    =7×(12+1)P+1
    = 99(刚生成的凋灵),85(闪电苦力怕),71(主世界以外的维度中被使用时),57(TNT),43(苦力怕),15(恶魂火球
  • 当实体与爆炸中心有一定距离或有方块挡着,它们所受的伤害会比最大伤害小。
  • 在爆炸中心与其100%接触时,实体可获得在单次爆炸(不论爆炸威力)中能获得的最大加速,值为1。

风爆不会对实体造成爆炸伤害。如果风爆的实体来源是风弹物品风弹,玩家将获得持续40游戏刻(2秒)的摔落伤害减免,使在这段时间内落地的玩家的摔落伤害取决于低于受风爆高度的下落高度而非从最高点起的下落高度。如果风爆的实体来源不是风弹物品风弹,摔落伤害减免倒计时会被清零。

爆炸对实体造成爆炸击退(Explosion Knockback),该效果并非击退,在爆炸过程被直接添加而不是由伤害造成击退,因此不受受击后伤害免疫及其他伤害值修正影响,不受免疫伤害的影响。生物受到的爆炸击退会被其爆炸击退抗性[仅Java版]击退抗性[仅基岩版]降低。

如果爆炸击退能给予玩家向上运动的趋势,玩家的下落高度就会被重置。因此,低伤害或无伤害爆炸也可用于降低摔落伤害。

多个爆炸可以在同一刻发生,每一个爆炸都能对实体分别造成爆炸击退,这使密集地引爆爆炸物能够将实体弹射出非常远的距离,而爆炸造成的多次伤害会因受击后伤害免疫而被大幅降低。

爆炸对实体的推动作用常被用于制作TNT大炮

爆炸接触率的计算

  1. 计算采样点数量。对于一个实体边界箱,总采样数为2l+1×2w+1×2h+1,其中l为实体的长度,w为实体的宽度,h为实体的高度。
  2. 计算采样点间隔。水平方向采样点间隔为l2l+1w2w+1,垂直方向采样点间隔为h2h+1
  3. 计算采样网格偏移,以保证网格水平中心对称,垂直方向紧贴实体边界箱底面。水平方向偏移12(12l+12l+1)12(12w+12w+1)
  4. 对于网格的所有网格点,与爆炸中心进行连线。
  5. 射线路径上没有被任何方块碰撞箱阻挡的射线占全部射线的百分比即为爆炸接触率

典型伤害半径

1个、2个或4个TNT在同一位置同时爆炸,玩家所承受的爆炸伤害与其距爆炸中心的距离的关系如下图所示。每个圆上标记的数字分别代表玩家站在该圆上时承受的爆炸伤害。

爆炸的粒子效果

如果爆炸威力小于2,或者爆炸不影响方块,则在爆炸位置生成explosion粒子。

如果爆炸威力大于等于2,并且爆炸会影响方块,则在爆炸位置生成explosion_emitter粒子。

如果是风爆,则在爆炸位置生成gust_emitter_smallgust_emitter_large粒子。

缺陷

爆炸形状失真

在高空中发生的大威力爆炸造成了形状奇怪的爆炸坑。注意爆炸破坏的分布与前文的射线分布是一致的
爆炸射线间隙

由于用于破坏方块的爆炸效果的本质是从爆炸中心发射出的1352条向外延伸的射线,所以随着爆炸威力与爆炸覆盖距离的增加,这些射线之间的距离会迅速超过1格,以至于能容纳下许多方块。这导致了爆炸在威力过高时呈现出的效果是极其糟糕的——它会留下一个反直觉的、形状类似于海胆的爆炸坑,而爆炸坑里的每一条洞井都能找到一条与之对应的从爆炸中心延伸出来的射线。

爆炸射线夹角

爆炸中心往16×16×16大小的立方体表面上的等间隔的点处延伸出爆炸射线,1352条射线得以生成。但以这种方式生成的爆炸射线的排布实际上是非常不均匀的,位于六个坐标轴周围的射线要比处于其他方向上的射线稀疏得多——这导致不同方向上的爆炸效果间产生了明显的差异。

算法存在漏洞

掠过部分方块夹角
在特殊角度下,大约0.3格的采样间隙略过了不可摧毁的黑曜石形成的夹角,导致红色染色玻璃将被炸毁

由于约0.3格的采样间隙,在合适的角度下,采样点有可能掠过部分方块,造成反直觉的爆炸结果。

射线被重复吸收

被采样标记的方块不会被立即清除,而是被加入列表等待计算结束后一起清除。这导致一次爆炸中,几乎每一个方块都重复吸收了经过自身的爆炸射线携带的爆炸能量,使得射线无法达到理论上(被采样的方块被立即清除时)的破坏距离。

性能影响

爆炸是游戏中常见的会严重影响性能的效果。一次大威力的爆炸或连锁性的爆炸的影响范围内往往会有太多的方块或实体,这将导致游戏需要花费很长的时间去计算其将造成的效果,并显著影响游戏的正常运行。极端情况下,游戏可能会为了处理爆炸而持续处于未响应状态,使玩家最终不得不选择强制终止游戏的进程。

除了处理爆炸本身的时间和性能成本,爆炸在处理完毕后产生的较多的“余波”也是一大问题,包括需要处理的方块掉落成的物品液体流动的变化、以及多出的爆炸坑等事物,它们都会增加渲染的工作量。同时,掉落的物品实体本在5分钟后就会自行消失,但由于游戏的运行速度被性能下降影响,其每秒能够完成的游戏刻将低于20,所以这些物品实体的实际消失时间也会延长,并反过来继续影响游戏性能。

设置某些规则或执行某些命令可以避免或减少爆炸的后续影响:设置游戏规则doTileDropsfalse,可使被爆炸破坏的方块不再产生掉落物;执行命令/kill @e[type=item]可清除所有掉落物。

音效

Java版:

音效字幕分类描述命名空间ID本地化键名
爆炸方块所有真爆炸entity.generic.explodesubtitles.entity.generic.explode

历史

Java版Classic
2009年5月21日Notch展示了加入爆炸性方块的兴趣。
Java版Classic
0.24_SURVIVAL_TEST加入了苦力怕
2009年10月24日展示了TNT
0.26_SURVIVAL_TEST加入了TNT。
Java版Indev
0.3120100122改进了爆炸机制。
20100124-2现在爆炸当穿过硬质方块时,它的爆炸威力会被减弱。
Java版Alpha
v1.2.0preview加入了恶魂,它可以发射击中物体会爆炸的恶魂火球。
Java版Beta
1.5当苦力怕被闪电击中时会变成闪电苦力怕,它的爆炸威力和半径都增强了。
1.6现在玩家试图在下界使用时,床会爆炸。
1.8?爆炸现在会产生冲击波粒子。
在此之前,爆炸只会产生烟雾粒子。
Beta音效更新现在TNT爆炸会有一个新的音效。
Java版
1.0.0Beta 1.9-pre3床和恶魂火球爆炸现在会产生火。
Beta 1.9-pre4现在玩家试图在末地使用床时,床会爆炸。
“爆炸保护”魔咒被加入了游戏,可以减弱爆炸对玩家的伤害。
Beta 1.9-pre6末地水晶被加入了游戏,是一种在一块基岩的上方飘浮的实体。当玩家去攻击它或者被弹射物击中时会产生爆炸。
1.3.112w24a修复了爆炸不会推动玩家的漏洞。
?爆炸现在在不同的游戏难度下对玩家造成的伤害不同,如果玩家处在和平难度那么爆炸不会对玩家造成伤害。
1.4.212w32a加入了游戏规则系统,其中游戏规则mobGriefing会影响生物造成的爆炸是否能够破坏方块。
12w34a凋灵被加入了游戏,它可以发射黑色凋灵之首。
12w37a被玩家制造的凋灵在生成后回复满了生命值时,会发生一场大爆炸。
蓝色凋灵之首加入了游戏。
12w38b如果苦力怕从一定高度掉到玩家那里,它们会爆炸。
1.5?在爆炸中被炸毁的方块掉落物品概率现在更改为(100÷爆炸的威力)%,在此之前,在爆炸中被炸毁的方块掉落物品概率都是30%。
1.8.2?爆炸不再在不同的方向效果不同。
1.1419w11aTNTTNT矿车爆炸摧毁的方块现在会100%掉落为物品。
1.15pre1爆炸的性能得到优化。
1.1620w12a加入了重生锚,如果在主世界末地或维度类型中布尔型respawn_anchor_worksfalse自定义维度中充能并使用,它会以类似于的方式爆炸。
1.19.322w44a加入了以下控制爆炸使方块不掉落的游戏规则:blockExplosionDropDecaymobExplosionDropDecaytntExplosionDropDecay
携带版Alpha
0.1.0加入了TNT。
0.2.1TNT现在可以爆炸。
0.11.0build 2加入了恶魂,它会发射火球
0.12.1build 1加入了闪电苦力怕
加入了爆炸保护魔咒,它可让被附魔的盔甲抵抗爆炸。
?加入了爆炸粒子
给予了TNT一个全新的爆炸音效
现在玩家试图在下界使用时,床会爆炸。
0.13.0TNT如果接收到红石信号的话会被点燃。
0.14.0如果错误的液体在炼药锅里混合会产生一个不摧毁方块、不伤害生物的爆炸。
0.16.0加入了凋灵。
携带版
1.0.00.17.0.1加入了末地水晶。
现在玩家试图在末地使用床时,床会爆炸。
1.0.7发生在水中的爆炸将不再对玩家和生物造成伤害。
1.1.01.1.0.0加入了游戏规则系统,其中游戏规则mobGriefing会影响生物造成的爆炸是否能够破坏方块。
基岩版
1.4.01.2.20.1实验台中创造废物会播放爆炸声。
加入了水下TNT,可以在水下爆炸。
?删除了炼药锅的不破坏地形的爆炸效果,代之以嘶嘶声和烟雾。
1.16.01.16.0.57加入了重生锚,在下界以外的维度充能并使用会以类似于的方式爆炸。
1.20.301.20.20.21更改了176个方块的爆炸抗性以同步Java版
1.21.01.21.0.20加入了控制TNT和TNT矿车爆炸使方块不掉落的游戏规则tntExplosionDropDecay
现在由TNT和TNT矿车炸毁的方块默认总会掉落为物品。

你知道吗

要通过爆炸破坏一个基岩,爆炸威力得足够大
  • 能够破坏基岩的爆炸需要至少1542860的爆炸威力,其爆炸半径超过3000万格。
  • 死亡但还没消失的生物可以被爆炸击退。
  • 激活的TNT在一个由石质方块组成的大而坚固的立方体中爆炸时,会形成一个精确的3×3×3的立方体坑洞。实验证实,TNT的爆炸会在任何爆炸抗性小于100(如)、大于2.5(如工作台)的方块中产生一个3×3×3的洞。这意味着3×3×3是TNT爆炸不被完全抵消的最小可能结果。
  • 如果水中激活的TNT被下落的方块(如沙子)覆盖,它将不再处于水中,因而能够破坏掩埋了自身的方块和贴着该方块的方块。
  • 任何爆炸抗性大于4(如蜘蛛网)的方块都能阻挡恶魂的火球造成的爆炸。
  • 由于水和熔岩高达100的爆炸抗性,在水和熔岩中发生的常见爆炸都不能破坏任何方块,但仍然可以伤害[1][仅Java版]和冲击实体。
  • 爆炸可以改变弹射物(如末影珍珠)的运动方向。

注释

  1. 其中⌊x⌋为下取整函数。

参考

  1. MCPE-21611 — 漏洞状态为“有意为之”。

导航

游戏内容[显示] [编辑]