Categories: remove unknown items after start

This avoids runtime errors caused by removed items
or such that were not registered at all but listed
by default in a pre-defined category.
This commit is contained in:
SmallJoker 2024-03-17 16:54:21 +01:00
parent 921a6d76ee
commit b5de18b196
2 changed files with 29 additions and 0 deletions

21
api.lua
View File

@ -184,6 +184,27 @@ minetest.after(0.01, function()
ui.crafts_for.recipe[outputitemname] = new_recipe_list ui.crafts_for.recipe[outputitemname] = new_recipe_list
end end
-- Remove unknown items from all categories
local total_removed = 0
for cat_name, cat_def in pairs(ui.registered_category_items) do
for itemname, exists in pairs(cat_def) do
if exists and not minetest.registered_items[itemname] then
total_removed = total_removed + 1
--[[
-- For analysis
minetest.log("warning", "[unified_inventory] Removed item '"
.. itemname .. "' from category '" .. cat_name
.. "'. Reason: item not registered")
]]
cat_def[itemname] = nil
end
end
end
if total_removed > 0 then
minetest.log("info", "[unified_inventory] Removed " .. total_removed ..
" unknown items from the categories.")
end
for _, callback in ipairs(ui.initialized_callbacks) do for _, callback in ipairs(ui.initialized_callbacks) do
callback() callback()
end end

View File

@ -368,6 +368,10 @@ function ui.apply_filter(player, filter, search_dir)
local groups = lfilter:sub(7):split(",") local groups = lfilter:sub(7):split(",")
ffilter = function(name) ffilter = function(name)
local def = registered_items[name] local def = registered_items[name]
if not def then
return false
end
for _, group in ipairs(groups) do for _, group in ipairs(groups) do
if not def.groups[group] if not def.groups[group]
or def.groups[group] <= 0 then or def.groups[group] <= 0 then
@ -383,6 +387,10 @@ function ui.apply_filter(player, filter, search_dir)
ffilter = function(name) ffilter = function(name)
local def = registered_items[name] local def = registered_items[name]
if not def then
return false
end
local lname = string.lower(name) local lname = string.lower(name)
local ldesc = string.lower(def.description) local ldesc = string.lower(def.description)
local llocaldesc = minetest.get_translated_string local llocaldesc = minetest.get_translated_string