enderpro100

volumeMining

Dec 5th, 2020 (edited)
751
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --- Programme : volume mining 1.0
  2. --- Auteur : LightKnight51
  3. --- Dernière modifications : 09/12/2020
  4. --- For testing only, updates in further
  5.  
  6.  
  7. --- Variables
  8.    
  9.  
  10. --- Functions
  11.  
  12. -- Ajouter une fonction qui place un coffre au dessus d'elle si turtle pleine
  13.  
  14. local arg = { ... }
  15.  
  16. local exit = false
  17.  
  18. function selecionID(itemID)
  19.     return findIDContains(itemID, true)
  20. end
  21.  
  22. function findIDContains(searchItemID, isEntireId)
  23.     j = nil
  24.     for i = 1, 16 do
  25.  
  26.         data = turtle.getItemDetail(i)
  27.         if data then
  28.             bCondition = false
  29.             if isEntireId then
  30.                 bCondition = (data.name == searchItemID)
  31.             else
  32.                 bCondition = (string.find(data.name,searchItemID) ~= nil)
  33.             end
  34.             if bCondition then
  35.                 j = i
  36.                 exit = false
  37.                 break
  38.             elseif i == 16 and data.name ~= searchItemID then
  39.                 error(searchItemID)
  40.                 j = nil
  41.             end
  42.         end
  43.     end
  44.     return j
  45. end
  46.  
  47.  
  48. function error(typeError)
  49.     if typeError == "minecraft:bedrock" then
  50.         print("Bedrock detectee lors du depot du coffre !")
  51.         print("Arret du systeme dans 3sec.")
  52.         os.sleep(3)
  53.         exit = true
  54.     elseif typeError == "minecraft:chest" then
  55.         print("Coffre introuvable dans l'inventaire !")
  56.         --print("Arret du systeme dans 3sec.")
  57.         --os.sleep(3)
  58.         --exit = true
  59.     elseif typeError == "minecraft:coal" then
  60.         print("Charbon introuvable dans l'inventaire !")
  61.     elseif typeError == "minecraft:blaze_rod" then
  62.         print("Blazerod introuvable dans l'inventaire !")
  63.     elseif typeError == "fuelError" then
  64.         print("Carburant (charbon, blazerod, etc ..) introuvable dans l'inventaire !")
  65.         print("Arret du systeme dans 3sec.")
  66.         os.sleep(3)
  67.         exit = true
  68.     else
  69.         print("L'erreur de type", typeError, " est inconnue.")
  70.         print("Arret du systeme dans 3sec.")
  71.         os.sleep(3)
  72.         exit = true
  73.     end
  74. end
  75.  
  76. -- A verifier
  77. function refuel()
  78.     while not exit do
  79.         fuel = turtle.getFuelLevel()
  80.         if fuel < 25 then
  81.             blazeRodID = selecionID("minecraft:blaze_rod")
  82.             coalID = selecionID("minecraft:coal")
  83.             fuelID = nil
  84.             if blazeRodID ~= nil then
  85.                 fuelID = blazeRodID  
  86.             elseif coalID ~= nil then
  87.                 fuelID = coalID
  88.             end
  89.             if fuelID ~= nil then
  90.                 turtle.select(fuelID)
  91.                 turtle.refuel(1)
  92.             else
  93.                 error("fuelError")
  94.                 os.shutdown()
  95.             end
  96.         end
  97.         sleep(0.5)
  98.     end
  99. end
  100.  
  101. function blockDetection(position, justDetection)
  102.     success, detectionBlock = nil
  103.     block_name = ""
  104.     if position == "right" then
  105.         turtle.turnRight()
  106.         success, detectionBlock = turtle.inspect()
  107.         turtle.turnLeft()
  108.         if success then
  109.             block_name = recognizeLiquidAirBlocks(detectionBlock, justDetection)
  110.         end
  111.     elseif position == "left" then
  112.         turtle.turnLeft()
  113.         turtle.turnRight()
  114.         success, detectionBlock = turtle.inspect()
  115.         if success then
  116.             block_name = recognizeLiquidAirBlocks(detectionBlock, justDetection)
  117.         end
  118.     elseif position == "bottom" then
  119.         turtle.turnRight()
  120.         turtle.turnRight()
  121.         success, detectionBlock = turtle.inspect()
  122.         turtle.turnRight()
  123.         turtle.turnRight()
  124.         if success then
  125.             block_name = recognizeLiquidAirBlocks(detectionBlock, justDetection)
  126.         end
  127.     elseif position == "front" then
  128.         success, detectionBlock = turtle.inspect()
  129.         if success then
  130.             block_name = recognizeLiquidAirBlocks(detectionBlock, justDetection)
  131.         end
  132.     elseif position == "down" then
  133.         success, detectionBlock = turtle.inspectDown()
  134.         if success then
  135.             block_name = recognizeLiquidAirBlocks(detectionBlock, justDetection)
  136.         end
  137.     elseif position == "up" then
  138.         success, detectionBlock = turtle.inspectUp()
  139.         if success then
  140.             block_name = recognizeLiquidAirBlocks(detectionBlock, justDetection)
  141.         end
  142.     else
  143.         block_name = "minecraft:?"
  144.     end
  145.  
  146.     return block_name
  147.     --block_name = recognizeLiquidAirBlocks(detectionBlock, justDetection)
  148. end
  149.  
  150. function recognizeLiquidAirBlocks(detectionBlock, justDetection)
  151.     block_name = ""
  152.     if justDetection == true then
  153.         if  detectionBlock.name == "minecraft:air" or detectionBlock.name == "mminecraft:flowing_water" or detectionBlock.name == "minecraft:water" or detectionBlock.name == "mminecraft:flowing_lava" or detectionBlock.name == "minecraft:lava" then
  154.             block_name = true
  155.         else
  156.             block_name = false
  157.         end
  158.     elseif justDetection == false then
  159.         block_name = detectionBlock.name
  160.     end
  161.     return block_name
  162. end
  163.  
  164. function deposeChest()
  165.     if blockDetection("up", false) == "minecraft:bedrock" then
  166.         error("minecraft:bedrock")
  167.     elseif string.find(blockDetection("up", false),"chest") ~= nil then
  168.         print("Coffre deja place !")
  169.         turtle.select(1)
  170.     else
  171.         turtle.digUp()
  172.         chestId = findIDContains("chest", false)
  173.         if chestId ~= nil then
  174.             turtle.select(chestId)
  175.             turtle.placeUp()
  176.             print("Coffre place !")
  177.             turtle.select(1)
  178.         end
  179.     end
  180. end
  181.  
  182. function deposeIntoChest()
  183.     if string.find(blockDetection("up", false),"chest") ~= nil then
  184.         for m = 1, 16  do
  185.             turtle.select(m)
  186.             turtle.dropUp()
  187.         end
  188.         print("Le contenu est depose dans le coffre situe sous la turtle.")
  189.         turtle.select(1)
  190.     else
  191.         print("Il n'y a pas de coffre, le contenu reste dans la turtle.")
  192.     end
  193. end
  194.  
  195. -- a finir
  196. function secureTurtle()
  197.     itemID = nil
  198.     if not blockDetection("up", true) then
  199.         if selecionID("minecraft:cobblestone") ~= nil then
  200.             itemID = selecionID("minecraft:cobblestone")
  201.         elseif selecionID("minecraft:dirt") ~= nil then
  202.             itemID = selecionID("minecraft:dirt")
  203.         elseif selecionID("minecraft:netherrack") ~= nil then
  204.             itemID = selecionID("minecraft:netherrack")
  205.         end
  206.         if itemID ~= nil then
  207.             turtle.select(itemID)
  208.             turtle.placeDown()
  209.             turtle.place()
  210.             turtle.turnRight()
  211.             turtle.place()
  212.             turtle.turnRight()
  213.             turtle.place()
  214.             turtle.turnRight()
  215.             turtle.place()
  216.             turtle.turnRight()
  217.         end
  218.     end
  219. end
  220.  
  221. function askDimension(type, numArg)
  222.     dimension = 0
  223.     bRetry = false
  224.     print(type .. " ?")
  225.     while true do
  226.         if arg[numArg] ~= nil and not bRetry then
  227.             dimension = tonumber(arg[numArg])
  228.             print(dimension)
  229.         else
  230.             dimension = tonumber(read())
  231.         end
  232.         if not dimension or dimension == 0 then
  233.             print("Valeur incorrecte !")
  234.             bRetry = true
  235.         else
  236.             break
  237.         end
  238.     end
  239.     return dimension
  240. end
  241.  
  242. function miningLine(length)
  243.     for iLength=1,length - 1 do
  244.         while blockDetection("front", true) == false do
  245.             turtle.dig()
  246.             sleep(0.3)
  247.         end
  248.         turtle.forward()
  249.     end
  250. end
  251.  
  252. function miningDown(height)
  253.     for iHeight=1,height - 1 do
  254.         turtle.digDown()
  255.         turtle.down()
  256.     end
  257. end
  258.  
  259. function mining(length, width, height)
  260.     if width == 1 and height == 1 then
  261.         miningLine(length)
  262.     elseif length == 1 and height == 1 then
  263.         turtle.turnRight()
  264.         miningLine(width)
  265.     elseif length == 1 and width == 1 then
  266.         miningDown(height)
  267.     else
  268.         for iHeight = 1, height do
  269.             for iWidth = 1, width do
  270.                 miningLine(length)
  271.                 if iWidth ~= width then
  272.                     chooseDirectionForTurn(iWidth, width, iHeight)
  273.                     turtle.dig()
  274.                     turtle.forward()
  275.                     chooseDirectionForTurn(iWidth, width, iHeight)
  276.                 end
  277.             end
  278.             if iHeight ~= height then
  279.                 turtle.turnRight()
  280.                 turtle.turnRight()
  281.                 miningDown(2)
  282.             end
  283.         end
  284.     end
  285.     returnInitPos(length, width, height)
  286. end
  287.  
  288. function chooseDirectionForTurn(number, totalWidth, iHeight)
  289.     if isEven(totalWidth) then
  290.         if isEven(iHeight) then
  291.             if isEven(number) then
  292.                 turtle.turnRight()
  293.             else
  294.                 turtle.turnLeft()
  295.             end
  296.         else
  297.             chooseDirectionForTurnClassic(number)
  298.         end
  299.     else
  300.         chooseDirectionForTurnClassic(number)
  301.     end
  302. end
  303.  
  304. function chooseDirectionForTurnClassic(number)
  305.     if isEven(number) then
  306.         turtle.turnLeft()
  307.     else
  308.         turtle.turnRight()
  309.     end
  310. end
  311.  
  312. function isEven(number)
  313.     return math.mod(number, 2) == 0
  314. end
  315.  
  316. function moveLine(length)
  317.     for iLength=1,length - 1 do
  318.         if not blockDetection("front", true) then
  319.             if string.find(blockDetection("front", false),"chest") == nil then
  320.                 turtle.dig()
  321.             else
  322.                 -- Un coffre a été déposé, cas a traiter
  323.             end
  324.         end
  325.         turtle.forward()
  326.     end
  327. end
  328.  
  329. function moveUp(height)
  330.     for iHeight=1,height - 1 do
  331.         if not blockDetection("up", true) then
  332.             if string.find(blockDetection("up", false),"chest") == nil then
  333.                 turtle.digUp()
  334.             else
  335.                 -- Un coffre a été déposé, cas a traiter
  336.             end
  337.         end
  338.         turtle.up()
  339.     end
  340. end
  341.  
  342. function returnInitPos(length, width, height)
  343.     if width == 1 and height == 1 then
  344.         turtle.turnRight()
  345.         turtle.turnRight()
  346.         moveLine(length)
  347.     elseif length == 1 and height == 1 then
  348.         turtle.turnRight()
  349.         turtle.turnRight()
  350.         moveLine(width)
  351.         turtle.turnRight()
  352.     elseif length == 1 and width == 1 then
  353.         moveUp(height)
  354.     else
  355.         moveUp(height)
  356.         widthHeight = width * height
  357.         if isEven(widthHeight) then
  358.             if isEven(height) then
  359.                 turtle.turnRight()
  360.                 turtle.turnRight()
  361.             else
  362.                 turtle.turnRight()
  363.                 moveLine(width)
  364.                 turtle.turnRight()
  365.             end
  366.         else
  367.             if isEven(height) then
  368.                 turtle.turnRight()
  369.                 turtle.turnRight()
  370.             else
  371.                 turtle.turnLeft()
  372.                 moveLine(width)
  373.                 turtle.turnLeft()
  374.                 moveLine(length)
  375.                 turtle.turnRight()
  376.                 turtle.turnRight()
  377.             end
  378.         end
  379.     end
  380. end
  381.  
  382. function mainProgram()
  383.     print("Bienvenue dans le programme de minage de volume !")
  384.     length, width, height = 1
  385.     length = askDimension("Longueur", 1)
  386.     width = askDimension("Largeur", 2)
  387.     height = askDimension("Hauteur", 3)
  388.     if length == 1 and width == 1 and height == 1 then
  389.        print("Il n'y a rien a miner.")
  390.     else
  391.        --deposeChest()
  392.        turtle.digDown()
  393.        sleep(0.3)
  394.        turtle.down()
  395.        deposeChest()
  396.        mining(length, width, height)
  397.        secureTurtle()
  398.        deposeIntoChest()
  399.     end
  400. end
  401.  
  402. -- Program
  403. parallel.waitForAny(mainProgram, refuel)
RAW Paste Data