弹幕(ai-barrage)

基本信息

属性 值
类名 toast.specialAI.ai.special.EntityAIBarrage
实现接口 ISpecialAI
名称 barrage
默认权重 1
默认存值 float 3.0(箭矢伤害)
互斥位 MOVEMENT + FACING + SWIMMING
优先级 0(与基础攻击同级,独占所有移动/朝向)

功能

怪物发现距离 5–16 格的玩家后进入"准备-射击"二阶段弹幕攻击。在约 30 tick 准备阶段锁死视线,之后 60 tick 内每 5 tick 发射 1 支箭矢(带随机散布 ±0.5 + 难度加成)。燃烧中的实体会让箭矢附燃。

准备时间 attackTime = 30 是从 shouldExecute 才开始倒计时(外层随机命中 nextInt(10) == 0),之后 startExecuting 重置为 30,STATE_SHOOT 重置为 60。

状态机

状态 触发 时长 行为
STATE_START (1) 进入时 30 tick 锁死朝向目标,尝试计算 (x, y, z) 弹道;目标消失或死亡 → STATE_END
STATE_SHOOT (2) START 结束 60 tick 每 5 tick 发射 1 支箭矢(random.bow 音效),共 12 支;结束 → STATE_END
STATE_END (0) 中止 - continueExecuting 返回 false

isInterruptible() = false:执行期间不会被其它 AI 抢占。

触发条件(shouldExecute)

  • 实体在地面
  • 未骑乘
  • 攻击倒计时归零
  • nextInt(10) == 0(10 tick 中只尝试进入 1 次)
  • 有攻击目标,且 25 ≤ distance² ≤ 256 且能直接视线可见

初始化(initialize)

  • 主手位(4)装备 Block.dispenser(不渲染丢弃概率,视为头部方块)
  • maxHealth 加 +20(AttributeModifier, op 0),同时补满差量 HP

箭矢参数

参数 值
基础伤害 3.0 + nextGaussian() * 0.5 + difficulty.getDifficultyId() * 0.22
速度 1.8(velocity)
散布 20.0(inaccuracy)
弹道 difficulty.getDifficultyId() * 0.22 随难度递增
附燃 entity.isBurning() → arrow.setFire(100)

resetTask

attackTime = 60(冷却)。

相关条目