Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- area = 16
- 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
- function compareUp()
- for i = 1, 3 do
- turtle.select(i)
- turtle.compareUp()
- if turtle.compareUp() == true then
- match = 1
- else
- turtle.digUp()
- position["valuable"] = position["valuable"] +1
- end
- end
- end
- function compareDown()
- for i = 1, 3 do
- turtle.select(i)
- turtle.compareDown()
- if turtle.compareDown() == true then
- match = 1
- else
- turtle.digDown()
- position["valuable"] = position["valuable"] +1
- 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("Starting layer number: "..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
- --------------- LOOP
- if args[2] == "on" then
- --if position["status"] == "on" then
- loadPos()
- findPos()
- resume()
- position["status"] = nil
- position["status"] = "off"
- os.reboot()
- end
- 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
- position["status"] = "off"
- toSurface()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement