Temporary discussion area | 临时讨论区
zeng-github01 opened this issue · 25 comments
@GlodBlock 作者方便说一下 FluidPatternDetails
类的内部逻辑嘛?因为我想抄一下AE原生的实现做测试,但是这两个实现类差太多了,直接改会出一堆问题。比如原始实现里面的合成表在哪....
你看它接口方法上的注释,都写清楚了。PatternDetials就是根据样板的nbt解码出输入输出的物品
我这边是没有注释的。不知道是为什么,个人推测这些应该就是合成表,只是把物品的Recipe拆分开来 private IAEItemStack[] inputs = null, inputsCond = null, outputs = null, outputsCond = null;
那么slot应该就是数组的索引了
那你可以直接去看ae的源码https://github.com/AE2-UEL/Applied-Energistics-2
那你可以直接去看ae的源码https://github.com/AE2-UEL/Applied-Energistics-2
我说的是作者你实现的那一个,不是AE的那个
如果推测属实的话,可能得把AE的那个参考实现再改改
对了, #123 这个issue貌似是可以实现的,获取替换物品的方法实际上是一个接口,这个接口是ICraftingPatternDetails
一看名字就是负责处理合成信息的,你要不要考虑实现一下
根调用是编码模板物品类的从物品获取模板,返回值是合成模板信息的接口。里面调用了一个工具类进行处理,这个工具类实现了这个接口。你可以尝试照葫芦画瓢。
这是根方法的引用:appeng.items.misc.ItemEncodedPattern#getPatternForItem
流体合成的编码模板应该也可以考虑整一个
合成处理方法的引用在这里: appeng.crafting.CraftingTreeNode#request
112行。
希望作者大大可以整个好活 @GlodBlock
更新: 这个获取替换物品的接口方法引用是 appeng.api.networking.crafting.ICraftingPatternDetails#getSubstituteInputs
这个有默认实现。默认实现就是返回空列表。所以导致了作者你忘记实现。它也就不会有替换的流体。看作者应该其他的都已经实现了。就差这个方法了。这个方法的形参是slot的int值 ,大概率是合成表的插槽Id ,由于我不知道作者你是如何实现编码的。所以不好帮你改。要不还是大佬你自己试试看?
不是,流体合成样板是独立的一个物品,流体组装机是独立的一个机器
其实这个问题最需要纠结的部分就是,流体样板是怎么被编码进去的。如果它编码的是这个液滴的数据,那自然也可以用这个液滴的数据去按矿物词典搜索,搜索到液滴应该还是物品。输出物品液滴的时候。应该就会转为流体。
AE在合成流体相关的东西的时候可能输出的是液滴。只是到机器的时候转换了一下。
在流体样板的时候getPatternForItem
方法是独立实现的,有自己的一个实现类,那获取的 details
就应该是流体的
slot就是合成台的第几个格子
算了,回头去看一下默认实现。现在的疑惑就是那个格子在流体样板里会返回什么。带tag的液滴物品堆栈?回头还得查一下获取格子物品的方法
@GlodBlock 我又看了一次这个issue,在代码层面是设置了 替换固定为false的,模板里面说要的是液滴,怎么到了合成又变成桶了?合成逻辑本身貌似也有问题。可能是因为这个导致无法合成
@GlodBlock 大佬能帮我调试一下我那个小Mod吗,反编译别人的Mod更新到高版本,结果出现了两个特别奇怪的bug,调了好久了
仓库是Re-Exposer