This commit is contained in:
Laurie Fisher 2025-06-27 15:04:01 +01:00
parent 92a55f15c9
commit 784f7089bf
Signed by: PinkEyedOrphan
GPG Key ID: 7F827B68147AEE76

View File

@ -5,29 +5,63 @@ local logger = require("libs.logger")
-- Minimum fuel required to proceed with one movement -- Minimum fuel required to proceed with one movement
local MIN_FUEL = 1 -- you can raise this if you want a safety margin local MIN_FUEL = 1 -- you can raise this if you want a safety margin
-- Ensure the turtle has fuel -- 🔋 Attempt to refuel from inventory
local function checkFuel() local function refuelFromInventory(minRequired)
minRequired = minRequired or MIN_FUEL
local gained = 0
for slot = 1, 16 do
turtle.select(slot)
if turtle.getItemCount() > 0 and turtle.refuel(0) then
local before = turtle.getFuelLevel()
if turtle.refuel(1) then
local after = turtle.getFuelLevel()
local added = after - before
gained = gained + added
logger.log(string.format("Refueled +%d from slot %d", added, slot))
if after >= minRequired then break end
else
logger.log(string.format("⚠️ Refuel failed from slot %d", slot))
end
end
end
return gained
end
-- ✅ Ensure fuel before doing anything
local function refuelIfNeeded()
local fuel = turtle.getFuelLevel() local fuel = turtle.getFuelLevel()
if fuel == "unlimited" then return true end -- creative mode if fuel == "unlimited" then return true end
if fuel == nil or fuel < MIN_FUEL then
logger.log("Not enough fuel! Current level: " .. tostring(fuel)) if fuel < MIN_FUEL then
logger.log("⚠️ Low fuel, attempting to refuel...")
local added = refuelFromInventory(MIN_FUEL)
fuel = turtle.getFuelLevel()
end
if fuel < MIN_FUEL then
logger.log("Not enough fuel. Waiting...")
return false return false
end end
return true return true
end end
-- Helper: retry an action with fuel check -- 🚶 Retry a movement or action with fuel awareness
local function try(actionFn, times) local function try(actionFn, times, name)
times = times or 5 times = times or 5
for i = 1, times do for i = 1, times do
if not checkFuel() then if not refuelIfNeeded() then
logger.log("Waiting for fuel...")
sleep(2) sleep(2)
elseif actionFn() then elseif actionFn() then
if name then logger.log("Action succeeded: " .. name) end
return true return true
end end
if name then logger.log("Retrying: " .. name) end
sleep(0.5) sleep(0.5)
end end
if name then logger.log("Gave up after retries: " .. name) end
return false return false
end end