mirror of
https://github.com/minetest/minetest.git
synced 2024-11-30 11:33:44 +01:00
Implement callback registration in Lua instead of C
This commit is contained in:
parent
842eb5da28
commit
30648d1cc9
@ -151,11 +151,24 @@ minetest.register_node("ignore", {
|
|||||||
-- Chat message processing
|
-- Chat message processing
|
||||||
--
|
--
|
||||||
|
|
||||||
minetest.registered_on_chat_messages = {}
|
function make_registration()
|
||||||
|
local t = {}
|
||||||
|
local registerfunc = function(func) table.insert(t, func) end
|
||||||
|
return t, registerfunc
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.registered_on_chat_messages, minetest.register_on_chat_message = make_registration()
|
||||||
|
minetest.registered_globalsteps, minetest.register_globalstep = make_registration()
|
||||||
|
minetest.registered_on_placenodes, minetest.register_on_placenode = make_registration()
|
||||||
|
minetest.registered_on_dignodes, minetest.register_on_dignode = make_registration()
|
||||||
|
minetest.registered_on_punchnodes, minetest.register_on_punchnode = make_registration()
|
||||||
|
minetest.registered_on_generateds, minetest.register_on_generated = make_registration()
|
||||||
|
minetest.registered_on_newplayers, minetest.register_on_newplayer = make_registration()
|
||||||
|
minetest.registered_on_respawnplayers, minetest.register_on_respawnplayer = make_registration()
|
||||||
|
|
||||||
minetest.on_chat_message = function(name, message)
|
minetest.on_chat_message = function(name, message)
|
||||||
for i,func in ipairs(minetest.registered_on_chat_messages) do
|
for i,func in ipairs(minetest.registered_on_chat_messages) do
|
||||||
ate = func(name, message)
|
local ate = func(name, message)
|
||||||
if ate then
|
if ate then
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
@ -163,8 +176,4 @@ minetest.on_chat_message = function(name, message)
|
|||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_on_chat_message = function(func)
|
|
||||||
table.insert(minetest.registered_on_chat_messages, func)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- END
|
-- END
|
||||||
|
@ -837,79 +837,6 @@ static int l_register_craft(lua_State *L)
|
|||||||
return 0; /* number of results */
|
return 0; /* number of results */
|
||||||
}
|
}
|
||||||
|
|
||||||
static int register_lua_callback(lua_State *L, const char *tablename)
|
|
||||||
{
|
|
||||||
luaL_checktype(L, 1, LUA_TFUNCTION);
|
|
||||||
|
|
||||||
lua_getglobal(L, "table");
|
|
||||||
lua_getfield(L, -1, "insert");
|
|
||||||
int table_insert = lua_gettop(L);
|
|
||||||
// Get minetest.registered_globalsteps
|
|
||||||
lua_getglobal(L, "minetest");
|
|
||||||
lua_getfield(L, -1, tablename);
|
|
||||||
luaL_checktype(L, -1, LUA_TTABLE);
|
|
||||||
int registered = lua_gettop(L);
|
|
||||||
// table.insert(registered_globalsteps, func)
|
|
||||||
lua_pushvalue(L, table_insert);
|
|
||||||
lua_pushvalue(L, registered);
|
|
||||||
lua_pushvalue(L, 1); // push function from argument 1
|
|
||||||
// Call insert
|
|
||||||
if(lua_pcall(L, 2, 0, 0))
|
|
||||||
script_error(L, "error: %s\n", lua_tostring(L, -1));
|
|
||||||
|
|
||||||
return 0; /* number of results */
|
|
||||||
}
|
|
||||||
|
|
||||||
// Register a global step function
|
|
||||||
// register_globalstep(function)
|
|
||||||
static int l_register_globalstep(lua_State *L)
|
|
||||||
{
|
|
||||||
infostream<<"register_globalstep"<<std::endl;
|
|
||||||
return register_lua_callback(L, "registered_globalsteps");
|
|
||||||
}
|
|
||||||
|
|
||||||
// register_on_placenode(function)
|
|
||||||
static int l_register_on_placenode(lua_State *L)
|
|
||||||
{
|
|
||||||
infostream<<"register_on_placenode"<<std::endl;
|
|
||||||
return register_lua_callback(L, "registered_on_placenodes");
|
|
||||||
}
|
|
||||||
|
|
||||||
// register_on_dignode(function)
|
|
||||||
static int l_register_on_dignode(lua_State *L)
|
|
||||||
{
|
|
||||||
infostream<<"register_on_dignode"<<std::endl;
|
|
||||||
return register_lua_callback(L, "registered_on_dignodes");
|
|
||||||
}
|
|
||||||
|
|
||||||
// register_on_punchnode(function)
|
|
||||||
static int l_register_on_punchnode(lua_State *L)
|
|
||||||
{
|
|
||||||
infostream<<"register_on_punchnode"<<std::endl;
|
|
||||||
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)
|
|
||||||
{
|
|
||||||
infostream<<"register_on_newplayer"<<std::endl;
|
|
||||||
return register_lua_callback(L, "registered_on_newplayers");
|
|
||||||
}
|
|
||||||
|
|
||||||
// register_on_respawnplayer(function)
|
|
||||||
static int l_register_on_respawnplayer(lua_State *L)
|
|
||||||
{
|
|
||||||
infostream<<"register_on_respawnplayer"<<std::endl;
|
|
||||||
return register_lua_callback(L, "registered_on_respawnplayers");
|
|
||||||
}
|
|
||||||
|
|
||||||
// setting_get(name)
|
// setting_get(name)
|
||||||
static int l_setting_get(lua_State *L)
|
static int l_setting_get(lua_State *L)
|
||||||
{
|
{
|
||||||
@ -967,13 +894,6 @@ static const struct luaL_Reg minetest_f [] = {
|
|||||||
{"register_tool", l_register_tool},
|
{"register_tool", l_register_tool},
|
||||||
{"register_node", l_register_node},
|
{"register_node", l_register_node},
|
||||||
{"register_craft", l_register_craft},
|
{"register_craft", l_register_craft},
|
||||||
{"register_globalstep", l_register_globalstep},
|
|
||||||
{"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},
|
{"setting_get", l_setting_get},
|
||||||
{"setting_getbool", l_setting_getbool},
|
{"setting_getbool", l_setting_getbool},
|
||||||
{"chat_send_all", l_chat_send_all},
|
{"chat_send_all", l_chat_send_all},
|
||||||
|
Loading…
Reference in New Issue
Block a user