builtin: Unify register wrapper functions and wrap clear_registered_* functions too

This commit is contained in:
kwolekr 2015-01-13 12:26:13 -05:00
parent 0fd1ee0380
commit a4a6cc8eb1
2 changed files with 38 additions and 18 deletions

View File

@ -368,13 +368,6 @@ end
-- Callback registration -- Callback registration
-- --
local register_biome_raw = core.register_biome
core.registered_biomes = {}
function core.register_biome(biome)
core.registered_biomes[biome.name] = biome
register_biome_raw(biome)
end
local function make_registration() local function make_registration()
local t = {} local t = {}
local registerfunc = function(func) table.insert(t, func) end local registerfunc = function(func) table.insert(t, func) end
@ -387,20 +380,34 @@ local function make_registration_reverse()
return t, registerfunc return t, registerfunc
end end
local function make_registration_wrap(name) local function make_registration_wrap(reg_fn_name, clear_fn_name)
local list = {} local list = {}
local full_name = "register_"..name
local orig_func = core[full_name] local orig_reg_fn = core[reg_fn_name]
core[full_name] = function(def) core[reg_fn_name] = function(def)
table.insert(list, def) local retval = orig_reg_fn(def)
orig_func(def) if retval ~= nil then
if def.name ~= nil then
list[def.name] = def
else
list[retval] = def
end
end
return retval
end end
local orig_clear_fn = core[clear_fn_name]
core[clear_fn_name] = function()
list = {}
return orig_clear_fn()
end
return list return list
end end
core.registered_biomes = make_registration_wrap("register_biome", "clear_registered_biomes")
core.registered_ores = make_registration_wrap("ore") core.registered_ores = make_registration_wrap("register_ore", "clear_registered_ores")
core.registered_decorations = make_registration_wrap("decoration") core.registered_decorations = make_registration_wrap("register_decoration", "clear_registered_decorations")
core.registered_on_chat_messages, core.register_on_chat_message = make_registration() core.registered_on_chat_messages, core.register_on_chat_message = make_registration()
core.registered_globalsteps, core.register_globalstep = make_registration() core.registered_globalsteps, core.register_globalstep = make_registration()

View File

@ -417,10 +417,20 @@ the global `minetest.registered_*` tables.
* added to `minetest.registered_items[name]` * added to `minetest.registered_items[name]`
* `minetest.register_ore(ore definition)` * `minetest.register_ore(ore definition)`
* added to `minetest.registered_ores` * returns an integer uniquely identifying the registered ore
* added to `minetest.registered_ores` with the key of `ore.name`
* if `ore.name` is nil, the key is the returned ID
* `minetest.register_decoration(decoration definition)` * `minetest.register_decoration(decoration definition)`
* added to `minetest.registered_decorations` * returns an integer uniquely identifying the registered decoration
* added to `minetest.registered_decorations` with the key of `decoration.name`
* if `decoration.name` is nil, the key is the returned ID
* `minetest.clear_registered_ores()`
* clears all ores currently registered
* `minetest.clear_registered_decorations()`
* clears all decorations currently registered
Note that in some cases you will stumble upon things that are not contained Note that in some cases you will stumble upon things that are not contained
in these tables (e.g. when a mod has been removed). Always check for in these tables (e.g. when a mod has been removed). Always check for
@ -1679,6 +1689,9 @@ Call these functions only at load time!
* Note: Item must already be defined, (opt)depend on the mod defining it. * Note: Item must already be defined, (opt)depend on the mod defining it.
* Example: `minetest.override_item("default:mese", {light_source=LIGHT_MAX})` * Example: `minetest.override_item("default:mese", {light_source=LIGHT_MAX})`
* `minetest.clear_registered_ores()`
* `minetest.clear_registered_decorations()`
### Global callback registration functions ### Global callback registration functions
Call these functions only at load time! Call these functions only at load time!