Advertisement
Blazuno

veinmine test

Dec 20th, 2024 (edited)
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 7.69 KB | None | 0 0
  1. local blacklist = {
  2.     "minecraft:stone",
  3.     "minecraft:dirt",
  4.     "minecraft:diorite",
  5.     "minecraft:andesite",
  6.     "minecraft:granite",
  7.     "minecraft:gravel",
  8.     "quark:slate"
  9. }
  10.  
  11.  
  12. local function check_ore(direction)
  13.     if direction == "up" then
  14.         _, j = turtle.inspectUp()
  15.         if not _ then return false end
  16.         for i,v in pairs(blacklist) do
  17.             if j.name == v then
  18.                 return false
  19.             end
  20.         end
  21.         return true
  22.     elseif direction == "down" then
  23.         _, j = turtle.inspectDown()
  24.         if not _ then return false end
  25.         for i,v in pairs(blacklist) do
  26.             if _ and j.name == v then
  27.                 return false
  28.             end
  29.         end
  30.         return true
  31.     elseif direction == "forward" then
  32.         _, j = turtle.inspect()
  33.         if not _ then return false end
  34.         for i,v in pairs(blacklist) do
  35.             if _ and j.name == v then
  36.                 return false
  37.             end
  38.         end
  39.         return true
  40.     end
  41. end
  42.  
  43.  
  44. local function veinmine()
  45.     turtle.dig()
  46.     turtle.forward()
  47.     local rotation = 0
  48.     local tx, ty, tz = 0,0,1
  49.     local positions = {0}
  50.     local turns = {}
  51.     local shortcuts = 0
  52.     local skips = 0
  53.     local omega_skips = 0
  54.     local mined = {}
  55.  
  56.     local function check_around()
  57.         if mined[tostring(tx - 1) .. tostring(ty) .. tostring(tz)] and mined[tostring(tx + 1) .. tostring(ty) .. tostring(tz)] and mined[tostring(tx) .. tostring(ty - 1) .. tostring(tz)] and mined[tostring(tx) .. tostring(ty + 1) .. tostring(tz)] and mined[tostring(tx) .. tostring(ty) .. tostring(tz - 1)] and mined[tostring(tx) .. tostring(ty) .. tostring(tz + 1)] then
  58.             return true
  59.         end
  60.         return false
  61.     end
  62.  
  63.     while #positions ~= 0 do
  64.         local found_ore = false
  65.         local old_rot = rotation  
  66.         if not check_around() then
  67.             if not check_ore("up") then
  68.                 mined[tostring(tx) .. tostring(ty+1) .. tostring(tz)] = true
  69.             end
  70.             if not check_ore("down") then
  71.                 mined[tostring(tx) .. tostring(ty - 1) .. tostring(tz)] = true
  72.             end
  73.             if check_ore("up") then
  74.                 table.insert(positions, "down")
  75.                 turtle.digUp()
  76.                 turtle.up()
  77.                 found_ore = true
  78.                 ty = ty + 1
  79.             elseif check_ore("down") then
  80.                 table.insert(positions, "up")
  81.                 turtle.digDown()
  82.                 turtle.down()
  83.                 found_ore = true
  84.                 ty = ty - 1
  85.             else
  86.                 if not turns[tostring(tx) .. tostring(ty) .. tostring(tz)] or turns[tostring(tx) .. tostring(ty) .. tostring(tz)] <= 1 then
  87.                     for i = 1,4 do
  88.                         if check_ore("forward") then
  89.                             table.insert(positions, rotation)
  90.                             turns[tostring(tx) .. tostring(ty) .. tostring(tz)] = i - 1
  91.                             turtle.dig()
  92.                             turtle.forward()
  93.                             if rotation % 4 == 1 then
  94.                                 tx = tx + 1
  95.                             elseif rotation % 4 == 2 then
  96.                                 tz = tz - 1
  97.                             elseif rotation % 4 == 3 then
  98.                                 tx = tx - 1
  99.                             elseif rotation % 4 == 0 then
  100.                                 tz = tz + 1
  101.                             end
  102.                             found_ore = true
  103.                             mined[tostring(tx) .. tostring(ty) .. tostring(tz)] = true
  104.                             break
  105.                         else
  106.                             local qx, qy, qz = tx, ty, tz
  107.                             if rotation % 4 == 1 then
  108.                                 qx = qx + 1
  109.                             elseif rotation % 4 == 2 then
  110.                                 qz = qz - 1
  111.                             elseif rotation % 4 == 3 then
  112.                                 qx = qx - 1
  113.                             elseif rotation % 4 == 0 then
  114.                                 qz = qz + 1
  115.                             end
  116.                             mined[tostring(qx) .. tostring(qy) .. tostring(qz)] = true
  117.                         end
  118.                         turtle.turnRight()
  119.                         rotation = rotation + 1
  120.                     end
  121.                 elseif turns[tostring(tx) .. tostring(ty) .. tostring(tz)] == 2 then
  122.                     shortcuts = shortcuts + 1
  123.                     turtle.turnLeft()
  124.                     if check_ore("forward") then
  125.                         rotation = rotation + 3
  126.                         table.insert(positions, rotation)
  127.                         turns[tostring(tx) .. tostring(ty) .. tostring(tz)] = 3
  128.                         found_ore = true
  129.                         turtle.dig()
  130.                         turtle.forward()
  131.                         if rotation % 4 == 1 then
  132.                             tx = tx + 1
  133.                         elseif rotation % 4 == 2 then
  134.                             tz = tz - 1
  135.                         elseif rotation % 4 == 3 then
  136.                             tx = tx - 1
  137.                         elseif rotation % 4 == 0 then
  138.                             tz = tz + 1
  139.                         end
  140.                         mined[tostring(tx) .. tostring(ty) .. tostring(tz)] = true
  141.                     else
  142.                         local qx, qy, qz = tx, ty, tz
  143.                         if rotation % 4 == 1 then
  144.                             qx = qx + 1
  145.                         elseif rotation % 4 == 2 then
  146.                             qz = qz - 1
  147.                         elseif rotation % 4 == 3 then
  148.                             qx = qx - 1
  149.                         elseif rotation % 4 == 0 then
  150.                             qz = qz + 1
  151.                         end
  152.                         mined[tostring(qx) .. tostring(qy) .. tostring(qz)] = true
  153.                         turtle.turnRight()
  154.                     end
  155.                 elseif turns[tostring(tx) .. tostring(ty) .. tostring(tz)] >= 3 then
  156.                     skips = skips + 1
  157.                 end    
  158.             end
  159.         else
  160.             omega_skips = omega_skips + 1
  161.         end
  162.         if not found_ore then
  163.             rotation = old_rot
  164.             turns[tostring(tx) .. tostring(ty) .. tostring(tz)] = 3
  165.         end  
  166.         if not found_ore then
  167.             if positions[#positions] == "up" then
  168.                 turtle.up()
  169.                 ty = ty + 1
  170.             elseif positions[#positions] == "down" then
  171.                 turtle.down()
  172.                 ty = ty - 1
  173.             else
  174.                 if rotation - 3 == positions[#positions] then
  175.                     turtle.turnRight()
  176.                     rotation = positions[#positions]
  177.                 else
  178.                     for i = 1, math.abs(rotation - positions[#positions]) do
  179.                         turtle.turnLeft()
  180.                     end
  181.                     rotation = positions[#positions]
  182.                 end
  183.                 if rotation % 4 == 1 then
  184.                     tx = tx - 1
  185.                 elseif rotation % 4 == 2 then
  186.                     tz = tz + 1
  187.                 elseif rotation % 4 == 3 then
  188.                     tx = tx + 1
  189.                 elseif rotation % 4 == 0 then
  190.                     tz = tz - 1
  191.                 end
  192.                 turtle.back()
  193.             end
  194.             table.remove(positions)
  195.         end  
  196.     end  
  197.     print("Shortcuts used:", shortcuts)
  198.     print("Skips used:", skips)  
  199.     print("Omega skips used:", omega_skips)                          
  200. end
  201.  
  202.  
  203.  
  204. veinmine()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement