Fix inventory tabs disappearing sometimes

master
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.."'")
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

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)
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

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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