読者です 読者をやめる 読者になる 読者になる

Minecraftとタートルと僕

PCゲームMinecraftのMOD「ComputerCraft」の情報を集めたニッチなブログです。

クラフティタートルプログラミング チュートリアル(6)

クラフティタートルを生産ラインに組み込む

それでは、クラフティタートルの応用編をはじめましょう。
これまで考えてきたクラフティタートルを、拠点の生産ラインの中にどうやって組み込むかを考えます。

基本形

これまで考えてきたクラフティタートルの配置は、以下のように材料用チェストを上に置き、完成品収納用チェストを下に置く形。

  • f:id:hevohevo:20131217143223p:plain:w300

応用1(BCパイプ編)

これを生産ラインに組み込むならこのような形が考えられます。

  • f:id:hevohevo:20131215013036p:plain:w400
  • 農場で収穫したサトウキビや葉などを直通パイプで上の材料チェストに流し込む。
  • そして、完成品チェストのアイテムをパイプで吸出して倉庫に送り込む。

しかしこの形は、場合によっては不具合が生じます。

不具合1

たとえば、2x2レシピをクラフトしようとするときに、材料アイテムが1個ずつまばらに流れ込んでくると問題が起きるかもしれません。
具体的にはタートルの挙動が次のように。

  1. 材料を上のチェストからゲット!
  2. あれ?材料1個しかなかった。クラフトできないから下に流してしまおう
  3. 再度チェストからゲット! あれ?また1個だ。クラフトできないから・・・(以下繰り返し)

不具合1の対策

厳密に考えると、この不具合の対策はかなり難しい。
そのためここでは、場当たり的な方法で対策してみましょう。
もし他に良いアイデアがあったら、ぜひ教えてください。

  • ゲットしたアイテムから一つもクラフトできないことがわかったら
    • とりあえずゲットしたアイテムは下にドロップしておいて
    • sleep(30)する
    • 30秒後に再開

30秒経てばさすがに材料もたまっているでしょうという根拠^^;
ちなみにゲットしたアイテムを上に戻さないのは、
そのアイテムがレアもので、1時間に1個くらいのペースでしか流れてこないものだったら、
タートル君は延々と「ゲット&戻す」のループをしてしまうから。
流量がある程度あって、このようなループの恐れがないなら、上に戻してもかまいません。

あるいはこれも面倒ならば、前回のプログラムのsleep時間を長めに調整するだけでも良いかも。材料の流量に合わせて時間調整すれば、そこそこ問題なく動くはずです。
流量が全体的に少なめならsleep時間を増やし、多めならsleepを短めに調整しましょう。
ただし、流量が時間ごとに大幅に変動する場合には、挙動がおかしくなる可能性が・・・・・・。
どちらにせよ、材料を入れるチェストは容量多めのものを使うことをお勧めします。

応用2(AEのBus利用)

Applied Energisticsはとても強力で便利なModなので、僕の拠点はこれを使って構築しています。

AEを使った生産ラインにクラフティタートルを組み込むならば、次のようになるでしょう。

  • AEの「ME Precision(Fuzzy/Basic)Export Bus」が、MEネットワークから材料アイテムを取り出し、真上のチェストに常に材料を流し込み続ける。
  • タートルは、完成品を真下の「ME Interface」にドロップすることで、MEネットワークに収納。
  • f:id:hevohevo:20131215014623p:plain:w300

しかしこれもまた、不具合が生じる可能性があります。

不具合2

  1. ExportBus「材料1個を上の材料チェストに入れました!」
  2. タートル君「材料ゲット!」「あれ?1個だ。クラフトできない」「MEネットワークに戻すね」
  3. ExportBus「その1個をそのまますぐに材料チェストへ入れる!」
  4. タートル君「材料ゲット! あれ?1個だ(ry」  の延々ループ

MEネットワークへのアイテム出し入れが一瞬というのが、こんなところで頭痛の種となるとは……。

不具合2の対策

この不具合もまた、いくつかの対策が考えられます。
たとえば、対策1で挙げたsleep時間の調整でも割となんとかなります。
しかしここでは、AEの機能を使った対策を紹介しましょう。

  • ExportBusの「レッドストーン信号がOFFのときだけアイテムを排出」という機能を利用
    • クラフト中に、タートル君の側面からレッドストーン信号ONを出す。
    • その信号を何らかの方法(たとえばMFRのRedNetCableなど)でExportBusに伝える。
    • クラフトが終わったらレッドストーン信号をOFFにする

これによって、クラフト中はMEネットワークからの材料排出を停止しておくことができる。
そして、タートルのクラフトがひと段落して休止中に、MEネットワークの材料アイテムを一気に排出させるという方式である。

  • f:id:hevohevo:20131215014221p:plain:w600

・・・・・・説明がまどろっこしい。つまりはこういうことです。

  1. ExportBus「材料を上の材料チェストに片っ端から入れていくぜ!オラオラオラッ」
  2. タートル君「レッドストーン信号ON!!」「とりあえず止まっとけ」
  3. ExportBus「あいよ!」
  4. タートル君「クラフトクラフト・・・1個か。余ったからMEネットに戻しとくわ」「チェスト空っぽなのでいったん完了! レッドストーン信号OFF!」「30秒休憩してくる」
  5. ExportBus「らじゃ! いまのうちにネットに溜まってたアイテムをチェストに流し込んどくわ」
  6. 最初に戻る。

ではこれらの対策を組み込んだプログラムは次回紹介しましょう。
レッドストーン信号を扱うためのAPIである Redstone APIの解説も兼ねて。

それでは。