diff --git a/src/script/lua_api/l_vmanip.cpp b/src/script/lua_api/l_vmanip.cpp index ca7ad7971..33f6f7407 100644 --- a/src/script/lua_api/l_vmanip.cpp +++ b/src/script/lua_api/l_vmanip.cpp @@ -369,36 +369,35 @@ LuaVoxelManip::LuaVoxelManip(Map *map) : vm(new MMVManip(map)) { } -LuaVoxelManip::LuaVoxelManip(Map *map, v3s16 p1, v3s16 p2) -{ - vm = new MMVManip(map); - - v3s16 bp1 = getNodeBlockPos(p1); - v3s16 bp2 = getNodeBlockPos(p2); - sortBoxVerticies(bp1, bp2); - vm->initialEmerge(bp1, bp2); -} - LuaVoxelManip::~LuaVoxelManip() { if (!is_mapgen_vm) delete vm; } -// LuaVoxelManip() +// LuaVoxelManip([p1, p2]) // Creates an LuaVoxelManip and leaves it on top of stack int LuaVoxelManip::create_object(lua_State *L) { GET_ENV_PTR; - Map *map = &(env->getMap()); - LuaVoxelManip *o = (lua_istable(L, 1) && lua_istable(L, 2)) ? - new LuaVoxelManip(map, check_v3s16(L, 1), check_v3s16(L, 2)) : - new LuaVoxelManip(map); + LuaVoxelManip *o = new LuaVoxelManip(&env->getMap()); *(void **)(lua_newuserdata(L, sizeof(void *))) = o; luaL_getmetatable(L, className); lua_setmetatable(L, -2); + + // Call read_from_map so we don't have to duplicate it here + const int top = lua_gettop(L); + if (lua_istable(L, 1) && lua_istable(L, 2)) { + lua_pushcfunction(L, l_read_from_map); + lua_pushvalue(L, top); + lua_pushvalue(L, 1); + lua_pushvalue(L, 2); + lua_call(L, 3, 0); + } + lua_settop(L, top); + return 1; } diff --git a/src/script/lua_api/l_vmanip.h b/src/script/lua_api/l_vmanip.h index 04670bef6..820f89d5a 100644 --- a/src/script/lua_api/l_vmanip.h +++ b/src/script/lua_api/l_vmanip.h @@ -64,7 +64,6 @@ public: MMVManip *vm = nullptr; LuaVoxelManip(MMVManip *mmvm, bool is_mapgen_vm); - LuaVoxelManip(Map *map, v3s16 p1, v3s16 p2); LuaVoxelManip(Map *map); ~LuaVoxelManip();