偷窃(ai-thief)
基本信息
| 属性 | 值 |
|---|---|
| 类名 | toast.specialAI.ai.special.EntityAIThief |
| 实现接口 | ISpecialAI |
| 名称 | thief |
| 默认权重 | 1 |
| 默认存值 | float 16.0(逃跑 AI 距离) |
| 互斥位 | MOVEMENT + FACING |
| 优先级 | 0 |
功能
主手为空且目标为玩家且玩家背包非空时,靠近玩家偷一个随机物品 → 投出 EntityItem 标记 ThiefUUIDMost/Least → 获得 60 tick 隐身 I。
得手后转用内部 EntityAIAvoidEntity(EntityPlayer, 16, 1.0, 1.2) 逃跑(玩家 HP > 1/3 maxHealth 时持续触发)。
触发条件
shouldExecute:
target instanceof EntityPlayer && 主手为空 && hasItems(player) → 接近玩家
aiAvoid != null && (target == null || target.health > maxHealth/3) → 逃跑
物品归还(详见 AIHandler)
偷到的物品作为 EntityItem 投出,携带生物 UUID。下一次 TickEvent.WorldTickEvent 中由 AIHandler.equipToThief 把物品塞回主手并标记不掉落、不过期。
初始化(initialize)
- 主手位(0)清空
- 头盔位(4)装备
Thief's Cap深蓝染色(0x102024)皮头盔,EffectHelper.addModifier给movementSpeed +0.1(op 1 乘性) movementSpeed× +0.2(op 1 乘性)setCanPickUpLoot(false)(关闭常规掉落拾取,避免重复触发)
hasItems
遍历玩家背包 36 槽,发现非空物品即返回 true。
removeRandomItem
- 先统计玩家背包非空槽位数
- 抽取
nextInt(count)作为目标下标 - 顺序遍历找到该槽位后
setInventorySlotContents(i, null)
resetTask
调用内部 aiAvoid.resetTask()(用 try/catch 兜底)。