Blazuno

veinminer

Mar 16th, 2022 (edited)
423
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.61 KB | None | 0 0
  1. os.loadAPI("movement")
  2.  
  3. miner = {}
  4.  
  5. miner.blacklist = {
  6. "minecraft:stone",
  7. "minecraft:dirt",
  8. "minecraft:diorite",
  9. "minecraft:andesite",
  10. "minecraft:granite",
  11. "minecraft:gravel",
  12. "minecraft:deepslate"
  13. }
  14.  
  15. miner.logCoords = {}
  16. miner.logCoords.x = {}
  17. miner.logCoords.y = {}
  18. miner.logCoords.z = {}
  19. miner.logCoords.orient = {}
  20.  
  21. miner.parseArgs = function()
  22.     term.clear()
  23.     term.setCursorPos(1, 1)
  24.     print("Welcome to turtle miner, please input Y level of quarry.")
  25.     miner.yLevelArg = read()
  26.     print("Now please input the current Y level of turtle.")
  27.     miner.curYLevelArg = read()
  28.     print("Commencing mining..")
  29. end
  30.  
  31.  
  32.    
  33.  
  34. miner.checkStraight = function()
  35.     local self = false
  36.     for i,v in pairs(miner.blacklist) do
  37.         success, tablee = turtle.inspect()
  38.         if tablee.name == v then
  39.             self = false
  40.         else
  41.             self = true
  42.         end
  43.     end
  44.     return self
  45. end
  46.  
  47. miner.checkUp = function()
  48.     local self = false
  49.     for i,v in pairs(miner.blacklist) do
  50.         success, tablee = turtle.inspectUp()
  51.         if tablee.name == v then
  52.             self = false
  53.         else
  54.             self = true
  55.         end
  56.     end
  57.     return self
  58. end
  59.  
  60. miner.checkDown = function()
  61.     local self = false
  62.     for i,v in pairs(miner.blacklist) do
  63.         success, tablee = turtle.inspectDown()
  64.         if tablee.name == v then
  65.             self = false
  66.         else
  67.             self = true
  68.         end
  69.     end
  70.     return self
  71. end
  72.  
  73. miner.spinCheck = function()
  74.     local self
  75.     for i= 1,4 do
  76.         movement.turnRight()
  77.         if miner.checkStraight() == true then
  78.             self = true
  79.         else
  80.             self = false
  81.         end
  82.     end
  83.     return self
  84. end
  85.        
  86.  
  87. miner.fullCheck = function()
  88.     local self
  89.     if miner.checkStraight() == false then
  90.         if miner.checkUp() == false then
  91.             if miner.checkDown() == false then
  92.                 if miner.spinCheck == false then
  93.                     self = false
  94.                 else
  95.                     self = movement.orientation
  96.                 end
  97.             else
  98.                 self = "down"
  99.             end
  100.         else
  101.             self = "up"
  102.         end
  103.     else
  104.         self = movement.orientation
  105.     end
  106.     return self
  107. end
  108.  
  109. miner.mineOre = function()
  110.     local mineOre = false
  111.     local allOrient = {
  112.     "north",
  113.     "south",
  114.     "east",
  115.     "west",
  116.     "up",
  117.     "down"}
  118.     for i,v in pairs(allOrient) do
  119.         if v == miner.fullCheck() then
  120.             if v == "up" then
  121.                 turtle.digUp()
  122.                 movement.up()
  123.                 table.insert(miner.logCoords.x, movement.curXPos)
  124.                 table.insert(miner.logCoords.y, movement.curYPos)
  125.                 table.insert(miner.logCoords.z, movement.curZPos)
  126.                 table.insert(miner.logCoords.z, movement.orientation)
  127.                 mineOre = true 
  128.             elseif v == "down" then
  129.                 turtle.digDown()
  130.                 movement.down()
  131.                 table.insert(miner.logCoords.x, movement.curXPos)
  132.                 table.insert(miner.logCoords.y, movement.curYPos)
  133.                 table.insert(miner.logCoords.z, movement.curZPos)
  134.                 table.insert(miner.logCoords.z, movement.orientation)
  135.                 mineOre = true
  136.             else
  137.                 turtle.dig()
  138.                 movement.forward()
  139.                 table.insert(miner.logCoords.x, movement.curXPos)
  140.                 table.insert(miner.logCoords.y, movement.curYPos)
  141.                 table.insert(miner.logCoords.z, movement.curZPos)
  142.                 table.insert(miner.logCoords.z, movement.orientation)
  143.                 mineOre = true
  144.             end
  145.         else
  146.             mineOre = false
  147.         end
  148.     end
  149.     return mineOre
  150. end
  151.                
  152. miner.veinMine = function()
  153.     local repeatBoolean = false
  154.     repeat
  155.         if miner.mineOre() == true then
  156.             repeat
  157.                 sleep()
  158.             until miner.mineOre() == false
  159.             repeatBoolean = true
  160.         end
  161.         if repeatBoolean == true then
  162.             local tArgs = #miner.logCoords.x
  163.             while repeatBoolean == true do
  164.                 movement.goToCoords(miner.logCoords.x[tArgs], miner.logCoords.y[tArgs], miner.logCoords.z[tArgs], miner.logCoords.orient)
  165.                 tArgs = tArgs - 1
  166.                 if miner.mineOre() == false and tArgs == 1 then
  167.                     repeatBoolean = false
  168.                 end
  169.             end
  170.         end
  171.     until repeatBoolean == false
  172.     newTArgs = #miner.logCoords.x
  173.     for i= newTArgs, 1, -1 do
  174.         table.remove(miner.logCoords.x, i)
  175.         table.remove(miner.logCoords.y, i)
  176.         table.remove(miner.logCoords.z, i)
  177.         table.remove(miner.logCoords.orient, i)
  178.     end
  179. end
  180.  
  181.  
  182.        
  183.                    
  184. miner.goToY = function()
  185.     local changeInY = math.abs(miner.yLevelArg - miner.curYLevelArg)
  186.     for i=1, changeInY do
  187.         turtle.digDown()
  188.         movement.down()
  189.     end
  190. end
  191.  
  192.  
  193. miner.refuel = function()
  194.     local savedPos = {}
  195.     savedPos.x = movement.curXPos
  196.     savedPos.y = movement.curYPos
  197.     savedPos.z = movement.curZPos
  198.     savedPos.orient = movement.orientation
  199.     local smartFuel = turtle.getFuelLevel()
  200.     local smartFuelMovement = math.abs(movement.curXPos) + math.abs(movement.curYPos) + math.abs(movement.curZPos)
  201.     if smartFuel + 50 < smartFuelMovement then
  202.         if turtle.getItemCount(16) ~= 0 then
  203.             turtle.select(16)
  204.             turtle.refuel()
  205.             turtle.select(1)
  206.         else
  207.             movement.goHome()
  208.             movement.faceDirection("south")
  209.             turtle.up()
  210.             turtle.select(16)
  211.             if turtle.suck(32) == false then
  212.                 print("Out of fuel, please add fuel to my 16th slot or the chest.")
  213.                 repeat
  214.                     sleep(1)
  215.                 until turtle.suck(32) and turtle.refuel() == true or turtle.refuel() == true
  216.             end
  217.             turtle.select(1)   
  218.             movement.goToCoords(savedPos.x, savedPos.y, savedPos.z, savedPos.orient, "z", "x", "y")
  219.         end
  220.     end
  221. end
  222.  
  223.  
  224.  
  225. miner.empty = function()
  226.     local savedPos = {}
  227.     savedPos.x = movement.curXPos
  228.     savedPos.y = movement.curYPos
  229.     savedPos.z = movement.curZPos
  230.     savedPos.orient = movement.orientation
  231.     local garbageAmount = 0
  232.     for i=1,15 do
  233.         garbageAmount = garbageAmount + turtle.getItemCount(i)
  234.     end
  235.     if garbageAmount == 960 then
  236.         movement.goHome()
  237.         movement.faceDirection("south")
  238.         for i=1,15 do
  239.             turtle.select(i)
  240.             if turtle.drop() == false then
  241.                 print("Inventory full, please make room.")
  242.                 repeat
  243.                     sleep(1)
  244.                 until turtle.drop() == true
  245.             end
  246.         end
  247.         turtle.select(1)
  248.         movement.goToCoords(savedPos.x, savedPos.y, savedPos.z, savedPos.orient, "z", "x", "y")
  249.     end
  250. end
  251.                
  252.  
  253. miner.mineForward = function()
  254.     miner.refuel()
  255.     miner.empty()
  256.     print("VeinMine status: "..miner.veinMine())
  257.     turtle.dig()
  258.     self = movement.forward()
  259.     return self
  260. end
  261.  
  262.  
  263. miner.mine = function()
  264.     local amount = 1
  265.     miner.goToY()
  266.     while true do      
  267.         for i=1, amount do
  268.             miner.mineForward()
  269.         end
  270.         movement.turnRight()
  271.         for i=1, amount do
  272.             miner.mineForward()
  273.         end
  274.         amount = amount+1
  275.         movement.turnRight()
  276.         for i=1, amount do
  277.             miner.mineForward()
  278.         end
  279.         movement.turnRight()
  280.         for i=1,amount do
  281.             movement.forward()
  282.         end
  283.         movement.turnRight()
  284.         amount = amount + 1
  285.     end
  286. end
  287.  
  288. miner.startFuel = function()
  289.     if turtle.getFuelLevel() == 0 then
  290.         turtle.select(16)
  291.         if turtle.refuel() == false then
  292.             print("Oops!, You forgot to input fuel into the 16th slot.")
  293.             repeat
  294.                 sleep(1)
  295.             until turtle.refuel() == true
  296.         end
  297.         turtle.select(1)
  298.     end
  299. end
  300.  
  301. miner.startFuel()
  302. miner.parseArgs()
  303. miner.mine()
Add Comment
Please, Sign In to add comment