ねじを巻け!!

いつか思い出すために記事を書いています。

初心者向け Integrated Dynamics を使った倉庫ネットワークと自動クラフト機構の作成(Minecraft 1.20.1 MOD)

 この記事では、Integrated Dynamics (略称は「IDs」)とその関連MODである Integrated Tunnels、Integrated Crafting、Integrated Terminal を使って、倉庫ネットワークと自動クラフト機構を構築する方法について説明します。対象は初めてIntegrated Dynamicsを触る、もしくはこれから触ってみたいという初心者以上となっています。プログラミングに触れたことがない、苦手意識がある方でも付いていけるよう、画像をたくさん用いて、できる限り丁寧に解説しています。Integrated Dynamics のチュートリアルにもなりうるかもしれません。

 Applied Energistics 2 や Refiend Storage でもいいですが、Integrated Dynamics シリーズでも倉庫ネットワークを作れます。選択肢があることはいいことですので、作り方をみていきましょう。

 使用する環境の本体バージョンは1.20.1です。

 今回導入して使用する Integrated Dynamics シリーズのMODは「Integrated Dynamics」「Integrated Crafting」「Integrated Terminals」「Integrated Tunnels」の4つです。シリーズはこの他に、「Integrated REST」(1.21.1まで対応)「Integrated NBT」(1.19.2まで対応)「Integrated Proxy」(1.18.1まで対応)「Integrated Additions」(1.16.5まで対応)といったアドオンがありますが、この記事では扱いません。アドオンは必要に応じて導入してください。なお各バージョン対応状況の表記は全て記事執筆時点のものとなります。

 また、各アイテムの日本語訳は公式ではなく、筆者によるものです。

www.curseforge.com

 

 

 

(1) この記事の目的

 この記事では、Integrated Dynamics シリーズを使って、倉庫ネットワークと自動クラフト機構を(できるだけ簡単な仕組みで)作成する手順を説明することを目的としています。

 Integrated Dynamics シリーズは、複雑かつ高度な制御を中心にいろいろなことができるMODです。ただしその多機能さゆえ、筆者のような素人には、では具体的に何ができるのか、何が役に立つのか、完全には把握できておりません。英語のチュートリアルやマニュアルは丁寧に用意されていますが、なかなか理解が追い付きません。

 その多機能さと柔軟さを示す例として、Integrated Dynamics シリーズの一つ、Integrated Tunnels のマニュアルの中にはこんな一文があります(日本語文は筆者が用意)。

I want to send 3 enchantable pickaxes with a damage value less than 10 to this chest every tick" or "I want to fill this tank until it has 1000mB of oil, but only when my machine is working and if I have less than 10 iron ingots in this chest" No problem! Integrated Tunnels can do that for you, and it will do it efficiently as well!

(「ダメージが10以下のエンチャント可能なツルハシを毎Tickこのチェストに3つ送りたい」とか、「このタンクのオイルを1000MBになるまで満タンにしたいが、機械が動いているときと、このチェストに鉄インゴットが10個以下しかないときに限る」とか! Integrated Tunnelsがそれをやってくれる!)

integrateddynamics.rubensworks.net

 「その複雑な操作を自動化したいと思ったときに実現できる」という選択肢があるのはありがたいのですが、筆者はこの例のような複雑な制御をしたいと思ったことは今までにありません。ある程度の制御は他のMOD(MekanismやRefined Storage、Industrial Foregoing など)で解決できているともいえます。

 その一方で、Integrated Dynamics シリーズを使って、複雑な制御や設定を行わなくとも利用できるものもあります。ここでは、Variable Card と Logic Programmer を駆使して超ピンポイントで特殊な制御をする設定を紹介するのではなく、もう少し簡易ですが実用的で汎用性の高いものをつくることができるということを紹介することを目的としています。

 

(2) 基本的な倉庫ネットワーク

最低限の構成

 まずは最低限の構成で倉庫ネットワークを組みます。

最小限の構成
用意するもの
  • チェスト
     複数個
  • Logic Cable(以下、ロジックケーブル)
     複数個
  • Item Interface(以下、アイテムインターフェース)
     複数個・チェストの数に応じる
  • Storage Terminal(以下、ストレージターミナル)
     1個

各アイテム配置図

 最低限の構成なので、これだけ設置して完成です。

 

使い方

 設置したストレージターミナルを右クリックすると、Applied Energistics 2 や Refiened Storage などでおなじみの、大きなグリッドが表示されます。複数のチェストの中身をまとめて表示してくれます。グリッドの大きさやアイテムの並び順も変更可能です。

 左上にはタブが表示されています。このタブを切り替えることで、クラフトグリッドを表示させることも可能です。

(左)Storage Terminal のGUI (右)クラフトグッドを表示した状態

チェストにアイテムを入れて、Storage Terminalから見た状態

 

遠隔からアクセスする

 倉庫の中身を見るのに、いちいちストレージターミナルを見に行くのは面倒です。そこで、どこからでも倉庫ネットワークにアクセスできるようにしましょう。

 

用意するもの
  • Omni-Directional Connector(以下、全方向コネクター
     1個
  • Portable Storage Terminal(以下、ポータブルストレージターミナル)
     1個

 なお、全方向コネクターの作成にはコーラスフルーツが必要になります。序盤から使用するのは難しく、サバイバルではエンドに到達した後で使えるものとお考えください。

Omni-Directional Connectorを設置する

 全方向コネクターは倉庫ネットワークに繋がっているロジックケーブルに接続してください。ケーブルに繋がってさえいれば、向きや場所はどこでも構いません。

 

使い方

 ポータブルストレージターミナルを持って、全方向コネクターに右クリックしてください。「Linked to network」と表示されたら準備完了です。

ポータブルストレージターミナルを持って、全方向コネクターに右クリック

 あとは倉庫ネットワーク本体がチャンクロードされている限り、どこでも、異なるディメンションを跨いでも、ポータブルストレージターミナルがあればアクセスできます。

背景が見にくいが、ネザーから倉庫ネットワークへアクセスしている

 

Mekasnismのビンを追加する

 Mekanism のビンとは一種類のアイテムを大量に保管できるブロックです。ポーションなど通常はスタックできないアイテムもまとめて収納できます。Storage Drawers というMODのドロワー、Industrial Foregoin の Black Hole Unit(本体バージョン1.21.1対応版以降は廃止)と機能は似たようなアイテムです。

 今回は例として、倉庫ネットワーク内にある木炭を全て一つのビンに収納するようにしましょう。

 

用意するもの
  • Mekanism ビン
     1個
  • アイテムインターフェース
     1個
  • Item Exporter(以下、アイテムエクスポーター)
     1個
  • Variable Card(以下、変数カード)
     1個

アイテムエクスポーター、アイテムインターフェースを設置

 ビンにはあらかじめ保管するアイテム(今回は木炭)を入れておいてください。

 ビンはどの面からでも搬出入できるため、アイテムエクスポーターとアイテムインターフェースの位置はどこでも構いません。

 

アイテムエクスポーターの設定

 この状態だけでは、木炭はビンへ収納されることはありません。アイテムエクスポーターの設定が必要です。

 アイテムエクスポーターを右クリックして、GUIを開いてください。

アイテムエクスポーターのGUI

 なにやら見慣れない画面が出てきましたが、逃げないでください。

 今回は作成した変数カードを何もいじらず、アイテムエクスポーターのGUIの一番上の段の「Export All Items」の右側のスロットに入れるだけで大丈夫です。「+」ボタンも押す必要はありません。

 変数カードを入れたスロットの右に緑色のチェックマークが出たら、完了です。画面を閉じてください。

 他のチェストに入っていた木炭が、ビンへまとめて収納されてゆきます。

 

 今の設定を細かく見ると、実は「倉庫内の全てのアイテムをビンに排出する」設定になっています。ただ、ビンには一種類のアイテムしか入らず、最初に木炭が入っていればそれ以外のアイテムは入れないため、これでも問題ありません。

木炭がビンに収納される

 ビンの中の木炭は、ストレージターミナルからも見ることができ、手動で出し入れもできます。なおこの繋ぎ方をすると木炭がエクスポーター、ビン、インターフェースを経由して循環してしまうため、ネットワーク上の表示される個数が安定しないことがありますが、仕方ありません。

 

 アイテムエクスポーターには優先度の設定もできます。アイテムエクスポーターのGUIを開いて、左上にある「Part Settings」のボタンを押してください。

Parts Settings

 下から二段目の「Priority」の数字を上下させ、「Save」ボタンを押すことで、優先度設定が変化します。

Priorityの設定変更

 木炭を優先的にビンへ収納するため、ビンに取り付けたアイテムエクスポーターの優先度設定は高めに設定しておいた方がよいかもしれません。

 

ビンの設定

 ビンの中の木炭はストレージターミナルから取り出すこともできますが、すべての在庫を取り出してしまうとビンの中身の設定が解除され、他のアイテムが収納される可能性があります。そこで、ビンの中身のアイテムを木炭に固定します。

 固定する方法は、ビンの正面に対して素手でシフト右クリックするだけです。これによりビンに表示される数字が白色から青色へと変化し、ビンの中身がロックされます。ビンの中身が0個になっても、設定したアイテム以外、搬入を受け付けなくなります。もしビンの中身をロックしていないと、中身が0個になったときアイテム表示は消えて、どのアイテムでも搬入可能になります。なおロックを解除するには、ロックするときと同じように正面を素手でシフト右クリックしてください。

(左)中身をロックしていないビン (右)中身をロックしたビン

 Storage Drawers のドロワーを使っている場合は、Storage Key という中身をロックするアイテムがありますので、それを使って中身を固定してください。

 

インベントリに指定した一種類のアイテムを排出する

 上ではビンを使ってアイテムを収納しましたが、普通のチェストや樽に保存したい場合もあるでしょう。ここでは一つのアイテムをきちんと指定して、そのアイテムだけを特定のチェスト搬出するようにします。

 

用意するもの
  • チェストや樽など
     1個
  • 見本となるアイテム
     1個(今回は木炭)
  • アイテムエクスポーター
     1個
  • 変数カード
     1個
  • Logic Programmer(以下、ロジックプログラマー
     1個
  • (必要な場合)アイテムインターフェース
     1個

 ロジックプログラマーは変数カードに情報を書き込むための専用機器です。今後も使用しますが、消耗品やインターフェースごとに必要なものではありませんので、拠点に一つあれば十分です。

樽にアイテムエクスポーターとアイテムインターフェースを取り付けた

ロジックプログラマーはこれです

 ロジックプログラマーは、倉庫ネットワークのロジックケーブルに接続している必要はありません。お好きなところに設置して使ってください。

ロジックプログラマーを使った設定

 ロジックプログラマーGUIを右クリックで開いてください。

ロジックプログラマーGUI

 なんだかまた見慣れない画面とたくさんの文字、短いスクロールバーが表示されましたが、全部見ようとしなくても問題ありません(詳しい話をすると、左側には設定できるプログラムの「型」の一覧が並んでいます)。

 左側にある「Item」と書かれた段をクリックすると、真ん中に一つだけスロットがあるGUIが表示されます。ここに搬出したいアイテムを見本として一つ入れてください。あくまで見本なのでアイテムは消費されませんが、スロット上にアイテムが残っていればokです。

「Item」段をクリックして真ん中のスロットに木炭を登録

 続いて、右下にあるスロットに、新しい変数カードを一枚入れてください。このカードは見本ではありませんので、新しいものが1枚必要です。一度カードを置くと、カードの見た目が少し変化します。これで変数カードに木炭の情報が書き込まれました。この変数カードを①のカードとします。

変数カードをセットして、見た目が変わった

①のカードのツールチップ

 ツールチップには「WARNING」と警告が表示されていますが、これはアイテムをホイールクリックで複製可能なクリエイティブモードで試作しているために表示されています。サバイバルでは表示されませんし、クリエイティブモードでも情報を書き込まれた変数カードをホイールクリックで複製しなければ問題ありません。変数カードをコピーする方法は後述しています。

 

 それでは、作成した①のカードを、アイテムエクスポーターへ挿入します。

 アイテムエクスポーターのGUIを開き、上から4段目の「Export Item」と書かれた段のスロットに①のカードを入れてください。

①のカードを4段目に入れる

 これで完了です。しばらくすると、樽に木炭が収納されます。

樽に木炭が収納された

 今回は樽にアイテムインターフェースを取り付けているので、ストレージターミナルからも木炭を確認できます。もし樽にインターフェースを取り付けていない場合、ストレージターミナルからはこの樽に収納された木炭を確認できません。

ストレージターミナルからも木炭を確認できる

 

チェストに複数種類のアイテムを搬出する

 上では一種類のアイテムを樽へと収納しました。ですが実際は複数の種類のアイテムを一つのチェストに収納するようにしたい場合もあるでしょう。今度は複数種類のアイテムをアイテムエクスポーターから搬出しましょう。

 

用意するもの

 基本的には単一アイテムを搬出する場合と同じです。

  • チェストや樽など
     1個
  • 見本となるアイテム
     1種類につき1個(今回は鉄インゴットと金インゴット)
  • アイテムエクスポーター
     1個
  • 変数カード
     1個
  • ロジックプログラマー
     1個
  • (必要な場合)アイテムインターフェース
     1個

 設置方法は一種類のアイテムの搬出のときと同じです。

 

ロジックプログラマーを使った設定

 ロジックプログラマーGUIを開いて、左側のスクロールバーを動かして「List」と書かれているところを探してください。左上の検索ボックスから「list」と入れて検索もできます。

「List」の項目をクリック

 「List」のボタンをクリックすると、上部にボタンや文字の表示があるGUIが表示されます(細かい話をすると、これで「List型」の設定をすることになります)。

「List」のボタンをクリックしたところ

 上のスロットと左右矢印のボタンは、リストに登録するものの種類を選択できます。Item、Block、Integer(整数値)など、リストの中にもいろいろ種類があるのです。

 今回は「鉄インゴット」と「金インゴット」の2種類のアイテムを登録しますので、ここは「Item」に設定します。左右のボタンを押して、「Item」を探してください(一種類のアイテムを搬出する際に最初に押した「Item」のボタンとは違いますので注意してください)。

 右上の「+」ボタンを押すと、リストの中に含まれる項目を追加できます。なお「-」を押すと、リストに含まれる項目を削除できます。

「List型」のなかの「Item」を選択する

 それでは、まずは一種類目のアイテムとして「鉄インゴット」をリストに登録します。「+」ボタンを押すと真ん中にスロットが現れるので、見本として鉄インゴットを真ん中のスロットにかざすと、鉄インゴットが登録できます。

まずは一種類目として鉄インゴットを登録できた

 次に、もう一度右上の「+」ボタンを押して、リストの項目を追加します。同じように「金インゴット」を真ん中のスロットにかざして、登録できます。

二種類目のアイテムとして金インゴットも登録できた

 これで登録したい二種類のアイテムを登録できたので、新しい変数カードを右下に入れて、情報を登録します。ここで作った変数カードを②のカードとします。

②のカードのツールチップには「鉄インゴット」しか表示されていないが
「金インゴット」も登録されている

 作った②のカードは、アイテムエクスポーターに入れてください。一種類のアイテムの時は4段目の「Import Item」のスロットに入れましたが、リスト型で複数種類のアイテムがあるときは、5段目の「Import Items」に入れてください。

②のカードを上から5段目に挿入

 以上で完了です。

 倉庫ネットワーク上の適当なチェストにインゴットを入れて、樽を確認すると、鉄インゴットと金インゴットが収納されます。

鉄と金のインゴットが収納された

 今回はアイテムインターフェースを取り付けているのでストレージターミナルからもインゴットを確認できますが、アイテムが循環している関係で表示や数値がちらちら動きますが、仕様です。アイテムインターフェースを外せば表示のちらつきは無くなりますが、ストレージターミナルからは樽の中身にアクセスできなくなります。

 

(3) 自動クラフト機構

 ボタン一つで指定したアイテムを作ってくれる、自動クラフトシステムを作ります。

 作業台でできるレシピと、かまどや他の工業化MODの機械などを使ってできるレシピの、二つのパターンがありますので、それぞれ分けて説明します。

 

作業台レシピ

 まずは作業台を使ったレシピを登録して、1回のボタンクリックで必要量を発注できるようにしましょう。

用意するもの
  • バニラの作業台
     1個
  • Crafting Interface(以下、クラフティングインターフェース)
     1個
  • ロジックケーブル
     複数個
  • 変数カード
     複数個(登録するレシピ数に応じる)

 作業台に対して、クラフティングインターフェースをシフト右クリックで張り付けてください。場所は上下でも横でも構いません。

作業台にクラフティングインターフェースを張り付けた様子

 続いて、クラフティングインターフェースにロジックケーブルをつなげて、倉庫ネットワークのケーブルに接続してください。

クラフティングインターフェースが向かって左側に取り付けられている
ここにロジックケーブルを繋げる
レシピの作成と登録

 自動クラフトのためには、事前にアイテムのレシピを登録する必要があります。他の倉庫MODでは専用のレシピカードに登録するものもありますが、Integrated Dynamics では、レシピも変数カードに記録します。

 まずはロジックプログラマーを開いて、左側の型一覧から「Recipe」とあるところを探して、表示してください。

Recipeの型のGUI

 レシピの登録には、自分で見本を一つずつ提示して登録する方法のほか、JEIから登録する方法もあります。普通の作業台のように左側に材料、右側に完成品を登録します。

 下にも枠や数字、RFと書かれた項目がありますが、今はこちらは気にする必要はありません。

 今回は例として、オークの原木1個→オークの板材4個のレシピを登録することにしました。通常の作業台で作るのと同じように見本を設置するか、JEIからレシピを引用します。レシピが登録出来たら、右下に新しい変数カードを入れて、レシピを登録します。オークの板材のレシピを登録した変数カードを、③のカードとします。

 

オークの板材のレシピを登録した

 ちなみに、変数カードを入れるスロットの左にある「E」のボタンを押すと作成した変数カードに名前を付けられます。出てきた枠に文字列を入力でき、それが取り出したときに変数カードの名前になります。

変数カードにわかりやすい名前を付けた

 この調子で、板材4個→作業台1個、オークの板材4個と棒2個→オークのフェンス3個、板材2個→棒4個の、合わせて4種類のレシピを作成しました。それぞれのレシピを登録した変数カードは④、⑤、⑥としています。

 

 では、作成した4枚の変数カードをクラフティングインターフェースに挿入します。

 作業台に取り付けたクラフティングインターフェースのGUIを開くとスロットが9つあるので、4枚を挿入してください。スロットの下に緑色のチェックマークが表示されればレシピは無事に認識されています。

クラフティングインターフェースのGUI

レシピ登録した変数カード4枚を入れる

 なお、クラフティングインターフェースの画面を開いて左シフトを押している間は、変数カードは登録したレシピの完成品の表示に切り替わります。

シフトを押した状態

 ストレージターミナルを開くと、登録したレシピが表示されているはずです。

レシピ登録されたアイテムが表示されている
Crafting Job Terminalの設置

 Crafting Job Terminal(以下、クラフティングジョブターミナル)をロジックケーブルに接続すると、現在のクラフト進行状況を確認できます。お好みで好きな場所に取り付けてください。

クラフティングジョブターミナル

 

クラフト注文

 ではレシピ登録したアイテムを注文してみましょう。今回はオークのフェンスを90個注文します。

 ストレージターミナルを開いて、オークのフェンスをクリックしてください。注文画面が表示されるので、数字を調整してください。

注文画面

 この時注意するのは、「入力する数字は最終的な個数ではなく、注文する単位(セット数)」だという点です。注文画面では「30」と入力していますが、最終的に出来上がるオークのフェンスは90個になります(左側の完成スロットに小さな数字で90と表示されています)。これは、最低限の板材4個と棒2個による1回のクラフトでオークのフェンスは3個で作成できるためです。

 Refined Storage の自動クラフト注文であれば30と入力すれば30個のオークのフェンスを作成しますし、31個と注文すれば(最小単位が3個であるため)最終的に33個作成されます。

 Integrated Dynamics の注文システムはRefined Storage とは異なるので注意してください。

 

 個数を確定して、Nextボタンを押すと、最終確認画面が表示されます。ここでCraftボタンを押せば、自動クラフトが開始されます。

最終確認画面

クラフトツリー表示もできる

 クラフティングジョブターミナルを設置している場合は、進行状況を確認できます。

クラフト進行状況
倉庫の材料(原木)が使用され、フェンスが作成された

 

かまどレシピ

 次に、かまどを使ったレシピを登録してみます。これができれば、他の工業化MODの機械にも応用できるため、活用の幅が広がります。

用意するもの
  • かまど
     1個
  • クラフティングインターフェース
     1個
  • アイテムエクスポーター
     1個
  • Item Importer(以下、アイテムインポーター)
     1個
  • 変数カード
     3個
  • ロジックケーブル
     複数個

かまどにクラフティングインターフェースを取り付ける
各インターフェースの設定

 アイテムインポーターはインベントリからアイテムを吸い出して、ネットワークへと搬入することができます。

 今回はかまどで精錬された完成品をすべてネットワークへ搬入したいので、アイテムインポーターのGUIを開いて、何も書き込んでいない新しい変数カードを1段目の「Import All Items」のスロットに挿入してください。これにより、完成品はどのアイテムであろうと関係なく吸い出してくれます。

アイテムインポーターのGUI

 アイテムエクスポーターは、かまどの燃料を倉庫ネットワークから搬出するために使用します。

 今回は木炭を燃料にします。一種類のアイテムを搬出する方法はすでに紹介しましたので、省略します。

ロジックプログラマーで木炭を登録

アイテムエクスポーターに木炭を登録した変数カードを挿入

 これで常にかまどに燃料として木炭が用意されている状態になります。

 

 クラフティングインターフェースには、かまどで原木を木炭にするというレシピを登録して挿入します。

 まずはロジックプログラマーで、下図のようにレシピの登録を行います。材料スロットと完成品スロットの関係は作業台のレシピと同じです。JEIからの引用でもいいですし、原木と木炭の見本を一つずつ、手動で提示して登録してもいいです。レシピができたら、変数カードにレシピを登録してください。

原木を木炭にするレシピ

変数カードには「木炭精錬」という名前をつけた

 レシピを登録したカードは、かまどに取り付けたクラフティングインターフェースに挿入してください。

クラフティングインターフェースにカードを挿入
左シフトを押すと、(左)から(右)の状態になり、レシピの完成品が見える

 以上でクラフトレシピの登録は完了です。

ストレージターミナルを開くと木炭のクラフトボタンが表示された
クラフト(精錬)注文

 木炭のクラフト(精錬)注文を出してみます。

 発注方法は通常のクラフトと同じです。木炭のクラフトボタンを押して、必要量を入力して、確認して注文です。

注文画面と最終確認画面

無事に原木が搬入され、木炭が作成される

 

 

電動精錬機を使ったレシピ

 かまどは燃料が必要ですが、電動精錬機は電気で動きます。電力ケーブルを接続すれば動作するので、燃料を送り込むためのアイテムエクスポーターを設置する必用はありません。

 Mekanismの機械は搬出入口を選択できるのでそれに合わせた向きに設置してください。下図では電動精錬機の上から搬入、向かって左へ搬出する設定にしています。クラフティングインターフェースを上に設置、左側へアイテムインポーターを設置しました。

電動精錬機の配置

 あとの設定は、バニラのかまどに対して行ったことと同じです。

 

(4) 在庫補充システムの構築

 これまではオンデマンドの自動クラフト、つまりプレイヤーが必要だと判断して必要量を発注したら、自動クラフトしてくれるシステムを作成しました。

 では今度は、在庫の量を自動で把握して、足りなくなったら自動で発注して、補充してくれるシステムを作成しましょう。これにより、指定したアイテムが常に倉庫内に一定量用意されている状態をつくれます。

 今回の例では、木炭の在庫を一定数以上に維持する、在庫管理と在庫補充のシステムを作ります。原木の精錬はMekanismの電動精錬機を使用します。

 

 ここからは複数枚の変数カードを扱うため、複雑さが増すパートになります。可能な限り易しく説明しますが、わからないことなどあれば遠慮なくコメントをください。

 

パターン1 レッドストーン信号で制御

 パターン1では、レッドストーン信号で電動精錬機を制御する方法を説明します。木炭の在庫が一定数を下回ったらレッドストーン信号をオンにして、電動精錬機を稼働させ、在庫が一定数に達したらレッドストーン信号をオフにして停止させる仕組みをつくります。Mekanismの機械はレッドストーン信号で制御する設定をすることができます。

用意するもの
  • Variable Store(以下、変数カード収納庫)
     1個
  • Inventory Reader(以下、インベントリリーダー)
     1個
  • Redstone Writer(以下、レッドストーンライター)
     1個
  • 変数カード
     複数個
  • ロジックケーブル
     複数個
  • Display Panel(以下、ディスプレイパネル)
     (あると便利)1個

 変数カード収納庫は、情報を書き込んだ変数カードを保管しておくための箱です。

 これまで作成、または情報を書き込んだ変数カードは、全てインポーターやインターフェースなどに挿入してきました。ですが、在庫補充システムを作る場合は複数枚の変数カードを使用するため、収まりません(各インターフェースにはそれぞれ一つにつき1個しか変数カードが入りません)。そこで、入らない変数カードは変数カード収納庫に入れておくことになります。

Variable Store(変数カード収納庫)

 変数カード収納庫は、倉庫ネットワークに繋がるロジックケーブルと接続している必要があります。接続している収納庫に変数カードを入れておかないと、あとで作るシステムが動かないので注意してください。

 

考え方

 Integrated Dyanmics は複雑な制御を行う場合、情報を書き込んだ変数カードを組み合わせてアイテムの搬出入をおこないます。

 今回のシステムを作るには、どのような情報が必要なのか、どのような制御が必要なのかを細かく分割すると、1枚ずつの変数カードを作りやすいです。まずはどのような変数カードが必要になるのか、整理してみましょう。

 今回必要な変数カードは以下の三つです。

  1. 木炭の数を把握するカード(⑦のカードとする)
  2. 維持する在庫数(しきい値)を指定するカード(⑧のカードとする)
  3. 在庫が指定数を下回ったときにレッドストーン信号を出すカード(⑨カードとする)
⑦のカードの作成

 前提として、倉庫ネットワーク上で木炭は一つのインベントリにまとめて収納されているという状態にします。今回はMekanism のビンを用意して、木炭はそこへ収納するようにします(基本的な倉庫ネットワークの章で扱ったとおりです)。

 木炭の数を把握するカードは、Integrated Dynamics で追加されるインベントリリーダーという装置を使って作成します。

 ビンに対してインベントリリーダーを設置して、ロジックケーブルで倉庫ネットワークに接続してください。

インベントリリーダーを張り付ける

 次に、インベントリリーダーのGUIを開いてください。

インベントリリーダーのGUI

 インベントリリーダーは、対象のインベントリの様々なデータを読み取ることができます。今回はインベントリ(ビン)の中にあるアイテムの数を知りたいので、下にスクロールしてInventory Count という項目を探してください。

 見つけたら、矢印の左側に、新しい変数カードを入れてください。矢印の右側にインベントリ中に含まれるアイテムの合計数を教えてくれるカード(⑦のカード)が出来上がります。

Inventory Count

 普通のインベントリに対して Invenrory Count を行うと、異なる種類のアイテムも関係なく合計した数を出力します。そのため今回のように木炭の数を知りたいと思っても木炭以外のアイテムの個数も合計して出力してしまいます。しかし今回はビンを使っており木炭以外のアイテムは混入しないため、Inventory Count で得られる数字=木炭の個数となります。

 

 ちなみに、この⑦のカードを、ロジックケーブルで接続したディスプレイパネルに挿入すると、Inventory Count の値をそのまま表示してくれます。もちろんこの数字はビンの正面に表示された数字と一致します。

 

⑧のカードの作成

 ⑧のカードは指定する数を出力するカードです。今回は木炭の在庫を常に320個確保したいので、「320」という数を示すカードを作ります。

 ロジックプログラマーを開いて、「Integer」という項目を探してください。Integerとは整数という意味です。

 Integerの項目をクリックすると真ん中に入力欄があるので、「320」を入力して、右下のスロットに新しい変数カードを挿入すると、「320」という数字の情報が書き込まれた変数カードが作成されます。

Integer で320を入力

 なお、⑧のカードを適当なディスプレイパネルに挿入すると、常に320と表示されます。

ディスプレイパネルのGUIを開いて真ん中のスロットに変数カードを入れてみる

「320」を表示するパネル

 

⑨のカードの作成

 残る必要な制御は「在庫が指定数を下回ったときにレッドストーン信号を出す」です。

 レッドストーン信号を出力するには、レッドストーンライターという装置を使用します。この装置の機能の一つとして、trueという値を与えられたときに信号を出力して、falseという値を与えられたときに出力しないというものがあります。

trueの値を与えられてレッドストーン信号を出力するレッドストーンライター

 つまり、⑨のカードは、「在庫が指定数を下回ったときにtrueの値になり、在庫が指定数を超えたときにfalseの値を出す変数カード」として作ります。これをレッドストーンライターに入れれば、trueの時にレッドストーン信号を出すことができます。

 

 ロジックプログラマーを開いて、不等号の「<」の項目を探します。

 ふたつのスロットがあるので、左側には⑦のカード、右側には⑧のカードをかざして登録してください。最後に右下のスロットに新しい変数カードを挿入して、情報を書き込んでください。⑨のカードの完成です。 

左に⑦のカード、右に⑧のカードを入れて、⑨のカードをつくる

 ⑨のカードは「true」か「false」かの二つの値を出力します(このタイプをBoolean型といいます)。今回は⑦が木炭の数、⑧が320を指しています。もし木炭の数が320より小さければ、⑨のカードは「true」を出力し、木炭の数が320以上になると「false」を出力します。

 

設置

 まずは変数カード収納庫をネットワークに繋がるロジックケーブルと接続して設置してください。作成した⑦と⑧の変数カードを挿入します。

変数カード収納庫のGUI

⑦と⑧のカードを挿入

 続いて電動精錬機周りの設置と設定をします。

 電動精錬機にアイテムエクスポーターとアイテムインポーター、レッドストーンライターをつけてください。アイテムエクスポーターからは原木を搬出し、インポーターはすべてのアイテムを搬入する設定、電動精錬機の搬出入口の向きの設定もおこなってください。

電動精錬機に向けてレッドストーンライターを設置

電動精錬機の搬出入設定

 電動精錬機のレッドストーン検知の設定は「通常」にしてください。これにより、機械がレッドストーン信号を受けている時にだけ動作するようになります。

電動精錬機

 次にレッドストーンライターのGUIを開いてください。

レッドストーンライターのGUI

 ここで作成した⑨のカードを1段目のスロットに挿入してください。右側に緑色のチェックマークが表示されればokです。

⑨のカードを挿入

 これで完了です。

 ビンの中の木炭の数が320個に満たない場合はレッドストーン信号がオンで維持されるため、精錬が行われます。320個以上になると信号はオフになり、精錬は停止されます。

 

確認

 本当に木炭の数に応じて信号が変化しているか、念のため確認してみます(この作業は任意です)。

 まずは⑨の変数カードをコピーして、同じ内容の変数カードをもう一枚用意します。

 変数カードをコピーするには、クラフトでコピー元のカードと新しい変数カードを合わせることで、コピー元と同じカードがクラフトできます。コピー元のカードは残るため、これで複製できます。

⑨のカードをコピー

 複製元のカードはレッドストーンライターに戻して、コピーしたカードをロジックケーブルでネットワークに接続されたディスプレイパネルに挿入してください。

⑨のカードをディスプレイパネルに挿入

 ビンの中の木炭を出し入れしてみると、パネルの表示が「true」と「false」で変化するのを確認できると思います(木炭の数が320を下回ると製錬が再開します)。

木炭の数が304(320未満)なので、パネルには「true」が表示されている

木炭の数が324(320を超えている)なので、パネルには「false」が表示されている

 これできちんとtrue/falseの値が出力されている、つまり意図したとおりに動作していることが確認できました。

 もしディスプレイパネルに赤くXマークが表示されている場合は、エラーになっています。⑦と⑧のカードを変数カード収納庫に入れ忘れていないか、確認してください。

 

パターン2 搬出入を直接制御

 パターン1では、レッドストーン信号を使って在庫管理を行いました。

 ですが、気になる点がある人もいるかもしれません。

 例えば、レッドストーン信号で制御できない機械はどうするのでしょうか。バニラのかまどはレッドストーン信号で制御できません。ホッパーはレッドストーン信号で制御できますが、Integrated Dynamicsのケーブルをホッパーにつなげるのは格好悪いです。

 他にも、製錬が停止中も電動精錬機に原木が入り続けるのも気になります。他の用で使うかもしれない原木が製錬もされずに究極精錬ファクトリーの場合は9スタックも取られてしまいますし、電動精錬機を原木以外のものを製錬するのに使おうと思っても原木で占有されていて使えません。

 

 パターン2ではパターン1から更に追加で変数カードを作成し、これら気になる点を解消します。具体的には、木炭が320個を下回っている時だけ原木を精錬機に投入し、320個を超えたら原木の投入を停止する、という仕組みを作ります。ホッパーも使いません。これにより、無駄な原木がホッパーや精錬機に入ったままになることはありません。

 

用意するもの
  • 変数カード
     4個
  • 電動精錬機
     1個
  • アイテムエクスポーター、アイテムインポーター
     各1個

 変数カード収納庫にはまだ余裕があるため、パターン1で使ったものを継続して使用します。電動精錬機のセットも流用できますが、その場合はパターン1で使用したレッドストーンライターは取り外してください。

 パターン2では電動精錬機の代わりにバニラかまども使用できます。その場合は燃料補給用のアイテムエクスポーターを接続して、燃料補給の設定をしておいてください。

電動精錬機を使うケース
レッドストーンライターを設置していない点は左側(パターン1)と異なる
考え方

 パターン1の時と同様に、まずはどんなカードが必要になるか整理してみましょう。

 今回作りたいものは、⑨のカードがtrue出力のときアイテムエクスポーターから原木を排出し、そうでないときは排出しない仕組みです。

 必要なカードは以下になります。

  1. 在庫が指定数を下回ったときにtrue、上回ったときにfalseになるカード
     これは上の⑨のカードをそのまま引用します。
  2. アイテムエクスポーターから排出するアイテム(今回は原木)を指示するカード(⑩のカードとする)
  3. アイテムエクスポーターからアイテムを排出しないことを指示するカード(⑪のカードとする)
  4. ⑨から⑪のカードを組み合わせ、trueの時に原木を指示し、falseの時にアイテムを指示しないカード(⑫のカードとする)

 ⑨のカードは⑦と⑧のカードの情報を引用しているため、他に⑦・⑧のカードも変数カード収納庫に入れておく必要があります。

 

⑩のカードの作成

 まずは⑨のカードを取り出してそのまま利用するか、コピーして同じカードを作成してください。もしコピーした場合には、最終的に変数カード収納庫に入れるべき⑨のカードはコピーした新しい方です。コピー元の古い方を収納庫に入れても正常に動作しませんので注意してください。

 

⑩のカードの作成

 アイテムインポーターから精錬機に投入するアイテムを指定するカードを作ります。

 ロジックプログラマーで「Item」の項目を開いて、オークの原木をかざして登録、新しい変数カードに情報を書き込んでください。

⑩のカード
⑪のカードの作成

 アイテムエクスポーターからアイテムを排出しないことを指示するカードを作ります。つまり、⑩のカードと同じように「Item」型の変数カードを作りますが、アイテムの指定をせずに空白のままにして登録します。

 ロジックプログラマーで再度「Item」の項目をクリックして、真ん中のスロットは触らず何も登録しないで、右下のスロットに新しい変数カードを挿入、情報を書き込みます。

⑪のカード
⑫のカードの作成

 ⑨から⑪のカードを組み合わせ、trueの時に原木を指示し、falseの時にアイテムを指示しないカードを作ります。

 ロジックプログラマーで、「?」と書かれた項目を探してクリックしてください。検索欄で「Choice」と入力しても構いません。

「?」(Choice型)のGUI

 このChoiceの働きは、左側のスロットの変数カードがtrueかfalseかで場合分けをして、異なる出力をします。右側に二つ連続してスロットが並んでいますが、そのうちの右側はtrueの場合、左側はfalseの場合の出力となります。

Choice型の出力

 今回は左側のスロットに⑨のカードを入れ、右側の2スロットには⑩と⑪のカードを登録します。最後に右下に新しい変数カードを挿入して、⑫のカードを作成します。

 ⑫のカードはどのように働くかというと、⑨のカードがtrueの場合は「木炭」と出力し、falseの場合は「 (アイテムなし)」と出力します。

⑫のカード

 以上で⑨から⑫のカードをすべて作り終えました。

⑨から⑫のカード
設置

 まずは変数カード収納庫に、⑨から⑪のカードを入れます。この時⑦と⑧のカードも収納庫に入っているのを確認してください。場所や並び順に制約は無いので、自分がわかりやすいように並べてください。また、必ずしも同じ収納庫に入れておく必要はありません。収納庫に余裕がなければ、同じネットワークに接続した別の収納庫を設置してそちらへ入れても問題ありません。

⑨から⑪のカードを収納

 ⑫のカードは、電動精錬機に取り付けたアイテムエクスポーターに挿入します。アイテムエクスポーターを開いて、上から四段目の「Export Item」にセットしてください。右側に緑色のチェックマークが表示されれば、すべて完了です。

アイテムエクスポーターに⑫のカードをセット

 電動精錬機のレッドストーン検知は「無視」にしてください。受けたレッドストーン信号にかかわらず、材料があるかぎり機械は稼働し続けます。

電動精錬機のレッドストーン検知は「無視」

 

 これでパターン2は完成です。

 ビンの中の木炭の数が320を下回ったとき、アイテムエクスポーターから精錬機にオークの原木が投入されます。

 木炭の数が320を上回ると、原木の投入はストップされます。電動精錬機はそれまでに投入された原木は全て精錬し、木炭はアイテムインポーターから倉庫ネットワークへ回収されるため、機械の中に原木は残りません。手動で別の材料を投入して製錬することもできます。

 

パターン3 複数種類の原木を製錬したい場合

 パターン2ではオークの原木だけを製錬していますが、オークの原木がないときはシラカバの原木を製錬して木炭にするようにしてみましょう。

パターン2からの変更点

 変更するカードは⑩から⑫のカードです。

 パターン2では⑩と⑪のカードは「Item」型の変数カードでしたが、パターン3ではどちらも「List」型に変更します。

 パターン3用の⑩のカード(⑩-aのカードとする)は、ロジックプログラマーで「List」の項目を開いて、上部のスロットの表示が「Item」になっているのを確認して、オークの原木とシラカバの原木を登録します。パターン3用の⑪(⑪-aのカードとする)のカードも「List」の項目を開いて、何も触らずに新しい変数カードだけを挿入して、「リストで指定されているアイテムが何もない」カードを作成します。

⑩-aのカード(オークの原木とシラカバの原木を指定)

⑪-aのカード(List型だが何も指定しない)

 パターン3用の⑫のカード(⑫-aのカードとする)は、ロジックプログラマーで「choice」の項目を開いて、左側に⑨のカード、右側には⑩-aと⑪-aのカードを登録して作成します。

⑫-aのカードを作成

 すべてカードを作成したら、⑨、⑩-a、⑪-aのカードを変数カード収納庫に入れて、アイテムエクスポーターを開いて⑫-aのカードを上から五段目の「Exporter Items」にセットすれば完了です。

⑫のカードを挿入

 (以下はやや難しい話です)

 ポイントは、⑩-aのカードと⑪-aのカードの型をそろえるということです。

 パターン3では複数種類のアイテムを搬出したいので、⑩-aのカードは「Item」型ではなく、「List」型になりました。それに合わせて⑪-aのカードも「List」型に変更します。⑪のカードも⑪-aのカードも「何も指定していない(「なし」を指定している)」ことには変わりませんが、カードの型が変わります。

 この理由は、⑫-aのカード(Choiceのカード)を作るときに、場合分けで出力する先(右側の連続した2スロット)はどちらも型をそろえなければならないからです。2スロットあって、それぞれtrueの場合とfalseの場合に対応していると説明しましたが、この二つは型を揃えなければなりません。trueの場合は「List」型で複数種類のアイテムを指定して、falseの場合は「Item」型で単一のアイテムを指定する、ということはできません(カード作成時にエラーになります)。

 なお、「Choice」の左側のスロットと右側の2スロットの型は違っていても問題ありません。現に⑨のカードはtrueかfalseの二値を出力する「Boolean」型と呼ばれるものですが、⑩、⑪は単一のアイテムを指定する「Item」型、⑩-a、⑪-aはリストを指定する「List」型です。

(やや難しい話おわり)

 

 お疲れ様でした。

 念のため、機械やエクスポーターが正常に動作しているか確認してください。

 

 

 以上が、Integrated Dynamics を使った倉庫ネットワークと自動クラフト機構、いくつかの在庫管理システムの構築です。

 変数カードの使い方の基本は理解できましたでしょうか。ロジックプログラマーにはまだ数多くの「型」の設定項目があるため、もっともっと複雑な制御もできますが、基本的な操作や考え方は同じです。

 わからないことがあれば遠慮なくコメントや質問をください。できる範囲でお答えします。

 以下はおまけコーナーです。

 

(5) お役立ち情報

Labellerについて

 Integrated Dynamics で追加される、Labeller(以下ラベラー)というアイテムを使用すると、アイテムの名前を自由に変更できます。金床を使用して名前を変える場合は経験値が必要ですがこちらは必要なく、持ち歩けるためどこでも使用できます。

 変数カードが増えると混乱してくるため、必要に応じてわかりやすい名前に変更できます。

ラベラーを何もないところに向かって右クリックしてGUIを開き
付けたい名前を入力して「Write」ボタンを押す

変数カードの名前を「Variable Card」から変更できた

 本来は変数カードの名前を変えるために使用するものですが、他の一般のアイテムの名前変更にも使えます。

シラカバの原木の名前を変えてみた

 

(6) 参考になる日本語の資料

 日本語でIntegrated Dynamicsについて解説しているブログ記事や動画をいくつか紹介します。

  • MinecraftのIntegrated dynamics /Integrated tunnels/Integrated NBTで高度に様々な搬入出を制御したい!(初級・中級・上級)

    note.com

     初級・中級・上級の3つの記事があります。私のものより高度な制御とその解説があります。

  • Minecraft】ウナきりUltimateAlchemy(Part 15・Part 18)

    www.youtube.com


    www.youtube.com

     Integrated Dynamics を使って Tinker's Construct の乾式製錬炉への材料投入を制御しています。

 

(7) さらなる高みへ?

Integrated Dynamicsを頑張って使い続けるべきでしょうか

 ここまでしっかり読んでいただければ、Integrated DYnamics の基本的な使い方が理解でき、これを組み合わせていけば条件によってさらに複雑な制御や表示、遊び方ができるということが想像できるかと思います。

 では、Integrated Dynamics で更に高みを目指すべきでしょうか。
 ここまで記事を書いておいてなんですが、残念ながら筆者はそうは思いません。Integrated Dynamics を進めて極めたい人は好きにすればいいですが、必ずしもこのMODを最大限活用することにこだわる必要はありません。

 そう考える理由は主に二つです。

 

理由1 沢山使用すると動作が怪しくなる

 チェストをいくつか繋げたネットワークや、変数カードの累計使用枚数を増やしていくと、だんだん挙動が怪しくなってきます。具体的には、この記事を作成するため新規に作成したワールド(スーパーフラット)でネットワークを構築していたところ、インポーターやエクスポーターの設定をしているにもかかわらずその通りに動作しない、チェストを認識しない、画面全体の描画にちらつきといったことを経験しました。他の機械や装置の動作は問題なく、fpsも60以上は出ておりtpsも通常通りのため、ワールド全体にラグが生じているというわけではありません。
 どうも一度データを書き込んだ変数カード1枚1枚はすべてゲーム内で個別のものとしてカード番号などが記録されているようです。変数カードを破棄したり手元クラフトでリセットしてもデータがすべて消されるわけではなく、永久欠番のように残るそうです。新しいカードは使われていない古い番号を上書きして置き換えるではなく、新しい番号が次々に振られてゆきます。こんな調子でああでもないこうでもないと試行錯誤しながら変数カードを作ってはリセットしてを繰り返していくと、どんどんゲームの中で使われないで残るデータが増えていくのだと思います。
 その結果として、変数カードを使用すると挙動がどんどん怪しくなります。Refined Storage や Applied Energistics 2 などの倉庫ネットワークでも機械や装置を増やすと同じように怪しい挙動をし始めることがありますが、Integrated DYnamics はそうなり始めるのがその比ではありません。
 あまり大きな倉庫ネットワークを作成しても、チェストが認識されないのであれば意味がありません。たったチェスト3個、作業台1個、電動精錬機3台程度で挙動が怪しくなるようであれば、もはや致命的です。

理由2 プログラミングをやりたくてもやりたくなくても他にによいMODがある

 変数カードこそ Integrated Dynamics を特徴づける仕組みですが、これが非常に厄介です。
 海外掲示板のredditで、これについて議論しているスレッドがあります。 

[Rant][Integrated Dynamics] is just a really shitty programming language
(筆者意訳[愚痴][Integrated Dynamics]は本当にクソなプログラミング言語だ)

https://www.reddit.com/r/feedthebeast/comments/111dsif/rantintegrated_dynamics_is_just_a_really_shitty/

 

 ここで議論されているのは、いかに変数カードが面倒なものかということです。変数カードを使用するという最初の壁を乗り越えたとしても、新たな操作を書き込むときにロジックプログラマーで長いリストから目的の型や操作を探して書き込む、というのを繰り返すのは非常に苦痛です。大量の変数カードを一つ一つラベラーで名前を付けるのも手間だし、変数カード収納庫に複数のカードをすべて入れないと動作しない。おまけにどこかの変数カードの設定を間違えたら、その間違えたカードを含めそれ以降に作成した全ての変数カードを修正するために破棄するかリセットしなければならなりません。
 Integrated Dynamics の世界から離れて、一般的なプログラミンウというのはどうなっているかというと、変数カードなんてものは使わず、テキストエディタで済ませます。そこではすべてのプログラムは1画面にまとめて表示され、間違いも発見しやすく、1行ごとにプログラムを書いて修正が可能で、3Dワールドに変数カードが散らばって保管されていることはないのです。

 Integrated Dynamics Compiler というサイトがあります。

leu-235.com

 ここではML言語に似たプログラムを、Integrated Dynamics の変数カードを使って表すにはどのようにしたらいいか、変数カードの作り方を教えてくれます。
 訪問するとサイトの画面左側に制作者によるサンプルコードがあるので、まずは上の[Compile]ボタンを押してほしい。画面右側にずらっと変数カードの作り方が表示されます。
 プログラムで行おうとしているのは、特定のルールで数列(数のリスト)を作ることと、5の階乗を求めることだけである。左側では14行で済んでいるのに、Integrated Dynamicsの変数カードで表そうとすると60枚近くのカードが必要らしいですね。しかも一枚一枚手作りで、ロジックプログラマーのリストから操作を検索して見つけて、作ったカードは収納庫に入れなければなりません。変数カードを間違えないよう、それぞれにラベラーで名前を付けておいたほうがいいでしょう……。気が遠くなるような作業です。
 Integrated Dynamics は多機能なのですが、操作が複雑で煩雑すぎるのです。MOD作者を批判するつもりはありませんが、わざわざ操作が特殊なものを無理に使いこなそうとしなくても、他にいいものがあります。

 

 余談ですが、自転車を修理するときに知り合いが「できることの半分はその人の技術力、半分はその道具のおかげ」と言っていたことを思い出します。どんなにその人が素晴らしい技術力を持っていたとしても、適正な道具がなければ力を発揮できないのです。なお「適正な道具」が必ずしもプロ向けの最高級品とか最高スペックのものとは限りません。ドライバーであれば作りがしっかりしていて、ねじの大きさがあっているものであれば、ホームセンターで売っている一般向けの製品でも構わないということです。

 

CC:Tweakedはいかがでしょうか

 少し話がそれましたが、つまり Integrated Dynamics をメインに使用するというのは大変だということです。

 複雑なプログラミングをしたいのであれば、CC:Tweakedを使ってみてはいかがでしょうか。ComputerCraftの後継MODです。こちらは一般的なプログラミングと同じ感覚でプログラムを作成できます。記事執筆時点で本体バージョン1.20.1まで対応し、MODローダーはForge、NeoForgeとFabricに対応しています。

www.curseforge.com

 

どんなときにIntegrated Dynamicsを使うべきですか

 Integrated Dynamicsがすべてダメというわけではなく、適材適所ということです。

 変数カードを多用せずにちょこっとで済むようなところで使うのはいいともいます。コンフィグ変更なして21億mB/tick輸送できるパイプというのはなかなかありません。

omocchii.hatenablog.com