Advertisement
Guest User

farm.lua

a guest
Feb 23rd, 2020
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.94 KB | None | 0 0
  1. --Tree Farm Beta 1.0
  2.  
  3. os.loadAPI("move/move.lua")
  4.  
  5. size = 8
  6. space = 2
  7. state = 1
  8. STATES = {"Collect", "Chop", "Refuel", "Deposit", "Pickup"}
  9.  
  10. sapling = "traverse:fir_sapling"
  11.  
  12. function saveState()
  13.     h = fs.open("treeFarm/size.lua","w")
  14.     h.writeLine(size)
  15.     h.writeLine(space)
  16.     h.writeLine(state)
  17.     h.close()
  18. end
  19.  
  20. function getState()
  21.     if not fs.exists("treeFarm/size.lua") then
  22.         return false
  23.     end
  24.     h = fs.open("treeFarm/size.lua","r")
  25.     size = h.readLine()*1
  26.     space = h.readLine()*1
  27.     state = h.readLine()*1
  28.     h.close()
  29.     return true
  30. end
  31.  
  32. function saveLoc(tx, ty, tz)
  33.     h = fs.open("treeFarm/loc.lua","w")
  34.     h.writeLine(tx)
  35.     h.writeLine(ty)
  36.     h.writeLine(tz)
  37.     h.close()
  38. end
  39.  
  40. function getLoc()
  41.     if not fs.exists("treeFarm/loc.lua") then
  42.         return false
  43.     end
  44.     h = fs.open("treeFarm/loc.lua","r")
  45.     tx = h.readLine()*1
  46.     ty = h.readLine()*1
  47.     tz = h.readLine()*1
  48.     h.close()
  49.     return tx, ty, tz
  50. end
  51.  
  52. function safeMove(x, y, z)
  53.     move.move(move.getx(),1,move.getz())
  54.     move.move(x,y,z)
  55. end
  56.  
  57. function goHome()
  58.     mx = 1-(move.getx()%space)
  59.     mz = (move.getz()%space)
  60.     safeMove(move.getx()-mx,1,move.getz()-mz)
  61.     safeMove(move.getx(),1,0)
  62.     safeMove(0,1,0)
  63.     move.move(0,0,0)
  64.     move.face(1)
  65. end
  66.  
  67. function deposit()
  68.     state = 4
  69.     saveState()
  70.    
  71.     goHome()
  72.     move.face(3)
  73.     sapcnt = 0
  74.     for i = 1,16 do
  75.         turtle.select(i)
  76.         data = turtle.getItemDetail()
  77.         if data ~= nil and data.name == sapling then
  78.             sapcnt = sapcnt+turtle.getItemCount()
  79.             if sapcnt>128 then
  80.                 turtle.drop()
  81.             end
  82.         else
  83.             turtle.drop()
  84.         end
  85.     end
  86.     move.face(1)
  87.     collect()
  88. end
  89.  
  90. function collect()
  91.     state = 1
  92.     saveState()
  93.  
  94.     if turtle.detect() then
  95.         chop()
  96.     elseif move.getx()<0 or move.getx()>size or move.getz()<(-size-2) or move.getz()>0 then
  97.         goHome()
  98.         sleep(60)
  99.         pickup()
  100.     elseif move.getz() == -size-2 and move.getx()%(2*space) == 0 then
  101.         safeMove(move.getx()+space,1,move.getz())
  102.         move.face(3)
  103.     elseif move.getz() == 0 and move.getx()%(2*space) ~= 0 then
  104.         safeMove(move.getx()+space,1,move.getz())
  105.         move.face(1)
  106.     elseif move.getx()%(2*space) == 0 then
  107.         safeMove(move.getx(),1,move.getz()-1)
  108.     else
  109.         safeMove(move.getx(),1,move.getz()+1)
  110.     end
  111. end
  112.  
  113. function pickup()
  114.     state = 5
  115.     saveState()
  116.  
  117.     if move.getx()>size or move.getx()<0 or move.getz()>0 or move.getz()<(-size-2) then
  118.         goHome()
  119.         sleep(600)
  120.         deposit()
  121.     elseif move.getx()%space == 0 then
  122.         safeMove(move.getx()+1,1,move.getz())
  123.     elseif move.getx()%space ~= 0 then
  124.         if move.getz()<(-size/2) then
  125.             safeMove(move.getx(),1,0)  
  126.         else
  127.             safeMove(move.getx(),1,-size-2)
  128.         end
  129.         move.face(2)
  130.         move.forward()
  131.     end
  132. end
  133.  
  134. function placeSapling(x,y,z)
  135.     move.move(x,y,z)
  136.     turtle.digDown()
  137.     for i = 1,16 do
  138.         turtle.select(i)
  139.         item = turtle.getItemDetail()
  140.         if item ~= nil and item.name == sapling then
  141.             turtle.placeDown()
  142.             return true
  143.         end
  144.     end
  145.     return false
  146. end
  147.  
  148. function chop()
  149.     state = 2
  150.     saveState()
  151.    
  152.     cx, cy, cz = getLoc()
  153.     if cx == false then
  154.         tx, ty, tz = move.getnext()
  155.         saveLoc(tx,1,tz)
  156.     end
  157.     safeMove(getLoc())
  158.     while turtle.detectUp() do
  159.         move.up()
  160.     end
  161.     placeSapling(getLoc())
  162.     fs.delete("treeFarm/loc.lua")
  163.     collect()
  164. end
  165.  
  166.  
  167.  
  168. if not getState() then
  169.     saveState()
  170. end
  171.  
  172.  
  173. while true do
  174.     if state == 2 then
  175.         chop()
  176.     end
  177.     if state == 4 then
  178.         deposit()
  179.     end
  180.     if state == 5 then
  181.         pickup()
  182.     end
  183.     if state == 1 then
  184.         collect()
  185.     end
  186. end
  187.  
  188. fs.delete("move/pos.lua")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement