Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --Tree Farm Beta 1.0
- os.loadAPI("move/move.lua")
- size = 8
- space = 2
- state = 1
- STATES = {"Collect", "Chop", "Refuel", "Deposit", "Pickup"}
- sapling = "traverse:fir_sapling"
- function saveState()
- h = fs.open("treeFarm/size.lua","w")
- h.writeLine(size)
- h.writeLine(space)
- h.writeLine(state)
- h.close()
- end
- function getState()
- if not fs.exists("treeFarm/size.lua") then
- return false
- end
- h = fs.open("treeFarm/size.lua","r")
- size = h.readLine()*1
- space = h.readLine()*1
- state = h.readLine()*1
- h.close()
- return true
- end
- function saveLoc(tx, ty, tz)
- h = fs.open("treeFarm/loc.lua","w")
- h.writeLine(tx)
- h.writeLine(ty)
- h.writeLine(tz)
- h.close()
- end
- function getLoc()
- if not fs.exists("treeFarm/loc.lua") then
- return false
- end
- h = fs.open("treeFarm/loc.lua","r")
- tx = h.readLine()*1
- ty = h.readLine()*1
- tz = h.readLine()*1
- h.close()
- return tx, ty, tz
- end
- function safeMove(x, y, z)
- move.move(move.getx(),1,move.getz())
- move.move(x,y,z)
- end
- function goHome()
- mx = 1-(move.getx()%space)
- mz = (move.getz()%space)
- safeMove(move.getx()-mx,1,move.getz()-mz)
- safeMove(move.getx(),1,0)
- safeMove(0,1,0)
- move.move(0,0,0)
- move.face(1)
- end
- function deposit()
- state = 4
- saveState()
- goHome()
- move.face(3)
- sapcnt = 0
- for i = 1,16 do
- turtle.select(i)
- data = turtle.getItemDetail()
- if data ~= nil and data.name == sapling then
- sapcnt = sapcnt+turtle.getItemCount()
- if sapcnt>128 then
- turtle.drop()
- end
- else
- turtle.drop()
- end
- end
- move.face(1)
- collect()
- end
- function collect()
- state = 1
- saveState()
- if turtle.detect() then
- chop()
- elseif move.getx()<0 or move.getx()>size or move.getz()<(-size-2) or move.getz()>0 then
- goHome()
- sleep(60)
- pickup()
- elseif move.getz() == -size-2 and move.getx()%(2*space) == 0 then
- safeMove(move.getx()+space,1,move.getz())
- move.face(3)
- elseif move.getz() == 0 and move.getx()%(2*space) ~= 0 then
- safeMove(move.getx()+space,1,move.getz())
- move.face(1)
- elseif move.getx()%(2*space) == 0 then
- safeMove(move.getx(),1,move.getz()-1)
- else
- safeMove(move.getx(),1,move.getz()+1)
- end
- end
- function pickup()
- state = 5
- saveState()
- if move.getx()>size or move.getx()<0 or move.getz()>0 or move.getz()<(-size-2) then
- goHome()
- sleep(600)
- deposit()
- elseif move.getx()%space == 0 then
- safeMove(move.getx()+1,1,move.getz())
- elseif move.getx()%space ~= 0 then
- if move.getz()<(-size/2) then
- safeMove(move.getx(),1,0)
- else
- safeMove(move.getx(),1,-size-2)
- end
- move.face(2)
- move.forward()
- end
- end
- function placeSapling(x,y,z)
- move.move(x,y,z)
- turtle.digDown()
- for i = 1,16 do
- turtle.select(i)
- item = turtle.getItemDetail()
- if item ~= nil and item.name == sapling then
- turtle.placeDown()
- return true
- end
- end
- return false
- end
- function chop()
- state = 2
- saveState()
- cx, cy, cz = getLoc()
- if cx == false then
- tx, ty, tz = move.getnext()
- saveLoc(tx,1,tz)
- end
- safeMove(getLoc())
- while turtle.detectUp() do
- move.up()
- end
- placeSapling(getLoc())
- fs.delete("treeFarm/loc.lua")
- collect()
- end
- if not getState() then
- saveState()
- end
- while true do
- if state == 2 then
- chop()
- end
- if state == 4 then
- deposit()
- end
- if state == 5 then
- pickup()
- end
- if state == 1 then
- collect()
- end
- end
- fs.delete("move/pos.lua")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement