Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local side = { front=0, back=1, left=2, right=3, up=4, down=5 }
- local offset = { x = 0, y = 0, z = 0 }
- function check_and_extract()
- local success, dir
- success, dir = check_filon()
- if success then
- extract_filon(dir)
- end
- end
- function back_to_origin()
- turtle.turnRight()
- while offset.x > 0 do
- while not turtle.forward() do
- turtle.swing()
- end
- offset.x = offset.x - 1
- end
- turtle.turnLeft()
- turtle.turnLeft()
- while offset.x < 0 do
- while not turtle.forward() do
- turtle.swing()
- end
- offset.x = offset.x + 1
- end
- turtle.turnRight()
- while offset.y < 0 do
- while not turtle.up() do
- turtle.swingUp()
- end
- offset.y = offset.y + 1
- end
- while offset.y > 0 do
- while not turtle.down() do
- turtle.swingDown()
- end
- offset.y = offset.y - 1
- end
- turtle.turnLeft()
- turtle.turnLeft()
- while offset.z < 0 do
- while not turtle.forward() do
- turtle.swing()
- end
- offset.z = offset.z + 1
- end
- turtle.turnRight()
- turtle.turnRight()
- while offset.z > 0 do
- while not turtle.forward() do
- turtle.swing()
- end
- offset.z = offset.z - 1
- end
- end
- function analyze(dir)
- local success, data
- if dir == side.front then
- success, data = turtle.inspect()
- elseif dir == side.back then
- turtle.turnLeft()
- turtle.turnLeft()
- success, data = turtle.inspect()
- turtle.turnRight()
- turtle.turnRight()
- elseif dir == side.left then
- turtle.turnLeft()
- success, data = turtle.inspect()
- turtle.turnRight()
- elseif dir == side.right then
- turtle.turnRight()
- success, data = turtle.inspect()
- turtle.turnLeft()
- elseif dir == side.up then
- success, data = turtle.inspectUp()
- elseif dir == side.down then
- success, data = turtle.inspectDown()
- end
- if not success then
- data = { name="air" }
- end
- return data
- end
- function check_filon()
- local bloc
- bloc = analyze(side.left)
- if bloc.name == "minecraft:diamond_ore" or bloc.name == "minecraft:iron_ore" or bloc.name == "minecraft:gold_ore" or bloc.name == "minecraft:quartz_ore" then
- return true, side.left
- end
- bloc = analyze(side.right)
- if bloc.name == "minecraft:diamond_ore" or bloc.name == "minecraft:iron_ore" or bloc.name == "minecraft:gold_ore" or bloc.name == "minecraft:quartz_ore" then
- return true, side.right
- end
- bloc = analyze(side.up)
- if bloc.name == "minecraft:diamond_ore" or bloc.name == "minecraft:iron_ore" or bloc.name == "minecraft:gold_ore" or bloc.name == "minecraft:quartz_ore" then
- return true, side.up
- end
- bloc = analyze(side.down)
- if bloc.name == "minecraft:diamond_ore" or bloc.name == "minecraft:iron_ore" or bloc.name == "minecraft:gold_ore" or bloc.name == "minecraft:quartz_ore" then
- return true, side.down
- end
- bloc = analyze(side.back)
- if bloc.name == "minecraft:diamond_ore" or bloc.name == "minecraft:iron_ore" or bloc.name == "minecraft:gold_ore" or bloc.name == "minecraft:quartz_ore" then
- return true, side.back
- end
- bloc = analyze(side.front)
- if bloc.name == "minecraft:diamond_ore" or bloc.name == "minecraft:iron_ore" or bloc.name == "minecraft:gold_ore" or bloc.name == "minecraft:quartz_ore" then
- return true, side.front
- end
- return false, nil
- end
- function extract_filon(direction)
- local success, dir
- if is_inventory_full() then
- clean_inventory()
- end
- if direction == side.front then
- while not turtle.forward() do
- turtle.dig()
- end
- check_and_extract()
- turtle.turnRight()
- turtle.turnRight()
- while not turtle.forward() do
- turtle.dig()
- end
- turtle.turnLeft()
- turtle.turnLeft()
- elseif direction == side.left then
- turtle.turnLeft()
- while not turtle.forward() do
- turtle.dig()
- end
- turtle.turnRight()
- check_and_extract()
- turtle.turnRight()
- while not turtle.forward() do
- turtle.dig()
- end
- turtle.turnLeft()
- elseif direction == side.right then
- turtle.turnRight()
- while not turtle.forward() do
- turtle.dig()
- end
- turtle.turnLeft()
- check_and_extract()
- turtle.turnLeft()
- while not turtle.forward() do
- turtle.dig()
- end
- turtle.turnRight()
- elseif direction == side.up then
- while not turtle.up() do
- turtle.digUp()
- end
- check_and_extract()
- while not turtle.down() do
- turtle.digDown()
- end
- elseif direction == side.down then
- while not turtle.down() do
- turtle.digDown()
- end
- check_and_extract()
- while not turtle.up() do
- turtle.digUp()
- end
- elseif direction == side.back then
- turtle.turnLeft()
- turtle.turnLeft()
- while not turtle.forward() do
- turtle.dig()
- end
- turtle.turnRight()
- turtle.turnRight()
- check_and_extract()
- while not turtle.forward() do
- turtle.dig()
- end
- end
- check_and_extract()
- end
- function select_item(item)
- local slot = 1
- while slot <= 16 do
- local data = turtle.getItemDetail(slot)
- if data and data.name == item then
- turtle.select(slot)
- return true
- end
- slot = slot + 1
- end
- return false
- end
- function select_next_item(slot, item)
- local data
- while slot <= 16 do
- data = turtle.getItemDetail(slot)
- if data and data.name == item then
- turtle.select(slot)
- return true
- end
- slot = slot + 1
- end
- return false
- end
- function repack_item(item)
- local slot = 1
- local data
- while slot < 16 do
- data = turtle.getItemDetail(slot)
- if not data or (data.name == item and data.size < 64) then
- if select_next_item(slot + 1, item) then
- turtle.transferTo(slot)
- data = turtle.getItemDetail(slot)
- else
- return true
- end
- end
- if data and ((data.name == item and data.size == 64) or data.name ~= item) then
- slot = slot + 1
- end
- end
- return true
- end
- function clean_inventory()
- local slot = 1
- local data
- while slot <= 16 do
- data = turtle.getItemDetail(slot)
- if data and (data.name == "minecraft:diamond" or data.name == "minecraft:emerald" or data.name == "minecraft:redstone" or data.name == "minecraft:diamond_ore" or data.name == "minecraft:emerald_ore" or data.name == "minecraft:redstone_ore" or data.name == "minecraft:iron_ore" or data.name == "minecraft:gold_ore" or data.name == "minecraft:coal" or data.name == "minecraft:coal_ore" or (data.name == "minecraft:dye" and data.damage == 4) or data.name == "minecraft:quartz_ore") then
- repack_item(data.name)
- elseif data then
- turtle.select(slot)
- turtle.drop()
- end
- slot = slot + 1
- end
- end
- function is_inventory_full()
- local slot = 1
- local data
- while slot <= 16 do
- data = turtle.getItemDetail(slot)
- if not data then
- return false
- end
- slot = slot + 1
- end
- return true
- end
- function avance()
- if is_inventory_full() then
- clean_inventory()
- end
- check_and_extract()
- while not turtle.forward() do
- turtle.dig()
- end
- while not turtle.down() do
- turtle.digDown()
- end
- check_and_extract()
- while not turtle.up() do
- turtle.digUp()
- end
- while not turtle.up() do
- turtle.digUp()
- end
- check_and_extract()
- while not turtle.down() do
- turtle.digDown()
- end
- end
- function line(i)
- while i > 0 do
- avance()
- i = i - 1
- end
- if turtle.detectUp() then
- turtle.digUp()
- end
- if turtle.detectDown() then
- turtle.digDown()
- end
- end
- function turn(bool)
- if bool then
- turtle.turnRight()
- else
- turtle.turnLeft()
- end
- end
- function xor_bool(bool)
- if bool then
- return false
- else
- return true
- end
- end
- function core(xmax, tunmax, dir)
- local bool = true
- if dir == "left" then
- bool = false
- end
- while tunmax > 0 do
- line(xmax)
- turn(bool)
- line(4)
- turn(bool)
- bool = xor_bool(bool)
- tunmax = tunmax - 1
- end
- end
- local lenght, amount, direction
- print("Tunnel lenght ?")
- lenght = tonumber(read())
- print("Amount of paralels tunels ?")
- amount = tonumber(read())
- if amount > 1 then
- print("To the left or right ?")
- direction = read()
- if direction ~= "left" and direction ~= "right" then
- error("Unknown direction: " .. direction)
- end
- else
- direction = "right"
- end
- core(lenght, amount, direction)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement