From b3ffc4b327622bec63793476191b95bc174bf33c Mon Sep 17 00:00:00 2001 From: Jude Melton-Houghton Date: Sat, 3 Dec 2022 10:40:46 -0500 Subject: Add `minetest.get_mapgen_edges` (#12999) --- src/script/lua_api/l_mapgen.cpp | 36 ++++++++++++++++++++++++++++++++++++ src/script/lua_api/l_mapgen.h | 3 +++ 2 files changed, 39 insertions(+) (limited to 'src/script/lua_api') diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index 1e4197df3..2e17d0d67 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -810,6 +810,41 @@ int ModApiMapgen::l_set_mapgen_params(lua_State *L) return 0; } +// get_mapgen_edges([mapgen_limit[, chunksize]]) +int ModApiMapgen::l_get_mapgen_edges(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + MapSettingsManager *settingsmgr = getServer(L)->getEmergeManager()->map_settings_mgr; + + // MapSettingsManager::makeMapgenParams cannot be used here because it would + // make mapgen settings immutable from then on. Mapgen settings should stay + // mutable until after mod loading ends. + + s16 mapgen_limit; + if (lua_isnumber(L, 1)) { + mapgen_limit = lua_tointeger(L, 1); + } else { + std::string mapgen_limit_str; + settingsmgr->getMapSetting("mapgen_limit", &mapgen_limit_str); + mapgen_limit = stoi(mapgen_limit_str, 0, MAX_MAP_GENERATION_LIMIT); + } + + s16 chunksize; + if (lua_isnumber(L, 2)) { + chunksize = lua_tointeger(L, 2); + } else { + std::string chunksize_str; + settingsmgr->getMapSetting("chunksize", &chunksize_str); + chunksize = stoi(chunksize_str, -32768, 32767); + } + + std::pair edges = get_mapgen_edges(mapgen_limit, chunksize); + push_v3s16(L, v3s16(1, 1, 1) * edges.first); + push_v3s16(L, v3s16(1, 1, 1) * edges.second); + return 2; +} + // get_mapgen_setting(name) int ModApiMapgen::l_get_mapgen_setting(lua_State *L) { @@ -1782,6 +1817,7 @@ void ModApiMapgen::Initialize(lua_State *L, int top) API_FCT(get_mapgen_params); API_FCT(set_mapgen_params); + API_FCT(get_mapgen_edges); API_FCT(get_mapgen_setting); API_FCT(set_mapgen_setting); API_FCT(get_mapgen_setting_noiseparams); diff --git a/src/script/lua_api/l_mapgen.h b/src/script/lua_api/l_mapgen.h index 0bdc56fc5..1428a91c8 100644 --- a/src/script/lua_api/l_mapgen.h +++ b/src/script/lua_api/l_mapgen.h @@ -61,6 +61,9 @@ private: // set mapgen parameters static int l_set_mapgen_params(lua_State *L); + // get_mapgen_edges([mapgen_limit[, chunksize]]) + static int l_get_mapgen_edges(lua_State *L); + // get_mapgen_setting(name) static int l_get_mapgen_setting(lua_State *L); -- cgit v1.2.3