diff --git a/mods/rp_achievements/init.lua b/mods/rp_achievements/init.lua index bd2475e..ca14268 100644 --- a/mods/rp_achievements/init.lua +++ b/mods/rp_achievements/init.lua @@ -200,7 +200,7 @@ local function check_achievement_gotten(player, aname) minetest.log("action", "[rp_achievements] " .. name .. " got achievement '"..aname.."'") end - if rp_formspec.get_invpage(player) == "rp_achievements:achievements" then + if rp_formspec.get_current_invpage(player) == "rp_achievements:achievements" then local form = achievements.get_formspec(name) player:set_inventory_formspec(form) end @@ -440,7 +440,7 @@ function achievements.get_formspec(name, row) achievement_list = achievement_list .. minetest.formspec_escape(def.description) end - local form = rp_formspec.get_page("rp_achievements:achievements") + local form = rp_formspec.get_page("rp_achievements:achievements", true) form = form .. "set_focus[achievement_list]" form = form .. "table[0.25,2.5;7.9,5.5;achievement_list;" .. achievement_list diff --git a/mods/rp_armor/init.lua b/mods/rp_armor/init.lua index 8dafb8a..ff89790 100644 --- a/mods/rp_armor/init.lua +++ b/mods/rp_armor/init.lua @@ -41,7 +41,7 @@ form_armor = form_armor .. "listring[current_player;armor]" form_armor = form_armor .. rp_formspec.get_itemslot_bg(2.25, 0.75, 1, 3) function armor.get_formspec(name) - local form = rp_formspec.get_page("rp_armor:armor") + local form = rp_formspec.get_page("rp_armor:armor", true) return form end diff --git a/mods/rp_crafting/api.lua b/mods/rp_crafting/api.lua index 87406d5..2d0dfe5 100644 --- a/mods/rp_crafting/api.lua +++ b/mods/rp_crafting/api.lua @@ -382,7 +382,7 @@ function crafting.get_formspec(name, select_craft_id) end end - local form = rp_formspec.get_page("rp_crafting:crafting") + local form = rp_formspec.get_page("rp_crafting:crafting", true) if craft_count > 0 then form = form .. "table[2.25,0.25;4.75,3.75;craft_list;" .. craft_list diff --git a/mods/rp_creative/init.lua b/mods/rp_creative/init.lua index 4d5290e..8b6d6eb 100644 --- a/mods/rp_creative/init.lua +++ b/mods/rp_creative/init.lua @@ -250,7 +250,7 @@ creative.get_formspec = function(playername) end local player = minetest.get_player_by_name(playername) if player then - local form = rp_formspec.get_page("rp_creative:creative") + local form = rp_formspec.get_page("rp_creative:creative", true) local page, start_i = get_page_and_start_i(playername) form = form .. creative.get_creative_formspec(player, start_i, page) return form @@ -320,7 +320,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) page = 1 end - local form = rp_formspec.get_page("rp_creative:creative") + local form = rp_formspec.get_page("rp_creative:creative", true) form = form .. creative.get_creative_formspec(player, start_i, start_i / (creative.slots_num) + 1) if changed then player:set_inventory_formspec(form) diff --git a/mods/rp_formspec/init.lua b/mods/rp_formspec/init.lua index 7c8087b..c944227 100644 --- a/mods/rp_formspec/init.lua +++ b/mods/rp_formspec/init.lua @@ -273,10 +273,17 @@ function rp_formspec.register_invtab(name, def) local rdef = table.copy(def) rp_formspec.registered_invtabs[name] = def table.insert(registered_invtabs_order, name) + invtabs_cached_needs_update = true end +local invtabs_cached +local invtabs_cached_needs_update = true + -- Returns a formspec string for all the inventory tabs local function get_invtabs() + if not invtabs_cached_needs_update then + return invtabs_cached + end local form = "" local tabx = -0.9 local taby = 0.5 @@ -287,19 +294,23 @@ local function get_invtabs() form = form .. rp_formspec.tab(tabx, taby, "_rp_formspec_tab_"..tabname, def.icon, def.tooltip) taby = taby + tabplus end + invtabs_cached = form return form end -- Pages -function rp_formspec.get_page(name) +function rp_formspec.get_page(name, with_invtabs) local page = rp_formspec.registered_pages[name] if page == nil then minetest.log("warning", "[rp_formspec] UI page '" .. name .. "' is not yet registered") return "" end + if with_invtabs then + page = page .. get_invtabs() + end return page end @@ -358,19 +369,15 @@ function rp_formspec.receive_fields(player, form_name, fields) end end if invpagename and form then - rp_formspec.set_invpage(player, invpagename) + rp_formspec.set_current_invpage(player, invpagename) end end function rp_formspec.register_invpage(name, def) - local rdef = table.copy(def) - if rdef.with_invtabs == nil then - rdef.with_invtabs = true - end - rp_formspec.registered_invpages[name] = rdef + rp_formspec.registered_invpages[name] = def end -function rp_formspec.set_invpage(player, page) +function rp_formspec.set_current_invpage(player, page) local def = rp_formspec.registered_invpages[page] local pname = player:get_player_name() local formspec @@ -379,14 +386,11 @@ function rp_formspec.set_invpage(player, page) else formspec = rp_formspec.registered_pages[page] end - if def.with_invtabs then - formspec = formspec .. get_invtabs() - end player:set_inventory_formspec(formspec) current_invpage[pname] = page end -function rp_formspec.get_invpage(player) +function rp_formspec.get_current_invpage(player) local pname = player:get_player_name() return current_invpage[pname] end @@ -405,12 +409,12 @@ minetest.register_on_joinplayer( local pname = player:get_player_name() for invpagename,def in pairs(rp_formspec.registered_invpages) do if def.is_startpage and def.is_startpage(pname) then - rp_formspec.set_invpage(player, invpagename) + rp_formspec.set_current_invpage(player, invpagename) end end -- Fallback invpage - if not rp_formspec.get_invpage(player) then - rp_formspec.set_invpage(player, "rp_formspec:inventory") + if not rp_formspec.get_current_invpage(player) then + rp_formspec.set_current_invpage(player, "rp_formspec:inventory") end end) diff --git a/mods/rp_player_skins/init.lua b/mods/rp_player_skins/init.lua index 77bb793..b43b450 100644 --- a/mods/rp_player_skins/init.lua +++ b/mods/rp_player_skins/init.lua @@ -241,7 +241,7 @@ minetest.register_on_joinplayer(on_joinplayer) minetest.register_on_leaveplayer(on_leaveplayer) local function get_formspec(playername) - local form = rp_formspec.get_page("rp_player_skins:player_skins") + local form = rp_formspec.get_page("rp_player_skins:player_skins", true) form = form .. "model[0.2,0.2;4.6,9.2;player_skins_skin_select_model;character.b3d;"..player_skins.skins[playername]..";0,180;false;false;0,0]" return form end