0x0049 icon

OpenComputers mining

0x0049 | PRO | 04/26/17 06:58:40 AM UTC | 0 ⭐ | 672 👁️ | Never ⏰ | []
Lua |

2.17 KB

|

None

|

0 👍

/

0 👎

local shell = require("shell")
local robot = require("robot")
local sides = require("sides")
local args, ops = shell.parse(...)
 
local distance = {}
distance.x = tonumber(args[1])
distance.y = tonumber(args[2])
distance.z = tonumber(args[3])
 
local gone = {}
gone.x = 0
gone.y = 0
gone.z = 0
 
local slots = robot.inventorySize()
local chest_slot = slots
 
-- Mine the block in front of the robot.
function mineForward()
    local blocked, type = robot.detect()
    while (blocked) do
        robot.swing()
        blocked, type = robot.detect()
    end
end
 
-- Mine the block below the robot.
function mineDown()
    local blocked, type = robot.detectDown()
    while (blocked) do
        robot.swingDown()
        blocked, type = robot.detectDown()  
    end 
end
 
-- Dump inventory into the ender chest.
function dump(side)
    robot.select(chest_slot)
    if (side == sides.back) then
        robot.turnAround()
        robot.place()
    else
        robot.placeUp()
    end
    local pos = 1
    while (pos <= slots) do
        robot.select(pos)
        if (side == sides.back) then
            robot.drop()
        else
            robot.dropUp()
        end
        pos = pos + 1
    end
    if (side == sides.back) then
        robot.swing()
        robot.turnAround()
    else
        robot.swingUp()
    end
end
 
-- Assume full if the last slot is non-empty.
function isFull()
    return robot.count(slots - 1) > 0
end
 
-- Dump if full.
function maybeDump(side)
    if (isFull()) then dump(side) end
end
 
-- Move forward one block.
function moveForward()
    mineForward()
    robot.forward()
    maybeDump(sides.back)
end
 
-- Move down one block.
function moveDown()
    mineDown()
    robot.down()
    maybeDump(sides.top)
end 
 
-- Main loop.
function main()
    while (gone.z < distance.z) do
        while (gone.x < distance.x) do
            if (gone.x ~= 0) then
                if (gone.x % 2 == 0) then
                    robot.turnLeft()
                    moveForward()
                    robot.turnLeft()
                else
                    robot.turnRight()
                    moveForward()
                    robot.turnRight()
                end
            end
 
            while (gone.y < distance.y) do
                moveForward()
                gone.y = gone.y + 1
            end
            
            gone.y = 0
            gone.x = gone.x + 1
        end
 
        moveDown()
        robot.turnAround()
 
        gone.y = 0
        gone.x = 0
        gone.z = gone.z + 1
    end
end
 
main()
dump()

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎