模组介绍
本模组实现了模组级别的类似于“按键精灵”的自动化脚本。比普通的按键脚本更加稳定、高效!
可让玩家变为自动机器人,自动完成重复率高、枯燥乏味的任务,解放双手。
模组创建了一个轻量级的脚本语言 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)和变量值。
使用变量只需要将原子操作的参数替换为变量名即可。
注意:变量定义与使用已经实现,但是目前并不稳定。为了防止游戏崩溃等恶劣情况的发生,模组默认关闭。