0xSRK6

mine

Feb 22nd, 2025 (edited)
510
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.79 KB | None | 0 0
  1. TEST_MODE = false
  2. STRIP_SIZE = (TEST_MODE and 4 or 10) * 16 -- 10 chunks
  3.  
  4. BLACK_LIST = {
  5.     "minecraft:stone",
  6.     "minecraft:bedrock",
  7.     "minecraft:dirt",
  8.     "minecraft:wall_torch",
  9.     "minecraft:torch",
  10.     "minecraft:water",
  11.     "minecraft:lava",
  12.     "minecraft:andesite",
  13.     "minecraft:diorite",
  14.     "minecraft:granite",
  15.     "minecraft:gravel",
  16.     "minecraft:deepslate",
  17.     "minecraft:dripstone_block",
  18.     "minecraft:pointed_dripstone",
  19.     "minecraft:calcite",
  20.     "minecraft:tuff",
  21.     "minecraft:moss_block",
  22.     "minecraft:azalea",
  23.     "minecraft:flowering_azalea",
  24.     "minecraft:big_dripleaf",
  25.     "minecraft:small_dripleaf",
  26.     "minecraft:cave_vines",
  27.     "minecraft:glow_berries",
  28.     "minecraft:rooted_dirt",
  29.     "minecraft:hanging_roots",
  30.     "minecraft:spore_blossom",
  31.     "minecraft:cobweb",
  32.     "minecraft:infested_stone",
  33.     "minecraft:infested_deepslate",
  34.     "minecraft:glow_lichen",
  35.     "minecraft:oak_planks",
  36.     "minecraft:oak_fence",
  37.     "minecraft:rail",
  38.     "minecraft:powered_rail",
  39.     "minecraft:detector_rail",
  40.     "minecraft:activator_rail",
  41.     "minecraft:chain",
  42.     "minecraft:oak_log",
  43.     "minecraft:chest_minecart",
  44.     "minecraft:spawner",
  45.     "minecraft:spawner{BlockEntityTag:{SpawnData:{id:'cave_spider'}}}",
  46.     "minecraft:spawner{BlockEntityTag:{SpawnData:{id:'zombie'}}}",
  47.     "minecraft:spawner{BlockEntityTag:{SpawnData:{id:'skeleton'}}}",
  48.     "minecraft:spawner{BlockEntityTag:{SpawnData:{id:'spider'}}}",
  49.     "minecraft:spawner{BlockEntityTag:{SpawnData:{id:'creeper'}}}",
  50.     "minecraft:spawner{BlockEntityTag:{SpawnData:{id:'slime'}}}",
  51.  
  52.  
  53.     "promenade:asphalt",
  54.     "twigs:rhyolite",
  55.  
  56.     "computercraft:turtle_advanced",
  57.     "computercraft:turtle_normal"
  58. }
  59.  
  60. local function makeCompSet(list)
  61.     local newSet = {}
  62.     setmetatable(newSet, {__index = function() return true end})
  63.     for _, v in ipairs(BLACK_LIST) do
  64.         newSet[v] = false
  65.     end
  66.     return newSet
  67. end
  68.  
  69. BLACK_LIST = makeCompSet(BLACK_LIST)
  70.  
  71. MOVE_LOOKUP = {
  72.     turtle.up,
  73.     function()
  74.         turtle.turnRight()
  75.         turtle.forward()
  76.         turtle.turnLeft()
  77.     end,
  78.     turtle.forward,
  79.     turtle.back,
  80.     function()
  81.         turtle.turnLeft()
  82.         turtle.forward()
  83.         turtle.turnRight()
  84.     end,
  85.     turtle.down
  86. }
  87.  
  88. TURTLE_STATUS = {
  89.     mining = true,
  90.     current_ore = nil,
  91.     in_vein = false,
  92.     pos = {x = 0, y = 0, z = 0},
  93.    
  94. }
  95.  
  96. local function shouldMine(s)
  97.      return BLACK_LIST[s]
  98. end
  99.  
  100.  
  101. --[[ to grab block name
  102. local _, d = turtle.inspect()
  103. local name = d.name
  104. ]]
  105. local function moveDir(dir)
  106.     MOVE_LOOKUP[dir]()
  107. end
  108.  
  109. local function lookDir(dir, wasBack)
  110.     if dir == 2 then
  111.         turtle.turnRight()
  112.     elseif dir == 4 or wasBack then
  113.         turtle.turnRight()
  114.         turtle.turnRight()
  115.     elseif dir == 5 then
  116.         turtle.turnLeft()
  117.     end
  118. end
  119.  
  120. local function mineDir(dir)
  121.     if dir == 1 then
  122.         turtle.digUp()
  123.         moveDir(1)
  124.     elseif dir == 2 then
  125.         turtle.turnRight()
  126.         turtle.dig()
  127.         turtle.turnLeft()
  128.         moveDir(2)
  129.     elseif dir == 3 then
  130.         turtle.dig()
  131.         moveDir(3)
  132.     elseif dir == 4 then
  133.         turtle.turnRight()
  134.         turtle.turnRight()
  135.         turtle.dig()
  136.         turtle.turnLeft()
  137.         turtle.turnLeft()
  138.         moveDir(4)
  139.     elseif dir == 5 then
  140.         turtle.turnLeft()
  141.         turtle.dig()
  142.         turtle.turnRight()
  143.         moveDir(5)
  144.     else
  145.         turtle.digDown()
  146.         moveDir(6)
  147.     end
  148. end
  149.  
  150. -- {up, right, front, back, left, down}
  151. local function touchingOres()
  152.     local ores = {}
  153.     -- up
  154.     local p, d = turtle.inspectUp()
  155.     table.insert(ores, p and d.name or "")
  156.    
  157.     p, d = turtle.inspect()
  158.     table.insert(ores, 3, p and d.name or "")
  159.    
  160.     turtle.turnRight()
  161.     p, d = turtle.inspect()
  162.     table.insert(ores, p and d.name or "")
  163.    
  164.     turtle.turnRight()
  165.     p, d = turtle.inspect()
  166.     table.insert(ores, 4, p and d.name or "")
  167.    
  168.     turtle.turnRight()
  169.     p, d = turtle.inspect()
  170.     table.insert(ores, 5, p and d.name or "")
  171.  
  172.     turtle.turnRight()
  173.     p, d = turtle.inspectDown()
  174.     table.insert(ores, p and d.name or "")
  175.    
  176.     return ores
  177. end
  178.  
  179.  
  180.  
  181. local function vein()
  182.     local ores = touchingOres()
  183.     for i, ore in ipairs(ores) do
  184.         if shouldMine(ore) and ore ~= "" then
  185.             print("Mining: " .. ore)
  186.             mineDir(i)
  187.             vein()
  188.             moveDir(7 - i)
  189.         end
  190.     end    
  191. end
  192.  
  193.  
  194.  
  195.  
  196. local function returnToInit(dist)
  197.     turtle.turnRight()
  198.     turtle.turnRight()
  199.     print("rotated")
  200.     local D = dist
  201.     local mCache = 0
  202.     while D > 0 do
  203.         if mCache < 5 then
  204.             local m = turtle.forward()
  205.             D = D - (m and 1 or 0)
  206.             mCache = mCache + (m and 0 or 1)
  207.         else
  208.             turtle.turnRight()
  209.             turtle.turnRight()
  210.             mCache = 0
  211.         end
  212.     end
  213.     print("rotated back")
  214.     turtle.turnRight()
  215.     turtle.turnRight()
  216. end
  217.  
  218. local function clearFalling()
  219.     local _, d = turtle.inspect()
  220.     while d.name == "minecraft:gravel" or d.name == "minecraft:sand" do
  221.         turtle.dig()
  222.         sleep(0.5)
  223.         _, d = turtle.inspect()
  224.     end
  225. end
  226.  
  227.  
  228. local function carveStrip()
  229.     local loc = 0
  230.     for _ = 1, STRIP_SIZE do
  231.         clearFalling()
  232.         turtle.dig()
  233.         turtle.forward()
  234.         loc = loc + 1
  235.         turtle.digDown()
  236.     end
  237.     returnToInit(loc)
  238.    
  239. end
  240.  
  241.  
  242.  
  243.  
  244.  
  245. local function isFull()
  246.     for i = 16, 1, -1 do
  247.         turtle.select(i)
  248.         if turtle.getItemCount() == 0 then turtle.select(1); return false end
  249.     end
  250.    
  251.     return true
  252. end
  253.  
  254. local function checkToVein()
  255.     local ores = touchingOres()
  256.     for i, ore in ipairs(ores) do
  257.         if shouldMine(ore) and ore ~= "" then
  258.             lookDir(i)
  259.             vein()
  260.             if (i ~= 1) then lookDir(7 - i, i == 4) end
  261.         end
  262.        
  263.     end
  264. end
  265.  
  266. local function mineLoop()
  267.     carveStrip()
  268.     local loc = 0
  269.     for i = 1, STRIP_SIZE do
  270.         if (loc % 10 == 0 and isFull()) then
  271.             print("breaking")
  272.             break
  273.         end
  274.         local sucMove = turtle.forward()
  275.         if sucMove then loc = loc + 1 else print("couldn't move") end
  276.         print("Checking for ore at loc = " .. loc)
  277.         checkToVein()
  278.         turtle.down()
  279.         checkToVein()
  280.         turtle.up()
  281.         print("Found all ore at loc = " .. loc .. ", moving...")
  282.     end
  283.     returnToInit(loc)
  284.    
  285. end
  286.  
  287.  
  288. mineLoop()
  289.  
  290. -- local function listen()
  291. --     while true do
  292. --         local _, msg = rednet.receive("minectrl")
  293. --         if msg == "stop" then
  294. --             break
  295. --         end
  296. --     end
  297. -- end
  298.  
  299. local function main()
  300.     -- parallel.waitForAny(main, listen)
  301. end
  302.  
  303.  
Advertisement
Add Comment
Please, Sign In to add comment