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

Minecraftとタートルと僕

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

シルクタッチ採掘タートルを使った焼石製造プログラム

はじめに

前回までに、黒曜石生成プログラム、丸石生成プログラムの紹介をしました。

今回は、この施設を無理やり使って、焼石を生成&回収するプログラムを紹介しましょう。 焼石を回収するため、シルクタッチタートルが必要になるのでご注意ください。

焼石生成の原理

で紹介したように、流水に上から溶岩を降りかけることで、流水が焼石に変化します。

これをうまく、そして安全に再現しなくてはなりません(溶岩で事故るのは僕だけでいい……)。

焼石を生成する施設の用意

前回までに紹介した施設に手を加えることで焼石を生成できる施設に改造します。 わかりやすさのために画像多めです。

(1)まずは、設置してあった水源や溶岩源を全て撤去。

f:id:hevohevo:20140305024023j:plain

(2)下に降りて、右端にある出っ張りに注目。

f:id:hevohevo:20140305024028j:plain

(3)3段積み重ねてあるうちの、下2段を撤去

f:id:hevohevo:20140305024036j:plain

(4)撤去した代わりに一番下にチェストを設置

f:id:hevohevo:20140305024040j:plain

(5)その上に、シルクタッチタートル

f:id:hevohevo:20140305024043j:plain

(6)また上に戻ってきて、これまで使っていたタートル撤去し、ブロックでタートルのあった場所を塞ぐ。

図では砂岩を利用しています。重要なのはタートルが置いてあった中央の1か所なので、両端のブロックはなくても大丈夫です。

f:id:hevohevo:20140305024047j:plain

(7)左側の穴には水源を設置しましょう(さきほどの設置ブロックの下を水が流れていることを確認)。

f:id:hevohevo:20140305024053j:plain

(8)チラッとみえる水流の上に溶岩が降り注ぐように、溶岩源を設置

f:id:hevohevo:20140305024058j:plain

(9)あとは、シルクタッチタートルで次々と出来上がる焼石を掘るのみ

f:id:hevohevo:20140305024111j:plain

プログラム

インストール

> pastebin get RxBNR0Cv stonegen

プログラム実行

上記の図の位置にシルクタッチ採掘タートルを設置して、プログラムを実行。 あらかじめ、インベントリには燃料アイテムを入れておくこと。

燃料補給後、燃料値の数だけ焼石を回収します。

ソースコード

http://pastebin.com/RxBNR0Cv

プログラム解説

ただ単純に正面を掘って、下にアイテムをドロップするだけでしょ? なんでこんなにいろいろやっているの?

このプログラムを見て、そう思いませんでした?

うん、僕も最初はこんなの簡単だと思ったんですよね。でもやっていると微妙に調整が必要でした。 そのあたりを軽く解説しましょう。

  1. ただ単純にdigし続けてはダメ
    • ウェイトなしで高速でdigしていると、焼石ができる前に水流を破壊してしまい、上からの溶岩がその隙間に入り込み、焼石生成の流れがとまってしまう。
    • いわゆるはまり状態になってしまう。
  2. digSilkTouch()は燃料を消費する
    • 確実に焼石ができたことを確認してから掘らなくて損です。採掘タイミングを間違えて水流に向かってシルクタッチ使ってもこのタートルでは回収できませんし。
  3. turtle.detect()で検出できる(trueを返す)のはブロック(今回は焼石)のみ。
    • 水流や溶岩流は目の前にあってもturtle.detect()が反応しません(falseを返す)。
    • つまり、目の前にあるのが水流なのか溶岩流なのかの区別をつけることができません。
    • 水流ならば正常なのでそのまま1~2秒待てば焼石ができますが、溶岩流ははまり状態なので溶岩流は撤去しなくてはなりません。

これらの問題を解決するために、以下のような工夫をしています。

  • ウェイトとして1.5秒のスリープを入れている(もしかしたら、入れているMODなど環境の違いにより、溶岩の流れる速度が異なる可能性があります。その場合はこのウェイト時間を調整してください。)
  • turtle.detect()で焼石ができたことを確認してから燃料を消費するシルクタッチ採掘をしています。
  • もし、turtle.detect()がfalseを返したら目の前にあるのは水流かあるいは溶岩流ということになるので、普通のdig()で破壊して、状態を初期化しています。

まとめ

施設の改造やプログラムの作成より、ウェイト時間の調整などの方が時間かかりました。 こういうのって実際に試さないとわからないですよね。

私の環境での溶岩流の速さに調整しているので、皆さんの環境ではうまく動かないことも考えられます。そのときは、ウェイト(スリープ)時間を調整してみてください。

このプログラムによって、おおよそ2秒くらいで1個のペースで、燃料分の個数だけ焼石を生成&回収します。

次回のおはなし

そもそもの動機は、黒曜石・丸石・焼石を一つの施設・一つのプログラムで作れるようにしたいということでした。しかも燃料補給が面倒なので、タートルが移動しなくとも自動生成できることを念頭において色々考えてきました。(溶岩設置→掘るという流れでタートルが移動しても良いのなら比較的簡単にできるんですけどね)

結果として、黒曜石と丸石用の施設・プログラムは簡単に作れたのですが、焼石はちょっとだけズルをしているっぽいですよね。

手作業で施設を改造したりタートルを別の位置に設置したりというのでは、同じ一つの施設という当初の目的から少し逸脱しているように思われます。

タートルが移動せずにプログラムだけで黒曜石・丸石・焼石の生成を切り替えられる。 このような当初の目的を完全に達成するために、現在、いろいろと検討しているところです。

流水の挙動を色々と検討した結果、なんとかなりそうですので、次回はこのあたりから紹介していきたいと思います。