fs.makeDir("enderMine") area = 15 turtleId = os.getComputerLabel() args = {...} position = {} position["yStart"] = tonumber(args[1]) position["currY"] = tonumber(args[1]) position["currX"] = 1 position["currZ"] = 1 position["direction"] = 1 position["currLayer"] = "na" position["valuable"] = 0 if args[3] == "manual" then position["enderchest"] = "no" else position["enderchest"] = "yes" end function printPos() term.clear() term.setCursorPos(1,1) print("------------") print("x"..position["currX"]) print("z"..position["currZ"]) print("y"..position["currY"]) print("direction "..position["direction"]) print("layer "..position["currLayer"]) print("------------") end function moveForward() while not turtle.forward() do turtle.dig() end printPos() end function moveUp() while not turtle.up() do turtle.digUp() end position["currY"] = position["currY"]+1 printPos() end function moveDown() while not turtle.down() do turtle.digDown() end position["currY"] = position["currY"]-1 printPos() end function turnRight() turtle.turnRight() position["direction"] = position["direction"] +1 if position["direction"] > 4 then position["direction"] = 1 end savePos() printPos() end function turnLeft() turtle.turnLeft() position["direction"] = position["direction"] -1 if position["direction"] < 1 then position["direction"] = 4 end savePos() printPos() end --#### COMPARE UP #### function compareUp() turtle.select(1) turtle.compareUp() if turtle.compareUp() == true then notinuse = 1 else turtle.select(2) turtle.compareUp() if turtle.compareUp() == true then notinuse = 1 else turtle.select(3) turtle.compareUp() if turtle.compareUp() == true then notinuse = 1 else turtle.digUp() position["valuable"] = position["valuable"] +1 end end end end --#### COMPARE DOWN #### function compareDown() turtle.select(1) turtle.compareDown() if turtle.compareDown() == true then notinuse = 1 else turtle.select(2) turtle.compareDown() if turtle.compareDown() == true then notinuse = 1 else turtle.select(3) turtle.compareDown() if turtle.compareDown() == true then notinuse = 1 else turtle.digDown() position["valuable"] = position["valuable"] +1 end end end end function dropOff() if position["enderchest"] == "yes" then stone = turtle.getItemCount(4) turtle.select(4) turtle.drop(stone-1) turtle.dig() turtle.select(16) turtle.place() for i = 5, 15 do turtle.select(i) turtle.drop() end turtle.select(16) turtle.dig() elseif position["enderchest"] == "no" then if turtle.getItemCount(15) > 0 then stone = turtle.getItemCount(4) turtle.select(4) turtle.drop(stone-1) findPos() savePos() position["resumeY"] = tonumber(position["currY"]) toSurface() turnRight() turnRight() for i = 5, 15 do turtle.select(i) turtle.drop() end turnRight() turnRight() while position["currY"] > position["resumeY"] do moveDown() printPos() savePos() end os.reboot() end end end function mineRowXPlus() --for i = 1, area do while position["currX"] < area do moveForward() position["currX"] = position["currX"] +1 savePos() printPos() compareUp() compareDown() end turnRight() dropOff() moveForward() compareUp() compareDown() position["currZ"] = position["currZ"] +1 savePos() turnRight() end function mineRowXMinus() --for i = 1, area do while position["currX"] > 1 do moveForward() position["currX"] = position["currX"] -1 savePos() printPos() compareUp() compareDown() end turnLeft() dropOff() moveForward() compareUp() compareDown() position["currZ"] = position["currZ"] +1 savePos() turnLeft() end function mineLayer() --for i = 1, area/2 do while position["currZ"] < area do mineRowXPlus() mineRowXMinus() end findPos() end function newLayer() for i = 1, 3 do moveUp() printPos() savePos() end position["currLayer"] = position["currLayer"] + 1 savePos() --sendBroadcast("Layer #"..position["currLayer"]..", Y:"..position["currY"]) --sendBroadcast("current valuables: "..position["valuable"]) end function toBedrock() mineStart = position["yStart"] - 6 for i = 1, mineStart do turtle.digDown() turtle.down() position["currY"] = position["currY"] -1 printPos() savePos() end position["currLayer"] = 1 savePos() position["currY"] = 6 savePos() --sendBroadcast("Bottom reached") printPos() end function toSurface() findPos() --sendBroadcast("Going up") --for i = 1, position["yStart"] - position["currY"] do while tonumber(position["currY"]) < tonumber(position["yStart"]) do moveUp() savePos() end --if tonumber(position["currY"]) > tonumber(position["yStart"]) then while tonumber(position["currY"]) > tonumber(position["yStart"]) do turtle.down() position["currY"] = position["currY"] -1 printPos() savePos() end --end end function sendBroadcast(message) --rednet.open("right") --rednet.broadcast("["..turtleId.."] "..message) end function findPos() while position["direction"] ~= 3 do turnRight() savePos() end while position["currX"] > 1 do moveForward() position["currX"] = position["currX"] -1 savePos() end while position["direction"] ~= 4 do turnRight() savePos() end while position["currZ"] > 1 do moveForward() position["currZ"] = position["currZ"] -1 savePos() end while position["direction"] ~= 1 do turnRight() savePos() end end function resume() --sendBroadcast("Resuming, Y:"..position["currY"]) turtle.select(16) turtle.dig() layersToGo = math.floor((position["yStart"] - position["currY"])/4) for i = 1, layersToGo do mineLayer() newLayer() if position["currY"] > 50 then break end end position["status"] = "off" toSurface() end -- ## WRITE FILE ## function savePos() handle = fs.open("enderMine/savedPosition", "w") handle.write(textutils.serialize(position)) handle.close() end function loadPos() handle = fs.open("enderMine/savedPosition", "r") readFile = handle.readLine() if readFile ~= nil then position = textutils.unserialize(readFile) end handle.close() end function checkFuel() layers = math.floor(position["yStart"] / 4) mass = area * area * layers fuel = turtle.getFuelLevel() if fuel < mass then term.clear() term.setCursorPos(1,1) print("Not enought fuel") print("Fuel needed: "..mass) print("Current fuel: "..fuel) print("Put fuel in slot 15") sleep(1) print("") print("Press a key to continue") event = os.pullEvent("key") turtle.select(15) turtle.refuel() end end --------------- LOOP if args[2] == "on" then --if position["status"] == "on" then loadPos() findPos() resume() position["status"] = nil position["status"] = "off" os.reboot() end print("checking fuel") checkFuel() print("fuel checked") savePos() position["status"] = "on" layers = math.floor(position["yStart"] / 4) position["currY"] = position["yStart"] toBedrock() for i = 1, layers do mineLayer() newLayer() if position["currY"] > 50 then break end end toSurface() position["status"] = "off" --sendBroadcast("Done") os.reboot()