我的世界利用OC实现样板的无限标记
前言
有朝一日,你也许会在编写样板的途中遇到这样的合成:
此时,你会发现,你的样板终端只有9个格子,根本不足以放下如此庞大数量的物品。自然,如果你对AE2有着足够的了解,你完全可以使用伪合成等方式完成这个配方。但难道……就没有别的处理方法了吗?
特别感谢
@Nyanmaid
@Neutron
游戏版本
Minecraft 1.7.10
使用mod
[AE2] 应用能源2 (Applied Energistics 2)
Opencomputers编写AE样板
Opencomputers对ME接口有着一定的代码兼容,其中就包括对接口内部的样板进行修改。
Opencomputer简要使用方法
装机
Opencomputer最基础也是最重要的一步就是配置一台像样的电脑。在本文不多赘述,请移步https://www.mcmod.cn/post/154.html查看。
这一次,我们需要的部件是机箱,显示器,键盘,适配器。
适配器
适配器 (Adapter)是OC用于与其他mod设备互动的一个方块,将其紧贴设备放置即可使OC读取到设备的信息。
示例:
打开适配器,可以看见其内部有一个升级插口,可以放入各种升级组件。
这次我们将需要放入一个数据库升级以完成接下来的任务。
数据库升级
图中分别对应基础,高级,超级的数据库升级。
手持数据库升级,右键打开,可以看到以下GUI:
这是超级数据库升级的GUI,低级的数据库升级效果不会有差异,但是可用格子会变少。本教程直接使用超级数据库升级为例。
在这81个格子中,我们都可以用背包中的物品标记其中的任意格子,比如说用红石块标记我们的第一格:
此时,红石块就已经录入了数据库升级。现在我们把标记过的数据库升级放入适配器:
此时,我们的电脑就可以通过代码调用到数据库中的数据了。
编写样板的代码
需要用代码以编写样板,我们需要了解一串代码:
component.me_interface.setInterfacePatternInput(修改ME接口中的第几个样板,数据库地址,用数据库第几号位的物品标记,标记物品数量,标记在样板的第几格)
这串代码,将是我们用OC编写样板的核心。
在OC中编写一个脚本
装机启动后,我们应该会看到以下界面:
此时,我们就可以键入edit <文件名>,来编写你的第一个脚本。
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 <文件名>,进入编辑器并粘贴代码。
2、保存并退出编辑器,回到主界面。
3、给数据库升级标记你想写入样板的物品,并记下放在了第几格。
4、把数据库升级放入适配器。
5、从接口终端取出一个包含你产物的处理样板。
6、把这个样板放进与适配器相邻的ME接口。
7、打开显示器,键入<文件名>,回车启动脚本。
8、依次键入你需要放入的物品数量,该物品在数据库的第几格。
9、此时OC已经开始编写样板,静待片刻,等待循环完成。
10、当其弹出全新的编辑行时,代表编写已经完成。
11、去me接口,取出你的样板吧。
超过9格的不同物品编写
显而易见,这个配方同样已经远超样板终端的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、拿出一个样板,记下缺失的部分,放入接口。
3、将数据库的前N个格子分别标记上你缺失的物品,并把数据库升级放入适配器。
这里利用流体单元存放流体一起发配。
4、启动脚本,依次写入数据库的前n个格子被标记,然后输入n次每次放入的数量。
5、取出你的样板吧。
试发配,完全符合装配线的顺序要求。
结语
利用OC,你可以理论标记无限的物品进入样板并高度自定义,但目前代码仍有小瑕疵,希望能帮到各位,也请各位给予指点对代码进行优化。
注:代码中从第17格开始标记是考虑到GTNH的增广终端,以增加适用性。
已知bug:
1、同种物品标记数量超过32767时,将会报错停止运行。