此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
。使用哪一种由你自己决定,甚至可以混用二者。
请注意机器人本身就是一台开放式电脑,和其它电脑一样,只是多了一个机器人组件,所以一般的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 - 这个物品被使用多长时间。这在使用例如弓之类的蓄力物品时很有用。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
。如果移动失败,第二个返回值会描述为什么失败,它会是“不可能的移动”、“没有足够能量”或者是 robot.detect
返回的障碍描述之一。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
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()
一样,只是这个会向机器人脚底注入液体。