组件:物品栏控制器

组件名:inventory_controller

此组件由物品栏控制器升级提供。

有了此API,机器人可以接收有关物品或物品栏的额外信息,并且可以向指定槽位放入物品或从中取出物品。

大多数操作所需的方向(side)遵循Sides(方向面) API中的方向。若不指定方向或指定错误的方向,函数通常会报错。要与机器人自身的物品栏互动需要使用back方向,这也使得机器人无法与在其身后的物品容器互动。机器人也不能访问它们的左右两边。综上,你只能与机器人前方、上方或下方的物品容器互动。

回调函数:

  • getInventorySize(side: number): number or nil[, string]
    返回指定方向所对物品容器的大小。
    side - 须为某个有效的方向。
    返回值:物品容器的大小,或者nil与函数执行失败原因的描述(通常为no inventory,代表对应方向不存在物品容器)。

  • getStackInSlot(side:number, slot:number):table
    返回一个描述指定槽位中物品信息的表,或nil。用此函数获取机器人自身物品栏中物品信息的做法已经过时,请使用getStackInInternalSlot代替。
    side - 须为某个有效的方向。
    slot - 要分析的槽位。此参数不会检查物品容器大小,而是会将超出物品栏范围的槽位当作空槽位。
    返回值:若槽位为空(或超出物品栏范围)则返回nil,否则返回一个表,其中包含槽位中物品的以下信息:
    1. damage:number - 物品的当前损害值。
    2. maxDamage:number - 此物品在损坏前能承受的最大损害值。
    3. size:number - 此物品的当前堆叠数量。
    4. maxSize:number - 此物品的最大堆叠数量。
    5. id:number - 此物品的Minecraft id。请注意只有在配置文件中设置insertIdsInConverters=true才会出现此字段,可能因服务端设定而不同!
    6. name:string - “未翻译的”物品名,也就是Minecraft的内部值,例如oc:item.FloppyDisk
    7. label:string - “翻译后的”物品名。
    8. hasTag:boolean - 此物品是否包含NBT标签。


  • getStackInInternalSlot(slot:number):table
    获取机器人物品栏中指定(若不指定为当前选中)槽位中物品的物品堆信息。

  • dropIntoSlot(side:number, slot:number[, count:number]):boolean[, string]
    从机器人物品栏的当前选中槽位向外转移物品,目标为指定方向处物品容器的指定槽位,至多指定数量个。
    side - 某个有效方向。
    slot - 要放置物品的目标槽位。 count - 要转移多少物品。
    返回值:若至少移动了一个物品则返回true,否则返回false与报错信息。
    请注意此函数中机器人不能将物品放入自身物品栏,试图这样做会抛出错误。你需要使用Robot(机器人) API中的robot.transferTo函数来进行此操作。

  • suckFromSlot(side:number, slot:number[, count:number]):boolean
    从指定方向处物品容器的指定槽位获取物品,转移到机器人物品栏的当前选中槽位,至多指定数量个。
    side - 某个有效方向。
    slot - 用于获取物品的槽位。
    count - 要转移多少物品。
    返回值:若至少移动了一个物品则返回true,否则返回false
    若机器人物品栏的当前选中槽位被占用,则传入的物品会被合并到物品栏中的相同物品堆中,或移动到下一个空闲槽位(有的话)。若没有可用槽位则操作会失败。
    请注意此函数中给机器人不能从自身物品栏提取物品,试图这样做会抛出错误。你需要使用Robot(机器人) API中的robot.transferTo函数来进行此操作。

  • equip():boolean
    将机器人工具槽位中内容与其物品栏的选中槽位中内容互换。
    返回值:若物品成功交换则返回true,否则返回false。此操作通常都会成功。
    请注意,你可以将任何类型的物品放进机器人的工具槽位,不只是工具,就算是机器人根本不能使用的物品也行。

  • store(side:number, slot:number, dbAddress:string, dbSlot:number):boolean
    获取指定方向处物品容器指定槽位的物品堆信息,将其存入指定地址对应数据库的指定槽位。

  • storeInternal(slot:number, dbAddress:string, dBslot:number):boolean
    获取机器人物品栏指定槽位的物品堆信息,将其存入指定地址对应数据库的指定槽位。

  • compareToDatabase(slot:number, dBaddress:string, dBslot:number):boolean
    获取机器人物品栏指定槽位的物品堆信息,与指定地址对应数据库的指定槽位内容对比。若物品信息相符则返回true

  • compareStacks(side:number, slotA:number, slotB:number):boolean
    检查指定方向处物品容器中,槽位A(slotA)和槽位B(slotB)的物品信息是否相同。若相同则返回true

  • getSlotMaxStackSize(side:number, slot:number):number
    获取指定方向处物品容器的指定槽位中物品的堆叠上限。

  • getSlotStackSize(side:number, slot:number):number
    获取指定方向处物品容器的指定槽位中物品的数量。

样例:

输出slot所指示位置的物品元数据。

snippet.lua
local component = require("component")
local sides = require("sides")
 
local slot = 1
local item = component.inventory_controller.getStackInInternalSlot(slot)
 
if item then
	print("Item name: ", item.name)
	print("Item count: ", item.size)
	print("Item damage: ", item.damage)
else
	print("Slot " .. slot .. " is empty")
end

`

目录