os.loadAPI("/apis/storage") local db = storage local pos = {} for _, k in ipairs({ "X", "Y", "Z", "F" }) do local v = db.get(k) pos[k] = v and v - 0 or 0 end local function horizontal (s) local d = 0 == pos.F % 2 and "Z" or "X" local c = 0 == pos.F % 3 and 1 or -1 pos[d] = pos[d] + c * s db.set(d, pos[d]) end function forward () horizontal(1) end function back () horizontal(-1) end local function turn (d) pos.F = (pos.F + 4 + d) % 4 db.set("F", pos.F) end function turnRight () turn(1) end function turnLeft () turn(-1) end local function vertical (s) pos.Y = pos.Y + s db.set("Y", pos.Y) end function up () vertical(1) end function down () vertical(-1) end get = { ["X"] = function () return pos.X end, ["Y"] = function () return pos.Y end, ["Z"] = function () return pos.Z end, ["F"] = function () return pos.F end } function setHome () for i, d in ipairs({ "X", "Y", "Z", "F" }) do pos[d] = 0 db.set(d, 0) end end function hook () local t = turtle if t.position then return false end t.position = {} for i, v in ipairs({ "forward", "back", "up", "down", "turnLeft", "turnRight" }) do t.position[v] = t[v] t[v] = function () local ret = t.position[v]() if ret then position[v]() end return ret end end return true end