莫比乌斯自动机

莫比乌斯自动机

Minecraft自动化中自Baritone以来最大的突破

游戏机制

莫比乌斯自动机

首个完全独立于玩家的寻路、建造与战斗自动化方案

  • 本模组利用 Carpet 模组的假人(Fake Player)特性,可在单人游戏和服务器上完整使用
  • 因此,它依赖 Carpet 模组,而 Carpet 模组又需要 Fabric API 和 Fabric 环境

功能概览

  • 任何玩家都可以使用 /bot 命令生成莫比乌斯自动机,无论是在安装了本模组的服务器上,还是在单人世界中
  • 自动机通过 A* 寻路引擎在周围世界中移动,与 Baritone 使用的引擎非常相似
  • 机器人通过聊天框中的 /bot <名字> 命令后缀进行控制,也可以通过 /automatamenu 打开的完整菜单或右键点击机器人来控制——两者都不需要客户端模组
  • 机器人只响应生成它的玩家,以及该玩家选择共享的任何人。其他任何人都不能命令它、拿走它的物品,甚至不能让它移动——服务器管理员也不例外
  • 你只能生成尚未存在于世界中的机器人
  • 多个机器人可以编入一个组,然后使用 /botgroup <组名> 代替机器人名字,同时向所有组内机器人下达命令
  • 机器人会攀爬梯子、藤蔓和脚手架,并会在深水中自行搭建出路
  • 机器人会从悬崖或自己搭建的桥的末端跳入下方水中,而不是卡住不动;如果没有水,它们会自己放置水来安全着陆
  • 与长矛相关的指令和操作仅在 1.21.11 及未来版本中可用
  • 所有常规的 Carpet 玩家命令也受支持
  • 在执行任务过程中会主动防御怪物攻击
  • 无需指令即可自我照料:被坠落的沙砾或沙子掩埋时会自行挖出;被苦力怕逼入墙角无路可退时会举起盾牌;浮出水面换气时会继续朝目标方向游动
  • 开始工作前会先说明缺少什么。没有适合那种方块镐子、弓没有箭、没有钓鱼竿、没有设置存储点、背包满了无处放置物品——你会提前听到一次提醒,而不是看着机器人徒劳无功

重要特性

控制面板

  • 模组中的每一条命令都是一个按钮。/automatamenu 会打开一个菜单,列出你拥有的所有机器人,每个机器人显示各自的皮肤、当前行为、生命值和位置。你的组显示在下方一行。
  • 打开一个机器人会显示其完整面板:生命值、饥饿值、位置、背包,以及每个工作的按钮——挖矿、区域挖矿、建造、合成、排水、钓鱼、狩猎、前往、放置、保镖、工作流和两种存储。其规则是一整页开关,分为_战斗_、生存、工作、_合成_和_控制_几类。
  • 它完全由服务器端用箱子构建而成。完全原版客户端在任何运行本模组的服务器上都能获得完整功能。
  • 当命令需要方块名称或坐标时,菜单会在聊天框中询问你——而这条消息在被任何人看到之前就会被拦截。
  • 启用 visualselect 规则后,它不再需要文字输入:方块变成一箱方块(附近的东西排在前面),生物变成一箱刷怪蛋,玩家变成一箱他们自己的头颅,你的原理图和工作流则变成一箱名称。所有内容都可以用箭头翻页。

挖矿

  • 模组提供通用的 mine 命令,用于寻找并挖掘特定方块,也提供与坐标配合使用的 mine area 命令。
  • 为了实际收集和利用,模组提供了 pickmineitems 选项,让机器人主动收集挖出的方块。
  • 此外,为防止背包满时资源损失,提供了基于坐标的 storage gather 命令。机器人会返回指定的半径范围内,将资源交付到初始命令中给定半径内的存储容器中。
  • 启用 biomeseek 规则后,当地表没有所需资源时机器人不再放弃。服务器知道整个世界,而不仅仅是已加载的区域,因此机器人会找到最近的实际生长着你需要材料的生物群系并前往那里——如果需要可以跨越数千格,如果有鞘翅就会飞行。
  • 在搭柱或搭桥时,机器人只会消耗除你派它收集的材料之外的任何东西,这样收获物能带回家而不是变成脚手架。

合成

  • craft 命令以真实方式进行合成:在配方允许的情况下使用机器人自己的 2x2 合成格,否则走到合成台前。缺失的中间产物会自动制作(原木变成木板,再变成你要的东西)。
  • 如果范围内没有合成台但机器人身上带着一个,它会放下、使用、敲掉并重新带走。启用 adaptivecrafting 后,它甚至会先自己合成一个合成台。
  • max、repeat 和 drop 后缀让它变成一台机器:合成所有材料允许的一切,永远等待新材料,并把成品丢出去让漏斗收集。
  • 启用 adaptivecrafting 规则后,要求机器人制作它无法制作的东西不再是拒绝。它会一路分析到底层原材料,明确告诉你缺什么,然后去挖。它还会选择最近的材料——需要"任意木板"的配方会派它去脚边的云杉,而不是四百格外的橡木。

排水

  • drain 命令用海绵清除一个区域的水,将海绵放置在吸水量最大的位置,工作时将它们留在原地作为水坝,之后再把每一块都收回来——如果设置了存储点,还会将湿海绵换成干海绵。
  • draining 规则决定 mine area 如何处理遇到的水:当机器人携带海绵时使用海绵,否则用多余的方块填掉水源再挖回来。

常规狩猎

  • 机器人可以使用 hunt 命令非常精准地狩猎任何实体(如果在渲染距离内)

玩家狩猎

  • 模组一个非常突出的特性是玩家狩猎和战斗。提供了多种规则命令和后缀,用于指挥机器人狩猎世界任意位置的玩家。此外,尽管尚不完全无 bug,机器人可以通过被告知传送门位置(见命令定义与用法)跨维度追踪其他玩家。 自动机具备许多战斗相关能力,包括但不限于:
  • 搭桥
  • 搭柱
  • 水桶落地缓冲
  • 鞘翅追击
  • 狼牙棒连击
  • 长矛突刺
  • 弓术
  • 高级剑、斧和盾牌使用
  • 图腾使用
  • 智能进食

建造

  • 机器人可以访问其创建者的原理图文件夹(litematica 使用的),自动建造任何尺寸的结构。在服务器上,世界旁边的原理图文件夹同样有效,因此原版客户端玩家可以使用服务器提供的任何内容进行建造。不过和普通玩家一样,它们需要足够的材料,可以通过 storage build 命令将材料放置在建造存储处。
  • 需要附着点的方块(拉杆、告示牌、红石粉、铁轨、地毯、火把、门、床、悬挂灯笼、锁链等)只会在支撑方块就位后放置。从上方悬挂的方块会在最后一遍放置,待其余结构完成后进行。

工作流

  • 机器人可以记录并重复操作者自己执行的任何操作。recordworkflow 命令启动一个简短的引导会话;双击潜行键开始,执行你的循环,再双击潜行键结束。每一次移动、敲掉的方块、使用的物品和箱子交互都会被保存到一个名称下。
  • 你生成的任何机器人都可以用 doworkflow 重现那个精确循环,它会先自行走到记录的起始位置。
  • 箱子交互按物品和数量而非格子位置保存,这意味着即使箱子之后被重新整理过,机器人仍然会取走和放入正确的东西。
  • 配合 workflowloop 规则,机器人会永远重复该循环,使任何农场或重复性手动任务完全自动化。
  • 如果有怪物在循环中途打断机器人(见 mobdefense),它会自卫,返回离开时的精确位置,然后继续。

所有权与共享

  • 每个机器人属于生成它的玩家,这一点处处强制执行——命令、右键点击、移动、战斗、背包,全部如此。即使拥有服务器管理员权限也毫无用处。
  • ownership share 将控制权交给朋友,人数不限。对方可以做你对它做的一切,但不能将其转赠或更改其他驾驶者。
  • ownership transfer 永久移交机器人。它会从你的菜单和你的组中消失。
  • 两者也是机器人面板上的按钮,你可以在头颅箱子中选人。

组控制

  • 使用 /botgroup <组名> add 将机器人编入组,一次可加入任意数量。组由第一个放入的机器人创建,随最后一个移出的机器人消失,所以永远不会留下空组。
  • 任何命令都可以针对组而不是单个机器人发出——/botgroup crew mine diamond_ex_ore 会对每个成员各执行一次。聊天补全在组命令中与单个机器人完全一致。
  • 组在菜单中有自己的面板,显示点名情况:多少人正在工作、最低生命值是多少、成员之间分散了多远。

创造模式

  • 如果操作者将机器人放入创造模式,它会获得相应的能力。
  • 建造不再需要任何材料或建造存储,因为机器人直接从创造物品栏中取方块,错误方块也会瞬间敲掉。
  • 移动切换为真正的创造飞行,包括疾跑飞行,而不是行走、搭柱和搭桥。

直接操作

  • 启用 easycontrols 规则后可以完全跳过聊天框:右键点击机器人打开其完整控制面板,潜行右键点击停止它正在做的事。在完全原版客户端上即可使用,无需客户端模组,默认开启。
  • 你不拥有的机器人会完全无视你——在出生点右键点击别人的机器人不会发生任何事。

命令定义

菜单 (单独使用)

  • /automatamenu 打开你拥有的每个机器人和创建的每个组的控制面板

基础命令 (以 /bot <名字> xxx 的形式使用)

  • SPAWN 生成一个机器人
  • STOP 让机器人立即取消任何正在运行的任务
  • STATUS 显示机器人当前正在做什么("挖掘 7/15 橡木原木"、"建造 myhouse——第 4/9 层")、位置、生命值、饥饿值、氧气值、两个存储点、已加载的原理图,以及每个规则的开关状态
  • KILL 杀死机器人但保留其物品
  • DROPALL 让机器人丢弃背包中的所有物品
  • OWNERSHIP 显示机器人属于谁以及共享给了谁。share、unshare 和 transfer 需要玩家名(以 /bot <名字> ownership share <玩家> 的形式使用)

行动命令 (以 /bot <名字> xxx 的形式使用)

  • GOTO 让机器人前往一组特定坐标。如果传送门已知/已声明,可以前往任意维度。
  • MINE 让机器人在世界中搜索并挖掘特定方块。兼容 storage gather。也可以使用 /bot <名字> mine area xyz xyz 按坐标挖空一个区域
  • CRAFT 让机器人合成一件物品,在自己的合成格中或在其找到、携带或自制的合成台处进行。接受 max、repeat、once 和 drop 后缀
  • PLACE 让机器人将其背包中的一个方块放置在一组坐标处,必要时会搭桥或搭柱到达目标位置(以 /bot <名字> place <方块> xyz 的形式使用)
  • DRAIN 让机器人用海绵清除一个区域的水,之后再收集海绵(使用两组坐标)
  • HUNT 让机器人搜索并击杀渲染距离内的任何实体。如果目标是玩家,机器人可以使用各种战斗技巧并长途跋涉消灭目标。
  • BUILD 让机器人从创建者的原理图文件夹或服务器自身的原理图文件夹中按命令选择建造任何结构。
  • OPENINV 打开所选机器人的背包以及操作者自己的背包,直接编辑机器人的物品
  • BODYGUARD 让机器人跟随某人并持续保护其免受任何攻击者伤害。使用 start 加名字,或 stop(以 /bot <名字> bodyguard start <玩家> 的形式使用)。目标可以是另一个机器人,这样一人工作另一人负责警戒
  • FISH 寻找最近的超过 5x5 的开放水域,站在岸边使用交给它的钓鱼竿钓鱼。兼容 storage gather
  • RECORDWORKFLOW 启动一个引导式录制会话,操作者的每一个动作和操作都会保存到指定名称下
  • DOWORKFLOW 让机器人走到你录制的某个工作流的起点并精确重放
  • TAKECONTROL 让操作者与机器人交换位置,并将机器人的物品交给操作者,获得完全控制权(使用 true/false)

战斗规则 (以 /bot <名字> combatrule xxx <true/false> 的形式使用,也可用 all 代替规则名)

  • allowelytra 允许机器人使用鞘翅进行远程移动,以及配合狼牙棒和长矛攻击
  • allowmace 允许机器人在(如果允许)配合鞘翅使用狼牙棒,激进地对玩家目标进行狼牙棒连击
  • allowspear 允许机器人向玩家突进以追赶(因为不能疾跑跳)(如果给予附魔长矛),或使用鞘翅飞向玩家(如果允许)造成大量伤害
  • allowtrident 允许机器人使用激流附魔的三叉戟更轻松地穿越大面积水域——目前它在水域(总体而言)中比较吃力
  • allowbow 纯前期规则,在鞘翅和其他能力被允许后自动关闭,给机器人在装备极简时从远处造成伤害的机会

游戏规则 (以 /bot <名字> gameplayrule xxx <true/false> 的形式使用,也可用 all 代替规则名)

  • mobdefense 让机器人在任何过程中自卫抵抗敌对生物,默认开启
  • breathing 让机器人在溺水时自行浮出水面换气,默认开启
  • eating 让机器人关注饥饿值并暂停当前活动进食,默认开启
  • durability 为工具保留安全余量防止碎裂,默认开启
  • draining 决定机器人在区域挖矿时如何处理水;有海绵时用海绵,没有时填埋。默认开启
  • pickmineitems 让机器人主动捡拾 mine 命令掉落的物品
  • workflowloop 让机器人永远重复一个工作流,每完成一个循环后返回起点
  • biomeseek 让机器人前往实际拥有它被派去挖的材料的生物群系,而不是报告附近没有
  • adaptivecrafting 让机器人说明配方缺少什么然后去挖,激活期间自动开启 pickmineitems
  • easycontrols 右键点击机器人打开其控制面板,潜行右键点击停止它。默认开启
  • visualselect 让菜单用一箱方块、刷怪蛋或玩家头颅来询问,而不是要求你打字

组命令 (以 /botgroup <组名> xxx 的形式使用)

  • add 将机器人编入组,如果组不存在则自动创建(以 /botgroup <组名> add <名字> <名字> <名字> 的形式使用)
  • remove 将机器人移出组。组随最后一名成员一起消失
  • 任何其他命令 /botgroup <组名> <任意命令> 会对组中每个机器人执行一次,从挖矿、建造到停止、击杀,一次搞定
  • /botgroups 列出你所有的组及其中的机器人

位置命令 (以 /bot <名字> storage <build/gather> <坐标> <半径> 的形式使用)

  • storage gather 用于告诉机器人背包满时将收集物(挖矿或钓鱼所得)存放在哪里。提供箱子或类似容器
  • storage build 用于告诉机器人建造材料在哪里。提供装有材料的箱子或类似容器

声明命令 (以 /<命令> 的形式使用)

  • declareNetherPortal 告诉机器人一个下界传送门的位置
  • declareEndPortal 告诉机器人一个末地传送门的位置
  • automatadebug 控制机器人在聊天框中的发言量;joinmsg 为世界加入时的消息,all 为其他一切。全部关闭后仍会收到错误和警告

Bug 与后续开发

我是 GOAT

  • 如有建议、Bug 报告或疑问,欢迎加入 Discord 服务器
  • 自我学习及可能的机器学习有待讨论
  • 将进一步举行内部 Bug 测试会议以优化结果