diff options
| -rw-r--r-- | callbacks.lua | 5 | ||||
| -rw-r--r-- | internal.lua | 38 | ||||
| -rw-r--r-- | 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["  | 
