此API封装了机器人组件的功能,允许与机器人实现更直观的互动。
若你在Lua代码中这样写,那么你调用的就是此API:
local robot_api = require("robot") robot_api.forward()
与之相对的是通过组件接口,直接使用机器人组件API:
local component = require("component") local robot_component_api = component.robot -- 如果你使用OpenOS那么可以这么写,否则要写 component.proxy(component.list("robot")()) robot_component_api.move(sides.front)
虽然机器人组件提供了更通用的功能,比如move([side: number])
和drop([side: number])
,但是此API提供了更直观、更安全的函数,比如turnRight
、dropDown
、forward
。使用哪一种由你自己决定,甚至可以混用二者。
请注意机器人本身就是一台OC模组的电脑,和其它电脑一样,只是多了一个机器人组件,所以一般的API仍然可用。
查看方块:机器人以获取更多有关机器人本身的信息。
机器人自带物品栏的内部视图与外部视图槽位索引号不同。
机器人与其自身物品栏交互时使用内部视图。访问其他机器人的物品栏时使用外部视图。
这种区别是为了分开两种物品栏空间:主物品栏和工具带物品栏。在内部视图下,机器人只能选定主物品栏的槽位,不能选定工具带槽位,但是可以装备(equip
函数)或卸下工具带中的物品。在外部视图下,观察者只会与单个物品栏交互,其中同时包含了工具带和主物品栏二者。
机器人的GUI中显示了机器人的物品栏槽位,编号从左上到右下排列。例如,编号为1的槽位显示在左上角,编号为2的槽位紧挨着它在其右侧,第二行的第一个槽位为编号5。
这些槽位编号是机器人与自身交互时使用的(在内部视图下用于自身的主物品栏 )。
机器人有多少可用槽位依其配置而定。若在调用某函数时指定的槽位号超出了机器人的槽位总数,将会报错。
这些槽位编号代表了内部视角下的机器人物品栏,因此机器人可以使用这些槽位编号对其主物品栏中的物品进行select
(选定)、place
(放置)、drop
(丢弃)compare
(比较)等操作。
对外部观察者而言,机器人物品栏的编号会偏移4。对外部观察者,1至4槽位代表机器人工具带的槽位。主物品栏的第一个槽位在机器人内部(内部视图下)为1,但是对外部观察者而言是5。这么做确实感觉有些混乱,但是这么设计是为了:对外部观察者而言,[槽位1]永远代指第一个工具带槽位,[槽位5]永远代指第一个主物品栏槽位,无论机器人的物品栏大小如何。
机器人的物品栏对外界观察者而言是有方向区分的。机器人不会将其全部物品栏开放给全部方向。但是槽位编号不会随方向而变化。因此槽位1永远代指工具带的第一个槽位,哪怕在无法访问的面上也是如此。
机器人能够灵活移动,但你可能会想了解一些细节。
机器人有飞行高度限制。机器人移动的基本规则是这样的:
flightHeight
格为可用区域(飞行能力有限,默认为8)。
违反这些规则会导致机器人返回impossible move
错误。
你可以安装悬浮升级以提升(1级)乃至很大程度上规避(2级)这个限制。或者你也可以在模组配置文件中禁用这个限制,只要将limitFlightHeight
设置为256或更高即可。
来源(英文)
robot.name(): string
robot.detect(): boolean, string
true
,否则返回 false
(注意:即使面前的方块为passable
,代表可穿越,无人机也会返回true
)。第二个返回值大体描述了前面的物体是什么,可能取值为;entity
、solid
、replaceable
、liquid
、passable
或者air
。robot.detectUp(): boolean, string
robot.detect()
一样,但此函数探测机器人正上方的方块。robot.detectDown(): boolean, string
robot.detect()
一样,但此函数探测机器人正下方的方块。robot.select([slot: number]): number
robot.inventorySize(): number
robot.count([slot: number]): number
robot.space([slot: number]):number
robot.transferTo(slot: number[, count: number]): boolean
count
个物品到指定槽位。true
,否则返回 false
。true
,即使实际上没有移动任何东西。robot.compareTo(slot: number):boolean
true
,否则返回false
。robot.compare(slot: number):boolean
robot.detect()
来确认机器人前方是否真的有方块。robot.compareUp(): boolean
robot.compare()
一样,但此函数比较机器人正上方的方块。robot.compareDown(): boolean
robot.compare()
一样,但此函数比较机器人正下方的方块。robot.drop([count: number]): boolean
dropDown
方法。 此方法会将物品丢在面前。true
,否则返回false
。false
,且不会移动任何物品。物品被放置的位置取决于物品容器自身,以及机器人面对容器的哪个面。例如,熔炉从上方接收待烧炼物品。还请注意,其它机器人也会被认为是“带物品栏的方块”,所以物品也能被移入其它机器人的物品栏槽位,就像移入别的物品容器一样。robot.use
函数与这些种类的方块互动。false
。robot.dropUp(): boolean
robot.drop()
一样,但此函数把物品丢在机器人正上方。robot.dropDown(): boolean
robot.drop()
一样,但此函数把物品丢在机器人正下方。robot.suck([count: number]): boolean
true
,否则返回false
。robot.drop
的反向版,而且也会以相同的方式和物品容器互动。但是它只会拿走物品栏中的第一个可用物品。想要实现更精准的物品栏管理,你需要为机器人安装物品栏控制器升级。false
之前先尝试捡起其它掉落物。robot.suckUp([count: number]): boolean
robot.suck()
一样,但此函数会尝试捡起正上方的物品。robot.suckDown([count: number]): boolean
robot.suck()
一样,但此函数尝试捡起正下方的物品。robot.place([side: number[, sneaky: boolean]]): boolean[, string]
true
,机器人会模拟潜行放置方块(和玩家在放置时按住shift的效果相同)。这种操作通常没有必要,只是为了保证和其它模组的兼容性。true
,否则返回 false
。若放置失败,第二个返回值会描述失败原因。robot.placeUp([side: number[, sneaky: boolean]]): boolean[, string]
robot.place()
一样,但此函数会尝试在正上方放置方块。robot.placeDown([side: number[, sneaky: boolean]]): boolean[, string]
robot.place()
一样,但此函数会尝试在正下方放置方块。robot.durability(): number, number, number or nil, string
nil
以及一条描述为何不能返回耐久值的信息。报错信息可能为:no tool equipped
(未装备工具)或tool cannot be damaged
(工具不会损坏)。robot.swing([side: number[, sneaky: boolean]]): boolean[, string]
true
,否则返回false
。若执行成功,第二个返回值代表机器人和什么东西互动了,取值可能为entity
(实体)、block
(方块)或fire
(火)。false
。任何东西(包括空槽位)都能用于与生物战斗,但是伤害会基于所使用的物品。同样所有东西都能被用来灭火,且有耐久的工具也不会减少耐久值。robot.swingUp([side: number[, sneaky: boolean]]): boolean[, string]
robot.swing()
一样,但此函数会将正上方的方块或实体当作目标。robot.swingDown([side: number[, sneaky: boolean]]): boolean[, string]
robot.swing()
一样,但此函数会将正下方的方块或实体当作目标。robot.use([side: number[, sneaky: boolean[, duration: number]]]): boolean[, string]
true
,机器人会模拟潜行右键单击(如同玩家按住shift时点击右键)。某些物品(例如桶)在这时会有不同的行为。
duration - 物品被使用多长时间。这在使用例如弓之类的蓄力物品时很有用。true
,否则返回false
。若执行成功,第二个返回值表示机器人互动的对象是什么,可能的取值为下列之一:block_activated
(激活方块)、item_placed
(放置物品)、item_interacted
(与物品互动)、item_used
(使用物品)。
此函数用途非常广泛,因为机器人可以模拟右键单击大多数物品。在这方面机器人与玩家的唯一区别是机器人不能使用明确要求用户是实体的物品,因为机器人是方块。所以喝药水、吃食物或扔末影珍珠都会失败。block_activated
- 某个方块被激活(例如拉杆、开关以及门)。item_interacted
- 装备的工具与世界进行了互动,例如在羊身上使用剪刀。item_placed
- 某个物品被放置到了世界中。此返回值不一定由可放置的方块触发,其他会导致方块或实体出现在世界上的物品也会触发(例如燧石或刷怪蛋)。item_used
- 装备的物品被激活,例如喷溅式药水。air
- 当前装备的物品需要目标才能使用,但并不存在。请注意如果你的机器人有天使升级,此返回值将永远不会出现,但一些操作可能仍然无效果。
robot.useUp([side: number[, sneaky: boolean[, duration: number]]]): boolean[, string]
robot.use()
一样,但此函数会瞄准机器人上方区域。robot.useDown([side: number[, sneaky: boolean[, duration: number]]]): boolean[, string]
robot.use()
一样,只是这个会瞄准机器人下方区域。robot.forward(): boolean[, string]
true
,否则返回 nil
。若移动失败,会出现第二个返回值,代表为什么失败,可能的取值为:impossible move
(不可行的移动方式)、not enough energy
(能量不足)或与robot.detect
返回值相同的障碍描述。impossible move
很少见,因为缺少能量通常会让机器人在此前就关机了。impossible move
是一种回退结果,会在机器人试图进入未加载区域等情况下返回。robot.back(): boolean[, string]
robot.forward()
一样,但此函数会让机器人尝试向后移动。robot.up(): boolean[, string]
robot.forward()
一样,但此函数会让机器人尝试向上移动。robot.down(): boolean[, string]
robot.forward()
一样,但此函数会让机器人尝试向下移动。robot.turnLeft()
robot.turnRight()
robot.turnLeft()
一样,但此函数会让机器人右转90°。robot.turnAround
robot.turnRight()
是一样的。 robot.level(): number
component.experience.level()
代替(只能在安装了经验升级的前提下可用)。1.5
,代表机器人为1级,且已经完成了升到2级所需进度的50%。robot.tankCount(): number
robot.selectTank(tank)
robot.tankLevel([tank:number]): number
robot.compareFluidTo(tank: number): boolean
robot.transferFluidTo(tank: number[, count: number]): boolean
robot.compareFluid(): boolean
robot.compareFluidUp(): boolean
robot.compareFluid()
一样,但此函数作用于机器人上方的方块。robot.compareFluidDown(): boolean
robot.compareFluid()
一样,但此函数作用于机器人下方的方块。robot.drain([count: number]): boolean
robot.drainUp([count: number]): boolean
robot.drain()
一样,但此函数作用于机器人上方的方块。robot.drainDown([count: number]): boolean
robot.drain()
一样,但此函数作用于机器人下方的方块。robot.fill([count: number]): boolean
robot.fillUp([count: number]): boolean
robot.fill()
一样,但此函数作用于机器人上方的方块。robot.fillDown([count: number]): boolean
robot.fill()
一样,但此函数作用于机器人下方的方块。