Allow mapgen chunk size to be non-cubic (#16429)

This commit is contained in:
sfan5
2025-10-22 22:31:23 +02:00
committed by GitHub
parent 0f943e5810
commit f4977b1e33
14 changed files with 151 additions and 73 deletions

View File

@@ -849,28 +849,27 @@ int ModApiMapgen::l_get_mapgen_edges(lua_State *L)
// 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.
std::unique_ptr<MapgenParams> params(settingsmgr->makeMapgenParamsCopy());
s16 mapgen_limit;
if (lua_isnumber(L, 1)) {
mapgen_limit = lua_tointeger(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);
mapgen_limit = params->mapgen_limit;
}
s16 chunksize;
v3s16 chunksize;
if (lua_isnumber(L, 2)) {
chunksize = lua_tointeger(L, 2);
chunksize = v3s16(lua_tointeger(L, 2));
} else if (lua_istable(L, 2)) {
chunksize = check_v3s16(L, 2);
} else {
std::string chunksize_str;
settingsmgr->getMapSetting("chunksize", &chunksize_str);
chunksize = stoi(chunksize_str, 1, 10);
chunksize = params->chunksize;
}
std::pair<s16, s16> 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);
auto edges = get_mapgen_edges(mapgen_limit, chunksize);
push_v3s16(L, edges.first);
push_v3s16(L, edges.second);
return 2;
}
@@ -884,12 +883,9 @@ int ModApiMapgen::l_get_mapgen_chunksize(lua_State *L)
// 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.
std::unique_ptr<MapgenParams> params(settingsmgr->makeMapgenParamsCopy());
std::string chunksize_str;
settingsmgr->getMapSetting("chunksize", &chunksize_str);
s16 chunksize = stoi(chunksize_str, 1, 10);
push_v3s16(L, {chunksize, chunksize, chunksize});
push_v3s16(L, params->chunksize);
return 1;
}