AE2を用いたマクロ発注の実装についての雑記
1.マクロ発注とは
マクロ発注とは、複雑な操作の手順をあらかじめ登録しておき、必要な時に簡単に実行させられる機能である「マクロ」と、自動クラフトを「発注」することを合わせた造語である。多分ロジニキあたりが言い始めたと思う。しらんけど
AE2におけるマクロ発注はその名の通り、一度の自動クラフト発注で複数種類、複数個のアイテムを加工させる手法の総称である。
2.マクロ発注を実装する意義
マクロ発注が実現することによって自動クラフトの発注に使う労力が減る事例として、上でも記述した通り、複数種類、複数個のアイテムを1セットとして自動クラフトをさせたいことが挙げられる。
具体的な例として、IC2の原子炉に使用するコンポーネントの発注が挙げられる。IC2の原子炉は同じ構成のものを複数個運用することが一般的である。環境にも左右されるが、数十基もの原子炉を運用することもある。その場合、通常は原子炉を1基増設するごとにそれぞれのコンポーネントの数量をそれぞれ指定して発注しなければならない。ここでマクロ発注機構を組むことにより、1基ぶんのコンポーネントを1度の発注でクラフトすることができるようになる。実際に動作している時の様子を以下に示す。
原子炉に必要なアイテムを一括で自動クラフトさせる機構(いわゆるマクロ発注)ができました pic.twitter.com/tNHqVbjtdI
— こめじ (@mc_5mz) May 19, 2021
これより、マクロ発注によって、自動クラフトの発注に使う労力が明らかに減っていることが分かる。
他にも、マルチブロックの機構を量産する時などに応用が利くと言える。
これがマクロ発注を実装する意義である。
3.実現手法
3.0.バージョンについて
この機構を組んだ際のバージョンはMinecraft 1.7.10、AE2-rv3-beta-6である。Minecraft及びAE2のバージョンを変えることで動作が変わることはあまりないと考えられるが、1.12.2やそれ以上の環境でこの機構を実際に組んで動作確認をしたわけではないので、その環境だとこの機構が正しく動作する可能性は100%とは言い切れない。
3.1.概要
まずマクロ発注を組んだラインのスクリーンショットを以下に示す。これは、IC2原子炉におけるチャンバー0個、クァッド燃料2本を使う構成のマクロ発注機構である。
次に、マクロ発注ラインの機構図を示す。
それぞれの番号のアイテムの設定は以下のようになっている。
丸石には識別ができるような任意の名前を付けること。
3.2.動作順序
- Macro_チャンバー0クァッド2が1つ発注されると、その材料であるC0Q2_1とC0Q2_2が発注される。
- C0Q2_1とC0Q2_2の発注で、それぞれのコンポーネントが自動クラフトされ、機構図の左のチェストに搬出される。
- チェストを読み取っているStorage Busのネットワーク内でコンポーネントの数が設定した数になると③または④または⑥のLevel Emitterが消灯する。
- 減算モードのコンパレータを用い、全てのLevel Emitterが消灯するとレバーの信号がToggle Busに伝わり、⑤または⑦のInterfaceが導通する。(コンパレータについては後述する)
- ⑤または⑦のInterfaceに指定された数だけコンポーネントが用意される。また、同時に完成品アイテムであるC0Q2_1またはC0Q2_2も同様にInterfaceに用意される。
- Interfaceにアイテムが移動するとネットワーク内のアイテム数が減るため、消灯していたLevel Emitterが再度点灯し、Interfaceが導通しなくなる。
- Interfaceに隣接しているImport Busによって、コンポーネント及びC0Q2_1またはC0Q2_2がメインネットワークに搬出される。
- C0Q2_1とC0Q2_2はMacro_チャンバー0クァッド2のクラフトに必要となるため、⑧のInterfaceから右のチェストに搬出される
- C0Q2_1とC0Q2_2が右のチェストに揃うと、⑩、⑪のLevel Emitterがそれぞれ点灯し、コンパレータによって⑫のInterfaceが導通する
- C0Q2_1とC0Q2_2とMacro_チャンバー0クァッド2が⑫のInterfaceに用意され、Interfaceが導通しなくなる。
- Import BusによりC0Q2_1とC0Q2_2とMacro_チャンバー0クァッド2はメインネットワークに搬出され、Macro_チャンバー0クァッド2がメインネットワークに搬出されたことにより自動クラフトが正常終了する。
- C0Q2_1とC0Q2_2は②のExport Busで、Macro_チャンバー0クァッド2は⑨のExport Busでマクロ発注機構の倉庫に搬出される。これにより、マクロ発注の待機状態に戻る。
3.3.コンパレータについて
この機構では、コンパレータの減算モードを用いた多入力NOR(入力を反転した際は多入力ANDとなる)を使用している。
コンパレータは先端側の小さなトーチが点灯している時に減算モードとなり、背面より受け取った信号強度から、側面より受け取った信号強度を引いた値の強度の信号を出力するという使用となる。そのため、コンパレータを連ねて置いて、最初のコンパレータの背面にレバーから強度15の信号を入力した際、どれか一つでもコンパレータの側面に強度15の信号が入力された場合、出力される信号の強度は0となる。これより、アイテムが一定数に達したときにLevel Emitterを消灯することによって、すべてのアイテムがそろった時にのみ信号を出力することができるようになる。
このコンパレータの多入力NORは、文章だけだとわかりづらいため、各自の環境で実際に動作させ、理解していただきたい。
3.4.諸注意等
今回マクロを組んだIC2の原子炉のコンポーネントはスタック不可であるため、マクロ発注を分割することとした。しかし、8スタックまでのマクロであれば(ここまでの内容が理解できている人であれば)ここで紹介したものより簡易なマクロ発注機構が組めると思われる。
この機構は決して安定な機構であるとは言えないため、組んだ際に正しく動作しない可能性もある。その場合はブロックの再設置、ワールドの再起動などを試していただきたい。
4.問題点・改善点
- Macro_チャンバー0クァッド2の自動クラフト発注を2つ以上行った場合、正しく動作する確証がない。
- 機構自体の規模が少々大きく、さらにコンパクトにできる可能性がある。
- スタック不可なアイテムを大量に要求するマクロ発注を組む際、機構が巨大化してしまう。
5.まとめ
今回は、AE2を用いたマクロ発注の実装についての記事を投稿した。この機構の実装は私が以前から挑戦したいと思っていた内容であり、今回実装に至ったことや、このような記事にまとめられたことをとても嬉しく思う。
もしこの機構でわからない箇所があったり、この記事でわかりにくい箇所があったりしたらTwitterで気軽に質問していただきたい。
ここまで長い長いマクロ発注の記事を読んでいただいてありがとうございます。
あなたのAE2ライフがより良いものとなりますよう祈っております。