Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- RWMiner = {
- progress = {}
- }
- RWMiner_mt = {__index = RWMiner}
- function RWMiner:create()--{{{
- local new_RWMiner = {}
- setmetatable(new_RWMiner, RWMiner_mt)
- return new_RWMiner
- end--}}}
- function RWMiner:dig()--{{{
- if self.progress["config"]["debug"] then
- print("digging")
- end
- -- check to see if it is cobblestone
- turtle.select(15)
- if turtle.compare() then
- turtle.dig()
- turtle.drop(1)
- else
- turtle.select(16)
- turtle.dig()
- end
- end--}}}
- function RWMiner:digUp()--{{{
- if self.progress["config"]["debug"] then
- print("digging up")
- end
- turtle.select(15)
- if turtle.compareUp() then
- turtle.digUp()
- turtle.dropUp(1)
- else
- turtle.select(16)
- turtle.digUp()
- end
- end--}}}
- function RWMiner:digDown()--{{{
- if self.progress["config"]["debug"] then
- print("digging down")
- end
- turtle.select(15)
- if turtle.compareDown() then
- turtle.digDown()
- turtle.dropDown(1)
- else
- turtle.select(16)
- turtle.digDown()
- end
- end--}}}
- function RWMiner:refuel()--{{{
- local origSlot = turtle.getSelectedSlot()
- if turtle.getFuelLevel() < 2000 then
- turtle.select(16)
- coal = turtle.getItemCount() - 1
- if coal > 0 then
- print("Refueling " .. coal .. " times.")
- for count = 1, coal do
- turtle.refuel()
- end
- else
- print("Not enough fuel to refuel")
- end
- turtle.select(origSlot)
- end
- end--}}}
- function RWMiner:forward()--{{{
- if self.progress["config"]["debug"] then
- print("moving forward")
- end
- local success = false
- while not success do
- self:refuel()
- success = turtle.forward()
- if not success then
- turtle.dig()
- end
- end
- end--}}}
- function RWMiner:down()--{{{
- if self.progress["config"]["debug"] then
- print("moving down")
- end
- local success = false
- while not success do
- self:refuel()
- success = turtle.down()
- if not success then
- turtle.digDown()
- end
- end
- end--}}}
- function RWMiner:nextRow()--{{{
- self:digUp()
- self:digDown()
- if self.progress['config']['direction'] == "right" then
- turtle.turnRight()
- else
- turtle.turnLeft()
- end
- self:forward()
- if self.progress['config']['direction'] == "right" then
- turtle.turnRight()
- self.progress['config']['direction'] = "left"
- else
- turtle.turnLeft()
- self.progress['config']['direction'] = "right"
- end
- self.progress['curRow'] = self.progress['curRow'] + 1
- self.progress['curDistance'] = 0
- self:recordProgress(progress)
- end--}}}
- function RWMiner:nextLevelDown()--{{{
- self:down()
- self:down()
- self:down()
- end--}}}
- function RWMiner:recordProgress()--{{{
- file = io.open("progress", "w")
- file:write(textutils.serialize(self.progress))
- file:close()
- end--}}}
- function RWMiner:loadProgress()--{{{
- file = io.open("progress", "r")
- self.progress = textutils.unserialize(file:read("*a"))
- self.progress["config"]["down"] = false
- self.progress["config"]["turn"] = false
- print(textutils.serialize(self.progress))
- file:close()
- end--}}}
- function RWMiner:emptyInventory()--{{{
- for slot = 1, 15 do
- turtle.select(slot)
- turtle.drop()
- end
- turtle.select(16)
- end--}}}
- function RWMiner:usage()--{{{
- print("command <distance to dig> <rows to dig> -- options")
- print("Valid options:")
- print("--turn: turn around before starting diggging")
- print("--down: dig down before starting")
- print("--left: turn left at end of row")
- print("--right: turn right at end of row")
- shell.exit()
- end--}}}
- function RWMiner:parseArgs()--{{{
- -- what arguments would be useful
- -- first arg: distance forward
- -- second arg rows
- -- --turn = turn around before starting
- -- --down = dig down before starting
- -- --left = start by turning left
- -- --right = start by turning right
- -- --debug = print debug messages
- local config = {}
- config['distance'] = 0
- config['rows'] = 0
- config['direction'] = "right"
- config['turn'] = false
- config['down'] = false
- config['debug'] = false
- config['ignore'] = {}
- if table.getn(self.args) < 2 then
- self:usage()
- else
- config['distance'] = self.args[1]
- config['rows'] = self.args[2]
- if #self.args > 2 then
- for argc = 3, #self.args do
- if self.args[argc] == "--turn" then
- config['turn'] = true
- elseif self.args[argc] == "--down" then
- config['down'] = true
- elseif self.args[argc] == "--left" then
- config['direction'] = "left"
- elseif self.args[argc] == "--right" then
- config['direction'] = "right"
- elseif self.args[argc] == "--debug" then
- config['debug'] = true
- else
- usage()
- end
- end
- end
- end
- self.progress['config'] = config
- end--}}}
- function RWMiner:init()--{{{
- if fs.exists("progress") then
- self:loadProgress()
- else
- self.progress['curDistance'] = 0
- self.progress['curRow'] = 1
- self:parseArgs()
- print("Please put coal in the 16th and cobble in the 15th slot then press Enter")
- key = nil
- while key ~= 28 do
- eventName, key = os.pullEvent("key")
- end
- turtle.select(16)
- end
- end--}}}
- function RWMiner:mine()--{{{
- if self.progress["config"]["down"] then
- self:nextLevelDown()
- end
- for row = 1, self.progress['config']['rows'] do
- for count = self.progress['curDistance'], self.progress['config']['distance'] do
- self:dig()
- self:digUp()
- self:digDown()
- self:forward()
- self.progress['curDistance'] = self.progress['curDistance'] + 1
- self:recordProgress()
- end
- -- emptyInventory()
- self:nextRow()
- end
- print("mining complete, deleting progress file")
- fs.delete("progress")
- end--}}}
- miner = RWMiner
- miner.args = { ... }
- miner:init()
- miner:mine()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement