Advertisement
blunty666

Vertical Digger

Oct 21st, 2014
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.41 KB | None | 0 0
  1. local blackList = {
  2.     ["minecraft:stone"] = true,
  3.     ["minecraft:cobblestone"] = true,
  4.     ["minecraft:gravel"] = true,
  5.     ["minecraft:dirt"] = true,
  6. }
  7. local useFuel = true
  8. local backFill = true
  9. local fuelLevel = 0
  10.  
  11. local function checkSlots()
  12.     local emptySlots = 0
  13.     local enderChestSlot = 0
  14.     for slotNum = 1, 16 do
  15.         local itemData = turtle.getItemDetail(slotNum)
  16.         if itemData then
  17.             if itemData.name == "EnderStorage:enderChest" then
  18.                 enderChestSlot = slotNum
  19.             end
  20.         else
  21.             emptySlots = emptySlots + 1
  22.         end
  23.     end
  24.     if emptySlots < 5 then
  25.         if enderChestSlot > 0 then
  26.             turtle.select(enderChestSlot)
  27.             if turtle.placeUp() then
  28.                 for slotNum = 1, 16 do
  29.                     local itemData = turtle.getItemDetail(slotNum)
  30.                     if itemData and not blackList[itemData.name] then
  31.                         turtle.select(slotNum)
  32.                         turtle.dropUp()
  33.                         local attempts = 1
  34.                         while turtle.getItemCount(slotNum) > 0 do
  35.                             if attempts > 30 then
  36.                                 turtle.digUp()
  37.                                 return false
  38.                             end
  39.                             sleep(1)
  40.                             turtle.dropUp()
  41.                             attempts = attempts + 1
  42.                         end
  43.                     end
  44.                 end
  45.                 turtle.select(1)
  46.                 turtle.digUp()
  47.             end
  48.         else
  49.             return false
  50.         end
  51.     end
  52.     return true
  53. end
  54.  
  55. local function checkFuelLevel()
  56.     fuelLevel = turtle.getFuelLevel()
  57.     if type(fuelLevel) == "string" then
  58.         fuelLevel = math.huge
  59.     end
  60. end
  61.  
  62. --taken from refuel program
  63. local function refuel(nLimit)
  64.     for n=1,16 do
  65.         local nCount = turtle.getItemCount(n)
  66.         if nLimit > 0 and nCount > 0 and turtle.getFuelLevel() < turtle.getFuelLimit() then
  67.             local nBurn = math.min( nLimit, nCount )
  68.             turtle.select( n )
  69.             if turtle.refuel( nBurn ) then
  70.                 local nNewCount = turtle.getItemCount(n)
  71.                 nLimit = nLimit - (nCount - nNewCount)
  72.             end
  73.         end
  74.     end
  75.     turtle.select(1)
  76.     checkFuelLevel()
  77.     return nLimit <= 0
  78. end
  79.  
  80. local function tryBackFill(turtlePlace)
  81.     for slotNum = 1, 16 do
  82.         local itemData = turtle.getItemDetail(slotNum)
  83.         if itemData and blackList[itemData.name] then
  84.             turtle.select(slotNum)
  85.             turtlePlace()
  86.             break
  87.         end
  88.     end
  89.     turtle.select(1)
  90. end
  91.  
  92. local function main()
  93.     local keepGoingDown = true
  94.     local distanceMoved = 0
  95.     while keepGoingDown do
  96.         local blockBelow, blockData = turtle.inspectDown()
  97.         if blockBelow and blockData.name == "minecraft:bedrock" then
  98.             keepGoingDown = false
  99.         else
  100.             if fuelLevel > distanceMoved or (useFuel and refuel(1)) then
  101.                 if blockBelow then
  102.                     turtle.digDown()
  103.                 end
  104.                 local attempts = 0 --just in case of hitting natural cobble gen
  105.                 while not turtle.down() and keepGoingDown do
  106.                     attempts = attempts + 1
  107.                     if attempts >= 5 then
  108.                         keepGoingDown = false
  109.                     end
  110.                     turtle.digDown()
  111.                 end
  112.                 distanceMoved = distanceMoved + 1
  113.                 fuelLevel = fuelLevel - 1
  114.                 if keepGoingDown then
  115.                     for i = 1, 4 do
  116.                         local isBlock, data = turtle.inspect()
  117.                         if isBlock then
  118.                             if not blackList[data.name] and turtle.dig() then
  119.                                 if backFill then
  120.                                     tryBackFill(turtle.place)
  121.                                 end
  122.                             end
  123.                         elseif backFill then
  124.                             tryBackFill(turtle.place)
  125.                         end
  126.                         if i < 4 then
  127.                             turtle.turnLeft()
  128.                         end
  129.                     end
  130.                     if not checkSlots() then
  131.                         keepGoingDown = false
  132.                     end
  133.                 end
  134.             else
  135.                 keepGoingDown = false
  136.             end
  137.         end
  138.     end
  139.  
  140.     for i = 1, distanceMoved do
  141.         while not turtle.up() do
  142.             sleep(1)
  143.         end
  144.         tryBackFill(turtle.placeDown)
  145.     end
  146. end
  147.  
  148. checkFuelLevel()
  149. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement