summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkaeza <kaeza@users.sf.net>2014-01-19 14:34:44 -0200
committerkaeza <kaeza@users.sf.net>2014-01-19 14:35:44 -0200
commitd560bcd6f0ba8b885127c5d5d2315fb72c2d1f47 (patch)
tree0a2d4fb60babf49d3a7c665c63ab87667a11e0a3
parentb69fc35c888c569bf7e87e24466740ca5f749918 (diff)
Allow searching for groups.
Also make "group buttons" apply the filter to that group.
-rw-r--r--callbacks.lua5
-rw-r--r--internal.lua38
-rw-r--r--register.lua3
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["