自動クラフトプログラムの仕様
プログラムの仕様は次のとおり。
以下を、材料がなくなるなど、クラフトできなくなるまでひたすら繰り返すプログラムです。
- タートルの真上には材料となるアイテムが詰まっているチェストを用意。今回は、サトウキビをパンパンに詰め込んでおく
- タートルの真下には完成品格納用のチェストを設置
- プログラムを開始したら、真上の材料チェストから材料を1スタックだけとる。「turtle.suckUp()」
- そして「turtle.craft()」でクラフト
- インベントリにある完成品を下のチェストに「turtle.dropDown()」
プログラム
なんという短さ。
今回は、pastebinのembed_codeをページに直接埋め込んでみたけど見やすいでしょうか。
ソース解説のために行番号が欲しかったので・・・・・・。
簡単な解説(ソース中の行番号付き)
- 終了条件:
- L23-24: turtle.suckUp()やturtle.craft()に失敗したら即座にループを抜け出してプログラムを終了。
- dropItems():
- L9-16: これまで何度も使っている。指定したスロットのアイテムを下にドロップするお手製の関数。
- L20,28: プログラムの開始時と終了時に使ってインベントリを空にしている。念のために。
- L25: 一回のクラフトが成功すると完成品は現在の選択スロットに入るが、これを毎回ドロップしている。一度にクラフトできる数は最大が64なのでスロット1と2を調べて落とせばいいかなぁというテキトーな指定。16スロット全部ドロップするよう指定してもいいけれど時間の無駄だろうし。
- turtle.suckUp():
- L23: 真上のチェストから1スタック分(正確にはチェストの左上から順に1スロットに入っているアイテムを丸ごと)のアイテムを、現在の選択スロットにゲット。
- 直前でturtle.select(1)しているので、スロット1に材料アイテムを確保する。
- なお、確保に成功したら「True」、チェストが空などの理由で失敗したら「false」。
- turtle.craft():
- L24: 作成個数を省略しているので、クラフトできる最大個数をクラフト。
- 普通のサトウキビを想定するならば、サトウキビ64個から砂糖64個をクラフト。
- そして完成品は、現在の選択スロットであるスロット1に入る。
- なお、クラフトに成功したら「True」、失敗したら「false」。
さあここまでを動かしてみましょう。
そうしたら、いくつか動作がおかしな点、不満な点が見つかったのではないでしょうか?
次回からそのような点を改善しましょう。
次回予告
以下を改造。
- 一度に16個しかクラフトできないアイテムの場合
- もっと他のレシピにも対応させたい