-- version 4.4
local slots = {
first_free = 4,
building_material = 3,
torch = 2,
fuel = 1,
}
local server_render_distance = 9
local options = {
mine_up = true,
mine_down = true,
place_torches = true,
place_floor = false,
torch_frequency = 13,
use_any_fuel = true,
}
local function refuel(goal)
if turtle.getFuelLevel() >= goal then
return true
end
local function refuel_loop()
if turtle.refuel(0) then
while turtle.refuel(1) do
if turtle.getFuelLevel() >= goal then
return true
end
end
end
end
if options.use_any_fuel then
for i = 1, 16 do
turtle.select(i)
if refuel_loop() then
return true
end
end
end
turtle.select(slots.fuel)
return refuel_loop()
end
local function forward(options)
while turtle.detect() do
if not turtle.dig() then
print("Could not dig forward!")
break
end
end
local success = turtle.forward()
if options.mine_up then
while turtle.detectUp() do
if not turtle.digUp() then
print("Could not dig above!")
break
end
end
end
if options.mine_down then
if turtle.detectDown() then
if not turtle.digDown() then
print("Could not dig down!")
end
end
end
if options.place_floor then
if not turtle.detectDown() then
turtle.select(slots.building_material)
if not turtle.placeDown() then
print("Could not place below!")
end
end
end
return success
end
local function place_torch()
assert(turtle.turnRight(), "Can't turn right! D:")
turtle.select(slots.torch)
local success = turtle.placeUp()
assert(turtle.turnLeft(), "Can't turn left! D:")
end
local function turn_around()
return turtle.turnLeft() and turtle.turnLeft()
end
local function mine()
local success = true
local shaft_distance = (1 + server_render_distance) * 16 / 2
local fuel_required = shaft_distance * 2
while not refuel(fuel_required) do
local append = "Add fuel to any slot."
if not options.use_any_fuel then
append = "Add fuel to slot " .. slots.fuel .. "."
end
print("Turtle has " .. turtle.getFuelLevel() .. "/" .. fuel_required .. " fuel. " .. append)
sleep(1)
end
local distance_remaining = shaft_distance
while distance_remaining > 0 do
if forward(options) then
distance_remaining = distance_remaining - 1
if options.place_torches and (distance_remaining % options.torch_frequency == options.torch_frequency - 1) then
if not place_torch() then
print("Can't place torch!")
end
end
if turtle.getItemCount(16) > 0 then
print("Inventory full, returning!")
success = false
break
end
else
print("Couldn't move forward, returning!")
success = false
break
end
end
assert(turn_around(), "Can't turn around! D:")
while distance_remaining < shaft_distance do
assert(forward({}), "Can't move forward! D:")
distance_remaining = distance_remaining + 1
end
for i = slots.first_free, 16 do
turtle.select(i)
if not turtle.drop() then
print("Can't drop items!")
end
end
turtle.select(1)
assert(turn_around(), "Can't turn around! D:")
return success
end
while not mine() do end
Comments