102 lines
2.5 KiB
Lua
102 lines
2.5 KiB
Lua
-- vi: ft=lua
|
|
-- Goal: collect lava using buckets in the nether, deposit the buckets into a fluid transposer that extracts the lava and sends it to a power generator
|
|
--
|
|
-- chest above base needs to contain empty buckets
|
|
-- the filled buckets will be deposited in a chest below the base
|
|
|
|
local function compareItemName(target)
|
|
local itemDetail = turtle.getItemDetail()
|
|
if itemDetail == nil then
|
|
return nil
|
|
end
|
|
return itemDetail.name == target
|
|
end
|
|
|
|
local function findFirstItem(target)
|
|
for i=1,16 do
|
|
turtle.select(i)
|
|
if compareItemName(target) then
|
|
print('Found an target item (' .. target .. ') in slot ' .. i)
|
|
return i
|
|
end
|
|
end
|
|
return nil
|
|
end
|
|
|
|
local function findFirstEmptyBucket()
|
|
return findFirstItem("minecraft:bucket")
|
|
end
|
|
|
|
local function findFirstLavaBucket()
|
|
return findFirstItem("minecraft:lava_bucket")
|
|
end
|
|
|
|
local function returnToBase()
|
|
print('returing to base')
|
|
while ForwardCounter > 0 do
|
|
turtle.back()
|
|
ForwardCounter = ForwardCounter - 1
|
|
end
|
|
end
|
|
|
|
local function despositRefill()
|
|
for i = 1, 16 do
|
|
turtle.select(i)
|
|
if compareItemName("minecraft:lava_bucket") then
|
|
while not turtle.dropDown() do
|
|
os.sleep(1)
|
|
end
|
|
end
|
|
if compareItemName("minecraft:bucket") then
|
|
turtle.dropUp()
|
|
end
|
|
end
|
|
|
|
os.sleep(5) -- wait for the buckets to be returned
|
|
turtle.suckUp(16)
|
|
end
|
|
|
|
local function refuel()
|
|
local lava_bucket = findFirstLavaBucket()
|
|
if lava_bucket == nil then
|
|
return false
|
|
end
|
|
|
|
turtle.select(lava_bucket)
|
|
turtle.refuel()
|
|
return true
|
|
end
|
|
|
|
|
|
ForwardCounter = 0
|
|
|
|
despositRefill()
|
|
while true do
|
|
if turtle.getFuelLevel() < ForwardCounter 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')
|
|
returnToBase()
|
|
break
|
|
end
|
|
end
|
|
|
|
if not compareItemName("minecraft:bucket") and findFirstEmptyBucket() == nil then
|
|
print('could not find any empty buckets. returning and refilling')
|
|
returnToBase()
|
|
despositRefill()
|
|
|
|
else
|
|
-- try to fill it
|
|
turtle.placeDown()
|
|
if compareItemName("minecraft:bucket") then
|
|
if turtle.forward() then
|
|
ForwardCounter = ForwardCounter + 1
|
|
else
|
|
print('hit a wall - returning to base')
|
|
returnToBase()
|
|
end
|
|
end
|
|
end
|
|
end
|