Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --このプログラムは、白樺などのまっすぐ生えるだけの木前提で
- --作ってあります。木の種類によってはプログラムを修正する必要があると
- --思います。
- -- 燃料補給関数。
- -- 一旦全てのアイテムをしまって、木材を1スタック取得する。
- -- かまどから燃料回収後、木炭8個、木材1スタックをセットして次の燃料作成を開始する。
- -- 最初のアイテムをしまうことに失敗した場合、falseを返す。
- function chargeCoal()
- if putWood() == false then
- return false
- end
- turtle.select(3)
- turtle.suckDown()
- turtle.select(14)
- turtle.refuel(1)
- turtle.back()
- turtle.down()
- turtle.turnLeft()
- turtle.forward()
- turtle.suckUp()
- turtle.back()
- turtle.up()
- turtle.drop(8)
- turtle.up()
- turtle.forward()
- turtle.select(3)
- turtle.dropDown()
- turtle.back()
- turtle.down()
- turtle.turnRight()
- turtle.forward()
- return true
- end
- -- 燃料補給チェック関数。Configで燃料無限にしている場合は無条件でtrueを返す。
- -- 燃料が20未満でかつ手持ちの木炭が1個の時、燃料補給関数chargeCoal()を実行する。
- -- 手持ちの木炭が十分な場合、木炭1個消費するのみ。
- -- 燃料補給に失敗した場合、falseを返す。それ以外の場合はtrueを返す。
- function refuelTurtle()
- fuelLevel = turtle.getFuelLevel()
- if fuelLevel == "unlimited" then
- return true
- end
- if fuelLevel < 20 then
- turtle.select(14)
- if turtle.getItemCount(14) == 1 then
- if chargeCoal() == false then
- return false
- end
- turtle.refuel(1)
- end
- turtle.refuel(1)
- end
- return true
- end
- -- インベントリの状況を見て、アイテムを保管するべきな場合はtrueを返す。
- -- 判断条件は13スロット目にアイテムがあること。
- function isPutWood()
- return turtle.getItemCount(13) > 0
- end
- -- インベントリのアイテムをチェストに移す。
- -- スロット3~13のアイテムが対象。
- -- 苗木は苗木用のチェストに、その他のアイテムは真下のチェストに移す。
- function putWood()
- turtle.turnLeft()
- for i=3,13 do
- turtle.select(i)
- if turtle.getItemSpace(i) ~= 64 then
- if turtle.compareTo(15) == true then
- result = turtle.drop()
- else
- result = turtle.dropDown()
- end
- if result == false then
- turtle.turnRight()
- return false
- end
- end
- end
- turtle.turnRight()
- return true
- end
- -- 手持ちの苗木の確認用関数。
- -- スロット1の苗木が0の場合、trueを返す。
- function isBlankSheed()
- return turtle.getItemSpace(1) == 64
- end
- -- 苗木用のチェストから、苗木を補充する関数。
- function chargeSheed()
- turtle.select(1)
- turtle.turnLeft()
- result = turtle.suck()
- turtle.turnRight()
- return result
- end
- -- 手持ちの骨粉の確認用関数。
- function isBlankBone()
- return turtle.getItemSpace(2) == 64
- end
- -- 骨粉用のチェストから、骨粉を補充する関数。
- function chargeBone()
- turtle.select(2)
- turtle.turnRight()
- result = turtle.suck()
- turtle.turnLeft()
- return result
- end
- -- 骨粉をかけた苗木が育ったかどうかを判断する関数。
- -- 16番目のスロットに原木をセットし、目の前のブロックと比較することで判断している。
- function isWoodcut()
- turtle.select(16)
- return turtle.compare()
- end
- -- 伐採を実行する関数。
- -- 上部にブロックがなくなるまで伐採する。
- -- 伐採後、四方の葉っぱブロックを破壊しながら下降する。
- -- 一番下まで降りた後、水流で集めた苗木を回収するために前進、下降し苗木を回収する。
- function woodcut()
- turtle.select(3)
- turtle.dig()
- turtle.forward()
- upCnt = 0
- repeat
- turtle.digUp()
- turtle.up()
- upCnt = upCnt + 1
- until turtle.detectUp() == false
- for i=1, upCnt do
- if (upCnt - i) > 0 then
- for a=1, 4 do
- turtle.dig()
- turtle.turnLeft()
- end
- end
- turtle.down()
- end
- turtle.forward()
- turtle.suckDown()
- turtle.down()
- turtle.suck()
- turtle.turnLeft()
- turtle.suck()
- turtle.turnRight()
- turtle.turnRight()
- turtle.suck()
- turtle.turnLeft()
- turtle.up()
- turtle.back()
- turtle.back()
- end
- -- 手持ちの苗木を1番スロットに集める関数。
- -- 苗木が無くなった場合、チェストから補充する前にこの関数を先に実行する。
- function transferSheed()
- for i=4,13 do
- turtle.select(i)
- if turtle.compareTo(15) ==true then
- turtle.transferTo(1)
- end
- end
- end
- -- メインプロセス。燃料チェック、苗木チェック、骨粉チェックを行い、動作可能な場合伐採を実行する。
- -- 実行不可能な状態(燃料切れ、苗木切れ、骨粉切れ、収納チェストが一杯)、falseを返す。
- function startProcess()
- if refuelTurtle() == false then
- return false
- end
- if isBlankSheed() == true then
- transferSheed()
- if isBlankSheed() == true then
- if chargeSheed() == false then
- return false
- end
- end
- end
- turtle.select(1)
- turtle.place()
- turtle.select(2)
- repeat
- if isBlankBone() == true then
- if chargeBone() == false then
- return false
- end
- end
- turtle.select(2)
- turtle.place()
- until isWoodcut() == true
- woodcut()
- return true
- end
- print("Proess Start...")
- endProcess = false
- -- メインルーチン。メインプロセスがtrueを返し続ける間は、メインプロセスを実行し続ける。
- while endProcess == false do
- if startProcess() == false then
- endProcess = true
- end
- if endProcess == true then
- putWood()
- end
- if isPutWood() == true then
- if putWood() == false then
- endProcess = true
- end
- end
- end
- print("Process End")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement