Respect not_in_creative_inventory in group search

This commit is contained in:
Zefram 2014-05-01 20:44:16 +01:00 committed by RealBadAngel
parent 12ef7f6393
commit 79320c109c
2 changed files with 18 additions and 27 deletions

View File

@ -96,46 +96,37 @@ end
--apply filter to the inventory list (create filtered copy of full one) --apply filter to the inventory list (create filtered copy of full one)
function unified_inventory.apply_filter(player, filter) function unified_inventory.apply_filter(player, filter)
local player_name = player:get_player_name() local player_name = player:get_player_name()
local size = 0
local lfilter = string.lower(filter) local lfilter = string.lower(filter)
if not pcall(function() ("technic:test"):find(lfilter) end) then if not pcall(function() ("technic:test"):find(lfilter) end) then
-- Filter is invalid -- Filter is invalid
lfilter = "" lfilter = ""
end end
unified_inventory.filtered_items_list[player_name]={} local ffilter
if lfilter:sub(1, 6) == "group:" then if lfilter:sub(1, 6) == "group:" then
local groups = lfilter:sub(7):split(",") local groups = lfilter:sub(7):split(",")
for name, def in pairs(minetest.registered_items) do ffilter = function(name, def)
if def.groups then
local all = true
for _, group in ipairs(groups) do for _, group in ipairs(groups) do
if not (def.groups[group] and (def.groups[group] > 0)) then if not ((def.groups[group] or 0) > 0) then
all = false return false
break
end
end
if all then
table.insert(unified_inventory.filtered_items_list[player_name], name)
size = size + 1
end end
end end
return true
end end
else else
for name, def in pairs(minetest.registered_items) do ffilter = function(name, def)
if (not def.groups.not_in_creative_inventory or
def.groups.not_in_creative_inventory == 0)
and def.description and def.description ~= "" then
local lname = string.lower(name) local lname = string.lower(name)
local ldesc = string.lower(def.description) local ldesc = string.lower(def.description)
if string.find(lname, lfilter) or string.find(ldesc, lfilter) then return string.find(lname, lfilter) or string.find(ldesc, lfilter)
end
end
unified_inventory.filtered_items_list[player_name]={}
for name, def in pairs(minetest.registered_items) do
if (def.groups.not_in_creative_inventory or 0) == 0 and (def.description or "") ~= "" and ffilter(name, def) then
table.insert(unified_inventory.filtered_items_list[player_name], name) table.insert(unified_inventory.filtered_items_list[player_name], name)
size = size + 1
end
end
end end
end end
table.sort(unified_inventory.filtered_items_list[player_name]) table.sort(unified_inventory.filtered_items_list[player_name])
unified_inventory.filtered_items_list_size[player_name] = size unified_inventory.filtered_items_list_size[player_name] = #unified_inventory.filtered_items_list[player_name]
unified_inventory.current_index[player_name] = 1 unified_inventory.current_index[player_name] = 1
unified_inventory.activefilter[player_name] = filter unified_inventory.activefilter[player_name] = filter
unified_inventory.set_inventory_formspec(player, unified_inventory.set_inventory_formspec(player,

View File

@ -162,7 +162,7 @@ local function compute_group_representative_item(groupspec)
local groupname = string.sub(groupspec, 7) local groupname = string.sub(groupspec, 7)
local candidate_items = {} local candidate_items = {}
for itemname, itemdef in pairs(minetest.registered_items) do for itemname, itemdef in pairs(minetest.registered_items) do
if itemdef.groups[groupname] and itemdef.groups[groupname] ~= 0 then if (itemdef.groups.not_in_creative_inventory or 0) == 0 and (itemdef.groups[groupname] or 0) ~= 0 then
table.insert(candidate_items, itemname) table.insert(candidate_items, itemname)
end end
end end