Advertisement
NayrbEroom

Untitled

Mar 27th, 2025 (edited)
341
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.02 KB | Gaming | 0 0
  1. -- Config & Args
  2. local tArgs = { ... }
  3. local returnToStart = false
  4. for _, arg in ipairs(tArgs) do
  5.     if arg == "-startPosition" then
  6.         returnToStart = true
  7.     end
  8. end
  9.  
  10. -- Optional startup delay
  11. local waitTime = 30
  12. for i = 1, waitTime do
  13.     if i == 10 then
  14.         -- After 10 seconds, proceed unless interrupted
  15.         break
  16.     end
  17.     os.sleep(1)
  18. end
  19.  
  20. -- State
  21. local pos = {x = 0, y = 0}
  22. local dir = 0 -- 0=N, 1=E, 2=S, 3=W
  23. local startPos = {x = 0, y = 0}
  24. local startDir = 0
  25. local depth = 0
  26. local maxDepth = 1
  27.  
  28. -- Helpers
  29. local function turnRight() turtle.turnRight() dir = (dir + 1) % 4 end
  30. local function turnLeft()  turtle.turnLeft()  dir = (dir + 3) % 4 end
  31.  
  32. local function moveForward()
  33.     if turtle.forward() then
  34.         if dir == 0 then pos.y = pos.y + 1
  35.         elseif dir == 1 then pos.x = pos.x + 1
  36.         elseif dir == 2 then pos.y = pos.y - 1
  37.         elseif dir == 3 then pos.x = pos.x - 1 end
  38.         return true
  39.     end
  40.     return false
  41. end
  42.  
  43. local function digIfKelp()
  44.     local success, data = turtle.inspect()
  45.     if success and data.name and data.name:lower():find("kelp") then
  46.         turtle.dig()
  47.         return true
  48.     end
  49.     return false
  50. end
  51.  
  52. local function tryMove()
  53.     digIfKelp()
  54.     if not turtle.detect() then
  55.         return moveForward()
  56.     end
  57.     return false
  58. end
  59.  
  60. local function dropKelp()
  61.     for i = 1, 16 do
  62.         turtle.select(i)
  63.         local item = turtle.getItemDetail()
  64.         if item and item.name:lower():find("kelp") then
  65.             turtle.drop()
  66.         end
  67.     end
  68. end
  69.  
  70. local function refuelFromInventory()
  71.     turtle.select(1)
  72.     while turtle.getItemCount(1) > 0 do
  73.         if not turtle.refuel(1) then
  74.             return false -- Not a valid fuel item
  75.         end
  76.         if turtle.getFuelLevel() == "unlimited" then
  77.             return true
  78.         end
  79.     end
  80.     return turtle.getFuelLevel() > 0
  81. end
  82.  
  83. local function waitForFuel(timeout)
  84.     if turtle.getFuelLevel() == 0 and refuelFromInventory() then
  85.         return true
  86.     end
  87.     local waited = 0
  88.     while turtle.getFuelLevel() == 0 and waited < timeout do
  89.         os.sleep(1)
  90.         waited = waited + 1
  91.         refuelFromInventory()
  92.     end
  93.     return turtle.getFuelLevel() > 0
  94. end
  95.  
  96. local function stepOutward()
  97.     turnRight()
  98.     tryMove()
  99.     turnLeft()
  100. end
  101.  
  102. local function returnHome()
  103.     -- Step back in from current depth
  104.     while depth > 0 do
  105.         turnLeft()
  106.         tryMove()
  107.         turnRight()
  108.         depth = depth - 1
  109.     end
  110.     -- Return to original starting pos
  111.     while pos.x ~= startPos.x or pos.y ~= startPos.y do
  112.         if pos.x < startPos.x then while dir ~= 1 do turnRight() end
  113.         elseif pos.x > startPos.x then while dir ~= 3 do turnRight() end
  114.         elseif pos.y < startPos.y then while dir ~= 0 do turnRight() end
  115.         elseif pos.y > startPos.y then while dir ~= 2 do turnRight() end
  116.         end
  117.         moveForward()
  118.     end
  119.     -- Face original start direction
  120.     while dir ~= startDir do turnRight() end
  121. end
  122.  
  123. -- MAIN LOOP
  124. while true do
  125.     if not waitForFuel(30) then return end
  126.  
  127.     local stepsTaken = 0
  128.     local loopStart = {x = pos.x, y = pos.y}
  129.     local loopDir = dir
  130.  
  131.     repeat
  132.         turnRight()
  133.         if not tryMove() then
  134.             turnLeft()
  135.             if not tryMove() then
  136.                 turnLeft()
  137.                 if not tryMove() then
  138.                     turnLeft()
  139.                 end
  140.             end
  141.         else
  142.             stepsTaken = stepsTaken + 1
  143.             if not returnToStart then
  144.                 dropKelp()
  145.             end
  146.         end
  147.  
  148.         if turtle.getFuelLevel() == 0 then
  149.             if not waitForFuel(30) then return end
  150.         end
  151.     until stepsTaken > 0 and pos.x == loopStart.x and pos.y == loopStart.y and dir == loopDir
  152.  
  153.     if depth < maxDepth then
  154.         depth = depth + 1
  155.         stepOutward()
  156.     else
  157.         if returnToStart then
  158.             returnHome()
  159.             dropKelp()
  160.         end
  161.         depth = 0
  162.     end
  163.  
  164. end
  165.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement