aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDuane Robertson <duane@duanerobertson.com>2015-09-29 12:38:08 -0500
committerest31 <MTest31@outlook.com>2015-10-02 22:49:31 +0200
commita5bdfb6b3cfddaac1e961bd8c8780c74ccde3567 (patch)
tree3844d522cc817395be35dfac4d9d61f562d0854e
parent21944a0d3c5284f6bf1e61286ddbcc2ab2f1e2aa (diff)
downloadminetest-a5bdfb6b3cfddaac1e961bd8c8780c74ccde3567.tar.gz
minetest-a5bdfb6b3cfddaac1e961bd8c8780c74ccde3567.tar.bz2
minetest-a5bdfb6b3cfddaac1e961bd8c8780c74ccde3567.zip
Add get_biome_id(biome_name) callback
It returns the index used in mg->biomemap for a given biome name. The biomemap is useless without this unless you re-register all existing biomes, which could cause problems for anyone else trying to use biomemap. With this, you can quickly create a lookup table of ids and names.
-rw-r--r--doc/lua_api.txt3
-rw-r--r--src/script/lua_api/l_mapgen.cpp25
-rw-r--r--src/script/lua_api/l_mapgen.h4
3 files changed, 32 insertions, 0 deletions
diff --git a/doc/lua_api.txt b/doc/lua_api.txt
index 5b6e55ef3..7b0f1e2aa 100644
--- a/doc/lua_api.txt
+++ b/doc/lua_api.txt
@@ -1999,6 +1999,9 @@ and `minetest.auth_reload` call the authetification handler.
* `get_gen_notify()`: returns a flagstring and a table with the deco_ids
* `minetest.get_mapgen_object(objectname)`
* Return requested mapgen object if available (see "Mapgen objects")
+* `minetest.get_biome_id(biome_name)`
+ * Returns the biome id, as used in the biomemap Mapgen object, for a
+ given biome_name string.
* `minetest.get_mapgen_params()` Returns mapgen parameters, a table containing
`mgname`, `seed`, `chunksize`, `water_level`, and `flags`.
* `minetest.set_mapgen_params(MapgenParams)`
diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp
index dcb611f47..784ceabcc 100644
--- a/src/script/lua_api/l_mapgen.cpp
+++ b/src/script/lua_api/l_mapgen.cpp
@@ -450,6 +450,30 @@ size_t get_biome_list(lua_State *L, int index,
///////////////////////////////////////////////////////////////////////////////
+// get_biome_id(biomename)
+// returns the biome id used in biomemap
+int ModApiMapgen::l_get_biome_id(lua_State *L)
+{
+ const char *biome_str = lua_tostring(L, 1);
+ if (!biome_str)
+ return 0;
+
+ BiomeManager *bmgr = getServer(L)->getEmergeManager()->biomemgr;
+
+ if (!bmgr)
+ return 0;
+
+ Biome *biome = (Biome *) bmgr->getByName(biome_str);
+
+ if (!biome || biome->index == OBJDEF_INVALID_INDEX)
+ return 0;
+
+ lua_pushinteger(L, biome->index);
+
+ return 1;
+}
+
+
// get_mapgen_object(objectname)
// returns the requested object used during map generation
int ModApiMapgen::l_get_mapgen_object(lua_State *L)
@@ -1257,6 +1281,7 @@ int ModApiMapgen::l_serialize_schematic(lua_State *L)
void ModApiMapgen::Initialize(lua_State *L, int top)
{
+ API_FCT(get_biome_id);
API_FCT(get_mapgen_object);
API_FCT(get_mapgen_params);
diff --git a/src/script/lua_api/l_mapgen.h b/src/script/lua_api/l_mapgen.h
index 7440d1285..4768f934d 100644
--- a/src/script/lua_api/l_mapgen.h
+++ b/src/script/lua_api/l_mapgen.h
@@ -24,6 +24,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
class ModApiMapgen : public ModApiBase {
private:
+ // get_biome_id(biomename)
+ // returns the biome id used in biomemap
+ static int l_get_biome_id(lua_State *L);
+
// get_mapgen_object(objectname)
// returns the requested object used during map generation
static int l_get_mapgen_object(lua_State *L);