物流交互

细节信息
AE2 有特殊交互面的容器:  ME箱子ME-IO端口压印器、(AE2线缆和(或)总线)。

使用例   给压印器填装红石:

物流交互-第1张图片介绍

物流系统是物品、流体、能量等各式资源在方块之间移动组成的系统。即使模组各个天马行空,但是为了相互配合,在物流这一方面也是有规范的。

AE2的物流系统是基于forge的,那么必然得先一定程度上了解一下forge提供的物流。

阅读这份资料有助于你在设计全新自动化时,使用存储总线-ME终端等设备去探究方块特性。



思考一下,如果你是写forge的,你会怎么让不同模组的五花八门的管道能够向各种机器、容器输入抽取物品呢?

提供一个让他们交流的平台。
    漏斗:“压印器,你后面有空位可以放红石吗?”
    压印器:“有,能放1个”/“没有”

    漏斗:“那我这里减一个红石”/“那算了”

    压印器:“我这里多一个红石,物品交换结束了”


把压印器换成 垃圾桶 / 物质聚合器,那么它最后会说“我是垃圾桶,所以我这不加1个红石”

值得注意的是,每个方块不同的面能够接收的东西不一样。例如熔炉侧面只能接受燃料,底面不可输入。

如果漏斗抽取头上的箱子,也会有类似的“对话”:


    漏斗:“箱子,我这有点空位,你有东西可以给我吗?“ / “我这格子都占用了,你有 红石/铁锭/金锭/绿宝石/钻石 能给我吗?”

    箱子:“给你一个红石?” / “没有” / “有赛特斯石英……诶,有红石,给你?”

    漏斗:“红石+1”

    箱子:“红石-1”


存储总线一般只问问有哪些物品,当网络说要从这个容器拿东西,它就问容器要;

红线容器物品P2P,以及幻灵接口,则是当别人问自己的时候立刻转过头去问绑定的方块;

抽屉管理器在被询问的时候会把自己当成是所有相连的抽屉加在一起,当别人问它拿东西,它会毫不犹豫地从其它抽屉里面直接扣;


再举个例子,匠魂的浇筑口,其实也可以充当流体管道的功能:

物流交互-第2张图片物流交互-第2张图片

    浇注口:#被激活#, “背后那位,你有什么流体给我吗?”

    熔岩炉:“不稳定熔融红石”

    浇注口:“下面的,你头顶能接受不稳定熔融红石吗?144mb”

    ME箱子:“可以,但是只能接受100mb”

    浇注口:“好,熔岩炉你可以扣掉100mb”
    熔岩炉:“扣好了”
    ME箱子:“我这加上100mb好了”



而ME网络的构造则更加复杂。在把物品抽入网络的时候,会先按优先级询问存储元件、存储总线对应的方块,是否能够放入物品。
如果找到了,则 [给存储总线对应的容器一些物品],然后 [从抽入端抽取这些物品]。


总的来说,物品物流系统主要有以下一些规范性的“对话”:

  1. 访问列表

  2. 模拟抽取

  3. 模拟加入

  4. 抽取

  5. 加入

而物流系统相关的设备,会有“发出提问”和“回答”这两个操作。

漏斗就同时兼具这两种操作,而箱子只能被动回答; 而输入总线只能“发出提问”——当输入总线被红石卡禁用时,漏斗对着输入总线,输入总线也不会回答漏斗,让漏斗把物品放入网络。

大部分机器都有“回答”这个操作,有时在不同面上会进行不同的“回答”。而“自动弹出-抽取”则是“提问”。

此段资料引用于“物流系统”并与其保持同步更新。  编辑

引入

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

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

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


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


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

物流交互-第3张图片

交互法则

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

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


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

模拟加入

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

加入

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

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

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

模拟抽取

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

抽取

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

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

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

访问

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

物流交互
物流交互
物流交互
资料分类:引导:前置概念

短评加载中..