From d560bcd6f0ba8b885127c5d5d2315fb72c2d1f47 Mon Sep 17 00:00:00 2001 From: kaeza Date: Sun, 19 Jan 2014 14:34:44 -0200 Subject: [PATCH] Allow searching for groups. Also make "group buttons" apply the filter to that group. --- callbacks.lua | 5 +++++ internal.lua | 38 ++++++++++++++++++++++++++++---------- register.lua | 3 ++- 3 files changed, 35 insertions(+), 11 deletions(-) diff --git a/callbacks.lua b/callbacks.lua index fe76543..38ae6d3 100644 --- a/callbacks.lua +++ b/callbacks.lua @@ -118,6 +118,11 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) if string.sub(name, 1, 12) == "item_button_" then clicked_item = string.sub(name, 13) break + elseif string.sub(name, 1, 11) == "item_group_" then + minetest.sound_play("click", + {to_player=player_name, gain = 0.1}) + unified_inventory.apply_filter(player, "group:"..string.sub(name, 12)) + return end end if clicked_item then diff --git a/internal.lua b/internal.lua index daf8f4b..c88babf 100644 --- a/internal.lua +++ b/internal.lua @@ -97,18 +97,36 @@ function unified_inventory.apply_filter(player, filter) lfilter = "" end unified_inventory.filtered_items_list[player_name]={} - for name, def in pairs(minetest.registered_items) do - 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 ldesc = string.lower(def.description) - if string.find(lname, lfilter) or string.find(ldesc, lfilter) then - table.insert(unified_inventory.filtered_items_list[player_name], name) - size = size + 1 + if lfilter:sub(1, 6) == "group:" then + local groups = lfilter:sub(7):split(",") + for name, def in pairs(minetest.registered_items) do + if def.groups then + local all = true + for _, group in ipairs(groups) do + if not (def.groups[group] and (def.groups[group] > 0)) then + all = false + break + end + end + if all then + table.insert(unified_inventory.filtered_items_list[player_name], name) + size = size + 1 + end + end + end + else + for name, def in pairs(minetest.registered_items) do + 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 ldesc = string.lower(def.description) + if string.find(lname, lfilter) or string.find(ldesc, lfilter) then + table.insert(unified_inventory.filtered_items_list[player_name], name) + size = size + 1 + end end end - end table.sort(unified_inventory.filtered_items_list[player_name]) unified_inventory.filtered_items_list_size[player_name] = size diff --git a/register.lua b/register.lua index f901774..66384bf 100644 --- a/register.lua +++ b/register.lua @@ -213,7 +213,8 @@ unified_inventory.register_page("craftguide", { local group = string.sub(item, 7) formspec = formspec.."image_button[" ..(1.0 + x)..","..(0.0 + y)..";1.1,1.1;" - .."ui_group.png;;" + .."ui_group.png;" + .."item_group_"..minetest.formspec_escape(group)..";" ..minetest.formspec_escape(group).."]" else formspec = formspec.."item_image_button["