Advertisement
BikerEleven

Automatic Turtle Treefarm

Mar 11th, 2012
6,868
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.93 KB | None | 0 0
  1. local shouldOutput = false
  2. local width = 0
  3. local length = 0
  4.  
  5. local function loadSettings()
  6.  
  7.     file = io.open( "settings.txt", "r" )
  8.     while true do
  9.         line = file:read()
  10.         if line == nil then break end
  11.        
  12.         if line == "true" then
  13.             shouldOutput = true
  14.         else
  15.             shouldOutput = false
  16.         end
  17.        
  18.         line = file:read()
  19.         if line == nil then break end
  20.        
  21.         width = tonumber(line)
  22.        
  23.         line = file:read()
  24.         if line == nil then break end
  25.        
  26.         length = tonumber(line)
  27.        
  28.         file:close()
  29.    
  30.         return true
  31.     end
  32.    
  33.     file:close()
  34.    
  35.     return false
  36.  
  37. end
  38.  
  39. local function createSettings()
  40.  
  41.     term.clear()
  42.     term.setCursorPos( 1,1 )
  43.     print( "Set the settings." )
  44.  
  45.     write( "Output Redstone on cycle: " )
  46.     local str = string.lower( read() )
  47.     if str == "1" or str == "yes" or str == "true" then
  48.         shouldOutput = true
  49.     else
  50.         shouldOutput = false
  51.     end
  52.  
  53.     write( "Rows: " )
  54.     width = tonumber(read())
  55.  
  56.     write( "Trees: " )
  57.     length = tonumber(read())
  58.    
  59.     file = io.open("settings.txt", "w")
  60.     if file == nil then
  61.         --error? could be locked
  62.         return
  63.     end
  64.    
  65.     if shouldOutput then
  66.         file:write( "true" )
  67.         file:write( "\n" )
  68.     else
  69.         file:write( "false" )
  70.         file:write( "\n" )
  71.     end
  72.    
  73.     file:write( width )
  74.     file:write( "\n" )
  75.     file:write( length )
  76.     file:write( "\n" )
  77.    
  78.     file:close()
  79.    
  80.     term.clear()
  81.     term.setCursorPos( 1,1 )
  82.     print( "Ready to cycle" )
  83.  
  84.  
  85. end
  86.  
  87. term.clear()
  88. term.setCursorPos( 1,1 )
  89. print( "Logger program starting..." )
  90.  
  91. if fs.exists( "settings.txt" ) then
  92.     if not loadSettings() then
  93.         createSettings()
  94.     end
  95.    
  96.     term.clear()
  97.     term.setCursorPos( 1,1 )
  98.     print( "Ready to cycle" )
  99.  
  100. else
  101.     createSettings()
  102. end
  103.  
  104. rednet.open( "right" )
  105.  
  106. local function tryMove( direction )
  107.  
  108.     if direction == "down" then
  109.         if turtle.detectDown() then
  110.             turtle.digDown()
  111.         end
  112.         while not turtle.down() do
  113.             turtle.digDown()
  114.             sleep(1)
  115.         end
  116.     end
  117.    
  118.     if direction == "forward" then
  119.         if turtle.detect() then
  120.             turtle.dig()
  121.         end
  122.         while not turtle.forward() do
  123.             turtle.dig()
  124.             sleep(1)
  125.         end
  126.     end
  127.    
  128.     if direction == "up" then
  129.         if turtle.detectUp() then
  130.             turtle.digUp()
  131.         end
  132.         while not turtle.up() do
  133.             turtle.digUp()
  134.             sleep(1)
  135.         end
  136.     end
  137.  
  138. end
  139.  
  140. local function plantTree()
  141.    
  142.     turtle.select(1)
  143.     l = turtle.getItemCount(1)
  144.     turtle.placeDown()
  145.     t = turtle.getItemCount(1)
  146.    
  147.     if t == l then --must have not been able to place a sapling
  148.         turtle.select(2)
  149.         tryMove("down")
  150.         if turtle.detectDown() then turtle.digDown() end
  151.         turtle.placeDown()
  152.         turtle.select(1)
  153.         tryMove("up")
  154.         turtle.placeDown()
  155.     end
  156.  
  157.     turtle.select(9)
  158. end
  159.  
  160. local function harvestTree()
  161.    
  162.     steps = 1
  163.     tryMove("forward")
  164.    
  165.     while turtle.detectUp() do
  166.         tryMove( "up" )
  167.         steps = steps + 1
  168.     end
  169.    
  170.     while steps > 2 do
  171.         tryMove( "down" )
  172.         steps = steps - 1
  173.     end
  174.     plantTree()
  175.  
  176. end
  177.  
  178. local function checkTree()
  179.  
  180.     if turtle.detect() then
  181.         tryMove( "down" )
  182.         harvestTree()
  183.     else
  184.         tryMove( "forward" )
  185.         if not turtle.detectDown() then
  186.             plantTree()
  187.         end
  188.     end
  189.  
  190. end
  191.  
  192. local function harvest()
  193.  
  194.     turtle.select(1)
  195.     tryMove( "forward" )
  196.     tryMove( "up" )
  197.     checkTree()
  198.    
  199.     bump = false
  200.    
  201.     for w=1, width do
  202.    
  203.         for l=1, length do
  204.        
  205.             if l~=length then
  206.                 tryMove( "forward" )
  207.                 tryMove( "forward" )
  208.                 checkTree()
  209.             end
  210.        
  211.         end
  212.    
  213.         if w~=width then
  214.             if not bump then
  215.                 turtle.turnLeft()
  216.                 tryMove( "forward" )
  217.                 tryMove( "forward" )
  218.             else
  219.                 turtle.turnRight()
  220.                 tryMove( "forward" )
  221.                 tryMove( "forward" )
  222.             end
  223.             checkTree()
  224.            
  225.             if bump then
  226.                 turtle.turnRight()
  227.             else
  228.                 turtle.turnLeft()
  229.             end
  230.            
  231.             bump = not bump
  232.         end
  233.        
  234.     end
  235.    
  236.    
  237.     --Return
  238.     if not bump then
  239.         turtle.turnLeft()
  240.         tryMove( "forward" )
  241.         turtle.turnLeft()
  242.         for i = 1, length do
  243.             tryMove( "forward" )
  244.             tryMove( "forward" )
  245.             if i~=length then
  246.                 tryMove( "forward" )
  247.             end
  248.         end
  249.     else
  250.         tryMove( "forward" )
  251.         tryMove( "forward" )
  252.     end
  253.     turtle.turnLeft()
  254.    
  255.     if width == 1 then
  256.         tryMove( "forward" )
  257.     else
  258.         for i=1, width - 1 do
  259.             tryMove( "forward" )
  260.             tryMove( "forward" )
  261.             tryMove( "forward" )
  262.         end
  263.         if not bump then
  264.             tryMove( "forward" )
  265.         end
  266.     end
  267.    
  268.     turtle.turnLeft()
  269.     tryMove( "down" )
  270.     turtle.select(9)
  271.    
  272.    
  273.     --Drop off and resupply
  274.     if shouldOutput then
  275.         redstone.setOutput("left", true)
  276.         output = true
  277.        
  278.         while output do
  279.            
  280.             for i=3, 9 do
  281.                 if turtle.getItemSpace( i ) ~= 64 then
  282.                     break
  283.                 elseif i==9 and turtle.getItemSpace( 9 ) == 64 then
  284.                     output = false
  285.                 end
  286.             end
  287.             sleep(0.5)
  288.         end
  289.        
  290.         redstone.setOutput("left", false)
  291.     end
  292.    
  293.     print( "Ready to cycle" )
  294.        
  295. end
  296.  
  297. while true do
  298.     event, p1, p2 = os.pullEvent()
  299.    
  300.     if event == "rednet_message" and p2 == "startLoging" then
  301.         harvest()
  302.     end
  303.    
  304.     if event == "char" and p1 == "s" then
  305.         createSettings()
  306.     end
  307.    
  308.     if event == "char" and p1 == "r" then
  309.         print("User overide, havest starting.")
  310.         harvest()
  311.     end
  312. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement