FireDemonite icon

GoTo command API (local coordinate system)

FireDemonite | PRO | 12/08/20 05:39:18 PM UTC (Edited) | 0 ⭐ | 200 👁️ | Never ⏰ | []
Lua |

6.47 KB

|

None

|

0 👍

/

0 👎

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