模组介绍
本模组实现了模组级别的类似于“按键精灵”的自动化脚本。比普通的按键脚本更加稳定、高效!
可让玩家变为自动机器人,自动完成重复率高、枯燥乏味的任务,解放双手。
模组创建了一个轻量级的脚本语言 YABscript 动态调用 Baritone 和模组内置的多个自动化操作。
利用 YABscript 可实现:资源自动收集、物资自动存放与获取、掉落物自动收集、自动种植、自动寻路、自动右击等。
YABscript 脚本语言介绍
YABscript 是本模组实现的一个轻量级、支持循环控制、变量定义(目前版本不稳定)的脚本语言。
本模组搭配 Baritone,内部实现了多个自动化“原子操作”如:资源自动收集、打开或关闭容器(箱子、熔炉等)、自动寻路等。
利用 YABscript 便可将这些原子操作进行动态调用组合,实现更为丰富、复杂的自动化操作。
原子操作介绍
原子操作即单个的自动化操作如:自动打开容器、自动寻路等,以下为目前所有可用的原子操作:
适用版本 | 命令 | 参数 | 说明 |
---|---|---|---|
0.1 | moveTo | x y z | 移动到 x y z 坐标 |
0.1 | moveForward | x y z | 移动相对位置,x y z 为偏移量 |
0.1 | openBlock | x y z | 打开 x y z 的容器或者右击 x y z 中心位置 |
0.1 | wait | tick | 等待 tick 时间,单位 gt |
0.1 | moveItem | item moveType number | 移动物品,item 为目标物品,moveType 取值为INV2CON、CON2INV和ALL分别对应背包移动容器、容器移动背包和包括背包和容器 number 指移动的物品堆叠数量(为-1时表示移动所有目标物品) |
0.1 | getBlock | block count | 在周围获取(挖掘)count 数量的 block 方块 |
0.1 | getDropItem | item range | 在范围 range 格内拾取所有 item |
0.1 | closeBlock | 无 | 关闭容器界面 |
0.1 | whileStart | times whileId | 循环 times 次,whileId 为循环体标记 id |
0.1 | whileEnd | whileId | 循环 id 的结束语法 |
0.1 | farm | farmItem farmRange | 自动种植。使用 farmItem 在范围 farmRange 格内种植 |
0.2 | safeMode | true / false | 开启或者关闭安全模式,安全模式下玩家不会破坏方块和放置方块 |
0.2 | sendMessage | message | 发送聊天信息message |
0.2 | sendCommand | command | 发送聊天命令command,如/tpa、/seed 等,注意不需要"/",如sendCommand tpa |
0.2 | moveSpeedOption | walk/run | 设置移动速度,walk为正常移动、run为奔跑 |
0.2 | lookAt | x y z | 看向坐标x y z方块的中心点 |
0.2 | useItem | targetItem count | 使用物品id为targetItem的物品count个 |
0.2 | attackBlock | 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
closeBlock
whileEnd 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 0
whileEnd 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=0
moveTo $startX $startY $startZ
以$符号开头,后接变量名(大小写敏感、不能与原子操作的名称相同如 moveTo、openBlock)和变量值。
使用变量只需要将原子操作的参数替换为变量名即可。
注意:变量定义与使用已经实现,但是目前并不稳定。为了防止游戏崩溃等恶劣情况的发生,模组默认关闭。