Skip to content

Task System

ZoyLuo edited this page Jun 5, 2026 · 1 revision

任务系统 · Task System

任务是 AIBot 真正"动手"的地方。每个任务是一个自包含的状态机:接收参数、自行推进、自带超时 / 卡死看门狗、最终走向 COMPLETEDFAILED

设计

  • Task / AbstractTask:任务接口与基类。子类实现 onStart / onTick / onAbort,通过 complete() / fail(reason) 收尾。
  • TaskState:RUNNING · COMPLETED · FAILED 等。
  • TaskManager:每个 bot 同时只有一个活跃任务;负责 assign / abort / tickAll
  • BotTickCoordinator:每游戏刻的总调度——先跑安全网,再推进 Goal Engine / 任务,最后是空闲协调。见 Safety Net

两条铁律

G1 — 任务自包含。 任务内部绝不assign 子任务,而是直接调用共享原语(BlockMinerDigNavActionPackHarvestCore)。这样不会出现"状态机套状态机"互相抢占的混乱。

G2 — 主线程执行。 所有任务逻辑跑在服务端主线程,保证对 Minecraft 世界的访问线程安全。

看门狗与 isWaiting()

站桩类任务(挖矿、下挖时 bot 基本不动)会重写 isWaiting() 返回 true,告诉全局 StuckWatcher"我不是卡住,是在干活",改由任务自己的 NO_PROGRESS / timeout 看门狗兜底——避免被那个"位置/进度长时间不变即判卡死"的粗粒度监控误杀。

任务清单

task 包共 44 个类,其中约 30 个是具体任务状态机,其余是基类、管理器、协调器与看门狗。

🧭 移动

任务 说明
MoveTask 寻路到坐标;走不通降级为挖掘式直行(遇水 / 挨打会安全熔断)
FollowTask 跟随玩家
GuardTask 守卫某点 / 某人

⛏️ 挖矿

任务 说明
MineTask 挖暴露的目标方块
OreDigTask 定向采矿,含探矿 + 矿脉清挖
StripMineTask 条带挖矿
DescendToYTask 台阶式下到指定 Y 层
DigDownTask 台阶式向下采集(绝不直挖脚下)

🌾 采集 / 农牧

任务 说明
GatherQuotaTask 采集到配额,含大范围探树 + 漫游换片
ForageTask 采食 / 觅食
FarmTask 耕种 / 收获作物
BreedTask 繁殖动物
FishTask 钓鱼

🔨 制作

任务 说明
CraftTask 合成(按背包实际材料展开,如任意原木→木板)
SmeltTask 熔炉冶炼(含取燃料 / 走向熔炉兜底)

⚔️ 战斗 / 生存

任务 说明
CombatTask(+CombatCore) 近战,含视线判定
HuntTask 狩猎取肉
EvadeTask 撤离 / 逃跑
EatTask 进食
SleepTask 睡觉
LightAreaTask 区域点火把
EmergencyShelterTask 紧急筑墙避险

🏗️ 建造 / 物流

任务 说明
BuildTask 按蓝图建造
PlaceStationsTask 摆放工作站
ContainerTask 容器存取
StockpileTask 囤货整理
ResupplyTask 补给
TradeTask 村民交易
HoldTask 待命

🛡️ 协调与守护(非任务)

TaskManager · BotTickCoordinator · StuckWatcher · DangerWatcher · NavSafetyNet —— 详见 Safety Net


延伸阅读:[Goal Engine]· [Safety Net]· Architecture

Clone this wiki locally