前言

有朝一日,你也许会在编写样板的途中遇到这样的合成:

利用OC实现样板的无限标记-第1张图片此时,你会发现,你的样板终端只有9个格子,根本不足以放下如此庞大数量的物品。自然,如果你对AE2有着足够的了解,你完全可以使用伪合成等方式完成这个配方。但难道……就没有别的处理方法了吗?


特别感谢

@Nyanmaid

@Neutron


游戏版本

Minecraft 1.7.10 

使用mod

[AE2] 应用能源2 (Applied Energistics 2)

[OC] 开放式电脑 (Open Computers)

Opencomputers编写AE样板

Opencomputers对ME接口有着一定的代码兼容,其中就包括对接口内部的样板进行修改。

Opencomputer简要使用方法

装机

Opencomputer最基础也是最重要的一步就是配置一台像样的电脑。在本文不多赘述,请移步https://www.mcmod.cn/post/154.html查看。

这一次,我们需要的部件是机箱,显示器,键盘,适配器。利用OC实现样板的无限标记-第2张图片

适配器

适配器 (Adapter)是OC用于与其他mod设备互动的一个方块,将其紧贴设备放置即可使OC读取到设备的信息。

示例:

利用OC实现样板的无限标记-第3张图片

打开适配器,可以看见其内部有一个升级插口,可以放入各种升级组件。

利用OC实现样板的无限标记-第4张图片这次我们将需要放入一个数据库升级以完成接下来的任务。

数据库升级

利用OC实现样板的无限标记-第5张图片

图中分别对应基础,高级,超级的数据库升级。

手持数据库升级,右键打开,可以看到以下GUI:

利用OC实现样板的无限标记-第6张图片这是超级数据库升级的GUI,低级的数据库升级效果不会有差异,但是可用格子会变少。本教程直接使用超级数据库升级为例。

在这81个格子中,我们都可以用背包中的物品标记其中的任意格子,比如说用红石块标记我们的第一格:

利用OC实现样板的无限标记-第7张图片此时,红石块就已经录入了数据库升级。现在我们把标记过的数据库升级放入适配器:利用OC实现样板的无限标记-第8张图片

此时,我们的电脑就可以通过代码调用到数据库中的数据了。

编写样板的代码

需要用代码以编写样板,我们需要了解一串代码:

component.me_interface.setInterfacePatternInput(修改ME接口中的第几个样板,数据库地址,用数据库第几号位的物品标记,标记物品数量,标记在样板的第几格)

这串代码,将是我们用OC编写样板的核心。

在OC中编写一个脚本

装机启动后,我们应该会看到以下界面:利用OC实现样板的无限标记-第9张图片

此时,我们就可以键入edit <文件名>,来编写你的第一个脚本。

利用OC实现样板的无限标记-第10张图片利用OC实现样板的无限标记-第11张图片OC中,粘贴代码的方法为鼠标滚轮按下。

在编辑完成后,按下Crtl+S以保存文件,按下Crtl+W以关闭编辑器。

调用脚本

编写好脚本后,只要在主界面输入你脚本的名字,就可以激活脚本运行了。

大量同种物品编写

代码


component = require("component")
me = component.me_interface
db = component.database

io.write('Number of items needed: ')
nItems = io.read("*n")

io.write('DB index: ')
dbIndex = io.read("*n")

cycles = nItems//64;
lastStack = nItems%64;

for i=1,cycles do
   me.setInterfacePatternInput(1, db.address, dbIndex, 64, i)
end

me.setInterfacePatternInput(1, db.address, dbIndex, lastStack, cycles+1)


代码解析

1行:导入component包。

2,3行:赋予变量,以简化下方代码。

4,5行:将nItems变量设定为你键入的值。

6,7行:将数据库调用格子设定为你键入的格子。

8行:计算循环次数。

9行:计算循环结束后需要补充多少物品。

10-12行:循环cycles次,每次向样板添加一组物品。

13行:向样板添加剩余物品。


使用方法

1、输入edit <文件名>,进入编辑器并粘贴代码。

利用OC实现样板的无限标记-第12张图片利用OC实现样板的无限标记-第13张图片

2、保存并退出编辑器,回到主界面。

3、给数据库升级标记你想写入样板的物品,并记下放在了第几格。

利用OC实现样板的无限标记-第14张图片

4、把数据库升级放入适配器。

利用OC实现样板的无限标记-第15张图片

5、从接口终端取出一个包含你产物的处理样板。利用OC实现样板的无限标记-第16张图片

6、把这个样板放进与适配器相邻的ME接口。

利用OC实现样板的无限标记-第17张图片7、打开显示器,键入<文件名>,回车启动脚本。利用OC实现样板的无限标记-第18张图片利用OC实现样板的无限标记-第19张图片


8、依次键入你需要放入的物品数量,该物品在数据库的第几格。利用OC实现样板的无限标记-第20张图片

9、此时OC已经开始编写样板,静待片刻,等待循环完成。

10、当其弹出全新的编辑行时,代表编写已经完成。利用OC实现样板的无限标记-第21张图片

11、去me接口,取出你的样板吧。利用OC实现样板的无限标记-第22张图片

超过9格的不同物品编写

利用OC实现样板的无限标记-第23张图片显而易见,这个配方同样已经远超样板终端的9格容量,就连带师的增广终端16格也不足以把物品和流体单元同时发配出去。

当然,我们只需要对代码进行修改,同样可以编写出配方。

代码


component = require("component")  --导入包

me = component.me_interface  --变量

db = component.database  --变量


cell = 16    --从样本的第17格开始标记物品(适配带师的增广终端)

io.write("How many items in the database do you need to write into the pattern")    --数据库中标了多少个格子就键入多少个格子

nTypes = io.read("*n")    --将nTypes设定为你输入的值


for i = 1,nTypes do    --标记物品用的循环

    io.write("The number of items do you need to write into the pattern")    --让你键入需要放入的物品数量

    nItems = io.read("*n")    --将nItems设定为你键入的值

    cycles = nItems//64    --计算需循环几次(每循环一次标记64个物品)

    lastStack = nItems%64    --计算循环完成后需要额外放多少物品

    for j=1,cycles do

        me.setInterfacePatternInput(1,db.address,i,64,cell+j)  --循环cycles次,每次向样板添加一组物品

    end

    me.setInterfacePatternInput(1,db.address,i,lastStack,cell+cycles+1)  --补全剩余物品

    cell = cell+cycles+1

end


操作步骤

1、同样的编写脚本,不再赘述。

2、拿出一个样板,记下缺失的部分,放入接口。利用OC实现样板的无限标记-第24张图片

3、将数据库的前N个格子分别标记上你缺失的物品,并把数据库升级放入适配器。

利用OC实现样板的无限标记-第25张图片

这里利用流体单元存放流体一起发配。

4、启动脚本,依次写入数据库的前n个格子被标记,然后输入n次每次放入的数量。利用OC实现样板的无限标记-第26张图片

5、取出你的样板吧。利用OC实现样板的无限标记-第27张图片

试发配,完全符合装配线的顺序要求。利用OC实现样板的无限标记-第28张图片

结语

利用OC,你可以理论标记无限的物品进入样板并高度自定义,但目前代码仍有小瑕疵,希望能帮到各位,也请各位给予指点对代码进行优化。


注:代码中从第17格开始标记是考虑到GTNH的增广终端,以增加适用性。


已知bug:

1、同种物品标记数量超过32767时,将会报错停止运行。