冲锋(ai-charge)

基本信息

属性 值
类名 toast.specialAI.ai.special.EntityAICharge
实现接口 ISpecialAI
名称 charge
默认权重 1
默认存值 float 0.5(击退倍率)
互斥位 MOVEMENT + FACING + SWIMMING
优先级 0

功能

怪物发现距离 5–16 格的玩家后向前冲锋:先跃起(motionY = 0.3)准备 30 tick,再持续 20 tick 锁定方向冲撞。撞到目标时 attackEntityAsMob 并将其沿冲撞方向击退(速度 = target.motion ± 0.4 * x/z),发送 S12PacketEntityVelocity 给玩家使其客户端同步。若撞墙则自己受 5 点 fallingBlock 伤害并进入 80 tick 眩晕。

状态机

状态 时长 行为
STATE_START (1) 30 tick 抬升 motionY=0.3,锁定朝向;目标消失 → END
STATE_CHARGE (2) 20 tick 把 motionX = x / motionZ = z,setSprinting(true);击中则 END,撞墙则 STUN,水/熔岩则 END
STATE_STUN (-1) 80 tick 持续 swingItem;倒计时结束 → END
STATE_END (0) - continueExecuting 返回 false

isInterruptible() = false。

触发条件(shouldExecute)

  • 在地面、未骑乘
  • attackTime ≤ 0 且 nextInt(10) == 0
  • 有攻击目标且 25 ≤ distance² ≤ 256 且能直接视线可见

初始化(initialize)

  • 头盔位(4)装备带 30 级随机附魔 + Charger's Helmet 显示名 + 黄染色(0xffff00)的皮头盔
  • knockbackResistance +1(op 0) — 自身不可击退
  • maxHealth +20,立即 setHealth(+20)
  • 临时提升 stepHeight ≥ 1.0(跨越 1 格方块)

撞击结算

theEntity.attackEntityAsMob(target);
theEntity.swingItem();
theEntity.motionX *= -0.8; theEntity.motionY = 0.4; theEntity.motionZ *= -0.8;
target.motionX += x * 0.5;       // 0.5 为默认 knockbackMult
target.motionY = 0.4;
target.motionZ += z * 0.5;
if (target instanceof EntityPlayerMP) sendPacket(new S12PacketEntityVelocity(target));

resetTask

恢复原 stepHeight 与 setSprinting(false)。

相关条目