|
@@ -91,22 +91,42 @@ function sfinv.get_formspec(player, context)
|
|
|
end
|
|
|
end
|
|
|
|
|
|
-function sfinv.set_player_inventory_formspec(player, context)
|
|
|
+function sfinv.get_or_create_context(player)
|
|
|
+ local name = player:get_player_name()
|
|
|
+ local context = sfinv.contexts[name]
|
|
|
if not context then
|
|
|
- local name = player:get_player_name()
|
|
|
- context = sfinv.contexts[name]
|
|
|
- if not context then
|
|
|
- context = {
|
|
|
- page = sfinv.get_homepage_name(player)
|
|
|
- }
|
|
|
- sfinv.contexts[name] = context
|
|
|
- end
|
|
|
+ context = {
|
|
|
+ page = sfinv.get_homepage_name(player)
|
|
|
+ }
|
|
|
+ sfinv.contexts[name] = context
|
|
|
end
|
|
|
+ return context
|
|
|
+end
|
|
|
+
|
|
|
+function sfinv.set_context(player, context)
|
|
|
+ sfinv.contexts[player:get_player_name()] = context
|
|
|
+end
|
|
|
|
|
|
- local fs = sfinv.get_formspec(player, context)
|
|
|
+function sfinv.set_player_inventory_formspec(player, context)
|
|
|
+ local fs = sfinv.get_formspec(player,
|
|
|
+ context or sfinv.get_or_create_context(player))
|
|
|
player:set_inventory_formspec(fs)
|
|
|
end
|
|
|
|
|
|
+function sfinv.set_page(player, pagename)
|
|
|
+ local context = sfinv.get_or_create_context(player)
|
|
|
+ local oldpage = sfinv.pages[context.page]
|
|
|
+ if oldpage and oldpage.on_leave then
|
|
|
+ oldpage:on_leave(player, context)
|
|
|
+ end
|
|
|
+ context.page = pagename
|
|
|
+ local page = sfinv.pages[pagename]
|
|
|
+ if page.on_enter then
|
|
|
+ page:on_enter(player, context)
|
|
|
+ end
|
|
|
+ sfinv.set_player_inventory_formspec(player, context)
|
|
|
+end
|
|
|
+
|
|
|
minetest.register_on_joinplayer(function(player)
|
|
|
if sfinv.enabled then
|
|
|
minetest.after(0.5, function()
|
|
@@ -132,30 +152,21 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|
|
return false
|
|
|
end
|
|
|
|
|
|
- -- Handle Events
|
|
|
+ -- Was a tab selected?
|
|
|
if fields.tabs and context.nav then
|
|
|
local tid = tonumber(fields.tabs)
|
|
|
if tid and tid > 0 then
|
|
|
local id = context.nav[tid]
|
|
|
local page = sfinv.pages[id]
|
|
|
if id and page then
|
|
|
- local oldpage = sfinv.pages[context.page]
|
|
|
- if oldpage and oldpage.on_leave then
|
|
|
- oldpage:on_leave(player, context)
|
|
|
- end
|
|
|
- context.page = id
|
|
|
- if page.on_enter then
|
|
|
- page:on_enter(player, context)
|
|
|
- end
|
|
|
- sfinv.set_player_inventory_formspec(player, context)
|
|
|
+ sfinv.set_page(player, id)
|
|
|
end
|
|
|
end
|
|
|
- return
|
|
|
- end
|
|
|
-
|
|
|
- -- Pass to page
|
|
|
- local page = sfinv.pages[context.page]
|
|
|
- if page and page.on_player_receive_fields then
|
|
|
- return page:on_player_receive_fields(player, context, fields)
|
|
|
+ else
|
|
|
+ -- Pass event to page
|
|
|
+ local page = sfinv.pages[context.page]
|
|
|
+ if page and page.on_player_receive_fields then
|
|
|
+ return page:on_player_receive_fields(player, context, fields)
|
|
|
+ end
|
|
|
end
|
|
|
end)
|