Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local whitelist = {
- ["minecraft:gold_ore"] = true,
- ["minecraft:iron_ore"] = true,
- ["minecraft:diamond_ore"] = true,
- ["minecraft:diamond"] = true,
- ["minecraft:emerald_ore"] = true,
- ["minecraft:emerald"] = true,
- ["minecraft:coal_ore"] = true,
- ["minecraft:lapis_ore"] = true,
- ["minecraft:dye"] = true,
- ["minecraft:redstone_ore"] = true,
- ["minecraft:lit_redstone_ore"] = true,
- ["minecraft:redstone"] = true,
- ["minecraft:quartz_ore"] = true,
- ["minecraft:quartz"] = true,
- }
- local loot = {
- ["minecraft:saddle"] = true,
- ["minecraft:iron_ingot"] = true,
- ["minecraft:bread"] = true,
- ["minecraft:wheat"] = true,
- ["minecraft:gunpowder"] = true,
- ["minecraft:string"] = true,
- ["minecraft:bucket"] = true,
- ["minecraft:golden_apple"] = true,
- ["minecraft:redstone"] = true,
- ["minecraft:record_13"] = true,
- ["minecraft:record_cat"] = true,
- ["minecraft:name_tag"] = true,
- ["minecraft:iron_horse_armor"] = true,
- ["minecraft:golden_horse_armor"] = true,
- ["minecraft:diamond_horse_armor"] = true,
- ["minecraft:enchanted_book"] = true,
- }
- local isFuel = {
- ["minecraft:coal"] = true,
- ["minecraft:coal_block"] = true,
- ["minecraft:lava_bucket"] = true,
- ["minecraft:reeds"] = true,
- ["minecraft:log"] = true,
- ["minecraft:logs2"] = true,
- ["minecraft:planks"] = true,
- ["minecraft:sapling"] = true,
- ["minecraft:leaves"] = true,
- ["minecraft:wool"] = true,
- ["minecraft:oak_stairs"] = true,
- ["minecraft:chest"] = true,
- ["minecraft:crafting_table"] = true,
- ["minecraft:sign"] = true,
- ["minecraft:wooden_door"] = true,
- ["minecraft:ladder"] = true,
- ["minecraft:wooden_pressure_plate"] = true,
- ["minecraft:reeds"] = true,
- ["minecraft:fence"] = true,
- ["minecraft:trapdoor"] = true,
- ["minecraft:fence_gate"] = true,
- ["minecraft:double_wooden_slab"] = true,
- ["minecraft:wooden_slab"] = true,
- ["minecraft:spruce_stairs"] = true,
- ["minecraft:birch_stairs"] = true,
- ["minecraft:jungle_stairs"] = true,
- ["minecraft:leaves2"] = true,
- ["minecraft:acacia_stairs"] = true,
- ["minecraft:dark_oak_stairs"] = true,
- ["minecraft:carpet"] = true,
- ["minecraft:spruce_fence_gate"] = true,
- ["minecraft:birch_fence_gate"] = true,
- ["minecraft:jungle_fence_gate"] = true,
- ["minecraft:dark_oak_fence_gate"] = true,
- ["minecraft:acacia_fence_gate"] = true,
- ["minecraft:spruce_fence"] = true,
- ["minecraft:birch_fence"] = true,
- ["minecraft:jungle_fence"] = true,
- ["minecraft:dark_oak_fence"] = true,
- ["minecraft:acacia_fence"] = true,
- ["minecraft:spruce_door"] = true,
- ["minecraft:birch_door"] = true,
- ["minecraft:jungle_door"] = true,
- ["minecraft:acacia_door"] = true,
- ["minecraft:dark_oak_door"] = true,
- ["minecraft:stick"] = true,
- ["minecraft:bowl"] = true,
- ["minecraft:wooden_door"] = true,
- ["minecraft:boat"] = true,
- ["minecraft:paper"] = true,
- }
- local continue = true
- local time
- if fs.exists( ".tLog" ) then
- fs.delete( ".tLog" )
- end
- do
- print( 'Please enter a time length to mine, in hour:minute:second format' )
- local input = read()
- local hours, minutes, seconds = input:match( "(%d*):?(%d*):?(%d*)" )
- hours = hours or 0
- minutes = minutes or 0
- seconds = seconds or 0
- time = (hours * 3600) + (minutes * 60) + seconds
- end
- local _print = print
- local function print( ... )
- local file = fs.open( ".tLog", "a" )
- file.writeLine( table.concat( { ... } ) )
- file.close()
- return _print( ... )
- end
- local bucket, fuel
- for i = 1, 16 do
- local item = turtle.getItemDetail( i )
- if item and item.name == "minecraft:bucket" then
- bucket = i
- print( "[finder]: bucket found! Slot " .. i )
- elseif item and isFuel[ item.name ] then
- fuel = i
- print( "[finder]: fuel found! Slot " .. i )
- end
- end
- local search = {}
- search.front = function()
- local ok, block = turtle.inspect()
- print( "[search-front]: " .. (ok and ("block: " .. block.name .. " detected") or "no block detected" ) )
- if ok and whitelist[ block.name ] then
- turtle.dig()
- while not turtle.forward() do turtle.dig() end
- return search.front(), turtle.back(), search.left()
- elseif ok and block.name == "minecraft:lava" then
- turtle.select( bucket )
- turtle.place()
- turtle.refuel()
- turtle.forward()
- return search.front(), turtle.back(), search.left()
- end
- return search.left()
- end
- search.left = function()
- turtle.turnLeft()
- local ok, block = turtle.inspect()
- print( "[search-left]: " .. (ok and ("block: " .. block.name .. " detected") or "no block detected" ) )
- if ok and whitelist[ block.name ] then
- turtle.dig()
- while not turtle.forward() do turtle.dig() end
- return search.front(), turtle.back(), turtle.turnRight(), search.right()
- elseif ok and block.name == "minecraft:lava" then
- turtle.select( bucket )
- turtle.place()
- turtle.refuel()
- turtle.forward()
- return search.front(), turtle.back(), turtle.turnRight(), search.right()
- end
- return turtle.turnRight(), search.right()
- end
- search.right = function()
- turtle.turnRight()
- local ok, block = turtle.inspect()
- print( "[search-right]: " .. (ok and ("block: " .. block.name .. " detected") or "no block detected" ) )
- if ok and whitelist[ block.name ] then
- turtle.dig()
- while not turtle.forward() do turtle.dig() end
- return search.front(), turtle.back(), turtle.turnLeft(), search.up()
- elseif ok and block.name == "minecraft:lava" then
- turtle.select( bucket )
- turtle.place()
- turtle.refuel()
- turtle.forward()
- return search.front(), turtle.back(), turtle.turnLeft(), search.up()
- end
- return turtle.turnLeft(), search.up()
- end
- search.up = function()
- local ok, block = turtle.inspectUp()
- print( "[search-up]: " .. (ok and ("block: " .. block.name .. " detected") or "no block detected" ) )
- if ok and whitelist[ block.name ] then
- turtle.digUp()
- while not turtle.up() do turtle.digUp() end
- return search.front(), turtle.down(), search.down()
- elseif ok and block.name == "minecraft:lava" then
- turtle.select( bucket )
- turtle.placeUp()
- turtle.refuel()
- turtle.up()
- return search.front(), turtle.down(), search.down()
- end
- return search.down()
- end
- search.down = function()
- local ok, block = turtle.inspectDown()
- print( "[search-down]: " .. (ok and ("block: " .. block.name .. " detected") or "no block detected" ) )
- if ok and whitelist[ block.name ] then
- turtle.digDown()
- turtle.down()
- return search.front(), turtle.up()
- elseif ok and block.name == "minecraft:lava" then
- turtle.select( bucket )
- turtle.placeDown()
- turtle.down()
- return search.front(), turtle.up()
- end
- end
- local function manager()
- while true do
- print( "[manager]: starting checkup" )
- for i = 1, 16 do
- local item = turtle.getItemDetail( i )
- if item and not whitelist[ item.name ] and not isFuel[ item.name ] then
- if item.name ~= "minecraft:bucket" then
- print( "[manager]: useless item detected: " .. item.name )
- turtle.select( i )
- turtle.drop()
- print( "[manager]: dropped useless item" )
- end
- end
- end
- if turtle.getFuelLevel() < turtle.getFuelLimit() / 10 then
- print( "[manager]: fuel level low" )
- turtle.select( fuel )
- if not turtle.refuel() then
- print( "[manager]: fuel source depleted" )
- local found
- for i = 1, 16 do
- local item = turtle.getItemDetail( i )
- if item and isFuel[ item.name ] then
- fuel, found = i, true
- print( "[manager]: new fuel source " .. item.name .. ", in slot " .. i )
- break
- end
- end
- if not found then
- print( "[manager]: no fuel source detected" )
- continue = false
- print( "[manager]: fuel reserves depleted: stopping..." )
- end
- end
- end
- sleep( 60 )
- end
- end
- local function timeChecker()
- local id
- if time > 0 then
- print( "[timeChecker]: starting time for " .. time .. " seconds" )
- id = os.startTimer( time )
- end
- while true do
- local event = {os.pullEvent()}
- if event[ 1 ] == "timer" and event[ 2 ] == id then
- print( "[timeChecker]: time is up!" )
- continue = false
- end
- end
- end
- local function branch()
- print( "[branch]: starting" )
- search.front()
- local gone = 0
- for i = 1, 16 do
- while not turtle.forward() do turtle.dig() end
- search.front()
- gone = gone + 1
- if not continue then
- break
- end
- end
- print( "[branch]: completed" )
- repeat
- if turtle.back() then
- gone = gone - 1
- end
- until gone == 0
- print( "[branch]: returned" )
- end
- local function main()
- print( "[main]: starting" )
- local gone = 1
- while continue do
- for i = 1, 4 do
- while not turtle.forward() do turtle.dig() end
- search.front()
- end
- gone = gone + 1
- turtle.turnRight()
- print( "[main]: starting right branch" )
- branch()
- turtle.turnLeft()
- if not continue then break end
- turtle.turnLeft()
- print( "[main]: starting left branch" )
- branch()
- turtle.turnRight()
- end
- print( "[main]: completed" )
- repeat
- if turtle.back() then
- gone = gone - 1
- end
- until gone == 0
- print( "[main]: returned" )
- end
- local mainCaller = function()
- local status, err = pcall( main )
- if not status then
- if term.isColor() then term.setTextColor( colors.red ) end
- print( "[mainCaller]: " .. err )
- error()
- end
- end
- local managerCaller = function()
- local status, err = pcall( manager )
- if not status then
- if term.isColor() then term.setTextColor( colors.red ) end
- print( "[managerCaller]: " .. err )
- error()
- end
- end
- parallel.waitForAny( timeChecker, mainCaller, managerCaller )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement