aboutsummaryrefslogtreecommitdiff
path: root/clientmods/maputil/buildbot.lua
diff options
context:
space:
mode:
Diffstat (limited to 'clientmods/maputil/buildbot.lua')
-rw-r--r--clientmods/maputil/buildbot.lua57
1 files changed, 57 insertions, 0 deletions
diff --git a/clientmods/maputil/buildbot.lua b/clientmods/maputil/buildbot.lua
new file mode 100644
index 000000000..81e6e75e0
--- /dev/null
+++ b/clientmods/maputil/buildbot.lua
@@ -0,0 +1,57 @@
+local build = {}
+
+local function build_y(callback)
+ build.pos.y = build.pos.y - build.step.y
+ local function step()
+ build.pos.y = build.pos.y + build.step.y
+ minetest.after(0.25, (build.pos.y == build.goal.y) and callback or step)
+ minetest.place_node(build.pos)
+ local player_pos = minetest.find_node_near(build.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)
+ build.pos.z = build.pos.z - build.step.z
+ local function step()
+ build.start.y, build.goal.y = build.goal.y, build.start.y
+ build.step.y = (build.goal.y > build.pos.y) and 1 or -1
+ build.pos.z = build.pos.z + build.step.z
+ build_y((build.pos.z == build.goal.z) and callback or step)
+ end
+ minetest.after(0.25, step)
+end
+
+local function build_x(callback)
+ build.pos.x = build.pos.x - build.step.x
+ local function step()
+ build.start.z, build.goal.z = build.goal.z, build.start.z
+ build.step.z = (build.goal.z > build.pos.z) and 1 or -1
+ build.pos.x = build.pos.x + build.step.x
+ build_z((build.pos.x == build.goal.x) and callback or step)
+ end
+ minetest.after(0.25, step)
+end
+
+minetest.register_chatcommand("build", {
+ func = function(param)
+ local sucess
+ build.start = vector.round(minetest.localplayer:get_pos())
+ build.pos = vector.new(build.start)
+ success, build.goal = minetest.parse_relative_pos(param)
+ if success then
+ build.step = {}
+ build.step.x = (build.goal.x > build.start.x) and 1 or -1
+ build.start.z, build.goal.z = build.goal.z, build.start.z
+ build.start.y, build.goal.y = build.goal.y, build.start.y
+ build_x(function() minetest.display_chat_message("Done.") end)
+ end
+ return false, build.goal
+ end
+})
+
+
+