Component/inventory controller/zh

From OpenComputers: Rebooted
Revision as of 08:08, 24 August 2026 by imported>OCDoc Import (Imported from legacy OpenComputers documentation at ocdoc.cil.li)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

组件:物品栏控制器

组件名:`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所指示位置的物品元数据。

```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 ``` ` 目录

< 100% 15% 15% >
组件API 3D打印机 - 抽象总线 - 无线接入点 - 区块加载器 - 电脑 - 合成 - 数据卡 - 数据库 - 调试 - 无人机 - 驱动器 - EEPROM - 经验 - 文件系统 - 发电机 - 地质分析仪 - GPU - 全息投影仪 - 因特网 - 物品栏控制器 - 拴绳 - 微控制器 - 调制解调器 - 运动传感器 - 导航 - 网络拆分器 - 活塞 - 红石 - 运动红石机构 - 机器人 - 屏幕 - 告示牌 - 储罐控制器 - 牵引光束 - 转运器 - 隧道 - 世界传感器
::: 其它 访问组件 - 信号
::: 模组联动 应用能源