Advertisement
demon012

Minecraft - Redwood Miner

Feb 9th, 2015
331
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.44 KB | None | 0 0
  1. RWMiner = {
  2.     progress = {}
  3. }
  4. RWMiner_mt = {__index = RWMiner}
  5. function RWMiner:create()--{{{
  6.     local new_RWMiner = {}
  7.     setmetatable(new_RWMiner, RWMiner_mt)
  8.     return new_RWMiner
  9. end--}}}
  10. function RWMiner:dig()--{{{
  11.     if self.progress["config"]["debug"] then
  12.         print("digging")
  13.     end
  14.  
  15.     -- check to see if it is cobblestone
  16.     turtle.select(15)
  17.     if turtle.compare() then
  18.         turtle.dig()
  19.         turtle.drop(1)
  20.     else
  21.         turtle.select(16)
  22.         turtle.dig()
  23.     end
  24. end--}}}
  25. function RWMiner:digUp()--{{{
  26.     if self.progress["config"]["debug"] then
  27.         print("digging up")
  28.     end
  29.     turtle.select(15)
  30.     if turtle.compareUp() then
  31.         turtle.digUp()
  32.         turtle.dropUp(1)
  33.     else
  34.         turtle.select(16)
  35.         turtle.digUp()
  36.     end
  37. end--}}}
  38. function RWMiner:digDown()--{{{
  39.     if self.progress["config"]["debug"] then
  40.         print("digging down")
  41.     end
  42.     turtle.select(15)
  43.     if turtle.compareDown() then
  44.         turtle.digDown()
  45.         turtle.dropDown(1)
  46.     else
  47.         turtle.select(16)
  48.         turtle.digDown()
  49.     end
  50. end--}}}
  51. function RWMiner:refuel()--{{{
  52.     local origSlot = turtle.getSelectedSlot()
  53.     if turtle.getFuelLevel() < 2000 then
  54.         turtle.select(16)
  55.         coal = turtle.getItemCount() - 1
  56.  
  57.         if coal > 0 then
  58.             print("Refueling " .. coal .. " times.")
  59.             for count = 1, coal do
  60.                 turtle.refuel()
  61.             end
  62.         else
  63.             print("Not enough fuel to refuel")
  64.         end
  65.         turtle.select(origSlot)
  66.     end
  67. end--}}}
  68. function RWMiner:forward()--{{{
  69.     if self.progress["config"]["debug"] then
  70.         print("moving forward")
  71.     end
  72.     local success = false
  73.     while not success do
  74.         self:refuel()
  75.         success = turtle.forward()
  76.         if not success then
  77.             turtle.dig()
  78.         end
  79.     end
  80. end--}}}
  81. function RWMiner:down()--{{{
  82.     if self.progress["config"]["debug"] then
  83.         print("moving down")
  84.     end
  85.     local success = false
  86.     while not success do
  87.         self:refuel()
  88.         success = turtle.down()
  89.         if not success then
  90.             turtle.digDown()
  91.         end
  92.     end
  93. end--}}}
  94. function RWMiner:nextRow()--{{{
  95.     self:digUp()
  96.     self:digDown()
  97.     if self.progress['config']['direction'] == "right" then
  98.         turtle.turnRight()
  99.     else
  100.         turtle.turnLeft()
  101.     end
  102.  
  103.     self:forward()
  104.  
  105.     if self.progress['config']['direction'] == "right" then
  106.         turtle.turnRight()
  107.         self.progress['config']['direction'] = "left"
  108.     else
  109.         turtle.turnLeft()
  110.         self.progress['config']['direction'] = "right"
  111.     end
  112.     self.progress['curRow'] = self.progress['curRow'] + 1
  113.     self.progress['curDistance'] = 0
  114.     self:recordProgress(progress)
  115. end--}}}
  116. function RWMiner:nextLevelDown()--{{{
  117.     self:down()
  118.     self:down()
  119.     self:down()
  120. end--}}}
  121. function RWMiner:recordProgress()--{{{
  122.     file = io.open("progress", "w")
  123.     file:write(textutils.serialize(self.progress))
  124.     file:close()
  125. end--}}}
  126. function RWMiner:loadProgress()--{{{
  127.     file = io.open("progress", "r")
  128.     self.progress = textutils.unserialize(file:read("*a"))
  129.     self.progress["config"]["down"] = false
  130.     self.progress["config"]["turn"] = false
  131.     print(textutils.serialize(self.progress))
  132.     file:close()
  133. end--}}}
  134. function RWMiner:emptyInventory()--{{{
  135.     for slot = 1, 15 do
  136.         turtle.select(slot)
  137.         turtle.drop()
  138.     end
  139.     turtle.select(16)
  140. end--}}}
  141. function RWMiner:usage()--{{{
  142.     print("command <distance to dig> <rows to dig> -- options")
  143.     print("Valid options:")
  144.     print("--turn: turn around before starting diggging")
  145.     print("--down: dig down before starting")
  146.     print("--left: turn left at end of row")
  147.     print("--right: turn right at end of row")
  148.     shell.exit()
  149. end--}}}
  150. function RWMiner:parseArgs()--{{{
  151.     -- what arguments would be useful
  152.     -- first arg: distance forward
  153.     -- second arg rows
  154.     -- --turn = turn around before starting
  155.     -- --down = dig down before starting
  156.     -- --left = start by turning left
  157.     -- --right = start by turning right
  158.     -- --debug = print debug messages
  159.  
  160.     local config = {}
  161.     config['distance'] = 0
  162.     config['rows'] = 0
  163.     config['direction'] = "right"
  164.     config['turn'] = false
  165.     config['down'] = false
  166.     config['debug'] = false
  167.     config['ignore'] = {}
  168.  
  169.     if table.getn(self.args) < 2 then
  170.         self:usage()
  171.     else
  172.         config['distance'] = self.args[1]
  173.         config['rows'] = self.args[2]
  174.         if #self.args > 2 then
  175.             for argc = 3, #self.args do
  176.                 if self.args[argc] == "--turn" then
  177.                     config['turn'] = true
  178.                 elseif self.args[argc] == "--down" then
  179.                     config['down'] = true
  180.                 elseif self.args[argc] == "--left" then
  181.                     config['direction'] = "left"
  182.                 elseif self.args[argc] == "--right" then
  183.                     config['direction'] = "right"
  184.                 elseif self.args[argc] == "--debug" then
  185.                     config['debug'] = true
  186.                 else
  187.                     usage()
  188.                 end
  189.             end
  190.         end
  191.     end
  192.  
  193.     self.progress['config'] = config
  194. end--}}}
  195. function RWMiner:init()--{{{
  196.     if fs.exists("progress") then
  197.         self:loadProgress()
  198.     else
  199.         self.progress['curDistance'] = 0
  200.         self.progress['curRow'] = 1
  201.  
  202.         self:parseArgs()
  203.  
  204.         print("Please put coal in the 16th and cobble in the 15th slot then press Enter")
  205.         key = nil
  206.         while key ~= 28 do
  207.             eventName, key = os.pullEvent("key")
  208.         end
  209.         turtle.select(16)
  210.     end
  211. end--}}}
  212. function RWMiner:mine()--{{{
  213.     if self.progress["config"]["down"] then
  214.         self:nextLevelDown()
  215.     end
  216.     for row = 1, self.progress['config']['rows'] do
  217.         for count = self.progress['curDistance'], self.progress['config']['distance'] do
  218.             self:dig()
  219.             self:digUp()
  220.             self:digDown()
  221.             self:forward()
  222.             self.progress['curDistance'] = self.progress['curDistance'] + 1
  223.             self:recordProgress()
  224.         end
  225.         -- emptyInventory()
  226.         self:nextRow()
  227.     end
  228.  
  229.     print("mining complete, deleting progress file")
  230.     fs.delete("progress")
  231. end--}}}
  232.  
  233. miner = RWMiner
  234. miner.args = { ... }
  235. miner:init()
  236. miner:mine()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement