Advertisement
gur111

Turtle Miner ComptuerCraft

Jun 1st, 2025 (edited)
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.90 KB | None | 0 0
  1. local logFilePath = "mine.log"
  2.  
  3. -- Function to log messages to a file
  4. function log(message)
  5.   local file = fs.open(logFilePath, "a")
  6.   file.writeLine(message)
  7.   file.close()
  8. end
  9.  
  10. -- Direction vectors: north (-Z), east (+X), south (+Z), west (-X)
  11. local dirs = {
  12.   [0] = {x = 0, z = -1},
  13.   [1] = {x = 1, z = 0},
  14.   [2] = {x = 1, z = 0},
  15.   [3] = {x = 0, z = 1},
  16.   [4] = {x = -1, z = 0},
  17. }
  18.  
  19. -- Initial state
  20. local pos = {x = 0, y = 0, z = 0}
  21. local heading = 0  -- 0=north, 1=east, 2=south, 3=west
  22.  
  23. -- Helpers
  24. function turnLeft()
  25.   turtle.turnLeft()
  26.   heading = (heading - 1) % 4
  27. end
  28.  
  29. function turnRight()
  30.   turtle.turnRight()
  31.   heading = (heading + 1) % 4
  32. end
  33.  
  34. function moveForward()
  35.   while not turtle.forward() do
  36.     turtle.attack()
  37.     digForward()
  38.     sleep(0.5)
  39.   end
  40.   pos.x = pos.x + dirs[heading].x
  41.   pos.z = pos.z + dirs[heading].z
  42. end
  43.  
  44. function moveBackward()
  45.   turtle.back()
  46.   pos.x = pos.x - dirs[heading].x
  47.   pos.z = pos.z - dirs[heading].z
  48. end
  49.  
  50. function moveUp()
  51.   while not turtle.up() do
  52.     turtle.attackUp()
  53.     digUp()
  54.     sleep(0.5)
  55.   end
  56.   pos.y = pos.y + 1
  57. end
  58.  
  59. function moveDown()
  60.   while not turtle.down() do
  61.     turtle.attackDown()
  62.     digDown()
  63.     sleep(0.5)
  64.   end
  65.   pos.y = pos.y - 1
  66. end
  67.  
  68. function digForward()
  69.   while turtle.detect() do
  70.     turtle.dig()
  71.     sleep(0.3)
  72.   end
  73. end
  74.  
  75. function digUp()
  76.   while turtle.detectUp() do
  77.     turtle.digUp()
  78.     sleep(0.3)
  79.   end
  80. end
  81.  
  82. function digDown()
  83.   while turtle.detectDown() do
  84.     turtle.digDown()
  85.     sleep(0.3)
  86.   end
  87. end
  88.  
  89. function isInventoryFull()
  90.   for i = 1, 16 do
  91.     if turtle.getItemCount(i) == 0 then return false end
  92.   end
  93.   return true
  94. end
  95.  
  96. function refuelIfNeeded()
  97.   for i = 1, 16 do
  98.     turtle.select(i)
  99.     if turtle.refuel(0) then
  100.       turtle.refuel()
  101.       log("Refueled from slot " .. i)
  102.     end
  103.   end
  104.   turtle.select(1)
  105. end
  106.  
  107. function dig()
  108.   digForward()
  109.   moveForward()
  110.   digUp()
  111.   digDown()
  112.   if isInventoryFull() then
  113.     placeChestAndUnload()
  114.   end
  115.   log("Dug block at position: (" .. pos.x .. ", " .. pos.y .. ", " .. pos.z .. ")")
  116. end
  117.  
  118. function placeChestAndUnload()
  119.   turtle.select(1)
  120.   if turtle.placeDown() then
  121.     log("Placed chest below at position: (" .. pos.x .. ", " .. pos.y .. ", " .. pos.z .. ")")
  122.     for i = 2, 16 do
  123.       turtle.select(i)
  124.       turtle.dropDown()
  125.     end
  126.     turtle.select(1)
  127.   else
  128.     log("Error: Unable to place chest!")
  129.     print("Error: Unable to place chest!")
  130.     error("Stopping script due to inability to place chest.")
  131.   end
  132. end
  133.  
  134. function digTunnel(x)
  135.   for i = 1, x do
  136.     dig()
  137.   end
  138.   refuelIfNeeded()
  139. end
  140.  
  141. function goTo(x, y, z)
  142.   while pos.y < y do moveUp() end
  143.   while pos.y > y do moveDown() end
  144.  
  145.   local dx = x - pos.x
  146.   if dx ~= 0 then
  147.     faceDirection(dx > 0 and 1 or 3)
  148.     for i = 1, math.abs(dx) do moveForward() end
  149.   end
  150.  
  151.   local dz = z - pos.z
  152.   if dz ~= 0 then
  153.     faceDirection(dz > 0 and 2 or 0)
  154.     for i = 1, math.abs(dz) do moveForward() end
  155.   end
  156. end
  157.  
  158. function faceDirection(dir)
  159.   while heading ~= dir do
  160.     turnRight()
  161.   end
  162. end
  163.  
  164. local args = { ... }
  165.  
  166. function main()
  167.   if #args < 3 then
  168.     print("Usage: mine <tunnelLength> <numTunnels> <spacing>")
  169.     return
  170.   end
  171.  
  172.   local tunnelLength = tonumber(args[1])
  173.   local numTunnels = tonumber(args[2])
  174.   local spacing = tonumber(args[3])
  175.  
  176.   if not tunnelLength or not numTunnels or not spacing then
  177.     print("Invalid input.")
  178.     return
  179.   end
  180.  
  181.   log("Starting mining operation with tunnel length: " .. tunnelLength .. ", number of tunnels: " .. numTunnels .. ", spacing: " .. spacing)
  182.   -- digTunnel(3)
  183.   for _ = 1, math.floor(numTunnels / 2) do
  184.     digTunnel(1 + spacing)
  185.     turnLeft()
  186.     digTunnel(tunnelLength)
  187.     turnRight()
  188.     digTunnel(1 + spacing)
  189.     turnRight()
  190.     digTunnel(tunnelLength)
  191.     turnLeft()
  192.   end
  193.  
  194.   log("Mining complete.")
  195.   print("Mining complete.")
  196. end
  197.  
  198. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement