Want more features on Pastebin? Sign Up, it's FREE!
Guest

Turtle Builder

By: TeddyJ on Feb 16th, 2013  |  syntax: Lua  |  size: 4.23 KB  |  views: 662  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. local empty={}
  2. local x,y,z,d= 0,0,0,0
  3. local FUEL,FRAME,FILLER,WINDOW,FLOOR,TRASH = 1,2,3,4,5,6
  4.  
  5. print "Welcome to TeddyJ's turtle builder"
  6. print "Please ensure your chests and turtles are"
  7. print "arranged as follows:"
  8. print "            [T]"
  9. print "[5][4][3][2][1]"
  10. print "T=turtle, 1..5 chests containing Floor/Window/Filler/Frame/Fuel materials"
  11. print ""
  12. print "How big is the gap between chests (0 for no gap)?"
  13. local chest_gap=io.read()
  14. print "How many panels long would you like the building?"
  15. local length=io.read()
  16. print "How many panels wide would you like the building?"
  17. local width=io.read()
  18. print "How many storeys high would you like the building?"
  19. local storeys=io.read()
  20.  
  21. function goUp(n)
  22.         checkFuel()
  23.         if n==nil then n=1 end
  24.         y=y+n
  25.         for _=1,n do
  26.                 turtle.digUp()
  27.                 turtle.up()
  28.         end
  29. end
  30.  
  31. function placeDown(n)
  32.         if turtle.detectDown() then
  33.                 turtle.select(TRASH)
  34.                 turtle.digDown()
  35.                 turtle.drop()
  36.         end
  37.         turtle.select(n)
  38.         if turtle.getItemCount(n)==0 then
  39.                 refill(n)
  40.         end
  41.         turtle.placeDown()
  42. end
  43.  
  44. function refill(n)
  45.         if not(empty[n]) then
  46.                 goToChestAndRestock(n)
  47.                 goToLastPlace()
  48.         end
  49. end
  50.  
  51. function goToChestAndRestock(n)
  52.         for _=1,6 do
  53.                 turtle.digUp()
  54.                 turtle.up()
  55.         end
  56.         for _=1,d+3 do
  57.                 turtle.turnLeft()
  58.         end
  59.         for _=1,x do
  60.                 turtle.dig()
  61.                 turtle.forward()
  62.         end
  63.         turtle.turnRight()
  64.         for _=0,z do
  65.                 turtle.dig()
  66.                 turtle.forward()
  67.         end
  68.         for _=1,(y+5) do
  69.                 turtle.down()
  70.         end
  71.         turtle.turnRight()
  72.         if n>1 then
  73.                 for _=2,n do
  74.                         for i=0,chest_gap do
  75.                                 turtle.forward()
  76.                         end
  77.                 end
  78.                 content=turtle.suckDown()
  79.                 for _=2,n do
  80.                         for i=0,chest_gap do
  81.                                 turtle.back()
  82.                         end
  83.                 end
  84.         else
  85.                 content=turtle.suckDown()
  86.         end
  87.         if not(content) then empty[n]=true end
  88.         turtle.turnRight()
  89. end
  90.  
  91. function goToLastPlace()
  92.         for _=1,(y+5) do
  93.                 turtle.up()
  94.         end
  95.         for _=0,z do
  96.                 turtle.forward()
  97.         end
  98.         turtle.turnLeft()
  99.         for _=1,x do
  100.                 turtle.forward()
  101.         end
  102.         for _=1,6 do
  103.                 turtle.down()
  104.         end
  105.         for _=1,d+5 do
  106.                 turtle.turnRight()
  107.         end
  108. end
  109.  
  110. function goDown(n)
  111.         checkFuel()
  112.         if n==nil then n=1 end
  113.         y=y-n
  114.         for _=1,n do
  115.                 turtle.digDown()
  116.                 turtle.down()
  117.         end
  118. end
  119.  
  120. function turnLeft()
  121.         d=d-1
  122.         if d==-1 then d=3 end
  123.         turtle.turnLeft()
  124. end
  125.  
  126. function turnRight()
  127.         d=d+1
  128.         if d==4 then d=0 end
  129.         turtle.turnRight()
  130. end
  131.  
  132. function checkFuel()
  133.         if tonumber(turtle.getFuelLevel())~= nil and turtle.getFuelLevel()<80 then
  134.                 print "Fuel low"
  135.                 if turtle.getItemCount(FUEL)==0 then
  136.                         print "No fuel available, restocking"
  137.                         refill(FUEL)
  138.                 end
  139.                 print "Refueling"
  140.                 turtle.select(FUEL)
  141.                 if not(turtle.refuel()) then
  142.                         print "No fuel in slot 1! Press enter when filled"
  143.                         io.read()
  144.                 end
  145.         end
  146. end
  147.  
  148. function goForward(n)
  149.         checkFuel()
  150.         if n==nil then n=1 end
  151.         if d==0 then z=z+n end
  152.         if d==1 then x=x-n end
  153.         if d==2 then z=z-n end
  154.         if d==3 then x=x+n end
  155.         for _=1,n do
  156.                 turtle.dig()
  157.                 turtle.forward()
  158.         end
  159. end
  160.  
  161. function goBack(n)
  162.         if n==nil then n=1 end
  163.         if d==0 then z=z-n end
  164.         if d==1 then x=x+n end
  165.         if d==2 then z=z+n end
  166.         if d==3 then x=x-n end
  167.         for _=1,n do
  168.                 turtle.back()
  169.         end
  170. end
  171.  
  172.  
  173. function getBlockType(i,j)
  174.         if i==5 or j==5 then
  175.                 return FRAME
  176.         end
  177.         if j==2 or j==3 then
  178.                 if (i==2 or i==3) then
  179.                         return WINDOW
  180.                 else
  181.                         return FILLER
  182.                 end
  183.         end
  184.         return FILLER
  185. end
  186.  
  187. function doSide(panels, isFinalSide)
  188.         for _=1,panels do
  189.                 doPanel()
  190.         end
  191.         if not(isFinalSide) then
  192.                 turnLeft()
  193.                 goForward()
  194.                 turnLeft()
  195.                 goForward()
  196.                 turnRight()
  197.         end
  198. end
  199.  
  200. function doPanel()
  201.         checkFuel()
  202.         for i=1,5 do
  203.                 goUp()
  204.                 for j=1,5 do
  205.                         b=getBlockType(i,j)
  206.                         placeDown(b)
  207.                         goForward()
  208.                 end
  209.                 if i<5 then
  210.                         goBack(5)
  211.                 end
  212.         end
  213.         goDown(5)
  214. end
  215.  
  216. function doFloor()
  217.         turnLeft()
  218.         goForward()
  219.         turnRight()
  220.         floor_width=(width*5)-1
  221.         floor_length=(length*5)-1
  222.         for i=1,floor_width do
  223.                 for i=1,floor_length do
  224.                         placeDown(FLOOR)
  225.                         goForward()
  226.                 end
  227.                 goBack(floor_length)
  228.                 turnLeft()
  229.                 goForward()
  230.                 turnRight()
  231.         end
  232.         turnRight()
  233.         goForward(floor_width+1)
  234.         turnLeft()
  235. end
  236.  
  237. function doStorey()
  238.         goForward()
  239.         doFloor()
  240.         doSide(length)
  241.         doSide(width)
  242.         doSide(length)
  243.         doSide(width,true)
  244.         goUp(6)
  245.         goBack()
  246.         turnLeft()
  247.         goDown()
  248. end
  249.  
  250. goForward()
  251. for _=1,storeys do
  252.         doStorey()
  253. end
  254. goForward()
  255. doFloor()
clone this paste RAW Paste Data