--(( Settings ))-- local fuelcap = 120 local shaftoffset = 5 local junk = { "minecraft:stone", "minecraft:cobblestone", "minecraft:dirt", "minecraft:grass", "minecraft:gravel", --"minecraft:sand", "chisel:marble1", "chisel:marble2", "chisel:limestone1", "chisel:limestone2", "chisel:basalt1", "chisel:basalt2", } local fuel = { "minecraft:coal", "minecraft:charcoal", "minecraft:planks", "minecraft:wood", } --(( Variables ))-- local depth = 0 --(( Functions ))-- local function selectfromlist(list) for slot=1,16 do local data = turtle.getItemDetail(slot) if data then for _,block in ipairs(list) do if block == data.name then turtle.select(slot) return true end end end end return false end local function selectfuel() return selectfromlist(fuel) end local function selectjunk() return selectfromlist(junk) end -- side = "", "up", or "down" local function isvaluable() local succ,data = turtle.inspect() if not succ then return false end for _,block in ipairs(junk) do if data.name == block then return false end end return true end local function refuel() local fuel = turtle.getFuelLevel() while fuel < fuelcap do print("Searching for fuel...") if selectfuel() and turtle.refuel(1) then return true end print("No fuel found. Press SPACE to search again!") local key repeat _,key=os.pullEvent("key") until key==keys.space end end local function dig(dir) if not dir or dir == "forward" then dir = "" end dir = dir:sub(1,1):upper() .. dir:sub(2):lower() turtle.select(1) if not turtle["detect"..dir]() then return true end while not turtle["dig"..dir]() do if not turtle["attack"..dir]() then return false end end return true end local function move(dir) refuel() while not turtle[dir]() do if dig(dir) == false then return false end end return true end local function down() if move("down") then depth = depth + 1 return true end return false end local function up() if move("up") then depth = depth - 1 return true end return false end local function forward() return move("forward") end local function checksides() local turns = {turtle.turnRight,turtle.turnLeft} local turn = turns[math.random(1,#turns)] for count = 1,4 do if isvaluable() then dig() end turn() end end local function mine() -- go down little first repeat until down() repeat until down() if selectjunk() then turtle.placeUp() end -- down to bottom while true do checksides() if not down() then print("Bedrock after " .. depth .. " blocks!") break end end -- up to miss bedrock noise for i=1,5 do repeat until up() end -- move to next shaft for i=1,shaftoffset do repeat until forward() end -- up to surface while depth > 0 do checksides() repeat until up() end -- fill hole if selectjunk() then turtle.placeDown() end end local function formatTime(sec) if sec > 60 then return math.floor(sec/60).." min "..math.floor(sec%60).." sec" end return math.floor(sec) .. " sec" end print("Commencing mining operation!") local start = os.clock() mine() local took = os.clock() - start print("Operation complete! Took " .. formatTime(took))