args = {...}
pos = {
x = 0,
y = 0,
z = 0,
d = 0,
itemDropoff = {
x = 0,
y = 0,
z = 0,
},
fuel = {
x = 0,
y = 0,
z = 0,
},
home = {
x = 0,
y = 0,
z = 0,
},
}
savedPos = {
x = 0,
y = 0,
z = 0,
d = 0,
}
if not fs.exists("position") then
file = fs.open("position", "w")
file.write(textutils.serialise(pos))
file.close()
else
file = fs.open("position", "r")
pos = textutils.unserialise(file.readAll())
file.close()
end
function writePos()
file = fs.open("position", "w")
file.write(textutils.serialise(pos))
file.close()
end
function setHome(x,y,z)
pos.home.x = x
pos.home.y = y
pos.home.z = z
writePos()
end
function setFuelPos(x,y,z)
pos.fuel.x = x
pos.fuel.y = y
pos.fuel.z = z
writePos()
end
function setitemDropoff(x,y,z)
pos.itemDropoff.x = x
pos.itemDropoff.y = y
pos.itemDropoff.z = z
writePos()
end
function fuelCheck(d)
if d == nil then d = 0 end
if pos.x + pos.y + pos.z >= turtle.getFuelLevel() - 10 then
refuel(pos, d)
end
end
function refuel(t,d)
a = t.x
b = t.y
c = t.z
print("Refuelling...")
goToPos(pos.fuel.x, pos.fuel.y, pos.fuel.z)
while pos.d ~= d do
left()
end
s = turtle.getSelectedSlot()
turtle.select(15)
turtle.suck()
turtle.refuel(turtle.getItemCount(15))
turtle.select(s)
goToPos(a,b,c)
end
function itemCheck(slot)
if slot == nil then slot = 14 end
if turtle.getItemCount(slot) > 0 then
savedPos = pos
goToPos(pos.itemDropoff.x, pos.itemDropoff.y, pos.itemDropoff.z)
left()
left()
for i = 1,slot do
turtle.select(i)
turtle.drop()
end
turtle.select(1)
right()
right()
goToPos(savedPos.x, savedPos.y, savedPos.z)
end
end
function home(priority, priority2)
goToPos(pos.home.x, pos.home.y, pos.home.z, priority, priority2)
end
function forward(dig)
if dig == nil then dig = false end
v = false
while v == false do
t,s = turtle.inspect()
if s ~= nil then if s.name == "minecraft:bedrock" then return false end end
v = turtle.forward()
if v == false and dig then turtle.dig() end
end
if pos.d == 0 then
pos.y = pos.y + 1
elseif pos.d == 1 then
pos.x = pos.x + 1
elseif pos.d == 2 then
pos.y = pos.y - 1
elseif pos.d == 3 then
pos.x = pos.x - 1
end
writePos()
return true
end
function back(dig)
if dig == nil then dig = false end
v = false
while v == false do
v = turtle.back()
if v == false then
turtle.turnLeft() turtle.turnLeft()
t,s = turtle.inspect()
if s ~= nil then if s.name == "minecraft:bedrock" then return false end end
if dig then turtle.dig() end
turtle.turnRight() turtle.turnRight()
end
end
if pos.d == 0 then
pos.y = pos.y - 1
elseif pos.d == 1 then
pos.x = pos.x - 1
elseif pos.d == 2 then
pos.y = pos.y + 1
elseif pos.d == 3 then
pos.x = pos.x + 1
end
writePos()
return true
end
function left()
turtle.turnLeft()
pos.d = pos.d - 1
if pos.d < 0 then pos.d = 3 end
writePos()
return true
end
function right()
turtle.turnRight()
pos.d = pos.d + 1
if pos.d > 3 then pos.d = 0 end
writePos()
end
function up(dig)
if dig == nil then dig = false end
v = false
while v == false do
t,s = turtle.inspectUp()
if s ~= nil then if s.name == "minecraft:bedrock" then return false end end
v = turtle.up()
if v == false and dig then turtle.digUp() end
end
pos.z = pos.z + 1
writePos()
return true
end
function down(dig)
if dig == nil then dig = false end
v = false
while v == false do
t,s = turtle.inspectDown()
if s ~= nil then if s.name == "minecraft:bedrock" then return false end end
v = turtle.down()
if v == false and dig then turtle.digDown() end
end
pos.z = pos.z - 1
writePos()
return true
end
function moveToX(x)
if pos.x < x then
while pos.d ~= 1 do
left()
end
elseif pos.x > x then
while pos.d ~= 3 do
right()
end
end
while pos.x ~= x do
if check then fuelCheck() end
forward()
end
end
function moveToY(y)
if pos.y < y then
while pos.d ~= 0 do
left()
end
elseif pos.y > y then
while pos.d ~= 2 do
right()
end
end
while pos.y ~= y do
if check then fuelCheck() end
forward()
end
end
function moveToZ(z)
while pos.z ~= z do
if check then fuelCheck() end
if pos.z < z then
up()
elseif pos.z > z then
down()
end
end
end
function goToPos(x,y,z,priority, priority2)
if priority == nil then priority = "x" end
if priority2 == nil then if priority == "y" then priority2 = "x" else priority2 = "y" end end
check = true
if x == pos.home.x and y == pos.home.y and z == pos.home.z then check = false end
print("Moving to:")
print("X: "..x.." Y: "..y.." Z: "..z)
if priority == "x" then moveToX(x) if priority2 == "y" then moveToY(y) moveToZ(z) else moveToZ(z) moveToY(y) end end
if priority == "y" then moveToY(y) if priority2 == "x" then moveToX(x) moveToZ(z) else moveToZ(z) moveToX(x) end end
if priority == "z" then moveToZ(z) if priority2 == "y" then moveToY(y) moveToX(x) else moveToX(x) moveToY(y) end end
while pos.d ~= 0 do
left()
end
end
if args[1] == "home" then
home()
elseif args[1] == "north" then
while pos.d ~= 0 do
left()
end
elseif args[1] == "east" then
while pos.d ~= 1 do
left()
end
elseif args[1] == "south" then
while pos.d ~= 2 do
left()
end
elseif args[1] == "west" then
while pos.d ~= 3 do
left()
end
elseif args[1] ~= nil and args[2] ~= nil and args[3] ~= nil then
goToPos(tonumber(args[1]), tonumber(args[2]), tonumber(args[3]))
end
Comments