Advertisement
Link712011

CC - Mine Opti v1.2.2

May 16th, 2016
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 7.93 KB | None | 0 0
  1. local side = { front=0, back=1, left=2, right=3, up=4, down=5 }
  2. local offset = { x = 0, y = 0, z = 0 }
  3.  
  4. function check_and_extract()
  5.     local success, dir
  6.    
  7.     success, dir = check_filon()
  8.     if success then
  9.         extract_filon(dir)
  10.     end
  11. end
  12. function back_to_origin()
  13.     turtle.turnRight()
  14.     while offset.x > 0 do
  15.         while not turtle.forward() do
  16.             turtle.swing()
  17.         end
  18.         offset.x = offset.x - 1
  19.     end
  20.     turtle.turnLeft()
  21.     turtle.turnLeft()
  22.     while offset.x < 0 do
  23.         while not turtle.forward() do
  24.             turtle.swing()
  25.         end
  26.         offset.x = offset.x + 1
  27.     end
  28.     turtle.turnRight()
  29.     while offset.y < 0 do
  30.         while not turtle.up() do
  31.             turtle.swingUp()
  32.         end
  33.         offset.y = offset.y + 1
  34.     end
  35.     while offset.y > 0 do
  36.         while not turtle.down() do
  37.             turtle.swingDown()
  38.         end
  39.         offset.y = offset.y - 1
  40.     end
  41.     turtle.turnLeft()
  42.     turtle.turnLeft()
  43.     while offset.z < 0 do
  44.         while not turtle.forward() do
  45.             turtle.swing()
  46.         end
  47.         offset.z = offset.z + 1
  48.     end
  49.     turtle.turnRight()
  50.     turtle.turnRight()
  51.     while offset.z > 0 do
  52.         while not turtle.forward() do
  53.             turtle.swing()
  54.         end
  55.         offset.z = offset.z - 1
  56.     end
  57. end
  58. function analyze(dir)
  59.     local success, data
  60.    
  61.     if dir == side.front then
  62.         success, data = turtle.inspect()
  63.     elseif dir == side.back then
  64.         turtle.turnLeft()
  65.         turtle.turnLeft()
  66.         success, data = turtle.inspect()
  67.         turtle.turnRight()
  68.         turtle.turnRight()
  69.     elseif dir == side.left then
  70.         turtle.turnLeft()
  71.         success, data = turtle.inspect()
  72.         turtle.turnRight()
  73.     elseif dir == side.right then
  74.         turtle.turnRight()
  75.         success, data = turtle.inspect()
  76.         turtle.turnLeft()
  77.     elseif dir == side.up then
  78.         success, data = turtle.inspectUp()
  79.     elseif dir == side.down then
  80.         success, data = turtle.inspectDown()
  81.     end
  82.     if not success then
  83.         data = { name="air" }
  84.     end
  85.     return data
  86. end
  87. function check_filon()
  88.     local bloc
  89.    
  90.     bloc = analyze(side.left)
  91.     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
  92.         return true, side.left
  93.     end
  94.     bloc = analyze(side.right)
  95.     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
  96.         return true, side.right
  97.     end
  98.     bloc = analyze(side.up)
  99.     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
  100.         return true, side.up
  101.     end
  102.     bloc = analyze(side.down)
  103.     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
  104.         return true, side.down
  105.     end
  106.     bloc = analyze(side.back)
  107.     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
  108.         return true, side.back
  109.     end
  110.     bloc = analyze(side.front)
  111.     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
  112.         return true, side.front
  113.     end
  114.     return false, nil
  115. end
  116. function extract_filon(direction)
  117.     local success, dir
  118.    
  119.     if is_inventory_full() then
  120.         clean_inventory()
  121.     end
  122.     if direction == side.front then
  123.         while not turtle.forward() do
  124.             turtle.dig()
  125.         end
  126.         check_and_extract()
  127.         turtle.turnRight()
  128.         turtle.turnRight()
  129.         while not turtle.forward() do
  130.             turtle.dig()
  131.         end
  132.         turtle.turnLeft()
  133.         turtle.turnLeft()
  134.     elseif direction == side.left then
  135.         turtle.turnLeft()
  136.         while not turtle.forward() do
  137.             turtle.dig()
  138.         end
  139.         turtle.turnRight()
  140.         check_and_extract()
  141.         turtle.turnRight()
  142.         while not turtle.forward() do
  143.             turtle.dig()
  144.         end
  145.         turtle.turnLeft()
  146.     elseif direction == side.right then
  147.         turtle.turnRight()
  148.         while not turtle.forward() do
  149.             turtle.dig()
  150.         end
  151.         turtle.turnLeft()
  152.         check_and_extract()
  153.         turtle.turnLeft()
  154.         while not turtle.forward() do
  155.             turtle.dig()
  156.         end
  157.         turtle.turnRight()
  158.     elseif direction == side.up then
  159.         while not turtle.up() do
  160.             turtle.digUp()
  161.         end
  162.         check_and_extract()
  163.         while not turtle.down() do
  164.             turtle.digDown()
  165.         end
  166.     elseif direction == side.down then
  167.         while not turtle.down() do
  168.             turtle.digDown()
  169.         end
  170.         check_and_extract()
  171.         while not turtle.up() do
  172.             turtle.digUp()
  173.         end
  174.     elseif direction == side.back then
  175.         turtle.turnLeft()
  176.         turtle.turnLeft()
  177.         while not turtle.forward() do
  178.             turtle.dig()
  179.         end
  180.         turtle.turnRight()
  181.         turtle.turnRight()
  182.         check_and_extract()
  183.         while not turtle.forward() do
  184.             turtle.dig()
  185.         end
  186.     end
  187.     check_and_extract()
  188. end
  189. function select_item(item)
  190.     local slot = 1
  191.    
  192.     while slot <= 16 do
  193.         local data = turtle.getItemDetail(slot)
  194.        
  195.         if data and data.name == item then
  196.             turtle.select(slot)
  197.             return true
  198.         end
  199.         slot = slot + 1
  200.     end
  201.     return false
  202. end
  203. function select_next_item(slot, item)
  204.     local data
  205.    
  206.     while slot <= 16 do
  207.         data = turtle.getItemDetail(slot)
  208.         if data and data.name == item then
  209.             turtle.select(slot)
  210.             return true
  211.         end
  212.         slot = slot + 1
  213.     end
  214.     return false
  215. end
  216. function repack_item(item)
  217.     local slot = 1
  218.     local data
  219.    
  220.     while slot < 16 do
  221.         data = turtle.getItemDetail(slot)
  222.         if not data or (data.name == item and data.size < 64) then
  223.             if select_next_item(slot + 1, item) then
  224.                 turtle.transferTo(slot)
  225.                 data = turtle.getItemDetail(slot)
  226.             else
  227.                 return true
  228.             end
  229.         end
  230.         if data and ((data.name == item and data.size == 64) or data.name ~= item) then
  231.             slot = slot + 1
  232.         end
  233.     end
  234.     return true
  235. end
  236. function clean_inventory()
  237.     local slot = 1
  238.     local data
  239.    
  240.     while slot <= 16 do
  241.         data = turtle.getItemDetail(slot)
  242.         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
  243.             repack_item(data.name)
  244.         elseif data then
  245.             turtle.select(slot)
  246.             turtle.drop()
  247.         end
  248.         slot = slot + 1
  249.     end
  250. end
  251. function is_inventory_full()
  252.     local slot = 1
  253.     local data
  254.    
  255.     while slot <= 16 do
  256.         data = turtle.getItemDetail(slot)
  257.         if not data then
  258.             return false
  259.         end
  260.         slot = slot + 1
  261.     end
  262.     return true
  263. end
  264. function avance()
  265.     if is_inventory_full() then
  266.         clean_inventory()
  267.     end
  268.     check_and_extract()
  269.     while not turtle.forward() do
  270.         turtle.dig()
  271.     end
  272.     while not turtle.down() do
  273.         turtle.digDown()
  274.     end
  275.     check_and_extract()
  276.     while not turtle.up() do
  277.         turtle.digUp()
  278.     end
  279.     while not turtle.up() do
  280.         turtle.digUp()
  281.     end
  282.     check_and_extract()
  283.     while not turtle.down() do
  284.         turtle.digDown()
  285.     end
  286. end
  287. function line(i)
  288.     while i > 0 do
  289.         avance()
  290.         i = i - 1
  291.     end
  292.     if turtle.detectUp() then
  293.         turtle.digUp()
  294.     end
  295.     if turtle.detectDown() then
  296.         turtle.digDown()
  297.     end
  298. end
  299. function turn(bool)
  300.     if bool then
  301.         turtle.turnRight()
  302.     else
  303.         turtle.turnLeft()
  304.     end
  305. end
  306. function xor_bool(bool)
  307.     if bool then
  308.         return false
  309.     else
  310.         return true
  311.     end
  312. end
  313. function core(xmax, tunmax, dir)
  314.     local bool = true
  315.    
  316.     if dir == "left" then
  317.         bool = false
  318.     end
  319.     while tunmax > 0 do
  320.         line(xmax)
  321.         turn(bool)
  322.         line(4)
  323.         turn(bool)
  324.         bool = xor_bool(bool)
  325.         tunmax = tunmax - 1
  326.     end
  327. end
  328.  
  329. local lenght, amount, direction
  330.  
  331. print("Tunnel lenght ?")
  332. lenght = tonumber(read())
  333. print("Amount of paralels tunels ?")
  334. amount = tonumber(read())
  335. if amount > 1 then
  336.     print("To the left or right ?")
  337.     direction = read()
  338.     if direction ~= "left" and direction ~= "right" then
  339.         error("Unknown direction: " .. direction)
  340.     end
  341. else
  342.     direction = "right"
  343. end
  344. core(lenght, amount, direction)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement