Component/inventory controller/zh: Difference between revisions
Jump to navigation
Jump to search
imported>OCDoc Import Imported from legacy OpenComputers documentation at ocdoc.cil.li |
Clean up Markdown artifacts from DokuWiki migration |
||
| Line 1: | Line 1: | ||
= 组件:物品栏控制器 = | = 组件:物品栏控制器 = | ||
'''组件名:''' | '''组件名:'''<code>inventory_controller</code> | ||
此组件由[[Item/inventory controller upgrade/zh|物品栏控制器升级]]提供。 | 此组件由[[Item/inventory controller upgrade/zh|物品栏控制器升级]]提供。 | ||
| Line 7: | Line 7: | ||
有了此API,机器人可以接收有关物品或物品栏的额外信息,并且可以向指定槽位放入物品或从中取出物品。 | 有了此API,机器人可以接收有关物品或物品栏的额外信息,并且可以向指定槽位放入物品或从中取出物品。 | ||
大多数操作所需的方向(side)遵循[[API/sides/zh|Sides(方向面) API]]中的方向。若不指定方向或指定错误的方向,函数通常会报错。要与机器人自身的物品栏互动需要使用 | 大多数操作所需的方向(side)遵循[[API/sides/zh|Sides(方向面) API]]中的方向。若不指定方向或指定错误的方向,函数通常会报错。要与机器人自身的物品栏互动需要使用<code>back</code>方向,这也使得机器人无法与在其身后的物品容器互动。机器人也不能访问它们的左右两边。综上,你只能与机器人前方、上方或下方的物品容器互动。 | ||
回调函数: | 回调函数: | ||
* | * <code>getInventorySize(side: number): number or nil[, string]</code> 返回指定方向所对物品容器的大小。 '''side''' - 须为某个有效的方向。 '''返回值:'''物品容器的大小,或者<code>nil</code>与函数执行失败原因的描述(通常为<code>no inventory</code>,代表对应方向不存在物品容器)。 | ||
* | * <code>getStackInSlot(side:number, slot:number):table</code> 返回一个描述指定槽位中物品信息的表,或<code>nil</code>。用此函数获取机器人自身物品栏中物品信息的做法已经过时,请使用<code>getStackInInternalSlot</code>代替。 '''side''' - 须为某个有效的方向。 '''slot''' - 要分析的槽位。此参数不会检查物品容器大小,而是会将超出物品栏范围的槽位当作空槽位。 '''返回值:'''若槽位为空(或超出物品栏范围)则返回<code>nil</code>,否则返回一个表,其中包含槽位中物品的以下信息: | ||
= '''damage''':number - 物品的当前损害值。 = | |||
= '''maxDamage''':number - 此物品在损坏前能承受的最大损害值。 = | |||
= '''size''':number - 此物品的当前堆叠数量。 = | |||
= '''maxSize''':number - 此物品的最大堆叠数量。 = | |||
= '''id''':number - 此物品的Minecraft id。请注意只有在配置文件中设置<code>insertIdsInConverters=true</code>才会出现此字段,可能因服务端设定而不同! = | |||
= '''name''':string - '''“未翻译的”'''物品名,也就是Minecraft的内部值,例如<code>oc:item.FloppyDisk</code>。 = | |||
= '''label''':string - '''“翻译后的”'''物品名。 = | |||
= '''hasTag''':boolean - 此物品是否包含NBT标签。 = | |||
* | * <code>getStackInInternalSlot(slot:number):table</code> | ||
获取机器人物品栏中指定(若不指定为当前选中)槽位中物品的物品堆信息。 | 获取机器人物品栏中指定(若不指定为当前选中)槽位中物品的物品堆信息。 | ||
* | * <code>dropIntoSlot(side:number, slot:number[, count:number]):boolean[, string]</code> 从机器人物品栏的当前选中槽位向外转移物品,目标为指定方向处物品容器的指定槽位,至多指定数量个。 '''side''' - 某个有效方向。 '''slot''' - 要放置物品的目标槽位。 '''count''' - 要转移多少物品。 '''返回值:'''若至少移动了一个物品则返回<code>true</code>,否则返回<code>false</code>与报错信息。 请注意此函数中机器人不能将物品放入自身物品栏,试图这样做会抛出错误。你需要使用[[API/robot/zh|Robot(机器人) API]]中的<code>robot.transferTo</code>函数来进行此操作。 | ||
* | * <code>suckFromSlot(side:number, slot:number[, count:number]):boolean</code> 从指定方向处物品容器的指定槽位获取物品,转移到机器人物品栏的当前选中槽位,至多指定数量个。 '''side''' - 某个有效方向。 '''slot''' - 用于获取物品的槽位。 '''count''' - 要转移多少物品。 '''返回值:'''若至少移动了一个物品则返回<code>true</code>,否则返回<code>false</code>。 若机器人物品栏的当前选中槽位被占用,则传入的物品会被合并到物品栏中的相同物品堆中,或移动到下一个空闲槽位(有的话)。若没有可用槽位则操作会失败。 请注意此函数中给机器人不能从自身物品栏提取物品,试图这样做会抛出错误。你需要使用[[API/robot/zh|Robot(机器人) API]]中的<code>robot.transferTo</code>函数来进行此操作。 | ||
* | * <code>equip():boolean</code> 将机器人工具槽位中内容与其物品栏的选中槽位中内容互换。 '''返回值:'''若物品成功交换则返回<code>true</code>,否则返回<code>false</code>。此操作通常都会成功。 请注意,你可以将任何类型的物品放进机器人的工具槽位,不只是工具,就算是机器人根本不能使用的物品也行。 | ||
* | * <code>store(side:number, slot:number, dbAddress:string, dbSlot:number):boolean</code> 获取指定方向处物品容器指定槽位的物品堆信息,将其存入指定地址对应数据库的指定槽位。 | ||
* | * <code>storeInternal(slot:number, dbAddress:string, dBslot:number):boolean</code> 获取机器人物品栏指定槽位的物品堆信息,将其存入指定地址对应数据库的指定槽位。 | ||
* | * <code>compareToDatabase(slot:number, dBaddress:string, dBslot:number):boolean</code> 获取机器人物品栏指定槽位的物品堆信息,与指定地址对应数据库的指定槽位内容对比。若物品信息相符则返回<code>true</code>。 | ||
* | * <code>compareStacks(side:number, slotA:number, slotB:number):boolean</code> 检查指定方向处物品容器中,槽位A(slotA)和槽位B(slotB)的物品信息是否相同。若相同则返回<code>true</code>。 | ||
* | * <code>getSlotMaxStackSize(side:number, slot:number):number</code> 获取指定方向处物品容器的指定槽位中物品的堆叠上限。 | ||
* | * <code>getSlotStackSize(side:number, slot:number):number</code> 获取指定方向处物品容器的指定槽位中物品的数量。 | ||
样例: | 样例: | ||
| Line 40: | Line 40: | ||
输出[http://ocdoc.cil.li/api:robot:zh slot]所指示位置的物品元数据。 | 输出[http://ocdoc.cil.li/api:robot:zh slot]所指示位置的物品元数据。 | ||
<syntaxhighlight lang="lua"> | |||
local component = require("component") local sides = require("sides") | |||
local slot = 1 local item = component.inventory_controller.getStackInInternalSlot(slot) | local slot = 1 local item = component.inventory_controller.getStackInInternalSlot(slot) | ||
| Line 46: | Line 47: | ||
if item then | if item then | ||
print("Item name: ", item.name) | |||
print("Item count: ", item.size) | print("Item count: ", item.size) | ||
print("Item damage: ", item.damage) | print("Item damage: ", item.damage) | ||
else | else | ||
print("Slot " .. slot .. " is empty") | |||
</ | |||
== | == end | ||
</syntaxhighlight> | |||
== 目录 == | |||
{{:Component/contents/zh}} | {{:Component/contents/zh}} | ||
Latest revision as of 20:27, 24 August 2026
组件:物品栏控制器
组件名: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,否则返回一个表,其中包含槽位中物品的以下信息:
damage:number - 物品的当前损害值。
maxDamage:number - 此物品在损坏前能承受的最大损害值。
size:number - 此物品的当前堆叠数量。
maxSize:number - 此物品的最大堆叠数量。
id:number - 此物品的Minecraft id。请注意只有在配置文件中设置insertIdsInConverters=true才会出现此字段,可能因服务端设定而不同!
name:string - “未翻译的”物品名,也就是Minecraft的内部值,例如oc:item.FloppyDisk。
label:string - “翻译后的”物品名。
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所指示位置的物品元数据。
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 - 全息投影仪 - 因特网 - 物品栏控制器 - 拴绳 - 微控制器 - 调制解调器 - 运动传感器 - 导航 - 网络拆分器 - 活塞 - 红石 - 运动红石机构 - 机器人 - 屏幕 - 告示牌 - 储罐控制器 - 牵引光束 - 转运器 - 隧道 - 世界传感器 | |
| ::: | 其它 | 访问组件 - 信号 |
| ::: | 模组联动 | 应用能源 |