mrjoecool

quarry_simple

Aug 7th, 2022 (edited)
24
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.27 KB | None | 0 0
  1. print("")--editor shenanigans
  2.  
  3. local walls = {}
  4. walls["minecraftl:dirt"] = true
  5. walls["minecraftl:stone"] = true
  6. walls["minecraftl:cobblestone"] = true
  7. walls["minecraftl:granite"] = true
  8. walls["minecraftl:diorite"] = true
  9. walls["minecraftl:andesite"] = true
  10. walls["minecraftl:deepslate"] = true
  11. walls["minecraftl:cobbled_deepslate"] = true
  12. walls["minecraftl:calcite"] = true
  13. walls["minecraftl:tuff"] = true
  14.  
  15. local liquids = {}
  16. liquids["minecraftl:water"] = true
  17. liquids["minecraftl:lava"] = true
  18.  
  19. local fuels = {}
  20. fuels["minecraft:coal"] = true
  21. fuels["minecraft:coal_block"] = true
  22. fuels["minecraft:charcoal"] = true
  23. fuels["minecraft:lava_bucket"] = true
  24. fuels["minecraft:oak_planks"] = true
  25.  
  26. local orePattern = ".+:%a+_ore"
  27.  
  28.  
  29. --check for right arguments
  30. local args  = {...}
  31. if #args ~= 3 then
  32.     print("please enter x,y and z dimensions to be mined")
  33.     print("from the starting position the mined area will extend forward, right and down")
  34.     error()
  35. end
  36.  
  37. --check for enderchests
  38. local slot15 = turtle.getItemDetail(15)
  39. local slot16 = turtle.getItemDetail(16)
  40. if slot15 and slot16 then
  41.     if not(slot15.name == "enderstorage:ender_chest" and slot15.name == "enderstorage:ender_chest") then
  42.         print("enderchest missing")
  43.         error()
  44.     end
  45. else
  46.     print("enderchest missing")
  47.     error()
  48. end
  49.  
  50. --args to vars
  51. local xrange,yrange,zrange = tonumber(args[1]),tonumber(args[2]),tonumber(args[3])
  52. print(string.format("xrange = %d, yrange = %d, zrange = %d", xrange, yrange, zrange))
  53.  
  54.  
  55. --check if turtle has empty inventory slot
  56. function invFull()
  57.     for i=1,14 do
  58.         if turtle.getItemCount(i) == 0 then
  59.             return false
  60.         end
  61.     end
  62.     return true
  63. end
  64.  
  65.  
  66. local REFUEL_SLOT = 16
  67. local EMPTY_SLOT = 15
  68.  
  69. --place enderchest, take lava bucket, refuel and put enderchest back in inventory
  70. function refuel()
  71.     turtle.select(REFUEL_SLOT)
  72.     turtle.digUp()
  73.     turtle.up()
  74.     turtle.digUp()
  75.     turtle.down()
  76.     local ok,err = turtle.placeUp()
  77.     if not ok then
  78.         print("could not place enderchest")
  79.         print(err)
  80.         error()
  81.     end
  82.     turtle.suckUp()
  83.     turtle.refuel()
  84.     turtle.dropUp()
  85.     turtle.digUp()
  86. end
  87.  
  88.  
  89. --place enderchest, empty all slots except enderchest slots and put enderchest back in inverntory
  90. function emptyInv()
  91.     turtle.select(EMPTY_SLOT)
  92.     turtle.digUp()
  93.     turtle.up()
  94.     turtle.digUp()
  95.     turtle.down()
  96.     local ok,err = turtle.placeUp()
  97.     if not ok then
  98.         print("could not place enderchest")
  99.         print(err)
  100.         error()
  101.     end
  102.     for i=1,14 do
  103.         turtle.select(i)
  104.         turtle.dropUp()
  105.     end
  106.     turtle.select(EMPTY_SLOT)
  107.     turtle.digUp()
  108. end
  109.  
  110.  
  111. --basic mining move
  112. function digAndMove()
  113.     turtle.dig()
  114.     turtle.forward()
  115. end
  116.  
  117.  
  118. --digs a cube of size xrange*zrange*yrange (input args) including the starting block
  119. --digs forward,right and down
  120. function quarryOneLayer(xrange,yrange,zrange)
  121.     --mine cube
  122.     for y = 1,yrange do
  123.         --refuel if needed
  124.         if turtle.getFuelLevel() < 1000 then
  125.             print("fuel = "..turtle.getFuelLevel())
  126.             refuel()
  127.         end
  128.         for z = 1,zrange do
  129.             -- empty inventory if needed
  130.             if invFull() then
  131.                 print("inventory full")
  132.                 emptyInv()
  133.             end
  134.             for x = 1,xrange do
  135.                 if x < xrange then
  136.                     digAndMove()
  137.                 end
  138.             end
  139.             if  z < zrange then
  140.                 --BUG!!!!! 2x2 not "mirrored"
  141.                 if yrange % 2 == 0 then
  142.                     if ((y % 2 == 1) and (z % 2 == 1)) or ((y % 2 == 0) and (z % 2 == 0)) then
  143.                         turtle.turnRight()
  144.                         digAndMove()
  145.                         turtle.turnRight()
  146.                     else
  147.                         turtle.turnLeft()
  148.                         digAndMove()
  149.                         turtle.turnLeft()
  150.                     end
  151.                 else
  152.                     if z % 2 == 1 then
  153.                         turtle.turnRight()
  154.                         digAndMove()
  155.                         turtle.turnRight()
  156.                     else
  157.                         turtle.turnLeft()
  158.                         digAndMove()
  159.                         turtle.turnLeft()
  160.                     end
  161.                 end
  162.             end
  163.         end
  164.         if y < yrange then
  165.             turtle.turnLeft()
  166.             turtle.turnLeft()
  167.             turtle.digDown()
  168.             turtle.down()
  169.         end
  170.     end
  171.     --return to start
  172.     if yrange % 2 == 1 then
  173.         if zrange % 2 == 1 then
  174.             turtle.turnLeft()
  175.             for i=1,zrange-1 do
  176.                 turtle.forward()
  177.             end
  178.             turtle.turnLeft()
  179.             for i=1,xrange-1 do
  180.                 turtle.forward()
  181.             end
  182.             turtle.turnLeft()
  183.             turtle.turnLeft()
  184.         else
  185.             turtle.turnRight()
  186.             for i=1,zrange-1 do
  187.                 turtle.forward()
  188.             end
  189.             turtle.turnRight()
  190.         end
  191.     else
  192.         turtle.turnLeft()
  193.         turtle.turnLeft()
  194.     end
  195.     for i=1,yrange-1 do
  196.         turtle.up()
  197.     end
  198.     print("done")
  199. end
  200.  
  201.  
  202. quarryOneLayer(xrange,yrange,zrange)
Add Comment
Please, Sign In to add comment