Advertisement
TmsKerail

Tree.lua

Jul 17th, 2021 (edited)
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.68 KB | None | 0 0
  1. local treeSapling = "minecraft:spruce_sapling"
  2. local logType = "minecraft:spruce_log"
  3. local rows = tonumber(arg[1])
  4. local currentRow = 1
  5.  
  6. local storeItems = {}
  7.  
  8. storeItems[logType] = true
  9. storeItems["minecraft:stick"] = true
  10.  
  11. function selectItem(item)
  12.     for i = 1, 16 do
  13.         local data = turtle.getItemDetail(i)
  14.         if data then
  15.             if data.name == item then
  16.                 turtle.select(i)
  17.                 return true
  18.             end
  19.         end
  20.     end
  21.     return false
  22. end
  23.  
  24. function dropItems()
  25.     for i = 1, 16 do
  26.         local data = turtle.getItemDetail(i)
  27.         if data then
  28.             if storeItems[data.name] then
  29.                 turtle.select(i)
  30.                 turtle.dropDown()
  31.             end
  32.         end
  33.     end
  34. end
  35.  
  36. function move()
  37.     if turtle.getFuelLevel() <= 10 then
  38.         if not selectItem("minecraft:coal") then
  39.             return false
  40.         else
  41.             turtle.refuel(1)
  42.         end
  43.     end
  44.     return turtle.forward()
  45. end
  46.  
  47. function moveUp()
  48.     if turtle.getFuelLevel() <= 10 then
  49.         if not selectItem("minecraft:coal") then
  50.             return false
  51.         else
  52.             turtle.refuel(1)
  53.         end
  54.     end
  55.     return turtle.up()
  56. end
  57.  
  58. function moveDown()
  59.     if turtle.getFuelLevel() <= 10 then
  60.         if not selectItem("minecraft:coal") then
  61.             return false
  62.         else
  63.             turtle.refuel(1)
  64.         end
  65.     end
  66.     return turtle.down()
  67. end
  68.  
  69. function turnAround()
  70.     turtle.turnLeft()
  71.     turtle.turnLeft()
  72. end
  73.  
  74. function goAround()
  75.     turtle.turnRight()
  76.     move()
  77.     turtle.turnLeft()
  78.     move()
  79.     move()
  80.     turtle.turnLeft()
  81.     move()
  82.     turtle.turnRight()
  83.     checkNext()
  84. end
  85.  
  86. function returnHelper()
  87.     turtle.turnRight()
  88.     if turtle.inspect() and
  89.         (select(2, turtle.inspect()).name == treeSapling or select(2, turtle.inspect()).name == logType) then
  90.         turtle.turnLeft()
  91.         move()
  92.         move()
  93.         move()
  94.         move()
  95.         returnHelper()
  96.     else
  97.         turtle.turnRight()
  98.         move()
  99.         move()
  100.         move()
  101.         turtle.turnLeft()
  102.         move()
  103.         for i = 1, (currentRow - 1) * 4 do
  104.             if not move() then
  105.                 print("Can't move while returning to chest")
  106.                 return false
  107.             end
  108.         end
  109.         turtle.turnLeft()
  110.         move()
  111.         if move() then
  112.             dropItems()
  113.             turnAround()
  114.             currentRow = 1
  115.             sleep(180)
  116.             checkNext()
  117.         end
  118.     end
  119. end
  120.  
  121. function changeRow()
  122.     turnAround()
  123.     local success, data = turtle.inspect()
  124.     while not turtle.inspect() and
  125.         (select(2, turtle.inspect()).name ~= treeSapling or select(2, turtle.inspect()).name ~= logType) do
  126.         if not move() then
  127.             print("Can't move while changing row!")
  128.             return false
  129.         end
  130.     end
  131.     if currentRow == rows then
  132.         if currentRow % 2 == 1 then
  133.             turtle.turnLeft()
  134.             move()
  135.             turtle.turnRight()
  136.             move()
  137.             returnHelper()
  138.         elseif currentRow % 2 == 0 then
  139.             turtle.turnLeft()
  140.             for i = 1, (currentRow - 1) * 4 do
  141.                 if not move() then
  142.                     print("Can't move while returning to chest")
  143.                     return false
  144.                 end
  145.             end
  146.             turtle.turnLeft()
  147.             move()
  148.             if move() then
  149.                 dropItems()
  150.                 turnAround()
  151.                 currentRow = 1
  152.                 sleep(180)
  153.                 checkNext()
  154.             end
  155.         end
  156.     elseif currentRow % 2 == 1 then
  157.         turtle.turnLeft()
  158.         for i = 1, 4 do
  159.             if not move() then
  160.                 print("Can't move while changing row!")
  161.                 return false
  162.             end
  163.         end
  164.         turtle.turnRight()
  165.         currentRow = currentRow + 1
  166.         checkNext()
  167.     elseif currentRow % 2 == 0 then
  168.         turtle.turnRight()
  169.         for i = 1, 4 do
  170.             if not move() then
  171.                 print("Can't move while changing row!")
  172.                 return false
  173.             end
  174.         end
  175.         turtle.turnLeft()
  176.         currentRow = currentRow + 1
  177.         checkNext()
  178.     end
  179. end
  180.  
  181. function placeSapling()
  182.     if selectItem(treeSapling) then
  183.         return turtle.place()
  184.     else
  185.         return false
  186.     end
  187. end
  188.  
  189. function collectSapling()
  190.     for i = 1, 4 do
  191.         turtle.turnLeft()
  192.         turtle.suck()
  193.     end
  194. end
  195.  
  196. function fallTree()
  197.     local success, data = turtle.inspectUp()
  198.     if success and data.name == logType then
  199.         turtle.digUp()
  200.         moveUp()
  201.         fallTree()
  202.     else
  203.         while not turtle.inspectDown() do
  204.             moveDown()
  205.         end
  206.         collectSapling()
  207.         if move() then
  208.             collectSapling()
  209.             turnAround()
  210.             if placeSapling() then
  211.                 turnAround()
  212.                 checkNext()
  213.             else
  214.                 print("Need more saplings!")
  215.                 return
  216.             end
  217.         else
  218.             print("Out of fuel")
  219.             return flase
  220.         end
  221.     end
  222. end
  223.  
  224. function checkNext()
  225.     move()
  226.     collectSapling()
  227.     move()
  228.     collectSapling()
  229.     local success, data = turtle.inspect()
  230.     if success then
  231.         if data.name == treeSapling then
  232.             goAround()
  233.         elseif data.name == logType then
  234.             turtle.dig()
  235.             move()
  236.             fallTree()
  237.         else
  238.             print("Error while checking next tree")
  239.             return false
  240.         end
  241.     else
  242.         changeRow()
  243.     end
  244. end
  245.  
  246. checkNext()
  247.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement