summaryrefslogtreecommitdiff
path: root/src/scriptapi.cpp
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2011-11-26 15:19:03 +0200
committerPerttu Ahola <celeron55@gmail.com>2011-11-29 19:13:54 +0200
commit769cc9879f306055e683bf720b0877a364e82ba5 (patch)
tree30ff59e05cf71e445825e1f95c7d544f63d4ff73 /src/scriptapi.cpp
parent0dbb31afeb74c199bb66eaf95d3e23f2fa843386 (diff)
downloadminetest-769cc9879f306055e683bf720b0877a364e82ba5.tar.gz
minetest-769cc9879f306055e683bf720b0877a364e82ba5.tar.bz2
minetest-769cc9879f306055e683bf720b0877a364e82ba5.zip
Add on_generated hook
Diffstat (limited to 'src/scriptapi.cpp')
-rw-r--r--src/scriptapi.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/scriptapi.cpp b/src/scriptapi.cpp
index badf38181..976b482c2 100644
--- a/src/scriptapi.cpp
+++ b/src/scriptapi.cpp
@@ -843,6 +843,13 @@ static int l_register_on_punchnode(lua_State *L)
return register_lua_callback(L, "registered_on_punchnodes");
}
+// register_on_generated(function)
+static int l_register_on_generated(lua_State *L)
+{
+ infostream<<"register_on_generated"<<std::endl;
+ return register_lua_callback(L, "registered_on_generateds");
+}
+
// register_on_newplayer(function)
static int l_register_on_newplayer(lua_State *L)
{
@@ -893,6 +900,7 @@ static const struct luaL_Reg minetest_f [] = {
{"register_on_placenode", l_register_on_placenode},
{"register_on_dignode", l_register_on_dignode},
{"register_on_punchnode", l_register_on_punchnode},
+ {"register_on_generated", l_register_on_generated},
{"register_on_newplayer", l_register_on_newplayer},
{"register_on_respawnplayer", l_register_on_respawnplayer},
{"setting_get", l_setting_get},
@@ -1391,6 +1399,8 @@ void scriptapi_export(lua_State *L, Server *server)
lua_newtable(L);
lua_setfield(L, -2, "registered_on_punchnodes");
lua_newtable(L);
+ lua_setfield(L, -2, "registered_on_generateds");
+ lua_newtable(L);
lua_setfield(L, -2, "registered_on_newplayers");
lua_newtable(L);
lua_setfield(L, -2, "registered_on_respawnplayers");
@@ -1694,6 +1704,32 @@ void scriptapi_environment_on_punchnode(lua_State *L, v3s16 p, MapNode node,
}
}
+void scriptapi_environment_on_generated(lua_State *L, v3s16 minp, v3s16 maxp)
+{
+ realitycheck(L);
+ assert(lua_checkstack(L, 20));
+ infostream<<"scriptapi_environment_on_generated"<<std::endl;
+ StackUnroller stack_unroller(L);
+
+ // Get minetest.registered_on_generateds
+ lua_getglobal(L, "minetest");
+ lua_getfield(L, -1, "registered_on_generateds");
+ luaL_checktype(L, -1, LUA_TTABLE);
+ int table = lua_gettop(L);
+ // Foreach
+ lua_pushnil(L);
+ while(lua_next(L, table) != 0){
+ // key at index -2 and value at index -1
+ luaL_checktype(L, -1, LUA_TFUNCTION);
+ // Call function
+ pushpos(L, minp);
+ pushpos(L, maxp);
+ if(lua_pcall(L, 2, 0, 0))
+ script_error(L, "error: %s\n", lua_tostring(L, -1));
+ // value removed, keep key for next iteration
+ }
+}
+
/*
luaentity
*/