local player_inventory = {}
+local inventory_cache = {}
+
+local function init_creative_cache(items)
+ inventory_cache[items] = {}
+ local i_cache = inventory_cache[items]
+
+ for name, def in pairs(items) do
+ if def.groups.not_in_creative_inventory ~= 1 and
+ def.description and def.description ~= "" then
+ i_cache[name] = def
+ end
+ end
+ table.sort(i_cache)
+ return i_cache
+end
function creative.init_creative_inventory(player)
local player_name = player:get_player_name()
creative.init_creative_inventory(minetest.get_player_by_name(player_name))
local player_inv = minetest.get_inventory({type = "detached", name = "creative_" .. player_name})
- for name, def in pairs(tab_content) do
- if not (def.groups.not_in_creative_inventory == 1) and
- def.description and def.description ~= "" and
- (def.name:find(inv.filter, 1, true) or
- def.description:lower():find(inv.filter, 1, true)) then
+ local items = inventory_cache[tab_content] or init_creative_cache(tab_content)
+
+ for name, def in pairs(items) do
+ if def.name:find(inv.filter, 1, true) or
+ def.description:lower():find(inv.filter, 1, true) then
creative_list[#creative_list+1] = name
end
end
})
end
-minetest.register_on_joinplayer(function(player)
- creative.update_creative_inventory(player:get_player_name(), minetest.registered_items)
-end)
-
creative.register_tab("all", "All", minetest.registered_items)
creative.register_tab("nodes", "Nodes", minetest.registered_nodes)
creative.register_tab("tools", "Tools", minetest.registered_tools)