Fix inventory tabs disappearing sometimes

This commit is contained in:
Wuzzy 2022-08-12 16:37:48 +02:00
parent 56a5301d55
commit f1a55b23aa
6 changed files with 26 additions and 22 deletions

View File

@ -200,7 +200,7 @@ local function check_achievement_gotten(player, aname)
minetest.log("action", "[rp_achievements] " .. name .. " got achievement '"..aname.."'") minetest.log("action", "[rp_achievements] " .. name .. " got achievement '"..aname.."'")
end 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) local form = achievements.get_formspec(name)
player:set_inventory_formspec(form) player:set_inventory_formspec(form)
end end
@ -440,7 +440,7 @@ function achievements.get_formspec(name, row)
achievement_list = achievement_list .. minetest.formspec_escape(def.description) achievement_list = achievement_list .. minetest.formspec_escape(def.description)
end 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 .. "set_focus[achievement_list]"
form = form .. "table[0.25,2.5;7.9,5.5;achievement_list;" .. achievement_list form = form .. "table[0.25,2.5;7.9,5.5;achievement_list;" .. achievement_list

View File

@ -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) form_armor = form_armor .. rp_formspec.get_itemslot_bg(2.25, 0.75, 1, 3)
function armor.get_formspec(name) 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 return form
end end

View File

@ -382,7 +382,7 @@ function crafting.get_formspec(name, select_craft_id)
end end
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 if craft_count > 0 then
form = form .. "table[2.25,0.25;4.75,3.75;craft_list;" .. craft_list form = form .. "table[2.25,0.25;4.75,3.75;craft_list;" .. craft_list

View File

@ -250,7 +250,7 @@ creative.get_formspec = function(playername)
end end
local player = minetest.get_player_by_name(playername) local player = minetest.get_player_by_name(playername)
if player then 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) local page, start_i = get_page_and_start_i(playername)
form = form .. creative.get_creative_formspec(player, start_i, page) form = form .. creative.get_creative_formspec(player, start_i, page)
return form return form
@ -320,7 +320,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
page = 1 page = 1
end 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) form = form .. creative.get_creative_formspec(player, start_i, start_i / (creative.slots_num) + 1)
if changed then if changed then
player:set_inventory_formspec(form) player:set_inventory_formspec(form)

View File

@ -273,10 +273,17 @@ function rp_formspec.register_invtab(name, def)
local rdef = table.copy(def) local rdef = table.copy(def)
rp_formspec.registered_invtabs[name] = def rp_formspec.registered_invtabs[name] = def
table.insert(registered_invtabs_order, name) table.insert(registered_invtabs_order, name)
invtabs_cached_needs_update = true
end end
local invtabs_cached
local invtabs_cached_needs_update = true
-- Returns a formspec string for all the inventory tabs -- Returns a formspec string for all the inventory tabs
local function get_invtabs() local function get_invtabs()
if not invtabs_cached_needs_update then
return invtabs_cached
end
local form = "" local form = ""
local tabx = -0.9 local tabx = -0.9
local taby = 0.5 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) form = form .. rp_formspec.tab(tabx, taby, "_rp_formspec_tab_"..tabname, def.icon, def.tooltip)
taby = taby + tabplus taby = taby + tabplus
end end
invtabs_cached = form
return form return form
end end
-- Pages -- Pages
function rp_formspec.get_page(name) function rp_formspec.get_page(name, with_invtabs)
local page = rp_formspec.registered_pages[name] local page = rp_formspec.registered_pages[name]
if page == nil then if page == nil then
minetest.log("warning", "[rp_formspec] UI page '" .. name .. "' is not yet registered") minetest.log("warning", "[rp_formspec] UI page '" .. name .. "' is not yet registered")
return "" return ""
end end
if with_invtabs then
page = page .. get_invtabs()
end
return page return page
end end
@ -358,19 +369,15 @@ function rp_formspec.receive_fields(player, form_name, fields)
end end
end end
if invpagename and form then if invpagename and form then
rp_formspec.set_invpage(player, invpagename) rp_formspec.set_current_invpage(player, invpagename)
end end
end end
function rp_formspec.register_invpage(name, def) function rp_formspec.register_invpage(name, def)
local rdef = table.copy(def) rp_formspec.registered_invpages[name] = def
if rdef.with_invtabs == nil then
rdef.with_invtabs = true
end
rp_formspec.registered_invpages[name] = rdef
end end
function rp_formspec.set_invpage(player, page) function rp_formspec.set_current_invpage(player, page)
local def = rp_formspec.registered_invpages[page] local def = rp_formspec.registered_invpages[page]
local pname = player:get_player_name() local pname = player:get_player_name()
local formspec local formspec
@ -379,14 +386,11 @@ function rp_formspec.set_invpage(player, page)
else else
formspec = rp_formspec.registered_pages[page] formspec = rp_formspec.registered_pages[page]
end end
if def.with_invtabs then
formspec = formspec .. get_invtabs()
end
player:set_inventory_formspec(formspec) player:set_inventory_formspec(formspec)
current_invpage[pname] = page current_invpage[pname] = page
end end
function rp_formspec.get_invpage(player) function rp_formspec.get_current_invpage(player)
local pname = player:get_player_name() local pname = player:get_player_name()
return current_invpage[pname] return current_invpage[pname]
end end
@ -405,12 +409,12 @@ minetest.register_on_joinplayer(
local pname = player:get_player_name() local pname = player:get_player_name()
for invpagename,def in pairs(rp_formspec.registered_invpages) do for invpagename,def in pairs(rp_formspec.registered_invpages) do
if def.is_startpage and def.is_startpage(pname) then 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
end end
-- Fallback invpage -- Fallback invpage
if not rp_formspec.get_invpage(player) then if not rp_formspec.get_current_invpage(player) then
rp_formspec.set_invpage(player, "rp_formspec:inventory") rp_formspec.set_current_invpage(player, "rp_formspec:inventory")
end end
end) end)

View File

@ -241,7 +241,7 @@ minetest.register_on_joinplayer(on_joinplayer)
minetest.register_on_leaveplayer(on_leaveplayer) minetest.register_on_leaveplayer(on_leaveplayer)
local function get_formspec(playername) 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]" 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 return form
end end