os.loadAPI("/apis/storage")
os.loadAPI("/apis/position")
os.loadAPI("/apis/sane")
os.loadAPI("/apis/digsafe")
local db = storage
sane.hook()
table.insert(digsafe.blacklist, "torch")
table.insert(digsafe.blacklist, "Thaumcraft")
table.insert(digsafe.blacklist, "ExtraBees")
digsafe.hook()
local t = turtle
local r = 62
local q = math.ceil(r / 2)
db.set("resume", "pitmine")
function border (x, z)
return (3 == x or 3 == r - x) and (
z < q + 7 and 3 == z % 7 or
z > q and 3 == (r - z) % 7)
end
local d = math.sqrt(85)
local a = math.atan(1 / 13) + math.pi / 4
local s = math.sin(a)
local c = math.cos(a)
function torch ()
local x, z = position.get.X(),
position.get.Z() - 1
-- rotation matrix whee
local xr, zr = x * c - z * s,
x * s + z * c
if (
border(x, z) or border(z, x) or
.5 > xr % d and .5 > zr % d
) then t.placeDown() end
end
function printcoords ()
local p = position
print(p.get.X(), "/", p.get.Y(), "/",
p.get.Z(), "/", p.get.F())
end
function dig3_p2 (n)
while t.digUp() do end
while t.digDown() do end
t.suckDown()
t.suckUp()
torch()
end
function dig3 (n)
for i = n, 1, -1 do
while
t.detect() or
not t.forward()
do t.dig() end
dig3_p2()
end
end
local turn = db.get("turn") or false
function doTurn ()
if turn then t.turnRight()
else t.turnLeft() end
end
function levelDone ()
local f = position.get.F()
return ({ r, 0 })[
0 == f % 3 and 1 or 2] == ({
position.get.Z() - 1,
position.get.X()
})[f % 2 + 1]
end
function turnAround_p2 ()
local x, z, f = position.get.X(),
position.get.Z() - 1,
position.get.F()
if levelDone() then
doTurn()
local down = db.get("down") or 3
for i = down, 1, -1 do
db.set("down", i)
t.down()
if t.detectDown() then
t.digDown()
end
end
db.clear("down")
else
dig3(1)
end
doTurn()
turn = not turn
db.set("turn", turn)
db.clear("turning")
end
function turnAround ()
db.set("turning", true)
doTurn()
turnAround_p2()
end
-- resume turn if we were interrupted
if db.get("turning") then
turnAround_p2()
end
dig3_p2() -- clean above and below
-- also triggers sane (inv/torches)
local x, z = position.get.X(),
position.get.Z() - 1
dig3(({ -- to the end of this row
r - z, x, z, r - x
})[position.get.F() + 1])
repeat
turnAround()
dig3(r)
until cows_come_home
--]]