From f062bbd7a182233f96c61287d0397534811627d9 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Wed, 23 Sep 2015 00:31:45 -0400 Subject: Add /emergeblocks command and core.emerge_area() Lua API --- src/script/lua_api/l_env.cpp | 25 +++++++++++++++++++++++++ src/script/lua_api/l_env.h | 3 +++ 2 files changed, 28 insertions(+) (limited to 'src/script') diff --git a/src/script/lua_api/l_env.cpp b/src/script/lua_api/l_env.cpp index 4e0164d90..04b47e6d0 100644 --- a/src/script/lua_api/l_env.cpp +++ b/src/script/lua_api/l_env.cpp @@ -33,6 +33,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "util/pointedthing.h" #include "content_sao.h" #include "treegen.h" +#include "emerge.h" #include "pathfinder.h" #define GET_ENV_PTR ServerEnvironment* env = \ @@ -751,6 +752,29 @@ int ModApiEnvMod::l_line_of_sight(lua_State *L) return 1; } + +// emerge_area(p1, p2) +// emerge mapblocks in area p1..p2 +int ModApiEnvMod::l_emerge_area(lua_State *L) +{ + GET_ENV_PTR; + + EmergeManager *emerge = getServer(L)->getEmergeManager(); + + v3s16 bpmin = getNodeBlockPos(read_v3s16(L, 1)); + v3s16 bpmax = getNodeBlockPos(read_v3s16(L, 2)); + sortBoxVerticies(bpmin, bpmax); + + for (s16 z = bpmin.Z; z <= bpmax.Z; z++) + for (s16 y = bpmin.Y; y <= bpmax.Y; y++) + for (s16 x = bpmin.X; x <= bpmax.X; x++) { + v3s16 chunkpos(x, y, z); + emerge->enqueueBlockEmerge(PEER_ID_INEXISTENT, chunkpos, false, true); + } + + return 0; +} + // delete_area(p1, p2) // delete mapblocks in area p1..p2 int ModApiEnvMod::l_delete_area(lua_State *L) @@ -954,6 +978,7 @@ void ModApiEnvMod::Initialize(lua_State *L, int top) API_FCT(find_node_near); API_FCT(find_nodes_in_area); API_FCT(find_nodes_in_area_under_air); + API_FCT(emerge_area); API_FCT(delete_area); API_FCT(get_perlin); API_FCT(get_perlin_map); diff --git a/src/script/lua_api/l_env.h b/src/script/lua_api/l_env.h index 0d4ca788e..2e9fab777 100644 --- a/src/script/lua_api/l_env.h +++ b/src/script/lua_api/l_env.h @@ -125,6 +125,9 @@ private: // nodenames: eg. {"ignore", "group:tree"} or "default:dirt" static int l_find_nodes_in_area_under_air(lua_State *L); + // emerge_area(p1, p2) + static int l_emerge_area(lua_State *L); + // delete_area(p1, p2) -> true/false static int l_delete_area(lua_State *L); -- cgit v1.2.3