98 lines
2.8 KiB
Lua
98 lines
2.8 KiB
Lua
buildbot = {}
|
|
|
|
local function build_y(callback)
|
|
buildbot.pos.y = buildbot.pos.y - buildbot.step.y
|
|
local function step()
|
|
buildbot.pos.y = buildbot.pos.y + buildbot.step.y
|
|
minetest.after(0.25, (buildbot.pos.y == buildbot.goal.y) and callback or step)
|
|
minetest.place_node(buildbot.pos)
|
|
local player_pos = minetest.find_node_near(buildbot.pos, 2, "air")
|
|
if player_pos then
|
|
minetest.localplayer:set_pos(player_pos)
|
|
end
|
|
end
|
|
minetest.after(0.25, step)
|
|
end
|
|
|
|
local function build_z(callback)
|
|
buildbot.pos.z = buildbot.pos.z - buildbot.step.z
|
|
local function step()
|
|
buildbot.start.y, buildbot.goal.y = buildbot.goal.y, buildbot.start.y
|
|
buildbot.step.y = (buildbot.goal.y > buildbot.pos.y) and 1 or -1
|
|
buildbot.pos.z = buildbot.pos.z + buildbot.step.z
|
|
build_y((buildbot.pos.z == buildbot.goal.z) and callback or step)
|
|
end
|
|
minetest.after(0.25, step)
|
|
end
|
|
|
|
local function build_x(callback)
|
|
buildbot.pos.x = buildbot.pos.x - buildbot.step.x
|
|
local function step()
|
|
buildbot.start.z, buildbot.goal.z = buildbot.goal.z, buildbot.start.z
|
|
buildbot.step.z = (buildbot.goal.z > buildbot.pos.z) and 1 or -1
|
|
buildbot.pos.x = buildbot.pos.x + buildbot.step.x
|
|
build_z((buildbot.pos.x == buildbot.goal.x) and callback or step)
|
|
end
|
|
minetest.after(0.25, step)
|
|
end
|
|
|
|
minetest.register_chatcommand("build", {
|
|
func = function(param)
|
|
local sucess
|
|
buildbot.start = vector.round(minetest.localplayer:get_pos())
|
|
buildbot.pos = vector.new(buildbot.start)
|
|
success, buildbot.goal = minetest.parse_pos(param)
|
|
if success then
|
|
buildbot.step = {}
|
|
buildbot.step.x = (buildbot.goal.x > buildbot.start.x) and 1 or -1
|
|
buildbot.start.z, buildbot.goal.z = buildbot.goal.z, buildbot.start.z
|
|
buildbot.start.y, buildbot.goal.y = buildbot.goal.y, buildbot.start.y
|
|
build_x(function() minetest.display_chat_message("Done.") end)
|
|
end
|
|
return false, buildbot.goal
|
|
end
|
|
})
|
|
|
|
local keep_digging = false
|
|
|
|
core.register_chatcommand("keepdigging", {
|
|
params = "<X>,<Y>,<Z>",
|
|
description = "Dig node again and again",
|
|
func = function(param)
|
|
local success, pos = core.parse_pos(param)
|
|
if success then
|
|
keep_digging = true
|
|
local function loop()
|
|
core.dig_node(pos)
|
|
if keep_digging then
|
|
core.after(0.1, loop)
|
|
end
|
|
end
|
|
loop()
|
|
end
|
|
end,
|
|
})
|
|
|
|
core.register_chatcommand("stopdigging", {
|
|
description = "Stop diggin",
|
|
func = function()
|
|
keep_digging = false
|
|
end,
|
|
})
|
|
|
|
|
|
core.register_chatcommand("digaround", {
|
|
description = "Scan for one or multible nodes in a radius around you",
|
|
param = "<radius> node1[,node2...]",
|
|
func = function(param)
|
|
local radius = tonumber(param:split(" ")[1])
|
|
local nodes = param:split(" ")[2]:split(",")
|
|
local function loop()
|
|
local fpos = core.find_node_near(core.localplayer:get_pos(), radius, nodes, true)
|
|
if fpos then core.dig_node(fpos) end
|
|
core.after(0, loop)
|
|
end
|
|
loop()
|
|
end,
|
|
})
|