[YAB]园霖的自动机器人 (Yuanlin's AutoBot) - MC百科

Avatar
admin

模组介绍

本模组实现了模组级别的类似于“按键精灵”的自动化脚本。比普通的按键脚本更加稳定、高效!

可让玩家变为自动机器人,自动完成重复率高、枯燥乏味的任务,解放双手。

模组创建了一个轻量级的脚本语言 YABscript 动态调用 Baritone 和模组内置的多个自动化操作。

利用 YABscript 可实现:资源自动收集、物资自动存放与获取、掉落物自动收集、自动种植、自动寻路、自动右击等。

YABscript 脚本语言介绍

YABscript 是本模组实现的一个轻量级、支持循环控制、变量定义(目前版本不稳定)的脚本语言。

本模组搭配 Baritone,内部实现了多个自动化“原子操作”如:资源自动收集、打开或关闭容器(箱子、熔炉等)、自动寻路等。

利用 YABscript 便可将这些原子操作进行动态调用组合,实现更为丰富、复杂的自动化操作。

原子操作介绍

原子操作即单个的自动化操作如:自动打开容器、自动寻路等,以下为目前所有可用的原子操作:

适用版本命令参数说明0.1moveTox y z移动到 x y z 坐标0.1moveForwardx y z移动相对位置,x y z 为偏移量0.1openBlockx y z打开 x y z 的容器或者右击 x y z 中心位置0.1waittick等待 tick 时间,单位 gt0.1moveItemitem moveType number移动物品,item 为目标物品,moveType 取值为 INV2CON、CON2INV 和 ALL 分别对应背包移动容器、容器移动背包和包括背包和容器

number 指移动的物品堆叠数量(为 -1 时表示移动所有目标物品)

0.1getBlockblock count在周围获取(挖掘)count 数量的 block 方块0.1getDropItemitem range在范围 range 格内拾取所有 item0.1closeBlock无关闭容器界面0.1whileStarttimes whileId循环 times 次,whileId 为循环体标记 id0.1whileEndwhileId循环 id 的结束语法0.1farmfarmItem farmRange自动种植。使用 farmItem 在范围 farmRange 格内种植0.2safeMode

true / false开启或者关闭安全模式,安全模式下玩家不会破坏方块和放置方块0.2sendMessagemessage发送聊天信息 message0.2sendCommandcommand发送聊天命令 command,如 /tpa、/seed 等,注意不需要"/",如 sendCommand tpa0.2moveSpeedOption

walk/run设置移动速度,walk 为正常移动、run 为奔跑0.2lookAtx y z看向坐标 x y z 方块的中心点0.2useItemtargetItem count使用物品 id 为 targetItem 的物品 count 个0.2attackBlock

x y z攻击 x y z 坐标中心特别注意:

moveTo 和 moveForward 的目标位置不能是非完整方块(踏板、耕地、灵魂沙、楼梯、栅栏、流体等)。

moveTo 和 moveForward 原子操作检测操作是否完成的条件是判断玩家 BlockPos 是否与目标 BlockPos 相同。

而 MC 中 PlayerEntity 类提供的 getBlockPos 函数在玩家脚下为非完整方块时获取的 blockPos 是有误差的(1 格内)。

这会导致 moveTo 和 moveForward 的目标位置为非完整方块情况下,无法判断操作是否完成进行下一步原子操作。

脚本示例

自动木头获取和物品存放

whileStart 10 1 whileStart 12 2 # oak_log为minecraft中的物品、方块、实体id getBlock oak_log 10 getDropItem oak_log 10 # 吃牛排恢复饥饿值 useItem cooked_beef 1 whileEnd 2 moveTo 121 68 83 openBlock 121 68 84 wait 5 moveItem oak_leaves INV2CON -1 closeBlockwhileEnd 1脚本解析

#开头为注释,实际不运行。

这个脚本会调用 Baritone 的 #mine 命令获取 id 为 oak_wood的 方块(getBlock 原子操作),而挖掘方块的过程中可能会出现漏捡掉落物的情况(特别是在网络情况差的服务器上),故在收集 10 个方块后调用 getDropItem 原子操作收集周围 10 格内的掉落物。

重复上面的操作 12 次,然后移动到箱子旁边 (x=121 y=68 z=83) 打开箱子(x=121 y=68 z=84),等待 5gt(等待服务器响应),然后调用 moveItem 将收集到的所有方块移动到箱子中,最后关闭箱子。

重复上面所有过程 10 次。

自动向前向后移动

whileStart 50 1 moveForward 5 0 0 wait 20 moveForward -5 0 0whileEnd 1脚本解析

这个脚本会让玩家向 x 轴方向移动 5 格,然后等待 1s(20gt),再反方向移动 5 格。

重复上面操作 50 次。

使用教程

第一次运行模组时会在游戏目录创建文件夹 yab_scripts,将写好的脚本以任何后缀(建议为 .yab)保存为文件存放在 yab_scripts 文件夹下。

在游戏中输入 /yab_script <脚本文件名> 加载脚本,注意文件名要包括后缀,如 /yab_script auto_farm.yab。

如果没有显示任何错误,即可输入 /yab_robot toggle 开启自动机器人,此时会运行脚本。

如果要在运行脚本中途结束脚本,输入 /yab_robot toggle 可关闭机器人停止脚本运行。

注意:不要在脚本运行途中退出游戏,这会导致游戏崩溃!等待脚本所有操作进行完毕,或者输入 /yab_robot toggle 关闭机器人停止脚本运行,再退出游戏。

关于脚本的变量定义

可按照下面的示例定义变量并使用变量:

$startX=0$startY=0$startZ=0moveTo $startX $startY $startZ以$符号开头,后接变量名(大小写敏感、不能与原子操作的名称相同如 moveTo、openBlock)和变量值。

使用变量只需要将原子操作的参数替换为变量名即可。

注意:变量定义与使用已经实现,但是目前并不稳定。为了防止游戏崩溃等恶劣情况的发生,模组默认关闭。