AE2 Fluid Crafting Rework

AE2 Fluid Crafting Rework

523k Downloads

Temporary discussion area | 临时讨论区

zeng-github01 opened this issue · 25 comments

commented

为什么流体缓存指令器的getProxy().isActive()一直都是false,哪怕是连上AE

commented

在客户端一直是false,不是bug

commented

在客户端一直是false,不是bug

服务端没有这个问题吗?我看其他mod里的没有这个问题,比如懒人AE2。想做激活判断必须依赖这个

commented

那我就不太清楚了

commented

@GlodBlock 作者方便说一下 FluidPatternDetails 类的内部逻辑嘛?因为我想抄一下AE原生的实现做测试,但是这两个实现类差太多了,直接改会出一堆问题。比如原始实现里面的合成表在哪....

commented

你看它接口方法上的注释,都写清楚了。PatternDetials就是根据样板的nbt解码出输入输出的物品

commented

你看它接口方法上的注释,都写清楚了。PatternDetials就是根据样板的nbt解码出输入输出的物品

我这边是没有注释的。不知道是为什么,个人推测这些应该就是合成表,只是把物品的Recipe拆分开来 private IAEItemStack[] inputs = null, inputsCond = null, outputs = null, outputsCond = null;
那么slot应该就是数组的索引了

commented

那你可以直接去看ae的源码https://github.com/AE2-UEL/Applied-Energistics-2

commented

那你可以直接去看ae的源码https://github.com/AE2-UEL/Applied-Energistics-2

我说的是作者你实现的那一个,不是AE的那个

如果推测属实的话,可能得把AE的那个参考实现再改改

commented

对了, #123 这个issue貌似是可以实现的,获取替换物品的方法实际上是一个接口,这个接口是ICraftingPatternDetails 一看名字就是负责处理合成信息的,你要不要考虑实现一下

根调用是编码模板物品类的从物品获取模板,返回值是合成模板信息的接口。里面调用了一个工具类进行处理,这个工具类实现了这个接口。你可以尝试照葫芦画瓢。

这是根方法的引用:appeng.items.misc.ItemEncodedPattern#getPatternForItem

流体合成的编码模板应该也可以考虑整一个

合成处理方法的引用在这里: appeng.crafting.CraftingTreeNode#request 112行。

希望作者大大可以整个好活 @GlodBlock

更新: 这个获取替换物品的接口方法引用是 appeng.api.networking.crafting.ICraftingPatternDetails#getSubstituteInputs 这个有默认实现。默认实现就是返回空列表。所以导致了作者你忘记实现。它也就不会有替换的流体。看作者应该其他的都已经实现了。就差这个方法了。这个方法的形参是slot的int值 ,大概率是合成表的插槽Id ,由于我不知道作者你是如何实现编码的。所以不好帮你改。要不还是大佬你自己试试看?

commented

不能,这个方法是给合成样板用的。流体合成样板不是合成样板

commented

不能,这个方法是给合成样板用的。流体合成样板不是合成样板

但是流体合成样板是合成样板的扩展吧?

commented

不是

commented

不是

那流体的合成是一个怎样的实现路径。实际上暴露给ME的应该还是物品,不然合成用的request方法就没法用了

commented

不是,流体合成样板是独立的一个物品,流体组装机是独立的一个机器

commented

流体合成样板用的是处理样板的逻辑,流体组装机接收原料后输出成品

commented

流体合成样板用的是处理样板的逻辑,流体组装机接收原料后输出成品

作者是说二合一接口嘛?

commented

不是,流体合成样板是独立的一个物品,流体组装机是独立的一个机器

其实这个问题最需要纠结的部分就是,流体样板是怎么被编码进去的。如果它编码的是这个液滴的数据,那自然也可以用这个液滴的数据去按矿物词典搜索,搜索到液滴应该还是物品。输出物品液滴的时候。应该就会转为流体。
AE在合成流体相关的东西的时候可能输出的是液滴。只是到机器的时候转换了一下。

在流体样板的时候getPatternForItem 方法是独立实现的,有自己的一个实现类,那获取的 details 就应该是流体的

commented

那你帮我写一下

commented

那你帮我写一下

我可以试一下,但是那个slot怎么用来着? 毕竟确实挺好奇的

commented

slot就是合成台的第几个格子

commented

slot就是合成台的第几个格子

算了,回头去看一下默认实现。现在的疑惑就是那个格子在流体样板里会返回什么。带tag的液滴物品堆栈?回头还得查一下获取格子物品的方法

commented

@GlodBlock 我又看了一次这个issue,在代码层面是设置了 替换固定为false的,模板里面说要的是液滴,怎么到了合成又变成桶了?合成逻辑本身貌似也有问题。可能是因为这个导致无法合成

commented

@GlodBlock 大佬能帮我调试一下我那个小Mod吗,反编译别人的Mod更新到高版本,结果出现了两个特别奇怪的bug,调了好久了

仓库是Re-Exposer

commented

这个我也不会

commented

这个我也不会

好吧,谢了