diff --git a/lava-collector b/lava-collector index c4e8c0e..f8d96a4 100644 --- a/lava-collector +++ b/lava-collector @@ -4,6 +4,11 @@ -- chest above base needs to contain empty buckets -- the filled buckets will be deposited in a chest below the base +FORWARD = 1 +RIGHT = 2 +LEFT = 3 +BACKWARD = 4 + local function compareItemName(target) local itemDetail = turtle.getItemDetail() if itemDetail == nil then @@ -31,13 +36,46 @@ local function findFirstLavaBucket() return findFirstItem("minecraft:lava_bucket") end +local function goRight() + if not turtle.turnRight() then + return false + end + + local success = turtle.forward() + + turtle.turnLeft() + return success +end + +local function goLeft() + if not turtle.turnLeft() then + return false + end + + local success = turtle.forward() + + turtle.turnRight() + return success +end + +local function doReverseMovement(movement) + if movement == FORWARD then + return turtle.back() + elseif movement == RIGHT then + return goLeft() + elseif movement == LEFT then + return goRight() + elseif movement == BACKWARD then + return turtle.forward() + end +end + local function returnToBase() print('returing to base') - while ForwardCounter > 0 do - print('ForwardCounter: ' .. ForwardCounter) - if turtle.back() then - ForwardCounter = ForwardCounter - 1 - else + for i = #Movements, 1, -1 do + local movement = Movements[i] + print('Movement ' .. i .. ': ' .. movement) + if not doReverseMovement(movement) then print('hit a block on the way back, I am stuck!') end end @@ -48,6 +86,7 @@ local function despositRefill() turtle.select(i) if compareItemName("minecraft:lava_bucket") then while not turtle.dropDown() do + ---@diagnostic disable-next-line: undefined-field os.sleep(1) end end @@ -73,11 +112,11 @@ local function refuel() end -ForwardCounter = 0 +Movements = {} despositRefill() while true do - if turtle.getFuelLevel() <= ForwardCounter then + if turtle.getFuelLevel() <= #Movements then print('not enough fuel to return. trying to refuel') if not refuel() then print('refulling failed. probably the end of the lava lake. returning to base') @@ -96,9 +135,13 @@ while true do turtle.placeDown() if compareItemName("minecraft:bucket") then if turtle.forward() then - ForwardCounter = ForwardCounter + 1 + table.insert(Movements, FORWARD) + elseif goRight() then + table.insert(Movements, RIGHT) + elseif goLeft() then + table.insert(Movements, LEFT) else - print('hit a wall - returning to base') + print("can't find a path - returning to base") returnToBase() despositRefill() end