Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- TEST_MODE = false
- STRIP_SIZE = (TEST_MODE and 4 or 10) * 16 -- 10 chunks
- BLACK_LIST = {
- "minecraft:stone",
- "minecraft:bedrock",
- "minecraft:dirt",
- "minecraft:wall_torch",
- "minecraft:torch",
- "minecraft:water",
- "minecraft:lava",
- "minecraft:andesite",
- "minecraft:diorite",
- "minecraft:granite",
- "minecraft:gravel",
- "minecraft:deepslate",
- "minecraft:dripstone_block",
- "minecraft:pointed_dripstone",
- "minecraft:calcite",
- "minecraft:tuff",
- "minecraft:moss_block",
- "minecraft:azalea",
- "minecraft:flowering_azalea",
- "minecraft:big_dripleaf",
- "minecraft:small_dripleaf",
- "minecraft:cave_vines",
- "minecraft:glow_berries",
- "minecraft:rooted_dirt",
- "minecraft:hanging_roots",
- "minecraft:spore_blossom",
- "minecraft:cobweb",
- "minecraft:infested_stone",
- "minecraft:infested_deepslate",
- "minecraft:glow_lichen",
- "minecraft:oak_planks",
- "minecraft:oak_fence",
- "minecraft:rail",
- "minecraft:powered_rail",
- "minecraft:detector_rail",
- "minecraft:activator_rail",
- "minecraft:chain",
- "minecraft:oak_log",
- "minecraft:chest_minecart",
- "minecraft:spawner",
- "minecraft:spawner{BlockEntityTag:{SpawnData:{id:'cave_spider'}}}",
- "minecraft:spawner{BlockEntityTag:{SpawnData:{id:'zombie'}}}",
- "minecraft:spawner{BlockEntityTag:{SpawnData:{id:'skeleton'}}}",
- "minecraft:spawner{BlockEntityTag:{SpawnData:{id:'spider'}}}",
- "minecraft:spawner{BlockEntityTag:{SpawnData:{id:'creeper'}}}",
- "minecraft:spawner{BlockEntityTag:{SpawnData:{id:'slime'}}}",
- "promenade:asphalt",
- "twigs:rhyolite",
- "computercraft:turtle_advanced",
- "computercraft:turtle_normal"
- }
- local function makeCompSet(list)
- local newSet = {}
- setmetatable(newSet, {__index = function() return true end})
- for _, v in ipairs(BLACK_LIST) do
- newSet[v] = false
- end
- return newSet
- end
- BLACK_LIST = makeCompSet(BLACK_LIST)
- MOVE_LOOKUP = {
- turtle.up,
- function()
- turtle.turnRight()
- turtle.forward()
- turtle.turnLeft()
- end,
- turtle.forward,
- turtle.back,
- function()
- turtle.turnLeft()
- turtle.forward()
- turtle.turnRight()
- end,
- turtle.down
- }
- TURTLE_STATUS = {
- mining = true,
- current_ore = nil,
- in_vein = false,
- pos = {x = 0, y = 0, z = 0},
- }
- local function shouldMine(s)
- return BLACK_LIST[s]
- end
- --[[ to grab block name
- local _, d = turtle.inspect()
- local name = d.name
- ]]
- local function moveDir(dir)
- MOVE_LOOKUP[dir]()
- end
- local function lookDir(dir, wasBack)
- if dir == 2 then
- turtle.turnRight()
- elseif dir == 4 or wasBack then
- turtle.turnRight()
- turtle.turnRight()
- elseif dir == 5 then
- turtle.turnLeft()
- end
- end
- local function mineDir(dir)
- if dir == 1 then
- turtle.digUp()
- moveDir(1)
- elseif dir == 2 then
- turtle.turnRight()
- turtle.dig()
- turtle.turnLeft()
- moveDir(2)
- elseif dir == 3 then
- turtle.dig()
- moveDir(3)
- elseif dir == 4 then
- turtle.turnRight()
- turtle.turnRight()
- turtle.dig()
- turtle.turnLeft()
- turtle.turnLeft()
- moveDir(4)
- elseif dir == 5 then
- turtle.turnLeft()
- turtle.dig()
- turtle.turnRight()
- moveDir(5)
- else
- turtle.digDown()
- moveDir(6)
- end
- end
- -- {up, right, front, back, left, down}
- local function touchingOres()
- local ores = {}
- -- up
- local p, d = turtle.inspectUp()
- table.insert(ores, p and d.name or "")
- p, d = turtle.inspect()
- table.insert(ores, 3, p and d.name or "")
- turtle.turnRight()
- p, d = turtle.inspect()
- table.insert(ores, p and d.name or "")
- turtle.turnRight()
- p, d = turtle.inspect()
- table.insert(ores, 4, p and d.name or "")
- turtle.turnRight()
- p, d = turtle.inspect()
- table.insert(ores, 5, p and d.name or "")
- turtle.turnRight()
- p, d = turtle.inspectDown()
- table.insert(ores, p and d.name or "")
- return ores
- end
- local function vein()
- local ores = touchingOres()
- for i, ore in ipairs(ores) do
- if shouldMine(ore) and ore ~= "" then
- print("Mining: " .. ore)
- mineDir(i)
- vein()
- moveDir(7 - i)
- end
- end
- end
- local function returnToInit(dist)
- turtle.turnRight()
- turtle.turnRight()
- print("rotated")
- local D = dist
- local mCache = 0
- while D > 0 do
- if mCache < 5 then
- local m = turtle.forward()
- D = D - (m and 1 or 0)
- mCache = mCache + (m and 0 or 1)
- else
- turtle.turnRight()
- turtle.turnRight()
- mCache = 0
- end
- end
- print("rotated back")
- turtle.turnRight()
- turtle.turnRight()
- end
- local function clearFalling()
- local _, d = turtle.inspect()
- while d.name == "minecraft:gravel" or d.name == "minecraft:sand" do
- turtle.dig()
- sleep(0.5)
- _, d = turtle.inspect()
- end
- end
- local function carveStrip()
- local loc = 0
- for _ = 1, STRIP_SIZE do
- clearFalling()
- turtle.dig()
- turtle.forward()
- loc = loc + 1
- turtle.digDown()
- end
- returnToInit(loc)
- end
- local function isFull()
- for i = 16, 1, -1 do
- turtle.select(i)
- if turtle.getItemCount() == 0 then turtle.select(1); return false end
- end
- return true
- end
- local function checkToVein()
- local ores = touchingOres()
- for i, ore in ipairs(ores) do
- if shouldMine(ore) and ore ~= "" then
- lookDir(i)
- vein()
- if (i ~= 1) then lookDir(7 - i, i == 4) end
- end
- end
- end
- local function mineLoop()
- carveStrip()
- local loc = 0
- for i = 1, STRIP_SIZE do
- if (loc % 10 == 0 and isFull()) then
- print("breaking")
- break
- end
- local sucMove = turtle.forward()
- if sucMove then loc = loc + 1 else print("couldn't move") end
- print("Checking for ore at loc = " .. loc)
- checkToVein()
- turtle.down()
- checkToVein()
- turtle.up()
- print("Found all ore at loc = " .. loc .. ", moving...")
- end
- returnToInit(loc)
- end
- mineLoop()
- -- local function listen()
- -- while true do
- -- local _, msg = rednet.receive("minectrl")
- -- if msg == "stop" then
- -- break
- -- end
- -- end
- -- end
- local function main()
- -- parallel.waitForAny(main, listen)
- end
Advertisement
Add Comment
Please, Sign In to add comment