mirror of
https://github.com/minetest/minetest.git
synced 2024-11-27 18:13:46 +01:00
Add on_generated hook
This commit is contained in:
parent
0dbb31afeb
commit
769cc9879f
@ -15,6 +15,7 @@
|
|||||||
-- minetest.register_on_placenode(func(pos, newnode, placer))
|
-- minetest.register_on_placenode(func(pos, newnode, placer))
|
||||||
-- minetest.register_on_dignode(func(pos, oldnode, digger))
|
-- minetest.register_on_dignode(func(pos, oldnode, digger))
|
||||||
-- minetest.register_on_punchnode(func(pos, node, puncher))
|
-- minetest.register_on_punchnode(func(pos, node, puncher))
|
||||||
|
-- minetest.register_on_generated(func(minp, maxp))
|
||||||
-- minetest.register_on_newplayer(func(ObjectRef))
|
-- minetest.register_on_newplayer(func(ObjectRef))
|
||||||
-- minetest.register_on_respawnplayer(func(ObjectRef))
|
-- minetest.register_on_respawnplayer(func(ObjectRef))
|
||||||
-- ^ return true in func to disable regular player placement
|
-- ^ return true in func to disable regular player placement
|
||||||
@ -1329,6 +1330,12 @@ minetest.register_on_respawnplayer(function(player)
|
|||||||
-- return true
|
-- return true
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
minetest.register_on_generated(function(minp, maxp)
|
||||||
|
--print("on_generated: minp="..dump(minp).." maxp="..dump(maxp))
|
||||||
|
--cp = {x=(minp.x+maxp.x)/2, y=(minp.y+maxp.y)/2, z=(minp.z+maxp.z)/2}
|
||||||
|
--minetest.env:add_node(cp, {name="sand"})
|
||||||
|
end)
|
||||||
|
|
||||||
-- Example setting get
|
-- Example setting get
|
||||||
print("setting max_users = " .. dump(minetest.setting_get("max_users")))
|
print("setting max_users = " .. dump(minetest.setting_get("max_users")))
|
||||||
print("setting asdf = " .. dump(minetest.setting_get("asdf")))
|
print("setting asdf = " .. dump(minetest.setting_get("asdf")))
|
||||||
|
@ -60,7 +60,7 @@ namespace mapgen
|
|||||||
u64 seed;
|
u64 seed;
|
||||||
v3s16 blockpos;
|
v3s16 blockpos;
|
||||||
UniqueQueue<v3s16> transforming_liquid;
|
UniqueQueue<v3s16> transforming_liquid;
|
||||||
INodeDefManager *nodedef; // Destructor deletes
|
INodeDefManager *nodedef;
|
||||||
|
|
||||||
BlockMakeData();
|
BlockMakeData();
|
||||||
~BlockMakeData();
|
~BlockMakeData();
|
||||||
|
@ -843,6 +843,13 @@ static int l_register_on_punchnode(lua_State *L)
|
|||||||
return register_lua_callback(L, "registered_on_punchnodes");
|
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)
|
// register_on_newplayer(function)
|
||||||
static int l_register_on_newplayer(lua_State *L)
|
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_placenode", l_register_on_placenode},
|
||||||
{"register_on_dignode", l_register_on_dignode},
|
{"register_on_dignode", l_register_on_dignode},
|
||||||
{"register_on_punchnode", l_register_on_punchnode},
|
{"register_on_punchnode", l_register_on_punchnode},
|
||||||
|
{"register_on_generated", l_register_on_generated},
|
||||||
{"register_on_newplayer", l_register_on_newplayer},
|
{"register_on_newplayer", l_register_on_newplayer},
|
||||||
{"register_on_respawnplayer", l_register_on_respawnplayer},
|
{"register_on_respawnplayer", l_register_on_respawnplayer},
|
||||||
{"setting_get", l_setting_get},
|
{"setting_get", l_setting_get},
|
||||||
@ -1391,6 +1399,8 @@ void scriptapi_export(lua_State *L, Server *server)
|
|||||||
lua_newtable(L);
|
lua_newtable(L);
|
||||||
lua_setfield(L, -2, "registered_on_punchnodes");
|
lua_setfield(L, -2, "registered_on_punchnodes");
|
||||||
lua_newtable(L);
|
lua_newtable(L);
|
||||||
|
lua_setfield(L, -2, "registered_on_generateds");
|
||||||
|
lua_newtable(L);
|
||||||
lua_setfield(L, -2, "registered_on_newplayers");
|
lua_setfield(L, -2, "registered_on_newplayers");
|
||||||
lua_newtable(L);
|
lua_newtable(L);
|
||||||
lua_setfield(L, -2, "registered_on_respawnplayers");
|
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
|
luaentity
|
||||||
*/
|
*/
|
||||||
|
@ -49,6 +49,8 @@ void scriptapi_environment_on_dignode(lua_State *L, v3s16 p, MapNode oldnode,
|
|||||||
// When punching node
|
// When punching node
|
||||||
void scriptapi_environment_on_punchnode(lua_State *L, v3s16 p, MapNode node,
|
void scriptapi_environment_on_punchnode(lua_State *L, v3s16 p, MapNode node,
|
||||||
ServerActiveObject *puncher);
|
ServerActiveObject *puncher);
|
||||||
|
// After generating a piece of map
|
||||||
|
void scriptapi_environment_on_generated(lua_State *L, v3s16 minp, v3s16 maxp);
|
||||||
|
|
||||||
/* misc */
|
/* misc */
|
||||||
void scriptapi_on_newplayer(lua_State *L, ServerActiveObject *player);
|
void scriptapi_on_newplayer(lua_State *L, ServerActiveObject *player);
|
||||||
|
@ -234,6 +234,11 @@ void * EmergeThread::Thread()
|
|||||||
if(enable_mapgen_debug_info)
|
if(enable_mapgen_debug_info)
|
||||||
infostream<<"EmergeThread: generating"<<std::endl;
|
infostream<<"EmergeThread: generating"<<std::endl;
|
||||||
block = map.generateBlock(p, modified_blocks);
|
block = map.generateBlock(p, modified_blocks);
|
||||||
|
|
||||||
|
v3s16 minp = block->getPos()*MAP_BLOCKSIZE;
|
||||||
|
v3s16 maxp = minp + v3s16(1,1,1)*(MAP_BLOCKSIZE-1);
|
||||||
|
scriptapi_environment_on_generated(m_server->m_lua,
|
||||||
|
minp, maxp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user