mirror of
https://github.com/luanti-org/luanti.git
synced 2025-09-15 18:57:08 +00:00
Content ID caching in Lua (#12444)
* Cache content IDs in Lua Co-authored-by: sfan5 <sfan5@live.de>
This commit is contained in:
parent
006d974c58
commit
310b12b5ed
6 changed files with 166 additions and 2 deletions
|
@ -13,9 +13,12 @@ end
|
|||
|
||||
-- Import a bunch of individual files from builtin/game/
|
||||
local gamepath = core.get_builtin_path() .. "game" .. DIR_DELIM
|
||||
local commonpath = core.get_builtin_path() .. "common" .. DIR_DELIM
|
||||
|
||||
local builtin_shared = {}
|
||||
|
||||
dofile(gamepath .. "constants.lua")
|
||||
dofile(gamepath .. "item_s.lua")
|
||||
assert(loadfile(commonpath .. "item_s.lua"))(builtin_shared)
|
||||
dofile(gamepath .. "misc_s.lua")
|
||||
dofile(gamepath .. "features.lua")
|
||||
dofile(gamepath .. "voxelarea.lua")
|
||||
|
@ -57,3 +60,5 @@ setmetatable(core.registered_items, alias_metatable)
|
|||
setmetatable(core.registered_nodes, alias_metatable)
|
||||
setmetatable(core.registered_craftitems, alias_metatable)
|
||||
setmetatable(core.registered_tools, alias_metatable)
|
||||
|
||||
builtin_shared.cache_content_ids()
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
-- Server or writable access to IGameDef on the engine side.
|
||||
-- (The '_s' stands for standalone.)
|
||||
|
||||
local builtin_shared = ...
|
||||
|
||||
--
|
||||
-- Item definition helpers
|
||||
--
|
||||
|
@ -177,3 +179,47 @@ function core.strip_param2_color(param2, paramtype2)
|
|||
-- paramtype2 == "color" requires no modification.
|
||||
return param2
|
||||
end
|
||||
|
||||
-- Content ID caching
|
||||
|
||||
local old_get_content_id = core.get_content_id
|
||||
local old_get_name_from_content_id = core.get_name_from_content_id
|
||||
|
||||
local name2content = setmetatable({}, {
|
||||
__index = function(self, name)
|
||||
return old_get_content_id(name)
|
||||
end,
|
||||
})
|
||||
|
||||
local content2name = setmetatable({}, {
|
||||
__index = function(self, id)
|
||||
return old_get_name_from_content_id(id)
|
||||
end,
|
||||
})
|
||||
|
||||
function core.get_content_id(name)
|
||||
return name2content[name]
|
||||
end
|
||||
|
||||
function core.get_name_from_content_id(id)
|
||||
return content2name[id]
|
||||
end
|
||||
|
||||
-- Cache content IDs after they have stopped changing.
|
||||
function builtin_shared.cache_content_ids()
|
||||
for name in pairs(core.registered_nodes) do
|
||||
local id = old_get_content_id(name)
|
||||
name2content[name] = id
|
||||
content2name[id] = name
|
||||
end
|
||||
-- unknown is not in the registered node list.
|
||||
local unknown_name = old_get_name_from_content_id(core.CONTENT_UNKNOWN)
|
||||
name2content[unknown_name] = core.CONTENT_UNKNOWN
|
||||
content2name[core.CONTENT_UNKNOWN] = unknown_name
|
||||
|
||||
for name in pairs(core.registered_aliases) do
|
||||
if core.registered_nodes[name] then
|
||||
name2content[name] = old_get_content_id(name)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -8,7 +8,7 @@ local gamepath = scriptpath .. "game".. DIR_DELIM
|
|||
local builtin_shared = {}
|
||||
|
||||
dofile(gamepath .. "constants.lua")
|
||||
dofile(gamepath .. "item_s.lua")
|
||||
assert(loadfile(commonpath .. "item_s.lua"))(builtin_shared)
|
||||
assert(loadfile(gamepath .. "item.lua"))(builtin_shared)
|
||||
dofile(gamepath .. "register.lua")
|
||||
|
||||
|
@ -37,4 +37,6 @@ dofile(gamepath .. "statbars.lua")
|
|||
dofile(gamepath .. "knockback.lua")
|
||||
dofile(gamepath .. "async.lua")
|
||||
|
||||
core.after(0, builtin_shared.cache_content_ids)
|
||||
|
||||
profiler = nil
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue