nadkarnik

AUTO_MINE_SPECIFIC

Jul 3rd, 2025
16
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 9.59 KB | None | 0 0
  1. local tArgs = {...}
  2. local size = tonumber(tArgs[1])
  3. local meter = tonumber(tArgs[2])
  4.  
  5. local stepSize = size - 1
  6. local area = size * size
  7. local diggedLevel = 0
  8.  
  9. --To move forward and mine if interupted
  10. function frwd(steps)  
  11.     for i = 1, steps do
  12.         turtle.select(1)
  13.         turtle.digUp()
  14.         turtle.select(1)
  15.         turtle.digDown()
  16.        
  17.         while not turtle.forward() do
  18.             turtle.select(1)
  19.             turtle.dig()
  20.         end
  21. --    clearJunk()
  22.     end
  23. end
  24.  
  25. function right()
  26.     turtle.turnRight()
  27.     frwd(1)
  28.     turtle.turnRight()
  29. end
  30.  
  31. function left()
  32.     turtle.turnLeft()
  33.     frwd(1)
  34.     turtle.turnLeft()
  35. end
  36.  
  37. --Consumes minimum refuel
  38. function refuel(limit)
  39.     local fuel = turtle.getFuelLevel()
  40.    
  41.     while turtle.getFuelLevel() <= limit do
  42.         local i = 1
  43.        
  44.         while i <= 16 do
  45.             turtle.select(i)
  46.            
  47.             if turtle.getFuelLevel() <= limit then
  48.                 if turtle.refuel(0) then
  49.                     print("\nTurtle> Consuming: ".."\""..turtle.getItemDetail().name.."\"")
  50.                     turtle.refuel(1)
  51.                     print("Turtle> Fuel: "..turtle.getFuelLevel())
  52.                     fuel = turtle.getFuelLevel()
  53.                     i = 0
  54.                    
  55.                 elseif i == 16 then
  56.                     if fuel == turtle.getFuelLevel() then
  57.                         turtle.select(1)
  58.                         return false
  59.                     end
  60.                 end
  61.             else
  62.                 turtle.select(1)
  63.                 return true
  64.             end
  65.             i = i + 1
  66.         end
  67.     end
  68. end
  69.  
  70. function emptySlots()
  71.     local empty = 16  
  72.      
  73.     for i = 1, 16 do        
  74.         if turtle.getItemCount(i) ~= 0 then
  75.             empty = empty - 1
  76.         end
  77.     end
  78.     return empty  
  79. end
  80.  
  81.  
  82.  
  83. function clearJunk()
  84.      
  85.     for i = 1, 16 do
  86.         turtle.select(i)
  87.         --print("\nITEM INDEX IS", i)
  88.         --print("\nITEM NAME IS ", turtle.getItemDetail(i).name)
  89.         if turtle.getItemCount(i)==0 then
  90.             --print(" ENTERED FIRST CONDITION")
  91.  
  92.         elseif string.find(turtle.getItemDetail(i).name, "ore")
  93.             or string.find(turtle.getItemDetail(i).name, "coal")
  94.             or string.find(turtle.getItemDetail(i).name, "diamond")
  95.             or string.find(turtle.getItemDetail(i).name, "raw")
  96.             or string.find(turtle.getItemDetail(i).name, "redstone")
  97.             or string.find(turtle.getItemDetail(i).name, "emerald")
  98.             or string.find(turtle.getItemDetail(i).name, "uranium")
  99.             or string.find(turtle.getItemDetail(i).name, "yellorite")
  100.             or string.find(turtle.getItemDetail(i).name, "dust")
  101.             or string.find(turtle.getItemDetail(i).name, "nikolite")            
  102.             then
  103.             --print("ENTERED SECOND CONDITION")
  104.        
  105.         else
  106.             turtle.drop()
  107.         end
  108.     end
  109.     print("\nTOSSED JUNK!!!")
  110.  
  111. end
  112.  
  113.  
  114.  
  115.  
  116. function placeChest(slot)
  117.     turtle.select(slot)
  118.    
  119.     turtle.turnLeft()
  120.     turtle.turnLeft()
  121.    
  122.     --Places 1st chest
  123.     turtle.dig()
  124.     turtle.place()
  125.     turtle.digUp()
  126.     turtle.up()
  127.     turtle.dig()
  128.     turtle.down()
  129.    
  130.     turtle.turnLeft()
  131.     frwd(1)
  132.     turtle.turnRight()
  133.    
  134.     --Places 2nd chest
  135.     turtle.dig()
  136.     turtle.place()
  137.     turtle.digUp()
  138.     turtle.up()
  139.     turtle.dig()
  140.     turtle.down()
  141.    
  142.     turtle.turnRight()
  143.     frwd(1)
  144.     turtle.turnRight()
  145.      
  146.     print("\nTurtle> Deployed chest")
  147. end
  148.  
  149. function sortInventory()
  150.     -- Loop through each slot
  151.     for i = 1, 16 do
  152.         turtle.select(i)
  153.         local itemDetail = turtle.getItemDetail()
  154.  
  155.         if itemDetail then
  156.             -- Try to combine with other stacks of the same item in earlier slots
  157.             for j = 1, i - 1 do
  158.                 turtle.select(j)
  159.                 local otherItem = turtle.getItemDetail()
  160.                 if otherItem and otherItem.name == itemDetail.name then
  161.                     turtle.select(i)
  162.                     turtle.transferTo(j)
  163.                     itemDetail = turtle.getItemDetail() -- Update stack after transfer
  164.                     if not itemDetail then break end -- If slot is now empty, break
  165.                 end
  166.             end
  167.         end
  168.     end
  169.  
  170.     -- Compact inventory: shift all items to lowest possible slots
  171.     for i = 1, 16 do
  172.         turtle.select(i)
  173.         if not turtle.getItemDetail() then
  174.             -- Find the next non-empty slot after i
  175.             for j = i + 1, 16 do
  176.                 turtle.select(j)
  177.                 if turtle.getItemDetail() then
  178.                     turtle.transferTo(i)
  179.                     break
  180.                 end
  181.             end
  182.         end
  183.     end
  184.  
  185.     turtle.select(1) -- Reset selection to slot 1
  186. end    
  187.  
  188.  
  189.  
  190. function dumpChest(returning)
  191.  
  192.  
  193.     refuel((area + diggedLevel) * 2)
  194.    
  195.  
  196.  
  197.     if diggedLevel % 2 == 0 and diggedLevel ~= 0 then
  198.               if size % 2 ~= 0 then        
  199.             frwd(stepSize)
  200.             turtle.turnRight()
  201.               frwd(stepSize)
  202.               turtle.turnRight()
  203.            
  204.               else
  205.                      turtle.turnLeft()
  206.                      frwd(stepSize)
  207.                      turtle.turnRight()
  208.               end
  209.        end
  210.    
  211.     for i = 1, diggedLevel - 1 do
  212.         turtle.digUp()
  213.         turtle.up()
  214.     end
  215.        
  216.     turtle.turnLeft()
  217.     turtle.turnLeft()
  218.        
  219.     for i = 1, 16 do
  220.         turtle.select(i)
  221.        
  222.         if not turtle.refuel(0) then
  223.             turtle.drop()
  224.         end
  225.     end
  226.     turtle.select(1)
  227.        
  228.     print("\nTurtle> Emptyed inventory!")
  229.      
  230.     turtle.turnRight()
  231.     turtle.turnRight()
  232.    
  233.     if returning then    
  234.         for i = 1, diggedLevel - 1 do
  235.             turtle.digDown()
  236.             turtle.down()
  237.         end
  238.    
  239.         if diggedLevel % 2 == 0 and diggedLevel ~= 0 then
  240.             if size % 2 ~= 0 then        
  241.                 frwd(stepSize)
  242.                 turtle.turnRight()
  243.                 frwd(stepSize)
  244.                 turtle.turnRight()
  245.            
  246.             else
  247.                             turtle.turnRight()
  248.                             frwd(stepSize)
  249.                             turtle.turnLeft()
  250.             end
  251.         end
  252.     end
  253. end
  254.  
  255. --Main program
  256. local chestThere = 0
  257. for i = 1, 16 do
  258.     if turtle.getItemCount(i) >= 2 then
  259.         if turtle.getItemDetail(i).name == "minecraft:chest" then    
  260.             chestThere = i
  261.             break
  262.         end
  263.     end
  264. end
  265.  
  266. refuel(6)
  267.            
  268. if chestThere ~= 0 then    
  269.     placeChest(chestThere)
  270.        
  271. else
  272.     print("\nTurtle> Please give me 2 normal")
  273.     print("Turtle> minecraft chest")
  274.     print("\nTurtle> Enter which slot has the chest")
  275.     print("Turtle> or 0 to not deploy\n")
  276.     term.write("You> ")
  277.     local chestIn = tonumber(read())
  278.  
  279.     if chestIn == 0 then
  280.         print("\nTurtle> Make sure there is a chest")
  281.         print("Turtle> behind the starting point")
  282.    
  283.     elseif chestIn ~= 0 then
  284.         if turtle.getItemCount(chestIn) >= 2 then
  285.             if turtle.getItemDetail(chestIn).name == "minecraft:chest" then
  286.                 placeChest(chestIn)
  287.        
  288.             else
  289.                 print("\nTurtle> Chest not found")
  290.                 print("Turtle> Terminating!")
  291.                 exit()
  292.             end    
  293.         else
  294.             print("\nTurtle> Minimum 2 chest are required")
  295.             print("Turtle> Terminating!")
  296.             exit()
  297.         end
  298.     else
  299.         print("\nTurtle> Enter a value between 0 to 16")
  300.         print("Turtle> Terminating!")
  301.         exit()
  302.     end
  303. end
  304.  
  305. while diggedLevel <= meter - 1 do    
  306.     if emptySlots() == 0 then
  307.         print("\nTurtle> Inventory Full!")
  308.         print("Turtle> Emptying inventory")
  309.        
  310.         dumpChest(true)
  311.         print("\nTurtle> Continuing...")
  312.     end
  313.    
  314.     if turtle.getFuelLevel() <= area + 3 then
  315.         if not refuel(area + 3) then
  316.             print("\nTurtle> Fuel: "..turtle.getFuelLevel().." < "..area)
  317.             print("Turtle> Terminating! Low fuel")
  318.             exit()
  319.         end
  320.     end
  321.    
  322.     if diggedLevel == 0 then
  323.         turtle.digDown()
  324.         turtle.down()
  325.        
  326.         diggedLevel = diggedLevel + 2
  327.  
  328.     else
  329.         for i = 1, 3 do
  330.             turtle.digDown()
  331.             turtle.down()  
  332.         end
  333.        
  334.         diggedLevel = diggedLevel + 3
  335.     end
  336.    
  337.     if size % 2 == 0 then        
  338.         for i = 1, size do
  339.             frwd(stepSize)
  340.             clearJunk()
  341.             if diggedLevel % 2 ~= 0 then
  342.                 if i ~= size then
  343.                     if i % 2 == 0 then
  344.                         right()
  345.                     else
  346.                         left()
  347.                     end
  348.                 end
  349.  
  350.             else
  351.                 if i ~= size then
  352.                     if i % 2 == 0 then
  353.                         left()
  354.                     else
  355.                         right()
  356.                     end
  357.                 end
  358.             end
  359.         end
  360.     else    
  361.         for i = 1, size / 2 do
  362.             frwd(stepSize)
  363.             right()
  364.             frwd(stepSize)
  365.             left()
  366.             clearJunk()
  367.         end
  368.        
  369.         frwd(stepSize)
  370.     end
  371.    
  372.     turtle.turnRight()
  373.     turtle.turnRight()
  374.     turtle.digUp()
  375.     turtle.digDown()
  376.     clearJunk()
  377.     print("\nTurtle> Digged: "..diggedLevel.."/"..meter.." levels")    
  378. end
  379.  
  380. dumpChest(false)
  381. print("\nTurtle> Mining complete! Terminating!")
Add Comment
Please, Sign In to add comment