Advertisement
Magnetar

Computercraft quarry

Apr 21st, 2020
2,723
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.86 KB | None | 0 0
  1. local args = {...}
  2.  
  3. --For this you ned the enderchests from enderStorage as storage and fuel deposit
  4. rows = 0
  5. columns = 0
  6. atHome = false
  7.  
  8. if #args == 2 then
  9.     columns = tonumber(args[1])-1
  10.     rows = tonumber(args[2])-1
  11. end
  12.  
  13. if columns == 0 then
  14.     term.clear()
  15.     term.setCursorPos(1, 1)
  16.     io.write("Columns: ")
  17.     columns = tonumber(io.read()) -1
  18. end
  19.  
  20. if rows == 0 then
  21.     term.clear()
  22.     term.setCursorPos(1, 1)
  23.     io.write("Rows: ")
  24.     rows = tonumber(io.read()) -1
  25. end
  26.  
  27. term.clear()
  28. term.setCursorPos(1, 1)
  29.  
  30.  
  31. while turtle.getItemCount(1) ~= 1 do
  32.     term.setCursorPos(1, 1)
  33.     print("pleas place a enderchest with clear invertory into the first slot")
  34.     sleep(5)
  35. end
  36. while turtle.getItemCount(2) ~= 1 do
  37.     term.setCursorPos(1, 1)
  38.     print("pleas place a enderchest with coal in it into the second slot")
  39.     sleep(5)
  40. end
  41.  
  42.     rotation = 0
  43.  
  44.     posX = 0
  45.     posY = 0
  46.     posZ = 0
  47.  
  48.     maxSlots = 16
  49.     atHome = false
  50.     mode = 0
  51.  
  52.     statusText = "Diging ..."
  53.  
  54.     atBedrock = false
  55.  
  56.     function turnLeft()
  57.         turtle.turnLeft()
  58.         if rotation == 0 then
  59.             rotation = 3
  60.         else
  61.             rotation = rotation - 1
  62.         end
  63.     end
  64.  
  65.     function turnRight()
  66.         turtle.turnRight()
  67.         if rotation == 3 then
  68.             rotation = 0
  69.         else
  70.             rotation = rotation + 1
  71.         end
  72.     end
  73.  
  74.  
  75.     function pullInventarToChest()
  76.         local search = 0
  77.         turtle.dig()
  78.         turtle.dig()
  79.         turtle.select(1)
  80.         turtle.place()
  81.         for search = maxSlots, 3, -1 do
  82.             turtle.select(search)
  83.             turtle.drop()
  84.         end
  85.  
  86.         turtle.select(1)
  87.         turtle.dig()
  88.  
  89.         --Wenn inventar nicht geleert werden kann zurueck zum Anfang
  90.         if turtle.getItemCount(16) ~= 0 and turtle.getItemCount(3) ~= 0 then
  91.             statusText = "Inventar full return home"
  92.             return false
  93.         end
  94.         return true
  95.     end
  96.  
  97.     function refuelFromChest()
  98.         local search = maxSlots
  99.         if not pullInventarToChest() then
  100.             for search = maxSlots, 3, -1 do
  101.                 turtle.select(search)
  102.                 turtle.refuel(turtle.getItemCount(search))
  103.             end
  104.             statusText = "Inventar full return home"
  105.             info()
  106.             returnHome()
  107.             do return end
  108.         end
  109.         turtle.select(2)
  110.         turtle.place()
  111.         turtle.select(3)
  112.         turtle.suck()
  113.         turtle.refuel(turtle.getItemCount(3))
  114.         turtle.select(2)
  115.         turtle.dig()
  116.     end
  117.  
  118.     function checkFuel()
  119.         local minFuelLevel = posX + posY + posZ + 1
  120.         if minFuelLevel < 100 then
  121.             minFuelLevel = 100
  122.         end
  123.         if turtle.getFuelLevel() <= minFuelLevel  then
  124.             refuelFromChest()
  125.             checkFuel()
  126.         end
  127.     end
  128.  
  129.     -- Chest Full (true) | Chest empty (false)
  130.     function checkFull()
  131.         local returnment = false
  132.         if turtle.getItemCount(16) ~= 0 then
  133.             returnment = not pullInventarToChest()
  134.         end
  135.         return returnment
  136.     end
  137.  
  138.  
  139.     function proofBedrockDown()
  140.         local succes, block = turtle.inspectDown()
  141.         if succes then
  142.             if block.name == "minecraft:bedrock" then
  143.                 return true
  144.             else
  145.                 return false
  146.             end
  147.         else
  148.             return false
  149.         end
  150.     end
  151.  
  152.     function proofBedrockFront()
  153.         local succes, block = turtle.inspect()
  154.         if succes then
  155.             if block.name == "minecraft:bedrock" then
  156.                 return true
  157.             else
  158.                 return false
  159.             end
  160.         else
  161.             return false
  162.         end
  163.     end
  164.  
  165.     function returnHome()
  166.         turnFront()
  167.         while posZ > 0 do
  168.             turtle.up()
  169.             posZ = posZ - 1
  170.         end
  171.         turnLeft()
  172.         while posX > 0 do
  173.             turtle.forward()
  174.             posX = posX - 1
  175.         end
  176.         turnLeft()
  177.         while posY > 0 do
  178.             turtle.forward()
  179.             posY = posY - 1
  180.         end
  181.         atHome = true
  182.         info()
  183.     end
  184.  
  185.  
  186. function info()
  187.     term.clear()
  188.     term.setCursorPos(1, 1)
  189.     print("---------------------------------------")
  190.     print("-----------Made by Magnetar------------")
  191.     print("---------------------------------------")
  192.     print("Mining size: " .. rows + 1 .. " by " .. columns + 1)
  193.     print("")
  194.     print("X: " .. posX .. " Y: " .. posY .. " Z: " .. posZ)
  195.     print("Fuel level: " .. turtle.getFuelLevel())
  196.     print("")
  197.     print("Status: " .. statusText)
  198. end
  199.  
  200. -- Turtle dreht sich nach links
  201. -- rotation 0 schaut nach vorne
  202. -- rotation 1 schaut nach rechts
  203. -- rotation 2 schaut nach hinten
  204. -- rotation 3 schaut nach links
  205.  
  206. function turnFront()
  207.     if rotation == 1 then
  208.         turnLeft()
  209.     elseif rotation == 2 then
  210.         turnLeft()
  211.         turnLeft()
  212.     elseif rotation == 3 then
  213.         turnRight()
  214.     end
  215. end
  216.  
  217. function digForward()
  218.     if checkFull() then
  219.         --auto return home in checkFull Funktion through error
  220.         returnHome()
  221.         return false
  222.     end
  223.     checkFuel()
  224.     if not proofBedrockDown() then
  225.         while turtle.attackDown() do
  226.         end
  227.         turtle.digDown()
  228.     end
  229.     if not proofBedrockFront() then
  230.         while turtle.attack() do
  231.         end
  232.         turtle.dig()
  233.         turtle.dig()
  234.         turtle.forward()
  235.         if rotation == 0 then
  236.             posY = posY + 1
  237.         elseif rotation == 1 then
  238.             posX = posX + 1
  239.         elseif rotation == 2 then
  240.             posY = posY - 1
  241.         elseif rotation == 3 then
  242.             posX = posX - 1
  243.         end
  244.         turtle.digUp()
  245.         info()
  246.     else
  247.         returnHome()
  248.     end
  249.     return true
  250. end
  251.  
  252. function modeTurn()
  253.     if rotation == 1 then
  254.         if posY == 0 then
  255.             turnLeft()
  256.         elseif posY == rows then
  257.             turnRight()
  258.         end
  259.     elseif rotation == 3 then
  260.         if posY == 0 then
  261.             turnRight()
  262.         elseif posY == rows then
  263.             turnLeft()
  264.         end
  265.     else
  266.         sleep(0)
  267.         if rotation == 0 and mode == 0 then
  268.             turnRight()
  269.         elseif rotation == 2 and mode == 1 then
  270.             turnRight()
  271.         elseif rotation == 2 and mode == 0 then
  272.             turnLeft()
  273.         elseif rotation == 0 and mode == 1 then
  274.             turnLeft()
  275.         end
  276.     end
  277. end
  278.  
  279. function minePlane()
  280.     if rotation == 0 then
  281.         while posY < rows do
  282.             if not digForward()then
  283.                 return
  284.             end
  285.         end
  286.     elseif rotation == 2 then
  287.         while posY > 0 do
  288.             if not digForward()then
  289.                 do return end
  290.             end
  291.         end
  292.     end
  293.     sleep(0)
  294.     if posX ~= columns and mode == 0 then
  295.         modeTurn()
  296.         if digForward() then
  297.             modeTurn()
  298.         end
  299.     elseif posX ~= 0 and mode == 1 then
  300.         modeTurn()
  301.         if digForward() then
  302.             modeTurn()
  303.         end
  304.     end
  305.     return
  306. end
  307.  
  308. function goDown()
  309.     sleep(0)
  310.     -- not go down when at home
  311.     if atHome then
  312.         do return end
  313.     end
  314.  
  315.     local i = 0
  316.     while i < 4 do
  317.         if not proofBedrockDown() then
  318.             while turtle.attackDown() do
  319.             end
  320.             turtle.digDown()
  321.             turtle.down()
  322.             posZ = posZ + 1
  323.             i = i + 1
  324.         else
  325.             if not atBedrock then
  326.                 turtle.up()
  327.                 posZ = posZ - 1
  328.                 atBedrock = true
  329.             else
  330.                 returnHome()
  331.                 return
  332.             end
  333.         end
  334.     end
  335.     turtle.up()
  336.     posZ = posZ - 1
  337. end
  338.  
  339. function invertRotation()
  340.     turnLeft()
  341.     turnLeft()
  342. end
  343.  
  344.  
  345. function quarry()
  346.     while not atHome do
  347.         if mode == 0 then
  348.             while posX < columns and not atHome do
  349.                 minePlane()
  350.             end
  351.             minePlane()
  352.             goDown()
  353.             invertRotation()
  354.             mode = 1
  355.         elseif mode == 1 then
  356.             while posX > 0 and not atHome do
  357.                 minePlane()
  358.             end
  359.             minePlane()
  360.             goDown()
  361.             invertRotation()
  362.             mode = 0
  363.         end
  364.     end
  365. end
  366.  
  367. quarry()
  368.  
  369. print("---------------------------------------")
  370. print("---------------Finished----------------")
  371. print("---------------------------------------")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement