本帖最后由 odixus 于 2018-3-13 09:55 编辑
ComputerCraft这么好的MOD,当然需要大力推广!再来一个教程!
![]()
如果请被大格雷摧残到体无完肤的史蒂夫为格雷的各种设备打个分,那么最不友好的设备中一定有电解机!因为它的原料绝大多数是n个一组,如果数量不够就会卡住机器,让后面别的原料也进不来。这让我们这些崇尚自动化工业的强迫症们如何能忍!那么,有没有什么解决方案呢?
别说,还真有,而且不止一种。下面是我试过的几种方案:
- 最简单的方案当然是一个原料一个机器。但就算是有成吨钢材的史蒂夫也不能坦然面对了:常用的需要电解的原料大概有30种,难道要为电解这一道工序专门建个工厂?所以我只建了一个专门的电解机:钨!它需要氢,而且需要电压最高,所以单做了一个电解机。
- 第二个方案是使用打包机/解包机,但这不仅仅需要浪费大量的打包材料,还需要切换图纸,一点也不轻松。我略加尝试就放弃了这个方案。
- 使用校准器。一个校准器能处理9种矿物,但是实在太贵了!而且低压校准器的效率低到令人发指。纯格雷的玩家可以用这个。
- 使用AE的自动合成功能:建一个子网,包括存储、输出两个部分。需要电解的原料送到子网单独存储,连接电解机的ME接口里放合成模板。模板中对多产物标记一种即可,最好是特有产物,如烧绿石粉Ca2Nb2O7标记铌Nb(烧绿石粉*7=铌*2),然后在一个容器上放一个ME输出总线,设置为:
输出内容是电解产物,使用合成卡令其自动合成。容器中的电解产物送回主网。这个办法解决了一大半的电解问题,但是有一些原料没有特定的产物,这就无法标记了,比如产量非常大的铁铝榴石、镁铝榴石、钙铝榴石,产物都与别人雷同。好吧,这个方案至少实现了”半自动“,是我接触ComputerCraft以前的最优解决方案。
然而,这一切在强大的CC面前都不是事儿!下面,我们一步步来看是如何解决这个小问题的。
老规矩,先上图:
管道、电线什么的只是个示意,请不要在意这些细节。
一、运行环境:我的游戏环境是MineCraft1.7.10 + ComputerCraft 1.75 + ProjectRed 4.7.0pre12.95 + GregTech5.09.31
二、硬件环境:
- 任意电解机×1,管道和电线请自行配好。后期可以换成处理阵列的输入仓。
- 两个箱子的作用:电解机边上的箱子是为了避免对”输出失败“的处理。连接ME存储总线的箱子是为了防止原料处理速度跟不上存储总线的输出。
- 高级小乌龟一个!材料很省的哦。
- 按图所示摆放好。ME存储总线中标记要电解的原料。电解机面对箱子的一面请贴上传送带,并用螺丝刀右击设置为”输入“。小乌龟的正面(有一只细长的眼睛?)对着箱子。小乌龟不用补充燃料,它不需要移动。
- 一只小乌龟有16格空间,这意味着它最多可以同时处理16种材料。上面提到过常用的电解材料大约有30种,那么一般来说2只小乌龟就可以完美解决。如果强迫症患者非要处理掉所有材料,最多3只也够用了。见图:
至此,摆放完成!
三、软件环境:
- 对于新诞生的小乌龟,请务必给它起个名字,让它有保存程序的能力。右击小乌龟,键入:
好了,一只名叫 Provider 的小乌龟诞生了!顺便键入 "id",看一下它的电脑id,后面粘贴程序代码会用到。我这只的id是7。
- 键入edit startup,开始编程。建议随便输入点什么,然后按Ctrl保存退出,再到存档目录下的computer\7里找文件startup。用我附件里的文件替换它,用任何文本编辑器都可以编辑它。请注意ComputerCraft不支持中文,所以不要自作主张加入中文注释。不知为什么代码内容上传不了,所以提供了附件。
2.1 首先,我们先要知道需要处理的矿物是多少个一组的。这可以通过NEI很方便地查到,但是请注意:把鼠标放在矿物上,有两个信息很重要:一个是矿物的名字,一个是它的damage值:
如图可见,铝土矿粉的名字是 gregtech:gt.metaitem.01 ,damage值是2822,一次电解需要39个。事实上所有的格雷矿粉名字都是一样的,不过考虑到可能有其它MOD乱入,还是都记下来吧。然后我们来建一个表格,把这些记录下来,小乌龟要靠这个来为矿粉分组:
- dustData={
- {name="gregtech:gt.metaitem.01",damage=2822,count=39},
- {name="gregtech:gt.metaitem.01",damage=2607,count=11}
- }
复制代码 后面依次增加。各小乌龟的程序里只有这一部分是不同的,要针对处理的矿物做出修改。
2.2 小乌龟从上面的箱子中把原料吸进自己的肚子里面,直到把上面的箱子吸空或肚子吸不下:见附件中的toSuck()。
如果没有吸到任何东西,就返回false。
2.3 肚子的矿物可能摆放不整齐,特别是在已经吐出去一部分的情况下,比如铝土矿粉一堆是15一堆是25,虽然总数40大于39,但是每一堆都不够用,这时需要排一下序。这就用到函数toSort()。
这个函数对于指定的位置进行排序:如果当前位置是空的,就从后面找一个最近的原料放过来;如果有原料但是不满,就从后面所有原料中找同类,如果有就移过来,直到放满或找不到为止。如果后面没东西了,就返回false。
2.4 至此,准备工作已做好,可以把眼前已经整理好的原料送出去了。见附件中的main program 段。
根据我们上面录入的表格对当前格里的矿粉进行判断,如果数量大于一份,就送出去一份,直到数量不够为止。需要注意那些不在表格中的矿粉乱入,我的程序是直接跳过了,矿粉留在小乌龟肚子里,这样可能会导致小乌龟可处理的矿粉种类变少。如果在小乌龟的下方放一个箱子,可以用"turtle.dropDown()"函数扔下去,以免影响正常工作。
- 文件保存好后,启动小乌龟,键入"startup",小乌龟就开始自动筛选矿粉并送进面前的箱子。箱子只要够大,就不会有任何错误发生,送进箱子里的矿粉一定是数量刚刚好的!这个文件是自动启动运行的,每次进入游戏的时候小乌龟就会认认真真地开始工作。可爱吧~~
- 所有的代码都是我自己独立完成的,包括英文注释。我的英文不怎么样,如果有什么语法错误请不要在意这些细节~ 大概意思到了就好。
四、结论
如前所述,ComputerCraft是一个非常强大的工具,可以轻易完成很多需要大量红石电路或检测工具才能做到的事情。在这里电解机需要复数原料的问题得到了很好解决,离心机也有一些需要复数材料的,如朱砂粉(×2)、沥青铀矿(×5)、玄武岩粉(×16)也可以处理。这就大大提高了我大格雷的自动化水平!
下一步我会尝试用ComputerCraft来解决装配线的多材料问题。16个格子,足够用了!等我想好了再写。
希望大家开发出更多有趣的工具来!
PS: 多谢sxjsxj的帮忙,提供了附件的网盘下载:startup.rar
版本更新:2018.3.13 增加一个配套的工具:addDust.rar。其作用是用来增加/修改筛选规则。也是放到小乌龟对应的程序文件目录中。手残党的福音,不需要再手动改文件了。
用法:
- 右键点击小乌龟,可以看到小乌龟正在工作。请按 Ctrl + T 一秒钟以上,此时小乌龟会停止工作。
- 清空小乌龟肚子里所有物品(推荐扔回源箱子),然后把要添加的物品放在格子里。键入“addDust”并回车运行,你放的物品就被记录了。例如要添加钨酸锂粉,就把7个钨酸锂粉放在任一格子里。可以同时放置多种物品,会一并记录。如果当前物品已经被记录过,就会把电解数量改成你放的数量。如果没有该物品,就会被添加进去。
- 物品记录完成后,或是键入“startup”以启动原程序,或是长按 Ctrl + R 一秒钟以重启小乌龟,都可以让小乌龟再次进入工作。
2018.3.12 startup.rar
- 拆分文件为三部分:dustData是数据部分,provide是主程序,startup仅负责启动provider。大家只需要修改dustData内容,这样可以避免手残党不小心改动主程序。同时也方便在startup中添加更多其它的启动工具。
- 优化了物品的查找和传送方法,大大提高了效率。实测下比原程序大约能提升10倍效率。
- 提供了工作流程显示,可以方便地看到当前工作进度。
|