Advertisement
DabDaddy6223

mine_deployer

Apr 14th, 2025 (edited)
554
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.95 KB | None | 0 0
  1. ACCEPTABLE_FUEL = {"minecraft:coal"}
  2. FUEL_COUNT = 0
  3.  
  4. SERVER_ID = 0
  5.  
  6. SKIP = {"computercraft:turtle_normal", "minecraft:chest"}
  7.  
  8. TURTLE_INDEX = 2
  9. CHESTS_INDEX = 10
  10.  
  11. MINER_COUNT = 5
  12.  
  13. function arrHasValue(arr, val)
  14.     for index, value in ipairs(arr) do
  15.         if value == val then
  16.             return true
  17.         end
  18.     end
  19.  
  20.     return false
  21. end
  22.  
  23. function hasFuel()
  24.     return FUEL_COUNT > 0
  25. end
  26.  
  27. function shouldRefuel()
  28.     return turtle.getFuelLevel() <= 0
  29. end
  30.  
  31. function refuel()
  32.     if shouldRefuel() == true then
  33.         if hasFuel() ~= true then
  34.             return false
  35.         end
  36.  
  37.         turtle.select(1)
  38.         turtle.refuel(1)
  39.         FUEL_COUNT = FUEL_COUNT - 1
  40.     end
  41.  
  42.     return true
  43. end
  44.  
  45. function turnAround()
  46.     turtle.turnLeft()
  47.     turtle.turnLeft()
  48. end
  49.  
  50. function getSlotCount(slot)
  51.     turtle.select(slot)
  52.     local slotData = turtle.getItemDetail()
  53.     if slotData ~= nil then
  54.         return slotData["count"]
  55.     end
  56.  
  57.     return -1
  58. end
  59.  
  60. function getFirstSlotWith(name)
  61.     for i=2, 16 do
  62.         turtle.select(i)
  63.         local slotData = turtle.getItemDetail()
  64.         if slotData ~= nil then
  65.             if slotData["name"] == name then
  66.                 return i
  67.             end
  68.         end
  69.     end
  70.  
  71.     return nil
  72. end
  73.  
  74. function main()
  75.     -- Prepare
  76.     rednet.open("left")
  77.     if rednet.isOpen("left") ~= true then
  78.         print("Failed to start modem!")
  79.         return
  80.     end
  81.  
  82.     print("Connecting...")
  83.     rednet.broadcast("deployer", "minenetfromdeployer")
  84.  
  85.     local id, turtleCount = rednet.receive("minenettodeployer")
  86.     SERVER_ID = id
  87.  
  88.     print("Connected!")
  89.  
  90.     turtle.select(1)
  91.     local slotData = turtle.getItemDetail()
  92.     if slotData ~= nil then
  93.         if arrHasValue(ACCEPTABLE_FUEL, slotData["name"]) == true then
  94.             FUEL_COUNT = slotData["count"]
  95.         end
  96.     end
  97.    
  98.     if refuel() ~= true then
  99.         print("No fuel!")
  100.         return
  101.     end
  102.  
  103.     -- Collect turtles and chests
  104.     turtle.turnRight()
  105.     for i=0, 8 do
  106.         turtle.suck()
  107.     end
  108.     turtle.turnLeft()
  109.  
  110.     if refuel() ~= true then
  111.         print("No fuel!")
  112.         return
  113.     end
  114.  
  115.     -- Leave 2 block gap
  116.     turtle.forward()
  117.     turtle.forward()
  118.     turtle.forward()
  119.  
  120.     if refuel() ~= true then
  121.         print("No fuel!")
  122.         return
  123.     end
  124.  
  125.     -- Place miners
  126.     local minedSlot = nil
  127.  
  128.     for i=0, (turtleCount - 1) do
  129.         turtle.turnRight()
  130.         turtle.dig()
  131.  
  132.         turtle.select(TURTLE_INDEX)
  133.         turtle.place()
  134.         TURTLE_INDEX = TURTLE_INDEX + 1
  135.  
  136.         turtle.digDown()
  137.  
  138.         turtle.down()
  139.        
  140.         local inspect, data = turtle.inspect()
  141.         if inspect == true then
  142.             if data["name"] ~= "minecraft:chest" then
  143.                 turtle.dig()
  144.                 turtle.select(CHESTS_INDEX)
  145.                 turtle.place()
  146.             end
  147.         else
  148.             turtle.select(CHESTS_INDEX)
  149.             turtle.place()
  150.         end
  151.  
  152.         turtle.up()
  153.  
  154.         turtle.turnLeft()
  155.         turtle.forward()
  156.  
  157.         if minedSlot == nil then
  158.             minedSlot = getFirstSlotWith("minecraft:cobblestone")
  159.         else
  160.             for i=2, 16 do repeat
  161.                 if i == minedSlot then
  162.                     do break end
  163.                 end
  164.  
  165.                 turtle.select(i)
  166.                 local slotData = turtle.getItemDetail()
  167.                 if slotData ~= nil then
  168.                     if slotData["name"] == "minecraft:cobblestone" then
  169.                         turtle.transferTo(minedSlot)
  170.                     end
  171.                 end
  172.             until true end
  173.         end
  174.     end
  175.  
  176.     if refuel() ~= true then
  177.         print("No fuel!")
  178.         return
  179.     end
  180.  
  181.     -- Turn Around
  182.     turtle.select(2)
  183.     turnAround()
  184.  
  185.     if refuel() ~= true then
  186.         print("No fuel!")
  187.         return
  188.     end
  189.  
  190.     -- Collect coal
  191.     for i=0, (turtleCount - 1) do
  192.         turtle.forward()
  193.     end
  194.     turtle.forward()
  195.     turtle.forward()
  196.     turtle.forward()
  197.  
  198.     for i=0, (turtleCount - 1) do
  199.         turtle.suck()
  200.     end
  201.    
  202.     turnAround()
  203.  
  204.     if refuel() ~= true then
  205.         print("No fuel!")
  206.         return
  207.     end
  208.    
  209.     -- Place coal in miners
  210.     turtle.forward()
  211.     turtle.forward()
  212.     turtle.forward()
  213.  
  214.     TURTLE_INDEX = 2
  215.     for i=0, (turtleCount - 1) do
  216.         turtle.turnRight()
  217.  
  218.         turtle.select(TURTLE_INDEX)
  219.         turtle.drop(getSlotCount(TURTLE_INDEX))
  220.         TURTLE_INDEX = TURTLE_INDEX + 1
  221.  
  222.         local miner = peripheral.wrap("front")
  223.         miner.turnOn()
  224.  
  225.         turtle.turnLeft()
  226.         turtle.forward()
  227.     end
  228.  
  229.     if refuel() ~= true then
  230.         print("No fuel!")
  231.         return
  232.     end
  233.  
  234.     -- Send message to server
  235.     rednet.send(SERVER_ID, "deployed", "minenetfromdeployer")
  236.     local id, message = rednet.receive("minenettodeployer", 10000)
  237.  
  238.     -- Remove coal from miners
  239.     turnAround()
  240.     turtle.forward()
  241.    
  242.     for i=0, (turtleCount - 1) do
  243.         turtle.turnLeft()
  244.         turtle.suck()
  245.         turtle.turnRight()
  246.         turtle.forward()
  247.     end
  248.  
  249.     turtle.forward()
  250.     turtle.forward()
  251.  
  252.     for i=2, 16 do
  253.         turtle.select(i)
  254.         local slotData = turtle.getItemDetail()
  255.  
  256.         if slotData ~= nil then
  257.             if arrHasValue(ACCEPTABLE_FUEL, slotData["name"]) == true then
  258.                 turtle.drop()
  259.             end
  260.         end
  261.     end
  262.  
  263.     turnAround()
  264.  
  265.     if refuel() ~= true then
  266.         print("No fuel!")
  267.         return
  268.     end
  269.  
  270.     -- Break miners
  271.     turtle.forward()
  272.     turtle.forward()
  273.     turtle.forward()
  274.  
  275.     TURTLE_INDEX = 2
  276.     for i=0, (turtleCount - 1) do
  277.         turtle.turnRight()
  278.  
  279.         turtle.dig()
  280.  
  281.         turtle.turnLeft()
  282.         turtle.forward()
  283.     end
  284.  
  285.     if refuel() ~= true then
  286.         print("No fuel!")
  287.         return
  288.     end
  289.  
  290.     -- Return
  291.     turnAround()
  292.     turtle.forward()
  293.  
  294.     for i=0, (turtleCount - 1) do
  295.         turtle.forward()
  296.     end
  297.  
  298.     turtle.forward()
  299.     turtle.forward()
  300.  
  301.     if refuel() ~= true then
  302.         print("No fuel!")
  303.         return
  304.     end
  305.  
  306.     -- Drop off miners
  307.     turtle.turnRight()
  308.  
  309.     for i=2, 16 do
  310.         turtle.select(i)
  311.         local slotData = turtle.getItemDetail()
  312.  
  313.         if slotData ~= nil then
  314.             if arrHasValue(SKIP, slotData["name"]) == false then
  315.                 if arrHasValue(ACCEPTABLE_FUEL, slotData["name"]) == false then
  316.                     turtle.drop()
  317.                 end
  318.             end
  319.         end
  320.     end
  321.  
  322.     turnAround()
  323.  
  324.     for i=2, 16 do
  325.         turtle.select(i)
  326.         local slotData = turtle.getItemDetail()
  327.  
  328.         if slotData ~= nil then
  329.             if slotData["name"] == "computercraft:turtle_normal" then
  330.                 turtle.drop()
  331.             end
  332.         end
  333.     end
  334.  
  335.     turtle.select(CHESTS_INDEX)
  336.     turtle.drop()
  337.  
  338.     turtle.turnLeft()
  339.  
  340.     rednet.close("left")
  341. end
  342.  
  343. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement