diff options
author | Perttu Ahola <celeron55@gmail.com> | 2011-11-26 15:19:03 +0200 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2011-11-29 19:13:54 +0200 |
commit | 769cc9879f306055e683bf720b0877a364e82ba5 (patch) | |
tree | 30ff59e05cf71e445825e1f95c7d544f63d4ff73 /src/scriptapi.cpp | |
parent | 0dbb31afeb74c199bb66eaf95d3e23f2fa843386 (diff) | |
download | hax-minetest-server-769cc9879f306055e683bf720b0877a364e82ba5.tar.gz hax-minetest-server-769cc9879f306055e683bf720b0877a364e82ba5.zip |
Add on_generated hook
Diffstat (limited to 'src/scriptapi.cpp')
-rw-r--r-- | src/scriptapi.cpp | 36 |
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 */ |