heresjohnny32

minecraft_cc_tweek_mineing_ws

Jul 16th, 2026 (edited)
32,675
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 9.70 KB | Gaming | 0 0
  1. -- Configuration Settings
  2. local serverUrl = "wss://://yourdomain.com"
  3. local token = "your_secure_secret_token"    
  4. local FUEL_LIMIT = 400                      
  5. local FORWARD_BUFFER = 4                    -- Blocks to travel forward safely BEFORE mining starts
  6.  
  7. -- Operational & Spatial State Tracking
  8. local turtleId = tostring(os.computerID())
  9. local idNum = os.computerID()
  10. local ws = nil
  11. local stopRequested = false
  12. local lastHeartbeat = os.epoch("utc")
  13.  
  14. -- Saved State for Resumption
  15. local jobActive = false
  16. local targetX, targetY, targetZ = 0, 0, 0
  17. local savedX, savedY, savedZ = 1, 1, 1
  18.  
  19. -- Relative Position Tracking Matrix
  20. local currentX, currentY, currentZ = 0, 0, 0
  21. local currentDir = 0 -- 0=Forward (+X), 1=Right (+Y), 2=Back (-X), 3=Left (-Y)
  22.  
  23. local function getFullSlots()
  24.     local fullCount = 0
  25.     for i = 1, 16 do if turtle.getItemCount(i) > 0 then fullCount = fullCount + 1 end end
  26.     return fullCount
  27. end
  28.  
  29. local function getTelemetry(currentStatus)
  30.     return {
  31.         fuel = turtle.getFuelLevel(),
  32.         maxFuel = turtle.getFuelLimit(),
  33.         inventorySlots = getFullSlots(),
  34.         status = currentStatus or "Idle",
  35.         pos = {x = currentX, y = currentY, z = currentZ}
  36.     }
  37. end
  38.  
  39. local function sendUpdate(status, logMessage)
  40.     if ws then
  41.         pcall(function()
  42.             ws.send(textutils.serializeJSON({
  43.                 type = "telemetry",
  44.                 turtleId = turtleId,
  45.                 data = getTelemetry(status),
  46.                 logMessage = logMessage
  47.             }))
  48.         end)
  49.     end
  50. end
  51.  
  52. -- NEW & IMPROVED: Constant Automatic Refueling Hook
  53. local function autoRefuel()
  54.     if turtle.getFuelLevel() == "unlimited" then return end
  55.    
  56.     -- Only consume items if we are below our maximum fuel capacity limit
  57.     if turtle.getFuelLevel() < turtle.getFuelLimit() then
  58.         local currentFuel = turtle.getFuelLevel()
  59.        
  60.         for i = 1, 16 do
  61.             turtle.select(i)
  62.             -- Check if slot has a fuel item without consuming it yet
  63.             if turtle.refuel(0) then
  64.                 -- If we are critically low, eat everything.
  65.                 -- Otherwise, only eat if we have room so we don't waste fuel points.
  66.                 if currentFuel < FUEL_LIMIT or (turtle.getFuelLevel() < (turtle.getFuelLimit() - 80)) then
  67.                     local before = turtle.getFuelLevel()
  68.                     turtle.refuel(turtle.getItemCount(i)) -- Eat the stack!
  69.                     local gained = turtle.getFuelLevel() - before
  70.                     sendUpdate(nil, "Auto-Refuel: Consumed items from slot " .. i .. ". Added +" .. gained .. " fuel.")
  71.                 end
  72.             end
  73.         end
  74.         turtle.select(1) -- Always default selection box back to slot 1
  75.     end
  76. end
  77.  
  78. -- Navigation Wrappers
  79. local function trackTurnRight()
  80.     turtle.turnRight()
  81.     currentDir = (currentDir + 1) % 4
  82. end
  83.  
  84. local function trackTurnLeft()
  85.     turtle.turnLeft()
  86.     currentDir = (currentDir - 1) % 4
  87. end
  88.  
  89. local function trackForward()
  90.     while turtle.detect() do
  91.         turtle.dig()
  92.         os.sleep(0.4)
  93.     end
  94.     if turtle.forward() then
  95.         if currentDir == 0 then currentX = currentX + 1
  96.         elseif currentDir == 1 then currentY = currentY + 1
  97.         elseif currentDir == 2 then currentX = currentX - 1
  98.         elseif currentDir == 3 then currentY = currentY - 1
  99.         end
  100.         autoRefuel() -- Automatically scan and eat any fuel mined up or collected immediately
  101.         return true
  102.     end
  103.     return false
  104. end
  105.  
  106. local function trackDown()
  107.     while turtle.detectDown() do turtle.digDown() end
  108.     if turtle.down() then
  109.         currentZ = currentZ - 1
  110.         autoRefuel()
  111.         return true
  112.     end
  113.     return false
  114. end
  115.  
  116. local function trackUp()
  117.     while turtle.detectUp() do turtle.digUp() end
  118.     if turtle.up() then
  119.         currentZ = currentZ + 1
  120.         autoRefuel()
  121.         return true
  122.     end
  123.     return false
  124. end
  125.  
  126. local function navigateHome()
  127.     sendUpdate("Returning Home", "Initiating return path tracking sequence to base dock.")
  128.     while currentZ < 0 do trackUp() end
  129.     while currentZ > 0 do trackDown() end
  130.    
  131.     if currentY > 0 then
  132.         while currentDir ~= 3 do trackTurnRight() end
  133.         while currentY > 0 do trackForward() end
  134.     elseif currentY < 0 then
  135.         while currentDir ~= 1 do trackTurnRight() end
  136.         while currentY < 0 do trackForward() end
  137.     end
  138.    
  139.     if currentX > 0 then
  140.         while currentDir ~= 2 do trackTurnRight() end
  141.         while currentX > 0 do trackForward() end
  142.     end
  143.    
  144.     while currentDir ~= 0 do trackTurnRight() end
  145.     sendUpdate("Idle", "Successfully docked at home station.")
  146.     jobActive = false
  147. end
  148.  
  149. local function checkFuelSafety()
  150.     if turtle.getFuelLevel() == "unlimited" then return true end
  151.    
  152.     -- Always try to eat fuel right before checking safety values
  153.     autoRefuel()
  154.    
  155.     local distanceHome = math.abs(currentX) + math.abs(currentY) + math.abs(currentZ)
  156.     local absoluteMinimumNeeded = distanceHome + 5
  157.    
  158.     if turtle.getFuelLevel() <= absoluteMinimumNeeded then
  159.         sendUpdate("Low Fuel Return", "Critical fuel fallback reached. Heading home.")
  160.         navigateHome()
  161.         return false
  162.     end
  163.     return true
  164. end
  165.  
  166. -- Resumable Mining Engine Loop
  167. local function executeMiningJob()
  168.     stopRequested = false
  169.    
  170.     if savedX == 1 and savedY == 1 and savedZ == 1 then
  171.         sendUpdate("Buffer Transit", "Moving forward past the " .. FORWARD_BUFFER .. " block safety buffer zone.")
  172.         for i = 1, FORWARD_BUFFER do
  173.             if not checkFuelSafety() then return end
  174.             trackForward()
  175.         end
  176.  
  177.         local myOffsetSequence = (idNum - 1) * targetY
  178.         if myOffsetSequence > 0 then
  179.             sendUpdate("Positioning", "Shifting right by " .. myOffsetSequence .. " blocks to align team row.")
  180.             trackTurnRight()
  181.             for i = 1, myOffsetSequence do trackForward() end
  182.             trackTurnLeft()
  183.         end
  184.     end
  185.  
  186.     sendUpdate("Mining Grid Active", "Resuming/Starting sector clearing: " .. targetX .. "x" .. targetY .. "x" .. targetZ)
  187.  
  188.     for z = savedZ, targetZ do
  189.         savedZ = z
  190.         for y = savedY, targetY do
  191.             savedY = y
  192.             for x = savedX, targetX - 1 do
  193.                 savedX = x
  194.                 os.sleep(0.05)
  195.  
  196.                 if not ws then
  197.                     sendUpdate("Reconnecting", "Connection lost! Pausing mining operation until server is online...")
  198.                     print("Lost server handshake. Freezing task loop until reconnected...")
  199.                     while not ws do os.sleep(1) end
  200.                     lastHeartbeat = os.epoch("utc")
  201.                     sendUpdate("Mining Grid Active", "Connection restored! Resuming task.")
  202.                 end
  203.  
  204.                 if stopRequested then
  205.                     sendUpdate("Aborted", "Halted by backend request.")
  206.                     navigateHome()
  207.                     return
  208.                 end
  209.  
  210.                 if getFullSlots() >= 16 then
  211.                     sendUpdate("Returning Base", "Inventory full.")
  212.                     navigateHome()
  213.                     return
  214.                 end
  215.                
  216.                 if not checkFuelSafety() then return end
  217.                 trackForward()
  218.             end
  219.             savedX = 1
  220.            
  221.             if y < targetY then
  222.                 if y % 2 == 1 then
  223.                     trackTurnRight()
  224.                     trackForward()
  225.                     trackTurnRight()
  226.                 else
  227.                     trackTurnLeft()
  228.                     trackForward()
  229.                     trackTurnLeft()
  230.                 end
  231.             end
  232.         end
  233.         savedY = 1
  234.        
  235.         if z < targetZ then
  236.             trackDown()
  237.             trackTurnRight()
  238.             trackTurnRight()
  239.         end
  240.     end
  241.    
  242.     navigateHome()
  243. end
  244.  
  245. local function connect()
  246.     print("Connecting to Central Control...")
  247.     local success, socketOrErr = pcall(http.websocket, serverUrl)
  248.     if not success or not socketOrErr then return false end
  249.  
  250.     ws = socketOrErr
  251.     ws.send(textutils.serializeJSON({
  252.         type = "handshake",
  253.         token = token,
  254.         turtleId = turtleId,
  255.         data = getTelemetry(jobActive and "Mining Grid Active" or "Online")
  256.     }))
  257.     lastHeartbeat = os.epoch("utc")
  258.     print("Connected safely.")
  259.     return true
  260. end
  261.  
  262. -- Global parallel handler threads
  263. local function listenToNetwork()
  264.     while true do
  265.         if not ws then
  266.             if not connect() then os.sleep(5) end
  267.         else
  268.             local event, url, msg = os.pullEvent()
  269.             if event == "websocket_message" then
  270.                 lastHeartbeat = os.epoch("utc")
  271.                 local success, payload = pcall(textutils.unserializeJSON, msg)
  272.                 if success and payload then
  273.                     if payload.command == "excavate" and not jobActive then
  274.                         targetX = payload.args.x
  275.                         targetY = payload.args.y
  276.                         targetZ = payload.args.z
  277.                         savedX, savedY, savedZ = 1, 1, 1
  278.                         jobActive = true
  279.                     elseif payload.command == "stop" then
  280.                         stopRequested = true
  281.                     end
  282.                 end
  283.             elseif event == "websocket_closed" then
  284.                 ws = nil
  285.                 print("WebSocket closed by proxy.")
  286.             end
  287.         end
  288.     end
  289. end
  290.  
  291. local function jobWorker()
  292.     while true do
  293.         if jobActive then
  294.             executeMiningJob()
  295.         end
  296.         os.sleep(1)
  297.     end
  298. end
  299.  
  300. parallel.waitForAll(listenToNetwork, jobWorker)
  301.  
Advertisement
Comments
  • User was banned
Add Comment
Please, Sign In to add comment