-- Settings
minFuelLevel = 10000
digSide = true
sleepTime = 5

failsThreshold = 20

function dig()
	turtle.dig()
	turtle.digUp()
	if digSide then
		turtle.turnLeft()
		turtle.dig()
		turtle.turnRight()
		turtle.turnRight()
		turtle.dig()
		turtle.turnLeft()
	end
end

function forward()
	dig()
	if not turtle.forward() then
		turtle.attack()
		while turtle.dig() do
			sleep(1) -- Stupid gravel
		end
		if turtle.getFuelLevel() < minFuelLevel then
			print("Low fuel.")
			scanInv()
			if not turtle.forward() then
				print("Out of fuel.")
				return false
			end
		end
	end
	return true
end

function scanInv()
	local i
	local ctr = 0
	for i = 1,14 do
		if turtle.getItemCount(i) == 0 then
			ctr = ctr + 1
		else
			turtle.refuel()
		end
	end
	return ctr
end

function dropInv(warnToo)
	turtle.select(16)
	turtle.dig()
	turtle.place()
	for i = 1,14 do
		turtle.select(i)
		while not turtle.drop() do
			print("Chest full. Waiting...")
			sleep(sleepTime)
		end
	end
	if warnToo then
		turtle.select(15)
		while not turtle.drop() do
			print("Chest full. Waiting...")
			sleep(sleepTime)
		end
	end
	turtle.select(16)
	turtle.dig()
end

function go()
	local fails = 0
	while true do
		if forward() then
			fails = 0
			local free = scanInv(1,14)
			if free <= 0 then
				dropInv(false)
			end
		else
			fails = fails + 1
			if fails > failsThreshold then
				dropInv(true)
			end
		end
	end
end

if turtle.getItemCount(16) < 1 then
	turtle.select(16)
	turtle.dig()
end

go()
