Advertisement
LightKnight51

volume mining

Sep 21st, 2024 (edited)
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.34 KB | Gaming | 0 0
  1. --- Programme : volume mining
  2. --- Auteur : LightKnight51
  3. --- Dernière modifications : 21/09/2024
  4.  
  5. -- TODO Add function what put chest if turtle is full
  6.  
  7. local arg = { ... }
  8.  
  9. local exit = false
  10.  
  11. --- Utils API
  12. os.loadAPI("MarquitoLuaUtils")
  13.  
  14. -- Put chest up
  15. function DeposeChest()
  16.     if MarquitoLuaUtils.BlockDetection("up", false) == "minecraft:bedrock" then
  17.         MarquitoLuaUtils.Error("minecraft:bedrock")
  18.     elseif string.find(MarquitoLuaUtils.BlockDetection("up", false),"chest") ~= nil then
  19.         print("Coffre deja place !")
  20.         MarquitoLuaUtils.Log(MarquitoLuaUtils.LogLevel.INFO, "Chest already in place")
  21.         turtle.select(1)
  22.     else
  23.         turtle.digUp()
  24.         chestId = MarquitoLuaUtils.FindIDContains("chest", false)
  25.         if chestId ~= nil then
  26.             turtle.select(chestId)
  27.             turtle.placeUp()
  28.             print("Coffre place !")
  29.             turtle.select(1)
  30.             MarquitoLuaUtils.Log(MarquitoLuaUtils.LogLevel.INFO, "Chest has been placed")
  31.         end
  32.     end
  33. end
  34.  
  35. -- TODO To finish
  36. function SecureTurtle()
  37.     MarquitoLuaUtils.Log(MarquitoLuaUtils.LogLevel.INFO, "Secure turtle position")
  38.     itemID = nil
  39.     if not MarquitoLuaUtils.BlockDetection("up", true) then
  40.         if MarquitoLuaUtils.SelectionID("minecraft:cobblestone") ~= nil then
  41.             itemID = MarquitoLuaUtils.SelectionID("minecraft:cobblestone")
  42.         elseif MarquitoLuaUtils.SelectionID("minecraft:dirt") ~= nil then
  43.             itemID = MarquitoLuaUtils.SelectionID("minecraft:dirt")
  44.         elseif MarquitoLuaUtils.SelectionID("minecraft:netherrack") ~= nil then
  45.             itemID = MarquitoLuaUtils.SelectionID("minecraft:netherrack")
  46.         elseif MarquitoLuaUtils.SelectionID("minecraft:cobbled_deepslate") ~= nil then
  47.             itemID = MarquitoLuaUtils.SelectionID("minecraft:cobbled_deepslate")
  48.         end
  49.         if itemID ~= nil then
  50.             turtle.select(itemID)
  51.             turtle.placeDown()
  52.             turtle.place()
  53.             turtle.turnRight()
  54.             turtle.place()
  55.             turtle.turnRight()
  56.             turtle.place()
  57.             turtle.turnRight()
  58.             turtle.place()
  59.             turtle.turnRight()
  60.         end
  61.     end
  62. end
  63.  
  64. function AskDimension(type, numArg)
  65.     dimension = 0
  66.     bRetry = false
  67.     print(type .. " ?")
  68.     while true do
  69.         if arg[numArg] ~= nil and not bRetry then
  70.             dimension = tonumber(arg[numArg])
  71.             print(dimension)
  72.         else
  73.             dimension = tonumber(read())
  74.         end
  75.         if not dimension or dimension == 0 then
  76.             print("Valeur incorrecte !")
  77.             bRetry = true
  78.         else
  79.             break
  80.         end
  81.     end
  82.     return dimension
  83. end
  84.  
  85. function MiningLine(length)
  86.     MarquitoLuaUtils.Log(MarquitoLuaUtils.LogLevel.INFO, "Start mining line of length : " .. length)
  87.     for iLength=1,length - 1 do
  88.         while MarquitoLuaUtils.BlockDetection("front", true) == false do
  89.             turtle.dig()
  90.             DropIfNeeded()
  91.             sleep(0.3)
  92.         end
  93.         turtle.forward()
  94.     end
  95. end
  96.  
  97. function MiningDown(height)
  98.     MarquitoLuaUtils.Log(MarquitoLuaUtils.LogLevel.INFO, "Start mining down of : " .. height - 1)
  99.     for iHeight=1,height - 1 do
  100.         turtle.digDown()
  101.         DropIfNeeded()
  102.         turtle.down()
  103.     end
  104. end
  105.  
  106. function Mining(length, width, height)
  107.     if width == 1 and height == 1 then
  108.         MiningLine(length)
  109.     elseif length == 1 and height == 1 then
  110.         turtle.turnRight()
  111.         MiningLine(width)
  112.     elseif length == 1 and width == 1 then
  113.         MiningDown(height)
  114.     else
  115.         for iHeight = 1, height do
  116.             for iWidth = 1, width do
  117.                 MiningLine(length)
  118.                 if iWidth ~= width then
  119.                     chooseDirectionForTurn(iWidth, width, iHeight)
  120.                     turtle.dig()
  121.                     DropIfNeeded()
  122.                     turtle.forward()
  123.                     chooseDirectionForTurn(iWidth, width, iHeight)
  124.                 end
  125.             end
  126.             if iHeight ~= height then
  127.                 turtle.turnRight()
  128.                 turtle.turnRight()
  129.                 MiningDown(2)
  130.             end
  131.         end
  132.     end
  133.     ReturnInitPos(length, width, height)
  134. end
  135.  
  136. function DropIfNeeded()
  137.     if MarquitoLuaUtils.GetRemainingSlots() == 0 then
  138.         MarquitoLuaUtils.DropAllItemsInShulkerBox({
  139.             "coal",
  140.             "blaze_rod",
  141.             "shulker_box"
  142.         })
  143.     end
  144. end
  145.  
  146. function chooseDirectionForTurn(number, totalWidth, iHeight)
  147.     if isEven(totalWidth) then
  148.         if isEven(iHeight) then
  149.             if isEven(number) then
  150.                 turtle.turnRight()
  151.             else
  152.                 turtle.turnLeft()
  153.             end
  154.         else
  155.             chooseDirectionForTurnClassic(number)
  156.         end
  157.     else
  158.         chooseDirectionForTurnClassic(number)
  159.     end
  160. end
  161.  
  162. function chooseDirectionForTurnClassic(number)
  163.     if isEven(number) then
  164.         turtle.turnLeft()
  165.     else
  166.         turtle.turnRight()
  167.     end
  168. end
  169.  
  170. function isEven(number)
  171.     return math.mod(number, 2) == 0
  172. end
  173.  
  174. function MoveLine(length)
  175.     MarquitoLuaUtils.Log(MarquitoLuaUtils.LogLevel.INFO, "Start moving of : " .. length)
  176.     for iLength=1,length - 1 do
  177.         if not MarquitoLuaUtils.BlockDetection("front", true) then
  178.             if string.find(MarquitoLuaUtils.BlockDetection("front", false),"chest") == nil then
  179.                 turtle.dig()
  180.                 DropIfNeeded()
  181.             else
  182.                 -- Un coffre a été déposé, cas a traiter
  183.             end
  184.         end
  185.         turtle.forward()
  186.     end
  187. end
  188.  
  189. function MoveUp(height)
  190.     MarquitoLuaUtils.Log(MarquitoLuaUtils.LogLevel.INFO, "Start moving up of : " .. height - 1)
  191.     for iHeight=1,height - 1 do
  192.         if not MarquitoLuaUtils.BlockDetection("up", true) then
  193.             if string.find(MarquitoLuaUtils.BlockDetection("up", false),"chest") == nil then
  194.                 turtle.digUp()
  195.                 DropIfNeeded()
  196.             else
  197.                 -- Un coffre a été déposé, cas a traiter
  198.             end
  199.         end
  200.         turtle.up()
  201.     end
  202. end
  203.  
  204. function ReturnInitPos(length, width, height)
  205.     if width == 1 and height == 1 then
  206.         turtle.turnRight()
  207.         turtle.turnRight()
  208.         MoveLine(length)
  209.     elseif length == 1 and height == 1 then
  210.         turtle.turnRight()
  211.         turtle.turnRight()
  212.         MoveLine(width)
  213.         turtle.turnRight()
  214.     elseif length == 1 and width == 1 then
  215.         MoveUp(height)
  216.     else
  217.         MoveUp(height)
  218.         widthHeight = width * height
  219.         if isEven(widthHeight) then
  220.             if isEven(height) then
  221.                 turtle.turnRight()
  222.                 turtle.turnRight()
  223.             else
  224.                 turtle.turnRight()
  225.                 MoveLine(width)
  226.                 turtle.turnRight()
  227.             end
  228.         else
  229.             if isEven(height) then
  230.                 turtle.turnRight()
  231.                 turtle.turnRight()
  232.             else
  233.                 turtle.turnLeft()
  234.                 MoveLine(width)
  235.                 turtle.turnLeft()
  236.                 MoveLine(length)
  237.                 turtle.turnRight()
  238.                 turtle.turnRight()
  239.             end
  240.         end
  241.     end
  242. end
  243.  
  244. function MainProgram()
  245.     print("Bienvenue dans le programme de minage de volume !")
  246.     local length, width, height = 1
  247.     length = AskDimension("Longueur", 1)
  248.     width = AskDimension("Largeur", 2)
  249.     height = AskDimension("Hauteur", 3)
  250.     if length == 1 and width == 1 and height == 1 then
  251.        print("Il n'y a rien a miner.")
  252.        MarquitoLuaUtils.Log(MarquitoLuaUtils.LogLevel.INFO, "Nothing to dig")
  253.     else
  254.         MarquitoLuaUtils.Log(MarquitoLuaUtils.LogLevel.INFO, "VolumeMining launch")
  255.         MarquitoLuaUtils.Log(MarquitoLuaUtils.LogLevel.INFO, "Length : " .. length)
  256.         MarquitoLuaUtils.Log(MarquitoLuaUtils.LogLevel.INFO, "Width : " .. width)
  257.         MarquitoLuaUtils.Log(MarquitoLuaUtils.LogLevel.INFO, "Height : " .. height)
  258.         turtle.digDown()
  259.         sleep(0.5)
  260.         turtle.down()
  261.         DeposeChest()
  262.         Mining(length, width, height)
  263.         SecureTurtle()
  264.         MarquitoLuaUtils.DropAllItemsInChest(false, {})
  265.     end
  266.     MarquitoLuaUtils.EndLog()
  267. end
  268.  
  269. -- Program
  270. parallel.waitForAny(MainProgram, MarquitoLuaUtils.Refuel)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement