Bassic

Bassic Miner (Early Game Edition)

Jan 11th, 2021 (edited)
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.08 KB | None | 0 0
  1. -- Bassic Miner (Early Game Edition) v0.7 --
  2.  
  3. local levels, area = ...
  4. local levelsToMine = tonumber(levels)
  5. local areaToMine = tonumber(area)
  6.  
  7. function Mine()
  8.     print("Starting Turtle...")
  9.     local fuelNeeded = CalculateFuel()
  10.     if fuelNeeded ~= nil and fuelNeeded ~= 0 then
  11.         ConsumeFuel(fuelNeeded)
  12.     end
  13.  
  14.     local depth = 0
  15.     while depth < levelsToMine do
  16.         MineLevel()
  17.         if ((areaToMine % 2) == 0) then
  18.             turtle.turnLeft()
  19.         else
  20.             turtle.turnLeft()
  21.             turtle.turnLeft()
  22.         end
  23.         depth = depth + 1
  24.         if depth < levelsToMine then
  25.             turtle.digDown()
  26.             turtle.down()
  27.         end
  28.     end
  29.  
  30.     print("Returning To Surface...")
  31.     local movementsUntilSurface = 0
  32.     while movementsUntilSurface < levelsToMine do
  33.         ReturnToSurface()
  34.         movementsUntilSurface = movementsUntilSurface + 1
  35.     end
  36.     turtle.back()
  37.     DepositItems()
  38.     print("Mining Complete.")
  39. end
  40.  
  41. function CalculateFuel()
  42.     local steps = (levelsToMine * areaToMine  * areaToMine) + levelsToMine
  43.     local currentFuelLevel = turtle.getFuelLevel()
  44.     print(string.format("Total Steps Needed: %d", steps))
  45.     print(string.format("Current Fuel Level: %d", currentFuelLevel))
  46.     local fuelNeeded = 0
  47.     if turtle.getFuelLevel() > steps then
  48.         print("No Additional Fuel Needed.")
  49.     else
  50.         fuelNeeded = math.ceil((steps - currentFuelLevel) / 80)
  51.     end
  52.     if fuelNeeded > (80 * 64) then
  53.         error("Error: To Many Steps Needed, Not Enough Fuel To Consume.")
  54.     end
  55.     return fuelNeeded
  56. end
  57.  
  58. function ConsumeFuel(fuelNeeded)
  59.     if GetItemIndex("minecraft:coal") ~= 0 and turtle.select(GetItemIndex("minecraft:coal")) then
  60.         turtle.select(GetItemIndex("minecraft:coal"))
  61.         turtle.refuel(fuelNeeded)
  62.     else
  63.         error("Error: No coal detected in invenetory.")
  64.     end
  65. end
  66.  
  67. function MineLevel()
  68.     local directionToTurn = true
  69.  
  70.     for rowsCompleted = 1, areaToMine, 1 do
  71.         for stepsForward = 1, areaToMine - 1, 1 do
  72.             DigAndMove()
  73.             if CheckInventoryLevel() then
  74.                 DepositItems()
  75.             end
  76.         end
  77.         if rowsCompleted ~= areaToMine then
  78.             if directionToTurn then
  79.                 turtle.turnLeft()
  80.                 DigAndMove()
  81.                 turtle.turnLeft()
  82.                 directionToTurn = false
  83.             else
  84.                 turtle.turnRight()
  85.                 DigAndMove()
  86.                 turtle.turnRight()
  87.                 directionToTurn = true
  88.             end
  89.         end
  90.     end
  91. end
  92.  
  93. function DigAndMove()
  94.     while turtle.detect() do
  95.         turtle.dig()
  96.     end
  97.     turtle.forward()
  98. end
  99.  
  100. function ReturnToSurface()
  101.     while turtle.detectUp() do
  102.         turtle.digUp()
  103.     end
  104.     turtle.up()
  105. end
  106.  
  107. function DepositItems()
  108.     -- Select and Place ender chest
  109.     local chestLocation = GetItemIndex("enderstorage:ender_storage")
  110.     if chestLocation ~= 0 then
  111.         turtle.select(chestLocation)
  112.         if turtle.detectUp() then
  113.             turtle.digUp()
  114.         end
  115.         turtle.placeUp()
  116.  
  117.         for i = 1, 16, 1 do
  118.             turtle.select(i)
  119.             turtle.dropUp()
  120.         end
  121.         turtle.select(1)
  122.         turtle.digUp()
  123.     else
  124.         warn("WARNING: No ender chest detected. Items will soon start to spill onto the ground!")
  125.     end
  126. end
  127.  
  128. -- Checks inventory levels
  129. function CheckInventoryLevel()
  130.     -- We start at 3 because 1 has fuel and 2 will have the enderchest
  131.     local isInventoryFull = true
  132.     for i = 3, 16, 1 do
  133.         if turtle.getItemCount(i) == 0 then
  134.             isInventoryFull = false
  135.         end
  136.     end
  137.     return isInventoryFull
  138. end
  139.  
  140. -- Find the index of a specified item
  141. function GetItemIndex(itemName)
  142.     local index = 0
  143.     for i = 1, 16, 1 do
  144.         turtle.select(i)
  145.         if turtle.getItemCount() > 0 then
  146.             if turtle.getItemDetail(i).name == itemName then
  147.                 index = i
  148.                 break
  149.             end
  150.         end
  151.     end
  152.     return index
  153. end
  154.  
  155. Mine()
Advertisement
Add Comment
Please, Sign In to add comment