Advertisement
StuBob

computercraft1

Apr 19th, 2025 (edited)
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 7.35 KB | Gaming | 0 0
  1. -- StripMineCC.lua
  2. -- A script for a turtle to strip mine in Minecraft using ComputerCraft
  3.  
  4. -- Initialize position and direction
  5. local position = {x = 0, y = 0, z = 0}
  6. local direction = 0 -- 0 = north, 1 = east, 2 = south, 3 = west
  7.  
  8. -- Initialize log file
  9. local logFile = fs.open("log.txt", "w")
  10.  
  11. local function log(message)
  12.     local timestamp = os.date("%Y-%m-%d %H:%M:%S")
  13.     local logMessage = "[" .. timestamp .. "] " .. message
  14.     print(logMessage)
  15.     logFile.writeLine(logMessage)
  16.     logFile.flush()
  17. end
  18.  
  19. -- Save position to a file
  20. local function savePosition()
  21.     log("Saving position: " .. textutils.serialize(position))
  22.     local file = fs.open("position.txt", "w")
  23.     file.write(textutils.serialize(position))
  24.     file.close()
  25. end
  26.  
  27. -- Load position from a file
  28. local function loadPosition()
  29.     if fs.exists("position.txt") then
  30.         log("Loading position from file.")
  31.         local file = fs.open("position.txt", "r")
  32.         position = textutils.unserialize(file.readAll())
  33.         file.close()
  34.         log("Loaded position: " .. textutils.serialize(position))
  35.     else
  36.         log("Position file not found.")
  37.     end
  38. end
  39.  
  40. -- Refuel the turtle
  41. local function refuel()
  42.     log("Checking fuel level.")
  43.     while turtle.getFuelLevel() < 100 do
  44.         log("Fuel level is low: " .. turtle.getFuelLevel())
  45.         for i = 1, 16 do
  46.             turtle.select(i)
  47.             if turtle.refuel(0) then
  48.                 turtle.refuel()
  49.                 log("Refueled using slot " .. i)
  50.                 break
  51.             end
  52.         end
  53.         if turtle.getFuelLevel() < 100 then
  54.             log("Waiting for user to add fuel.")
  55.             print("Please add fuel to the turtle.")
  56.             os.sleep(5)
  57.         end
  58.     end
  59.     log("Fuel level sufficient: " .. turtle.getFuelLevel())
  60. end
  61.  
  62. -- Update position based on movement
  63. local function updatePosition(axis, delta)
  64.     position[axis] = position[axis] + delta
  65.     log("Updated position: " .. textutils.serialize(position))
  66.     savePosition()
  67. end
  68.  
  69. -- Move functions
  70. local function moveForward()
  71.     log("Attempting to move forward.")
  72.     if turtle.forward() then
  73.         log("Moved forward successfully.")
  74.         if direction == 0 then
  75.             updatePosition("z", -1)
  76.         elseif direction == 1 then
  77.             updatePosition("x", 1)
  78.         elseif direction == 2 then
  79.             updatePosition("z", 1)
  80.         elseif direction == 3 then
  81.             updatePosition("x", -1)
  82.         end
  83.         return true
  84.     else
  85.         log("Failed to move forward.")
  86.     end
  87.     return false
  88. end
  89.  
  90. local function moveUp()
  91.     log("Attempting to move up.")
  92.     if turtle.up() then
  93.         log("Moved up successfully.")
  94.         updatePosition("y", 1)
  95.         return true
  96.     else
  97.         log("Failed to move up.")
  98.     end
  99.     return false
  100. end
  101.  
  102. local function moveDown()
  103.     log("Attempting to move down.")
  104.     if turtle.down() then
  105.         log("Moved down successfully.")
  106.         updatePosition("y", -1)
  107.         return true
  108.     else
  109.         log("Failed to move down.")
  110.     end
  111.     return false
  112. end
  113.  
  114. -- Turn functions
  115. local function turnLeft()
  116.     log("Turning left.")
  117.     turtle.turnLeft()
  118.     direction = (direction - 1 + 4) % 4
  119.     log("New direction: " .. direction)
  120. end
  121.  
  122. local function turnRight()
  123.     log("Turning right.")
  124.     turtle.turnRight()
  125.     direction = (direction + 1) % 4
  126.     log("New direction: " .. direction)
  127. end
  128.  
  129. -- Return to origin
  130. local function returnToOrigin()
  131.     log("Returning to origin.")
  132.     -- Return to y=0
  133.     while position.y > 0 do moveDown() end
  134.     while position.y < 0 do moveUp() end
  135.  
  136.     -- Return to x=0
  137.     if position.x > 0 then
  138.         while direction ~= 3 do turnLeft() end
  139.         while position.x > 0 do moveForward() end
  140.     elseif position.x < 0 then
  141.         while direction ~= 1 do turnLeft() end
  142.         while position.x < 0 do moveForward() end
  143.     end
  144.  
  145.     -- Return to z=0
  146.     if position.z > 0 then
  147.         while direction ~= 0 do turnLeft() end
  148.         while position.z > 0 do moveForward() end
  149.     elseif position.z < 0 then
  150.         while direction ~= 2 do turnLeft() end
  151.         while position.z < 0 do moveForward() end
  152.     end
  153.  
  154.     -- Face original direction (north)
  155.     while direction ~= 0 do turnLeft() end
  156.     log("Returned to origin: " .. textutils.serialize(position))
  157. end
  158.  
  159. -- Deposit items in chest
  160. local function depositItems()
  161.     log("Depositing items.")
  162.     for i = 1, 16 do
  163.         turtle.select(i)
  164.         turtle.drop()
  165.         log("Dropped items from slot " .. i)
  166.     end
  167. end
  168.  
  169. -- Strip mine at y=11
  170. local function stripMine()
  171.     log("Starting strip mining.")
  172.     -- Move to y=11
  173.     while position.y > 11 do moveDown() end
  174.     while position.y < 11 do moveUp() end
  175.  
  176.     -- Start mining
  177.     for tunnel = 1, 10 do -- Adjust the number of tunnels as needed
  178.         log("Starting tunnel " .. tunnel)
  179.         for step = 1, 20 do -- Adjust tunnel length as needed
  180.             log("Mining step " .. step .. " in tunnel " .. tunnel)
  181.             refuel()
  182.             while not moveForward() do
  183.                 turtle.dig()
  184.                 log("Dug forward.")
  185.             end
  186.             turtle.digUp()
  187.             log("Dug upward.")
  188.             turtle.digDown()
  189.             log("Dug downward.")
  190.  
  191.             -- Check if inventory is full
  192.             local isFull = true
  193.             for i = 1, 16 do
  194.                 if turtle.getItemCount(i) == 0 then
  195.                     isFull = false
  196.                     break
  197.                 end
  198.             end
  199.  
  200.             if isFull then
  201.                 log("Inventory full. Returning to origin to deposit items.")
  202.                 returnToOrigin()
  203.                 depositItems()
  204.                 log("Returning to mining position.")
  205.                 -- Return to the current tunnel and step
  206.                 while position.y > 11 do moveDown() end
  207.                 while position.y < 11 do moveUp() end
  208.                 for _ = 1, tunnel - 1 do
  209.                     moveForward()
  210.                     turnRight()
  211.                 end
  212.                 for _ = 1, step do moveForward() end
  213.             end
  214.         end
  215.  
  216.         -- Turn around and return to start of tunnel
  217.         turnRight()
  218.         turnRight()
  219.         for _ = 1, 20 do moveForward() end
  220.         turnRight()
  221.  
  222.         -- Move to the next tunnel
  223.         moveForward()
  224.         turnRight()
  225.     end
  226.     log("Finished strip mining.")
  227. end
  228.  
  229. -- Ask for current position if not saved before
  230. if not fs.exists("position.txt") then
  231.     log("Position file not found. Asking user for current position.")
  232.     print("Position file not found. Please enter the turtle's current position.")
  233.     print("Enter X coordinate:")
  234.     position.x = tonumber(read())
  235.     print("Enter Y coordinate:")
  236.     position.y = tonumber(read())
  237.     print("Enter Z coordinate:")
  238.     position.z = tonumber(read())
  239.     print("Enter direction (0 = north, 1 = east, 2 = south, 3 = west):")
  240.     direction = tonumber(read())
  241.     savePosition()
  242. end
  243.  
  244. -- Main program
  245. log("Starting main program.")
  246. loadPosition()
  247. log("refueling turtle.")
  248. refuel()
  249.  
  250. log("Starting strip mining.")
  251. stripMine()
  252.  
  253. log("Strip mining complete. Returning to origin and depositing items.")
  254. returnToOrigin()
  255.  
  256. log("Depositing items.")
  257. depositItems()
  258. log("Mining complete. Returned to origin and deposited items.")
  259. logFile.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement