Vadilla

Computer Craft Cactus Farmer

Mar 5th, 2015
206
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. x = 0
  2. y = 0
  3. z = 0
  4. size = 0
  5. cac = 0
  6. needCac = 0
  7. dir = 0
  8.  
  9. function up()
  10.     if turtle.up() == true then
  11.         z=z+1
  12.         return true
  13.     end
  14.     return false
  15. end
  16. function down()
  17.     if turtle.down() == true then
  18.         z=z-1
  19.         return true
  20.     end
  21.     return false
  22. end
  23. function move()
  24.     if turtle.forward() then
  25.         if(dir==0) then x=x+1 end
  26.         if(dir==1) then y=y+1 end
  27.         if(dir==2) then x=x-1 end
  28.         if(dir==3) then y=y-1 end
  29.         return true
  30.         else
  31.         return false
  32.     end
  33. end
  34. function turn(wh)
  35.     if(wh == "r")  then
  36.         turtle.turnRight()
  37.         dir = dir+1
  38.     end
  39.     if(wh == "l")  then
  40.         turtle.turnLeft()
  41.         dir = dir-1
  42.     end
  43.     if(dir == -1) then dir = 3 end
  44.     if(dir == 4) then dir = 0 end
  45.    
  46. end
  47. function getCactus()
  48.     setDir(3)
  49.     has = false
  50.     for i = 1,5,1 do
  51.         if turtle.suck() == false then break end
  52.         has = true
  53.     end
  54.     return has
  55. end
  56. function getSand()
  57.     setDir(1)
  58.     has = false
  59.     for i = 1,5,1 do
  60.         if turtle.suck() == false then break end
  61.         has = true
  62.     end
  63.     return has
  64. end
  65. function setDir(d)
  66.     a = d -1
  67.     b = d + 1
  68.     if(a == -1) then a = 3 end
  69.     if(b == 4) then b = 0 end
  70.     if a==dir then
  71.         turn("r")
  72.         return 0
  73.     end
  74.     if b==dir then
  75.         turn("l")
  76.         return 0
  77.     end
  78.  
  79.     if(d~=dir) then
  80.         turn("r")
  81.         turn("r")
  82.     end
  83.  
  84. end
  85. function go(tx,ty)
  86.     write("Go to ")
  87.     write(tx)
  88.     write(" ")
  89.     write(ty)
  90.     print()
  91.     if tx > x then
  92.         setDir(0)
  93.         while(x ~= tx) do move() end
  94.     end
  95.     if tx < x then
  96.         setDir(2)
  97.         while(x ~= tx) do move() end
  98.     end
  99.     if ty > y then
  100.         setDir(1)
  101.         while(y ~= ty) do move() end
  102.     end
  103.     if ty < y then
  104.         setDir(3)
  105.         while(y ~= ty) do move() end
  106.     end
  107.    
  108.        
  109. end
  110. function goz(tz)
  111.     if(tz > z) then
  112.         for i = z,tz-1,1 do
  113.             up()
  114.         end
  115.     else
  116.         for i = tz,z-1,1 do
  117.             down()
  118.         end
  119.     end
  120. end
  121.    
  122. function start()
  123.     print("Hi! This is cactus farmer. Please place two chests. First chest on left(with cactus) and second chest on right (put here sand)")
  124.     write("Sqare size = ")
  125.     size = read() -1
  126.     print("Farm already builded?(y or n) = ")
  127.     if(read() == "y") then
  128.         lastx=size + 2
  129.         lasty=size * math.fmod(size+1,2)
  130.         complete = true
  131.     end
  132.     needCac = math.ceil((size * size) / 2)
  133.     term.clear()
  134. end
  135. lastx = 2
  136. lasty = 0
  137. cacSlot = -1
  138. sandSlot = -1
  139. function setSlots()
  140.     cacSlot = -1
  141.     sandSlot = -1
  142.     for i = 16,1,-1 do
  143.         turtle.select(i)
  144.  
  145.         if turtle.getItemCount() > 0 then
  146.             if turtle.getItemDetail().name == "minecraft:sand" then
  147.                 sandSlot = i
  148.             end
  149.             if turtle.getItemDetail().name == "minecraft:cactus" then
  150.                 cacSlot = i
  151.             end
  152.         end
  153.     end
  154. end
  155. farmed = false
  156. complete = false
  157. function check()
  158.     if(turtle.getFuelLevel() + 10 < x + y + z) then
  159.         go(0,0)
  160.         goz(0)
  161.         while(true) do
  162.            
  163.             print("Waiting for fuel...")
  164.             os.pullEvent(turtle_inventory)
  165.             ex = false
  166.             for i = 1,16,1 do
  167.                 if(turtle.refuel() == true) then
  168.                     ex = true
  169.                     break
  170.                 end
  171.             end
  172.             if(ex == true) then break end
  173.         end
  174.     end
  175.     t = 0
  176.     for i = 1,16,1 do
  177.         if(turtle.getItemCount(i) > 0) then t = t + 1 end
  178.     end
  179.     if(t == 16) then
  180.         go(0,0)
  181.         goz(0)
  182.         setDir(3)
  183.         while(true) do
  184.             setSlots()
  185.             if(cacSlot == -1) then break end
  186.             turtle.select(cacSlot)
  187.             turtle.drop(64)
  188.         end
  189.     end
  190.     goz(4)
  191. end
  192. function place()
  193.     farmed = true
  194.     goz(4)
  195.         for i = lastx,size+2,1 do
  196.             mod = math.fmod(i,2)
  197.             mod2 = 1
  198.             if(lasty ~= 0) then mod2 = 0 end
  199.             for j = mod * size * mod2- mod * math.fmod(size + 1,2) * mod2 + lasty,size * math.abs(mod - 1),2-(4 * mod) do
  200.                 lasty = 0
  201.                 if(turtle.getItemCount(cacSlot) == 0 or turtle.getItemCount(sandSlot) == 0) then setSlots() end
  202.                 print (cacSlot)
  203.                 print (sandSlot)
  204.                 if cacSlot == -1 or sandSlot == -1 then
  205.                     lastx = i
  206.                     lasty = j
  207.                     i = size + 3
  208.  
  209.                     return false
  210.                 end
  211.                 check()
  212.                 go(i,j)
  213.                 turtle.select(sandSlot)
  214.                 while(down()) do end
  215.                 local succes,data = turtle.inspectDown()
  216.                 if data.name ~= "minecraft:cactus" then
  217.                     up()
  218.                     turtle.placeDown()
  219.                 end
  220.                 up()
  221.                 turtle.select(cacSlot)
  222.                 turtle.placeDown()
  223.                 goz(4)
  224.                
  225.             end
  226.            
  227.         end
  228.     lastx=size + 2
  229.     lasty=size * math.fmod(size+1,2)
  230.     complete = true
  231.     go(0,0)
  232.     goz(0)
  233.     setDir(1)
  234.     while(true) do
  235.         setSlots()
  236.         if(sandSlot == -1) then break end
  237.         turtle.select(sandSlot)
  238.         turtle.drop(64)
  239.     end
  240. end
  241.  
  242. function farm()
  243.     print("-----------")
  244.     print (lastx)
  245.     print(lasty)
  246.     goz(4)
  247.     go(2,0)
  248.     while(turtle.detectDown() == false) do sleep(3) end
  249.     for i = 2,lastx,1 do
  250.             mod = math.fmod(i,2)
  251.             toy = size * math.abs(mod - 1)
  252.             if i == lastx then toy = lasty end
  253.             for j = mod * size - mod * math.fmod(size + 1,2),size * math.abs(mod - 1),2-(4 * mod) do
  254.             check()
  255.             go(i,j)
  256.             if(turtle.detectDown()) then
  257.                 turtle.digDown()
  258.                 down()
  259.                 turtle.digDown()
  260.                 up()
  261.             end
  262.         end
  263.     end
  264.     go(0,0)
  265.     goz(0)
  266.     setDir(3)
  267.     while(true and complete == true) do
  268.         setSlots()
  269.         if(cacSlot == -1) then break end
  270.         turtle.select(cacSlot)
  271.         turtle.drop(64)
  272.     end
  273. end
  274. function mainloop()
  275.     while(true) do
  276.         if(complete == true) then farm() else
  277.         go(0,0)
  278.         goz(0)
  279.         setSlots()
  280.         print(cacSlot)
  281.         print(sandSlot)
  282.        
  283.         if sandSlot == -1 then getSand() setSlots() end
  284.         if cacSlot == -1 then getCactus() setSlots() end
  285.         if(cacSlot == -1 or sandSlot == -1) then
  286.             if(farmed == false) then write("Looking for cactus and sand...")
  287.             else farm() end
  288.         else place()
  289.         end
  290.     end
  291.     end
  292. end
  293. start()
  294. mainloop()
RAW Paste Data