物流系统

引入

众所周知,物品,有许多存在形式:
掉落物(EntityItem)、物品栏(IInventory / IItemHandler)、方块物品(ItemBlock)等。
这里只写出能够直接于物品对等的,如掉落物等价于对应物品,可以互相转换。但是我们不能用一块腐肉去等价一只僵尸。

对于一个狭义的物流系统,我们一般考虑的就是物品栏。对于广义一点的,我们可以有经典的水流物流、方块放置等等。

物流系统有很多。原版的漏斗可以进行物流操作,热动力学的物流系统也可以,EIO的物流也是非常著名的。
然而对于物流系统概论的缺失,甚至导致了非常愚蠢的说法,如下是mcmod百科的曾经一段经典错误示范(已修改)


热动力学的兼容性十分强大,可以与几乎一切mod所添加的机器和储物箱柜交互。
例如:
IC 工业时代
GT 格雷科技
DE 龙之进化
……此处省略10个模组
IE 沉浸工程
粘土工业
海洋物语
BC 建筑


漏斗难道就不行了吗?其实容器只要编写得正常,支持漏斗操作,一般物流系统都能做到和容器操作。
流体也是如此:

物流系统-第1张图片

交互法则

Forge 提供了能力系统(Capability),并内置了物品(CapabilityItemHandler)、流体(CapabilityFluidHandler)、FE (CapabilityEnergy)能力系统。只要合理调用了这些系统,便可以通过 Forge 进行跨模组的物流交互。几乎全部机器、容器、管道均使用了这一系统,所以我们可以直接做到跨模组的物流交互,而不用去特意对某一特定模组进行单独的支持。(玩家的物品栏没有支持这一系统,所以大部分物流系统是无法直接对玩家物品栏进行操作的,但是有小部分mod实现了物流系统与玩家的物品栏的连接,比如气动工艺中的空中界面

方块是以面作为单位进行交互的。
对于是否接受加入、抽取,以及它们对应的格子,答复都是根据面作答的。
例如熔炉侧面接受物品就是燃料,顶部接受物品就是要被烧制的物品。再举例:热力机器。对于蓝色面,仅允许对输入槽操作;对于橙色面仅允许对输出槽操作;对于红色面则仅允许对主输出槽进行操作;对于没有设置的空白面和正面不予访问权力;对于黑色小口的面则允许访问所有槽。
可能仅允许部分操作。如ME-IO端口左侧的gui格子只支持加入不支持抽取,右侧格子反之。


以下5条都是由 IItemHandler 的代码提供的。一般访问一个容器内是否有物品,会尝试模拟加入配合模拟抽取。访问的话例如AE2存储总线的报告不可交互的物品模式。

模拟加入

检测目标交互面是否可以被加入该物品。

加入

加入是何物?顾名思义,向目标容器中加入物品。

但是容器自然有权力拒绝这些物品,比如容器满了。

但是加入之后容器不一定保证还在,例如:各种机器、抽屉清空升级、垃圾桶。

模拟抽取

检测目标交互面是否可以抽取物品。

抽取

抽取,是从容器中取出物品。

自然,容器也可能会拒绝你的抽取。

抽取物品也不代表物品会减少,如各种创造箱子。

访问

即得到容器中有哪些物品。

短评加载中..