特殊 AI 模式索引(special-ai-index)
基本信息
| 属性 | 值 |
|---|---|
| 注册类 | toast.specialAI.ai.special.SpecialAIHandler |
| 接口 | toast.specialAI.ai.special.ISpecialAI |
| 数量 | 10 |
| 抽取 | 加权随机(权重由配置 ai_<name> 决定) |
每个特殊 AI 都是
EntityAIBase + ISpecialAI,注册到实体的tasks.addTask(0, ...),与基础攻击 AI 同优先级并独占BIT_MOVEMENT/FACING/SWIMMING互斥位,因此执行期间会压制其它移动 AI。
10 种 AI 总览
| 名称 | 类 | 默认权重 | NBT 存值 | 互斥位 | 实体改造 | 详见 |
|---|---|---|---|---|---|---|
| barrage | EntityAIBarrage |
1 | float 3.0(箭矢伤害) | M+F+S | 头部戴 Dispenser + +20 max HP |
弹幕箭矢攻击 |
| charge | EntityAICharge |
1 | float 0.5(击退倍率) | M+F+S | 黄染色皮头盔「Charger’s Helmet」+ +20 max HP + +1 knockbackResistance | 冲锋撞飞 |
| sprint | EntityAISprint |
1 | float 0.7(速度倍率 +1) | M+F | 红染色皮靴「Running Boots」+ +0.1 movementSpeed | 追击时加速冲刺 |
| jump | EntityAIJump |
1 | byte 1(启用) | - | 跳踏附魔皮靴 | 反复跳跃践踏目标 |
| leap | EntityAILeap |
1 | byte 1(启用) | - | 力量附魔弓 | 跳到目标身边高空砸下 |
| spawner | EntityAISpawner |
1 | byte 1(启用)+ 子标签 spawnerTags |
none | 头部戴 Mob Spawner + +80 max HP + -0.2 movementSpeed |
召唤同种怪物 |
| shaman | EntityAIShaman |
1 | float 1.0(每次治疗量) | M+F | 骨头 + 南瓜灯 + +20 max HP | 治疗附近同盟并给增益 |
| throw | EntityAIThrow |
1 | byte 1(启用) | M+F | +10 max HP + +1 knockbackResistance | 抓起附近小怪物扔向目标 |
| throw_player | EntityAIThrowPlayer |
1 | byte 1(启用) | M+F | 红染色皮头盔「Helmet of Strength」+ +1 attackDamage + +0.3 movementSpeed | 把玩家抓起来扔向同盟 |
| thief | EntityAIThief |
1 | float 16.0(逃跑距离) | M+F | 深蓝染色皮头盔「Thief’s Cap」+ +0.1 movementSpeed + 关闭 loot pickup | 偷玩家背包物品 |
加权抽取算法
SpecialAIHandler.saveSpecialAI(entity, aiTag):
choice = entity.getRNG().nextInt(AI_WEIGHT); // AI_WEIGHT = Σ weights
for (i = SPECIAL_AI_LIST.length - 1; i >= 0; i--) {
choice -= weights[i];
if (choice < 0) {
SPECIAL_AI_LIST[i].save(aiTag);
return;
}
}
SPECIAL_AI_LIST 数组顺序:
{ charge, sprint, jump, leap, barrage, spawner, shaman, throw, throw_player, thief }
注意反向遍历:下标越大权重越高越容易先被选中。配置 ai_<name> 默认均为 1,因此默认情况下 10 种平均分布。
NBT 兼容性
旧的 SPECIAL_TAG(byte)会被读取并转换为对应的 uAI 子标签(SPECIAL_AI_LIST[code-1]),保证从旧存档迁移。
注入时机
AIHandler.onEntityJoinWorld 中检查 _mob_list_1/2/3 与 _chance_1/2/3,对每个列表独立判定(mob_list_2/3 可叠加),命中则把抽取结果写入 tag.setTag("uAI", aiTag)。SpecialAIHandler.addSpecialAI 在加载时把 uAI 子标签中所有"已存"模式逐一 addTo(entity, tag) 并在初始化时 initialize(entity) 应用属性修饰符和装备。
互斥说明
| 互斥位 | 含义 |
|---|---|
| M | BIT_MOVEMENT (1) — 移动类 |
| F | BIT_FACING (2) — 朝向类 |
| S | BIT_SWIMMING (4) — 游泳类 |
| — | BIT_NONE (0) — 不互斥 |