WineCraftHD

Ender Turtle

Dec 21st, 2015
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. local S_MINING = "MINING"
  2. local S_FINISH  = "FINISH"
  3. local S_ADVANCE = "ADVANCE"
  4.  
  5. local chestIndex = 1
  6. local CHEST = "Ender"
  7.  
  8. local DepthTarget = 130
  9.  
  10. local status = {}
  11. local statusFileName = "enderstatus"
  12.  
  13. local function loadTable(name)
  14.         local file = fs.open(name,"r")
  15.         if file == nil then
  16.             return
  17.         end
  18.         local data = file.readAll()
  19.         file.close()
  20.         return textutils.unserialize(data)
  21. end
  22.  
  23. local function saveTable(table,name)
  24.         local file = fs.open(name,"w")
  25.         file.write(textutils.serialize(table))
  26.         file.close()
  27. end
  28.  
  29. local function saveStatus()
  30.     saveTable(status, statusFileName)        
  31. end
  32.  
  33. local function loadStatus()
  34.     status = loadTable(statusFileName)
  35. end
  36.  
  37. local function CheckRefuel()
  38.     if turtle.getFuelLevel() > 4000 then
  39.         return
  40.     end
  41.  
  42.     for i=2,16 do
  43.         turtle.select(i)
  44.         turtle.refuel(64)
  45.     end
  46. end
  47.  
  48. local function ReturnBack()
  49.  
  50.     for i=1,DepthTarget do
  51.         turtle.up()
  52.     end
  53. end
  54.  
  55. local function DepositChest()
  56.  
  57.     if turtle.detectUp() == true then
  58.         turtle.down()
  59.     end
  60.        
  61.     turtle.select(1)
  62.     turtle.placeUp()
  63.  
  64.     for i = 2,16 do
  65.             turtle.select(i)
  66.             turtle.dropUp()
  67.     end
  68.  
  69.     turtle.select(1)
  70.     turtle.digUp()
  71.     turtle.select(2)
  72.     turtle.up()
  73. end
  74.  
  75. local function InventoryFull()
  76.     -- check 2-16, backwards for efficiency
  77.     for i=1,15 do
  78.             if turtle.getItemCount(16-i) == 0 then
  79.                     return false
  80.             end
  81.     end
  82.    
  83.     return true
  84. end
  85.  
  86. local function CheckInventory()
  87.  
  88.     if InventoryFull() then
  89.         CheckRefuel()
  90.         DepositChest()
  91.     end
  92. end
  93.  
  94. local function Harvest()
  95.  
  96.     if not turtle.detectDown() then
  97.         return
  98.     end
  99.  
  100.     while turtle.suckDown() == true do
  101.         CheckInventory()
  102.     end
  103.    
  104.     turtle.digDown()
  105.     CheckInventory()
  106. end
  107.  
  108. local function Finish()
  109.  
  110.     DepositChest()
  111.     ReturnBack()
  112.     status.status = S_ADVANCE  
  113. end
  114.  
  115. local function NextColumn()
  116.  
  117.     for i=1,4 do
  118.         if turtle.detect() then
  119.             turtle.dig()
  120.         end
  121.         turtle.forward()
  122.     end
  123.    
  124.     status.status = S_MINING
  125. end
  126.  
  127.  
  128. local function StartMining()
  129.  
  130.     for i=1,DepthTarget do
  131.         turtle.attackDown()
  132.         Harvest()
  133.         turtle.down()
  134.     end
  135.    
  136.     status.status = S_FINISH
  137. end
  138.  
  139.  
  140. function Main()
  141.  
  142.     while status.status ~= S_STOP do
  143.         saveStatus()
  144.         sleep(1)
  145.        
  146.         if status.status == S_MINING then
  147.             StartMining()
  148.            
  149.         elseif status.status == S_FINISH then
  150.             Finish()
  151.            
  152.         elseif status.status == S_ADVANCE then
  153.             NextColumn()
  154.            
  155.         else
  156.             print("Unknown status: "..status.status)
  157.             status.status = S_STOP
  158.         end
  159.     end
  160.     ReturnBack()
  161. end
  162.  
  163. -- ON LAUNCH
  164. loadStatus()
  165.  
  166. if status == nil then
  167.     status = { }
  168.    status.status = S_MINING
  169. end
  170.  
  171. Main()
Advertisement
Add Comment
Please, Sign In to add comment