The turtle will behave the same (albeit slower) as the normal program would, but it automatically throws out any cobblestone it mines as long as you have fuel in slot 1 and a stack of 64 cobblestone in slot 2. Works amazingly well if you quarry a 10x10 or larger area and let it sit with 64 coal in slot 1, make sure you put a chest directly behind the turtle before you run the program, and he will deposit all the (non-cobblestone) ore directly into it.
usage:
- place 64 coal in slot 1 and place 64 cobblestone in slot 2
- pastebin get dVb0kKbi (desired file name)
to run:
- (filename you chose) (quarry size)
eg:
- "pastebin get dVb0kKbi newexcavate" (press enter)
- "newexcavate 10" (press enter)
would mine a 10x10 quarry
I do not take credit for anything but lines 86-96! Anyone that has a more efficient way of doing this, feel free to share
local tArgs = { ... } if #tArgs ~= 1 then print( "Usage: excavate <diameter>" ) return end -- Mine in a quarry pattern until we hit something we can't dig local size = tonumber( tArgs[1] ) if size < 1 then print( "Excavate diameter must be positive" ) return end local depth = 0 local unloaded = 0 local collected = 0 local xPos,zPos = 0,0 local xDir,zDir = 0,1 local goTo -- Filled in further down local refuel -- Filled in further down local function unload( _bKeepOneFuelStack ) print( "Unloading items..." ) for n=1,16 do local nCount = turtle.getItemCount(n) if nCount > 0 then turtle.select(n) local bDrop = true if _bKeepOneFuelStack and turtle.refuel(0) then bDrop = false _bKeepOneFuelStack = false end if bDrop then turtle.drop() unloaded = unloaded + nCount end end end collected = 0 turtle.select(1) end local function returnSupplies() local x,y,z,xd,zd = xPos,depth,zPos,xDir,zDir print( "Returning to surface..." ) goTo( 0,0,0,0,-1 ) local fuelNeeded = 2*(x+y+z) + 1 if not refuel( fuelNeeded ) then unload( true ) print( "Waiting for fuel" ) while not refuel( fuelNeeded ) do sleep(1) end else unload( true ) end print( "Resuming mining..." ) goTo( x,y,z,xd,zd ) end local function collect() local bFull = true local nTotalItems = 0 for n=1,16 do local nCount = turtle.getItemCount(n) if nCount == 0 then bFull = false end nTotalItems = nTotalItems + nCount end if nTotalItems > collected then collected = nTotalItems if math.fmod(collected + unloaded, 50) == 0 then print( "Mined "..(collected + unloaded).." items." ) end end local u = 3 -- this is for the repeat loop to drop any block that is the same as slot 2 turtle.select(2) -- select slot 2 repeat if turtle.compareTo(u) then -- if slot 2 is equal to U turtle.select(u) -- Seect slot U turtle.drop() -- drop slot U turtle.select(2) -- select slot to again end u = u + 1 -- change u to the next slot until u == 17 turtle.select(1) if bFull then print( "No empty slots left." ) return false end return true end function refuel( ammount ) local fuelLevel = turtle.getFuelLevel() if fuelLevel == "unlimited" then return true end local needed = ammount or (xPos + zPos + depth + 1) if turtle.getFuelLevel() < needed then local fueled = false for n=1,16 do if turtle.getItemCount(n) > 0 then turtle.select(n) if turtle.refuel(1) then while turtle.getItemCount(n) > 0 and turtle.getFuelLevel() < needed do turtle.refuel(1) end if turtle.getFuelLevel() >= needed then turtle.select(1) return true end end end end turtle.select(1) return false end return true end local function tryForwards() if not refuel() then print( "Not enough Fuel" ) returnSupplies() end while not turtle.forward() do if turtle.detect() then if turtle.dig() then if not collect() then returnSupplies() end else return false end elseif turtle.attack() then if not collect() then returnSupplies() end else sleep( 0.5 ) end end xPos = xPos + xDir zPos = zPos + zDir return true end local function tryDown() if not refuel() then print( "Not enough Fuel" ) returnSupplies() end while not turtle.down() do if turtle.detectDown() then if turtle.digDown() then if not collect() then returnSupplies() end else return false end elseif turtle.attackDown() then if not collect() then returnSupplies() end else sleep( 0.5 ) end end depth = depth + 1 if math.fmod( depth, 10 ) == 0 then print( "Descended "..depth.." metres." ) end return true end local function turnLeft() turtle.turnLeft() xDir, zDir = -zDir, xDir end local function turnRight() turtle.turnRight() xDir, zDir = zDir, -xDir end function goTo( x, y, z, xd, zd ) while depth > y do if turtle.up() then depth = depth - 1 elseif turtle.digUp() or turtle.attackUp() then collect() else sleep( 0.5 ) end end if xPos > x then while xDir ~= -1 do turnLeft() end while xPos > x do if turtle.forward() then xPos = xPos - 1 elseif turtle.dig() or turtle.attack() then collect() else sleep( 0.5 ) end end elseif xPos < x then while xDir ~= 1 do turnLeft() end while xPos < x do if turtle.forward() then xPos = xPos + 1 elseif turtle.dig() or turtle.attack() then collect() else sleep( 0.5 ) end end end if zPos > z then while zDir ~= -1 do turnLeft() end while zPos > z do if turtle.forward() then zPos = zPos - 1 elseif turtle.dig() or turtle.attack() then collect() else sleep( 0.5 ) end end elseif zPos < z then while zDir ~= 1 do turnLeft() end while zPos < z do if turtle.forward() then zPos = zPos + 1 elseif turtle.dig() or turtle.attack() then collect() else sleep( 0.5 ) end end end while depth < y do if turtle.down() then depth = depth + 1 elseif turtle.digDown() or turtle.attackDown() then collect() else sleep( 0.5 ) end end while zDir ~= zd or xDir ~= xd do turnLeft() end end if not refuel() then print( "Out of Fuel" ) return end print( "Excavating..." ) local reseal = false turtle.select(1) if turtle.digDown() then reseal = true end local alternate = 0 local done = false while not done do for n=1,size do for m=1,size-1 do if not tryForwards() then done = true break end end if done then break end if n<size then if math.fmod(n + alternate,2) == 0 then turnLeft() if not tryForwards() then done = true break end turnLeft() else turnRight() if not tryForwards() then done = true break end turnRight() end end end if done then break end if size > 1 then if math.fmod(size,2) == 0 then turnRight() else if alternate == 0 then turnLeft() else turnRight() end alternate = 1 - alternate end end if not tryDown() then done = true break end end print( "Returning to surface..." ) -- Return to where we started goTo( 0,0,0,0,-1 ) unload( false ) goTo( 0,0,0,0,1 ) -- Seal the hole if reseal then turtle.placeDown() end print( "Mined "..(collected + unloaded).." items total." )