Add get_biome_id(biome_name) callback
authorDuane Robertson <duane@duanerobertson.com>
Tue, 29 Sep 2015 17:38:08 +0000 (12:38 -0500)
committerest31 <MTest31@outlook.com>
Fri, 2 Oct 2015 20:49:31 +0000 (22:49 +0200)
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.

doc/lua_api.txt
src/script/lua_api/l_mapgen.cpp
src/script/lua_api/l_mapgen.h

index 5b6e55ef31a12e137738577ccf53480154011346..7b0f1e2aa90de17f7694d7535148c6b305faa68b 100644 (file)
@@ -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)`
index dcb611f4758d482cbeb9664ba9f6a3b314c7f2e7..784ceabcc493a152e060fe625f710aa96f2a819a 100644 (file)
@@ -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);
index 7440d12856ac35bf72fc2f5e1d8838fd164d85eb..4768f934d7f1050846f42d021c619591a4500f02 100644 (file)
@@ -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);