冲锋(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)。