From b1ab8d5123d58dd232806c3c7f089a6ada232e63 Mon Sep 17 00:00:00 2001
From: sfan5 <sfan5@live.de>
Date: Fri, 5 Jun 2020 14:29:34 +0200
Subject: [PATCH] Implement searching for translated names in creative
 inventory (#2675)

---
 mods/creative/inventory.lua | 30 ++++++++++++++++++++++++++----
 1 file changed, 26 insertions(+), 4 deletions(-)

diff --git a/mods/creative/inventory.lua b/mods/creative/inventory.lua
index 455da1a3..e22cfc17 100644
--- a/mods/creative/inventory.lua
+++ b/mods/creative/inventory.lua
@@ -61,6 +61,7 @@ function creative.init_creative_inventory(player)
 	return player_inventory[player_name]
 end
 
+local NO_MATCH = 999
 local function match(s, filter)
 	if filter == "" then
 		return 0
@@ -68,7 +69,15 @@ local function match(s, filter)
 	if s:lower():find(filter, 1, true) then
 		return #s - #filter
 	end
-	return nil
+	return NO_MATCH
+end
+
+local function description(def, lang_code)
+	local s = def.description
+	if lang_code then
+		s = minetest.get_translated_string(lang_code, s)
+	end
+	return s:gsub("\n.*", "") -- First line only
 end
 
 function creative.update_creative_inventory(player_name, tab_content)
@@ -84,13 +93,26 @@ function creative.update_creative_inventory(player_name, tab_content)
 
 	local items = inventory_cache[tab_content] or init_creative_cache(tab_content)
 
+	local lang
+	local player_info = minetest.get_player_information(player_name)
+	if player_info and player_info.lang_code ~= "" then
+		lang = player_info.lang_code
+	end
+
 	local creative_list = {}
 	local order = {}
 	for name, def in pairs(items) do
-		local m = match(def.description, inv.filter) or match(def.name, inv.filter)
-		if m then
+		local m = match(description(def), inv.filter)
+		if m > 0 then
+			m = math.min(m, match(description(def, lang), inv.filter))
+		end
+		if m > 0 then
+			m = math.min(m, match(name, inv.filter))
+		end
+
+		if m < NO_MATCH then
 			creative_list[#creative_list+1] = name
-			-- Sort by description length first so closer matches appear earlier
+			-- Sort by match value first so closer matches appear earlier
 			order[name] = string.format("%02d", m) .. name
 		end
 	end
-- 
GitLab