= 创作分享 =
技术讨论
如何使用小乌龟为GT的电解器提供整数原料 ...
odixus

如何使用小乌龟为GT的电解器提供整数原料

odixus 于 2018-3-10 13:44 ( 6年前 ) 发表在 [教程] 分类。 [复制链接] [只看楼主] [打印]
3556 14
本贴模组名片
电脑 (Computer Craft)
[h1=简介][ban:title_menu]ComputerCraft 是一款为 Minecraft 世界增加了电脑、显示器、有线或无线网络、机器人、打印机以及其他电脑外设的模组。所有相关设备和红石信号都可以很轻松地使用 Lua 语言进行编程操作。你可以通过电脑控制红石信号(甚至支持 RedPower2 重置版的捆绑线缆..
本帖最后由 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只也够用了。见图:

  至此,摆放完成!

三、软件环境:
  • 对于新诞生的小乌龟,请务必给它起个名字,让它有保存程序的能力。右击小乌龟,键入:
    1. label set Provider
    复制代码
    好了,一只名叫 Provider 的小乌龟诞生了!顺便键入 "id",看一下它的电脑id,后面粘贴程序代码会用到。我这只的id是7。


  • 键入edit startup,开始编程。建议随便输入点什么,然后按Ctrl保存退出,再到存档目录下的computer\7里找文件startup。用我附件里的文件替换它,用任何文本编辑器都可以编辑它。请注意ComputerCraft不支持中文,所以不要自作主张加入中文注释。不知为什么代码内容上传不了,所以提供了附件。

    2.1 首先,我们先要知道需要处理的矿物是多少个一组的。这可以通过NEI很方便地查到,但是请注意:把鼠标放在矿物上,有两个信息很重要:一个是矿物的名字,一个是它的damage值:

    如图可见,铝土矿粉的名字是 gregtech:gt.metaitem.01 ,damage值是2822,一次电解需要39个。事实上所有的格雷矿粉名字都是一样的,不过考虑到可能有其它MOD乱入,还是都记下来吧。然后我们来建一个表格,把这些记录下来,小乌龟要靠这个来为矿粉分组:
    1. dustData={
    2.   {name="gregtech:gt.metaitem.01",damage=2822,count=39},
    3.   {name="gregtech:gt.metaitem.01",damage=2607,count=11}
    4. }
    复制代码
    后面依次增加。各小乌龟的程序里只有这一部分是不同的,要针对处理的矿物做出修改。

    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倍效率。
  • 提供了工作流程显示,可以方便地看到当前工作进度。


评分

参与人数 1RF +1 收起 理由
重生是希望 + 1 检查了一下代码段并未发现问题 如问题可以重现请发issue~

查看全部评分

发表于 2018-3-10 13:44:50 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

回复 | 举报

该帖共收到 14 条回复!
odixus
本帖最后由 odixus 于 2018-3-10 14:32 编辑

当我上传代码段的时候,出现了关于网址错误的提示。试了好多次也没有解决,只好把文件直接上传成附件了。
发表于 2018-3-10 14:15:32 | 只看该作者

回复 | 举报

smilesadness
建议CC高玩做一套从零开始的CC教程,CC崛起需要你。
AE把ME端口的“有物品时阻挡”按钮打开就可以固定数量输出了吧?在ME端口缓存固定数量的物品用一次一组的抽取器似乎也可以;GT机器输出端/覆盖板也能调整数量(对粉宝具)。
3月学雷锋@重生是希望
发表于 2018-3-10 16:10:29 | 只看该作者

回复 | 举报

odixus
smilesadness 发表于 2018-3-10 16:10
建议CC高玩做一套从零开始的CC教程,CC崛起需要你。
AE把ME端口的“有物品时阻挡”按钮打开就可以固定数量 ...

1. AE端口的”阻拦模式“是对于合成时输出物品用的,这和我提出的第4种方法是一回事。因为通过合成模板进行输入本身就对物品定量了。出问题的地方在于有不少原料找不到唯一的产物做标识,这样不利于自动合成。
2. ME端口缓存物品确实可以成组送出物品,但还是存在”零头“的问题,就是成组的物品送完后,余下的零头仍然会出现在缓存区,结果也会进入电解机。这其实和用管道直接输送没有实质区别。
3. 覆盖板(机器臂)也考虑过,确实也有效。但是一个覆盖板只能对应一种原料,好吧,有一些的分组数量相同,那也只能对应几种。结果是省了电解机,但是需要一大堆物流和管道,还需要大量的覆盖板,总的算下来还不如用校准器算了。而且布线极为困难,我是做了一半就做不下去了。
总的来说,在上手CC之前,确实没有一种方法能够如此简洁、如此有效,还如此经济。
发表于 2018-3-10 16:59:19 | 只看该作者

回复 | 举报

sxjeru
附件收费可以传到网盘,然后分享链接。
这儿用的我的网盘,拿去代替附件吧:http://o8zwoo6sz.bkt.clouddn.com/mc%E7%99%BE%E7%A7%91/startup.rar
return 0;
发表于 2018-3-10 22:19:27 | 只看该作者

回复 | 举报

odixus
sxjsxj 发表于 2018-3-10 22:19
附件收费可以传到网盘,然后分享链接。
这儿用的我的网盘,拿去代替附件吧:http://o8zwoo6sz.bkt.clouddn. ...

多谢多谢。已经添加了。
发表于 2018-3-10 22:53:00 | 只看该作者

回复 | 举报

odixus
smilesadness 发表于 2018-3-10 16:10
建议CC高玩做一套从零开始的CC教程,CC崛起需要你。
AE把ME端口的“有物品时阻挡”按钮打开就可以固定数量 ...

  仔细想了一下制作教程的可行性,发现基本不可行:这个MOD本身其实非常简单,难度全在编程上。如果真的写教程,写到最后会是一个编程的培训——这样的材料其实网上到处都有。所以,会的人不用教也会,不会的人根本不是在这里教得会的:他们需要学的知识不在这里。
  我只能尽量提供一些有趣的设计和成品,希望大家能喜欢。一些简单的东西大家可以直接作为成品使用,复杂一些的欢迎大家提出讨论。包括一些需求,如果我能做得到也会尽量去写。
  最后,还是请感兴趣的人去wiki仔细读一下教程:写得真的很好!我用了整整2天,全文仔细读了一下,收获非常大。特别是metatable那一部分,相当启发。
发表于 2018-3-10 23:16:04 | 只看该作者

回复 | 举报

smilesadness
odixus 发表于 2018-3-10 23:16
  仔细想了一下制作教程的可行性,发现基本不可行:这个MOD本身其实非常简单,难度全在编程上。如果真 ...

我把OC和CC搞混了,看了一下CC的内容,的确除了lua也没什么了/撕烤/啪
发表于 2018-3-11 08:47:55 | 只看该作者

回复 | 举报

YoungGT
话说为什么不放在编程讨论呢?
我和谁都不争,和谁争我都不屑。简朴的生活、高贵的灵魂是人生的至高境界。
发表于 2018-3-11 10:14:21 | 只看该作者

回复 | 举报

中兴安岭
电解机不贵的,一个机壳+两个电路而已。
发表于 2018-3-11 17:14:54 | 只看该作者

回复 | 举报

12下一页
百科目前不允许匿名发帖哦~ 请先 [ 登陆 ][ 注册 ] 吧~

本版积分规则

发新帖
  • 回复
  • 点评
  • 评分

[ MC百科(mcmod.cn) 除另有声明,所有开放公共编辑的内容均使用 BY-NC-SA 3.0 协议 ]

Minecraft百科CC协议
快速回复 返回顶部 返回列表