Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- #################################################################
- -- Huge wood cutter
- -- version 0.2
- -- hevohevo, License: MIT
- -- Twitter: @hevohevo, http://hevohevo.hatenablog.com/
- -- 説明
- -- このプログラムは、松の巨木(2x2)2本を伐採するプログラムです。
- -- 使い方
- -- スロット1に松の苗木を64本入れる
- -- 以下の形に苗木とタートルを配置
- -- 採取した木材はスタート地点に戻ってから真下にドロップします
- -- m: 松の苗木, T: タートル, 上が北向き(方角がとても重要)
- -- mm
- -- mm
- -- mmT
- -- mm
- -- ###############################################
- -- サブ関数
- -- 上か正面に伐採できるブロックがある限り、ずっと上に伐採しつつ上昇
- -- 2x2の北西部分だけ1段高く幹が成長するとかなにそのめんどくさい仕様。
- function cut2Up()
- while turtle.detect() or turtle.detectUp() do
- turtle.digUp()
- turtle.dig()
- turtle.up()
- end
- turtle.digUp() -- 最後に正面を伐採して上昇終了
- end
- -- 隣接する場所にあるブロックの名称を調べてマッチしたらtrue
- -- 第1引数:ブロック名称(部分一致、複数可)テーブル、第2引数:調べる方角の関数
- -- 例: findBlock({"dirt", "grass"}, turtle.inspect) => true (正面に土があった)
- function findBlock(names, inspect_func)
- inspect_func = inspect_func or turtle.inspect
- local status, detail = inspect_func()
- if not status then return false end
- for i,name in ipairs(names) do
- if string.match(detail["name"],name) then
- return true
- end
- end
- return false
- end
- -- 下に土(草)ブロックを発見するまで下に伐採しつつ降りる
- function cut2Down()
- while not findBlock({"dirt","grass"},turtle.inspectDown) do -- 下が土・草じゃなかったら回す
- turtle.dig()
- turtle.digDown()
- turtle.down()
- end
- turtle.dig() -- 最後に正面伐採して下降終了
- end
- -- スロット2から16のブロックを下に落とす
- function drop2_16()
- for i=2,16 do
- turtle.select(i)
- turtle.dropDown()
- end
- turtle.select(1)
- end
- -- スロット1に松の苗木が4つ以上あることを確認。
- -- それ以外のスロットは空にする
- function prepare_inventory()
- turtle.select(1)
- local detail = turtle.getItemDetail()
- assert(detail and detail["count"]>3 and detail["name"]=="minecraft:sapling" and detail["damage"]==1,
- "Required 4 spruce-sapling")
- for i=2,16 do
- turtle.select(i)
- turtle.dropDown()
- end
- turtle.select(1)
- print("Fuel: ",turtle.getFuelLevel())
- end
- -- 汚いメイン関数、伐採したり、伐採後の地面に苗木を植えたり
- -- turtle.suck()を連発しているのは、少しでも落ちてくる苗木を回収するため
- function main()
- local _dig_fwd = function()
- turtle.dig()
- turtle.forward()
- end
- local _suck_place = function()
- turtle.suck() -- できるだけ落ちてきた苗木を回収したい
- turtle.place()
- end
- -- 2x2大木の右半分伐採(上昇)開始
- _dig_fwd()
- cut2Up()
- turtle.turnLeft()
- _dig_fwd()
- turtle.turnRight()
- -- 2x2大木の左半分伐採(下降)開始
- cut2Down()
- -- 伐採終了、苗木植える
- _suck_place()
- turtle.turnLeft()
- turtle.back()
- _suck_place()
- turtle.turnRight()
- _suck_place()
- turtle.back()
- _suck_place()
- -- スタート位置に戻った
- end
- while true do
- prepare_inventory() -- インベントリの準備
- for i=1,4 do -- 四方を見るけれど結局は北と西だけ。
- -- 燃料が200以下のときはエラー終了
- assert(turtle.getFuelLevel()>200, "more fuel!")
- local status, detail = turtle.inspect()
- if status and string.match(detail["name"],"minecraft:log") then -- 正面が"log"なら開始
- main() -- 伐採作業
- prepare_inventory() -- インベントリの準備
- end
- turtle.turnRight()
- end
- os.sleep(120)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement