Advertisement
ShowMaster

MiniMiner

Dec 1st, 2024 (edited)
35
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 10.40 KB | Gaming | 0 0
  1. local x, y, z
  2. local x2, y2, z2
  3. local rX, rY, rZ
  4. local xLength, yLength, zLength
  5. local xRotate, zRotate
  6. local starting = true
  7.  
  8. local label
  9.  
  10. local id, message
  11. local masterID
  12.  
  13. local lavaChest = '59d0f619003749793f5cdf5b9159cbed' --frequency 30
  14. local returnChest = '2cec817d32c1f213778416e4aa71ed14' --frequency 50
  15.  
  16. function findItem(type, tag)
  17.     for i=1, 16 do
  18.         local details = turtle.getItemDetail(i)
  19.  
  20.         if type == 'nbt' then
  21.             if details ~= nil then
  22.                 if details.nbt == tag then
  23.                     return i
  24.                 end
  25.             end
  26.         elseif type == 'name' then
  27.             if details ~= nil then
  28.                 if details.name == tag then
  29.                     return i
  30.                 end
  31.             end
  32.         end
  33.     end
  34. end
  35.  
  36. function fuelCheck()
  37.     local fuel = turtle.getFuelLevel()
  38.  
  39.     if fuel <= 0 then
  40.         dig('up')
  41.         turtle.select(findItem('nbt', lavaChest))
  42.         turtle.placeUp()
  43.         turtle.suckUp()
  44.         turtle.refuel()
  45.         turtle.select(findItem('name', 'minecraft:bucket'))
  46.         turtle.dropUp()
  47.         dig('up')
  48.     end
  49. end
  50.  
  51. function dig(dir)
  52.     local cantMv, block
  53.  
  54.     if dir == 'forward' then
  55.         cantMv, block = turtle.inspect()
  56.     elseif dir == 'down' then
  57.         cantMv, block = turtle.inspectDown()
  58.     elseif dir == 'up' then
  59.         cantMv, block = turtle.inspectUp()
  60.     end
  61.    
  62.     if cantMv == true then
  63.         if block.name ~= 'computercraft:turtle_advanced' then
  64.            
  65.             if dir == 'forward' then
  66.                 turtle.dig()
  67.             elseif dir == 'down' then
  68.                 turtle.digDown()
  69.             elseif dir == 'up' then
  70.                 turtle.digUp()
  71.             end
  72.  
  73.         else
  74.             while block.name == 'computercraft:turtle_advanced' do
  75.  
  76.                 if dir == 'forward' then
  77.                     cantMv, block = turtle.inspect()
  78.                 elseif dir == 'down' then
  79.                     cantMv, block = turtle.inspectDown()
  80.                 elseif dir == 'up' then
  81.                     cantMv, block = turtle.inspectUp()
  82.                 end
  83.                 sleep(1)
  84.             end
  85.         end
  86.     end
  87. end
  88.  
  89. function mvFor()
  90.     dig('forward')
  91.     fuelCheck()
  92.     turtle.forward()
  93. end
  94.  
  95. function mvDown()
  96.     dig('down')
  97.     fuelCheck()
  98.     turtle.down()
  99. end
  100.  
  101. function mvUp()
  102.     dig('up')
  103.     fuelCheck()
  104.     turtle.up()
  105. end
  106.  
  107. function turnAround()
  108.     turtle.turnRight()
  109.     turtle.turnRight()
  110. end
  111.  
  112. function getHeading()
  113.     local x,y,z = gps.locate()
  114.     mvFor()
  115.     local x2,y2,z2 = gps.locate()
  116.  
  117.     if x ~= x2 then
  118.         x = x2 - x
  119.  
  120.         if x == 1 then
  121.             return 1
  122.         elseif x == -1 then
  123.             return 2
  124.         end
  125.     end
  126.  
  127.     if z ~= z2 then
  128.         z = z2 - z
  129.  
  130.         if z == 1 then
  131.             return 3
  132.         elseif z == -1 then
  133.             return 4
  134.         end
  135.     end
  136.  
  137.     -- x = 1
  138.     -- -x = 2
  139.     -- z = 3
  140.     -- -z = 4
  141.  
  142.  
  143. end
  144.  
  145. function orient(axis, charge)
  146.     local heading = getHeading()
  147.    
  148.     if axis == 'x' then
  149.         if charge == 'pos' then
  150.             if heading == 2 then
  151.                 turnAround()
  152.             elseif heading == 3 then
  153.                 turtle.turnLeft()
  154.             elseif heading == 4 then
  155.                 turtle.turnRight()
  156.             end
  157.         else
  158.             if heading == 1 then
  159.                 turnAround()
  160.             elseif heading == 3 then
  161.                 turtle.turnRight()
  162.             elseif heading == 4 then
  163.                 turtle.turnLeft()
  164.             end
  165.         end
  166.     end
  167.    
  168.     if axis == 'z' then
  169.         if charge == 'pos' then
  170.             if heading == 1 then
  171.                 turtle.turnRight()
  172.             elseif heading == 2 then
  173.                 turtle.turnLeft()
  174.             elseif heading == 4 then
  175.                 turnAround()
  176.             end
  177.         else
  178.             if heading == 1 then
  179.                 turtle.turnLeft()
  180.             elseif heading == 2 then
  181.                 turtle.turnRight()
  182.             elseif heading == 3 then
  183.                 turnAround()
  184.             end
  185.         end
  186.     end
  187.    
  188.     while y3 ~= 0 do
  189.         if y3 >= 1 then
  190.             mvUp()
  191.             y3 = y3 - 1
  192.         else
  193.             mvDown()
  194.             y3 = y3 + 1
  195.         end
  196.     end
  197. end
  198.  
  199. function moveTo(x2,y2,z2)
  200.     local heading = getHeading()
  201.    
  202.     local x,y,z = gps.locate()
  203.     local x3,y3,z3
  204.    
  205.     x3 = x2 - x
  206.     y3 = y2 - y
  207.     z3 = z2 - z
  208.    
  209.     print(x,y,z)
  210.     print(x2,y2,z2)
  211.     print(x3,y3,z3)
  212.  
  213.     while x3 ~= 0 do
  214.         if x3 >= 1 then
  215.             if heading == 1 then
  216.                 mvFor()
  217.                 x3 = x3 - 1
  218.             elseif heading == 2 then
  219.                 turnAround()
  220.                 heading = 1
  221.             elseif heading == 3 then
  222.                 turtle.turnLeft()
  223.                 heading = 1
  224.             elseif heading == 4 then
  225.                 turtle.turnRight()
  226.                 heading = 1
  227.             end
  228.         else
  229.             if heading == 1 then
  230.                 turnAround()
  231.                 heading = 2
  232.             elseif heading == 2 then
  233.                 mvFor()
  234.                 x3 = x3 + 1
  235.             elseif heading == 3 then
  236.                 turtle.turnRight()
  237.                 heading = 2
  238.             elseif heading == 4 then
  239.                 turtle.turnLeft()
  240.                 heading = 2
  241.             end
  242.         end
  243.     end
  244.    
  245.     while z3 ~= 0 do
  246.         if z3 >= 1 then
  247.             if heading == 1 then
  248.                 turtle.turnRight()
  249.                 heading = 3
  250.             elseif heading == 2 then
  251.                 turtle.turnLeft()
  252.                 heading = 3
  253.             elseif heading == 3 then
  254.                 mvFor()
  255.                 z3 = z3 - 1
  256.             elseif heading == 4 then
  257.                 turnAround()
  258.                 heading = 3
  259.             end
  260.         else
  261.             if heading == 1 then
  262.                 turtle.turnLeft()
  263.                 heading = 4
  264.             elseif heading == 2 then
  265.                 turtle.turnRight()
  266.                 heading = 4
  267.             elseif heading == 3 then
  268.                 turnAround()
  269.                 heading = 4
  270.             elseif heading == 4 then
  271.                 mvFor()
  272.                 z3 = z3 + 1
  273.             end
  274.         end
  275.     end
  276.    
  277.     while y3 ~= 0 do
  278.         if y3 >= 1 then
  279.             mvUp()
  280.             y3 = y3 - 1
  281.         else
  282.             mvDown()
  283.             y3 = y3 + 1
  284.         end
  285.     end
  286.    
  287. end
  288.  
  289. function receiveFromMaster(ID)
  290.     while id ~= ID do
  291.         id, message = rednet.receive()
  292.     end
  293.     return message
  294. end
  295.  
  296. function emptyInv()
  297.     local empty
  298.     local count = 0
  299.  
  300.     for i=1, 16 do
  301.         if turtle.getItemCount(i) >= 1 then
  302.             count = count + 1
  303.         end
  304.     end
  305.  
  306.     if count == 16 then empty = true end
  307.    
  308.     if empty == true then
  309.        
  310.         local details = turtle.getItemDetail(i)
  311.         dig('up')
  312.         turtle.select(findItem('nbt', returnChest))
  313.         turtle.placeUp()
  314.    
  315.         for i=1, 16 do
  316.             if details.nbt ~= lavaChest or  details.nbt ~= returnChest then
  317.                 turtle.dropUp()
  318.             end
  319.         end
  320.  
  321.         dig('up')
  322.     end
  323. end
  324.  
  325. masterID = peripheral.call("back","getID")
  326.  
  327. peripheral.find("modem", rednet.open)
  328. id, label = receiveFromMaster(masterID)
  329. os.setComputerLabel("lil guy ", tostring(label))
  330.  
  331. turtle.turnRight()
  332. turtle.suck(1)
  333.  
  334. turtle.turnLeft()
  335. mvFor()
  336. turtle.turnLeft()
  337. turtle.suck(1)
  338.  
  339. rednet.send(masterID, 'ready')
  340.  
  341. rX = receiveFromMaster(masterID)
  342. rY = receiveFromMaster(masterID)
  343. rZ = receiveFromMaster(masterID)
  344.  
  345. rX = tonumber(rX)
  346. rY = tonumber(rY)
  347. rZ = tonumber(rZ)
  348.  
  349. x2 = receiveFromMaster(masterID)
  350. y2 = receiveFromMaster(masterID)
  351. z2 = receiveFromMaster(masterID)
  352.  
  353. x2 = tonumber(x2)
  354. y2 = tonumber(y2)
  355. z2 = tonumber(z2)
  356.  
  357. xLength = receiveFromMaster(masterID)
  358. yLength = receiveFromMaster(masterID)
  359. zLength = receiveFromMaster(masterID)
  360.  
  361. xLength = tonumber(xLength)
  362. yLength = tonumber(yLength)
  363. zLength = tonumber(zLength)
  364.  
  365. mvUp()
  366. mvUp()
  367. rednet.send(masterID,'next')
  368.  
  369. moveTo(x2,y2,z2)
  370.  
  371. if xLength >= 1 then
  372.     xRotate = 'pos'
  373. else
  374.     xRotate = 'neg'
  375.     xLength = xLength * -1
  376. end
  377.  
  378. if zLength >= 1 then
  379.     zRotate = 'pos'
  380. else
  381.     zRotate = 'neg'
  382.     zLength = zLength * -1
  383. end
  384.  
  385. if yLength >= 1 then
  386.     yLength = yLength - y2
  387. else
  388.     yLength = yLength + (y2 - 1) * -1  
  389. end
  390.  
  391. while yLength ~= 0 do
  392.     if yLength >= 1 then
  393.         local currentX, currentZ = xLength, zLength
  394.        
  395.         while currentZ ~= 0 do
  396.            
  397.             mvUp()
  398.             orient('x',xRotate)
  399.             mvBck()
  400.             mvDown()
  401.            
  402.             while currentX ~= 0 do
  403.                 mvFor()
  404.                 currentX = currentX - 1
  405.             end
  406.  
  407.             currentX = xLength
  408.            
  409.             if xRotate == 'pos' then
  410.                 xRotate = 'neg'
  411.             else
  412.                 xRotate = 'pos'
  413.             end
  414.  
  415.             mvUp()
  416.             orient('z',zRotate)
  417.             mvBck()
  418.             mvDown()
  419.  
  420.             mvFor()
  421.             currentZ = currentZ - 1
  422.            
  423.             if zRotate == 'pos' then
  424.                 zRotate = 'neg'
  425.             else
  426.                 zRotate = 'pos'
  427.             end
  428.  
  429.         end
  430.  
  431.         mvUp()
  432.         yLength = yLength + 1
  433.     end
  434.  
  435.     if yLength <= -1 then
  436.         local currentX, currentZ = xLength, zLength
  437.        
  438.         while currentZ ~= 0 do
  439.            
  440.             mvUp()
  441.             orient('x',xRotate)
  442.             mvBck()
  443.             mvDown()
  444.            
  445.             while currentX ~= 0 do
  446.                 mvFor()
  447.                 emptyInv()
  448.                 currentX = currentX - 1
  449.             end
  450.  
  451.             currentX = xLength
  452.            
  453.             if xRotate == 'pos' then
  454.                 xRotate = 'neg'
  455.             else
  456.                 xRotate = 'pos'
  457.             end
  458.  
  459.             mvUp()
  460.             orient('z',zRotate)
  461.             mvBck()
  462.             mvDown()
  463.  
  464.             mvFor()
  465.             currentZ = currentZ - 1
  466.            
  467.             if zRotate == 'pos' then
  468.                 zRotate = 'neg'
  469.             else
  470.                 zRotate = 'pos'
  471.             end
  472.  
  473.         end
  474.  
  475.         mvDown()
  476.         yLength = yLength - 1
  477.     end
  478.  
  479.     moveTo(rX,rY,rZ)
  480.     rednet.send(masterID,'done')
  481. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement