51 lines
1.2 KiB
Lua
51 lines
1.2 KiB
Lua
|
-- Created by Jef Roosens
|
||
|
--
|
||
|
-- Utilities to ease movement using a turtle
|
||
|
|
||
|
|
||
|
local dig = require("jlib.mine").dig
|
||
|
local module = {}
|
||
|
module.logger = require("jlib.log").Logger:new{level = -1}
|
||
|
|
||
|
|
||
|
-- Safely move n blocks. This means accounting for gravel, trees growing...
|
||
|
--
|
||
|
-- @param dir direction to move (u, d, f)
|
||
|
-- @param n number of blocks to move. If nil (or not supplied), 1 is taken as
|
||
|
-- @param side_effect a function/table of functions which gets called after the
|
||
|
-- turtle has moved 1 block. This can be used to extend the functionality of
|
||
|
-- the function without having to re-write it.
|
||
|
function module.move(dir, n, side_effect)
|
||
|
-- Default value
|
||
|
n = n or 1
|
||
|
|
||
|
local funcs = {
|
||
|
u = turtle.up,
|
||
|
d = turtle.down,
|
||
|
f = turtle.forward
|
||
|
}
|
||
|
|
||
|
for _ = 1, n do
|
||
|
dig(dir)
|
||
|
funcs[dir]()
|
||
|
|
||
|
-- Run the side-effect if given
|
||
|
if side_effect then
|
||
|
if type(side_effect) == "table" then
|
||
|
for _, f in pairs(side_effect) do
|
||
|
f()
|
||
|
end
|
||
|
|
||
|
else
|
||
|
side_effect()
|
||
|
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
module.logger:info("Moved " .. n .. " blocks")
|
||
|
end
|
||
|
|
||
|
|
||
|
return module
|