eniallator

mControl - Miner Turtle Plugin

Jan 20th, 2016
488
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. local version = "3.0"
  2.  
  3. function move(direction)
  4.   if direction == "up" then
  5.  
  6.     while turtle.up() == false do
  7.       turtle.digUp()
  8.       turtle.attackUp()
  9.     end
  10.  
  11.   elseif direction == "forward" then
  12.  
  13.     while turtle.forward() == false do
  14.       turtle.dig()
  15.       turtle.attack()
  16.     end
  17.  
  18.   elseif direction == "down" then
  19.  
  20.     while turtle.down() == false do
  21.       turtle.digDown()
  22.       turtle.attackDown()
  23.     end
  24.   end
  25. end
  26. -- Force move up/forward/down with this function
  27.  
  28. status = {move = 1,cube = 1}
  29.  
  30. helpTable = {move = "move in any direction", cube = "mine out a cuboid in dimension arguments"}
  31.  
  32. functionTable = {
  33.  
  34.     move = function(item,connectID,mProt)
  35.  
  36.     moveBlocks = tonumber(item[2])
  37.  
  38.     if moveBlocks == nil then
  39.       moveBlocks = 0
  40.     end
  41.  
  42.     if not tonumber(moveBlocks) then
  43.       rednet.send(connectID, "Expected number as 3rd argument. Instead Received: " .. item[2], mProt)
  44.     else
  45.  
  46.       function mover(direction)
  47.         while moveBlocks > 0 do
  48.           move(direction)
  49.           moveBlocks = moveBlocks - 1
  50.         end
  51.       end
  52.  
  53.       if item[1] == "up" or item[1] == "down" or item[1] == "forward" or item[1] == "right" or item[1] == "left" or item[1] == "back" then
  54.         if moveBlocks > 1 then
  55.           rednet.send(connectID, "Moving " .. item[1] .. " " .. item[2] .. " blocks!", mProt)
  56.         elseif moveBlocks == 1 then
  57.           rednet.send(connectID, "Moving " .. item[1] .. " 1 block", mProt)
  58.         else
  59.           rednet.send(connectID, "Moving " .. item[1], mProt)
  60.         end
  61.  
  62.         if item[1] == "right" then
  63.           turtle.turnRight()
  64.           item[1] = "forward"
  65.  
  66.         elseif item[1] == "left" then
  67.           turtle.turnLeft()
  68.           item[1] = "forward"
  69.  
  70.         elseif item[1] == "back" then
  71.           for i=1,2 do turtle.turnRight() end
  72.           item[1] = "forward"
  73.         end
  74.  
  75.         mover(item[1])
  76.  
  77.       else
  78.         rednet.send(connectID, 'List of possible directions: "up", "down", "right", "left", "forward", "back" ', mProt)
  79.  
  80.       end
  81.     end
  82.   end,
  83.  
  84.   cube = function(item,connectID,mProt)
  85.  
  86.     if item[1] ~= nil and item[2] ~= nil and item[3] ~= nil and tonumber(item[1]) and tonumber(item[2]) and tonumber(item[3]) and tonumber(item[1]) > 0 and tonumber(item[2]) > 0 and tonumber(item[3]) > 0 then
  87.  
  88.       for i=1,3 do
  89.         item[i] = tonumber(item[i])
  90.       end
  91.  
  92.       rednet.send(connectID, "Mining out a " .. item[1] .. " x " .. item[2] .. " x " .. item[3] .. " cuboid", mProt)
  93.       local xDist = item[1]
  94.       local yDist = item[2]
  95.       local zDist = item[3]
  96.       local i = 0
  97.       local levelsMined = 0
  98.  
  99.       function checkBreak()
  100.         if yDist - levelsMined > 1 then
  101.  
  102.           turtle.digUp()
  103.         end
  104.  
  105.         if yDist - levelsMined > 2 then
  106.  
  107.           turtle.digDown()
  108.         end
  109.       end
  110.  
  111.       function line()
  112.         for k=1,xDist-1 do
  113.  
  114.           move("forward")
  115.           checkBreak()
  116.         end
  117.       end
  118.  
  119.       function nextLine(direction)
  120.         direction()
  121.         move("forward")
  122.         checkBreak()
  123.         direction()
  124.       end
  125.  
  126.       function layer(level)
  127.  
  128.         if yDist - levelsMined > 2 then
  129.  
  130.           move("up")
  131.         end
  132.  
  133.         checkBreak()
  134.         line()
  135.  
  136.         if zDist%2 == 1 then
  137.  
  138.           level = 0
  139.         end
  140.  
  141.         for j=1,zDist-1 do
  142.           if (level+j)%2 == 1 then
  143.  
  144.             nextLine(turtle.turnRight)
  145.           else
  146.  
  147.             nextLine(turtle.turnLeft)
  148.           end
  149.  
  150.           line()
  151.         end
  152.  
  153.         if yDist - levelsMined > 2 then
  154.  
  155.           levelsMined = levelsMined + 3
  156.  
  157.         elseif yDist - levelsMined > 1 then
  158.  
  159.           levelsMined = levelsMined + 2
  160.         else
  161.  
  162.           levelsMined = levelsMined + 1
  163.         end
  164.       end
  165.  
  166.       move("forward")
  167.       layer(0)
  168.       local level = 0
  169.  
  170.       while yDist - levelsMined > 0 do
  171.  
  172.         for l=1,2 do move("up") end
  173.         for l=1,2 do turtle.turnRight() end
  174.  
  175.         level = level + 1
  176.         layer(level)
  177.       end
  178.  
  179.       local rightTurns = 2
  180.  
  181.       if level%2 == 0 then
  182.         if zDist%2 == 1 then
  183.  
  184.           for i=1,2 do turtle.turnRight() end
  185.           for i=1,xDist-1 do move("forward") end
  186.         end
  187.  
  188.         turtle.turnRight()
  189.         for i=1,zDist-1 do move("forward") end
  190.         rightTurns = 1
  191.       end
  192.  
  193.       local yOffset = 2
  194.  
  195.       if yDist % 3 == 1 then yOffset = 1 end
  196.  
  197.       for i=1,yDist-yOffset do move("down") end
  198.       for i=1,rightTurns do turtle.turnRight() end
  199.     else
  200.  
  201.       rednet.send(connectID, "Invalid dimensions, use 3 numbers bigger than 0", mProt)
  202.     end
  203.   end
  204. }
Add Comment
Please, Sign In to add comment