minetest-mods / unified_inventory

An extensible inventory mod which allows searching crafting and browsing for recipes in the same dialogue.
Other
50 stars 38 forks source link

Nil value crash #201

Closed mazes-80 closed 2 years ago

mazes-80 commented 2 years ago

I sporadically encounter following crash, not at every login so it seems quite random (even it is not) It is maybe related to my recent change in minetest.conf: preload_item_visuals = 0 or not, still I didn't notice before changing it

ERROR[Main]: ServerError: AsyncErr: Lua: Runtime error from mod 'unified_inventory' in callback on_joinplayer(): .minetest/mods/unified_inventory/bags.lua:46: attempt to index a nil value
ERROR[Main]: stack traceback:
ERROR[Main]: .minetest/mods/unified_inventory/bags.lua:46: in function 'get_player_bag_stack'
ERROR[Main]: .minetest/mods/unified_inventory/bags.lua:52: in function 'get_formspec'
ERROR[Main]: .minetest/mods/unified_inventory/internal.lua:297: in function 'get_formspec'
ERROR[Main]: .minetest/mods/unified_inventory/internal.lua:322: in function 'set_inventory_formspec'
ERROR[Main]: .minetest/mods/unified_inventory/internal.lua:397: in function 'apply_filter'
ERROR[Main]: .minetest/mods/unified_inventory/callbacks.lua:22: in function <.minetest/mods/unified_inventory/callbacks.lua:14> ERROR[Main]: /usr/share/minetest/builtin/game/register.lua:425: in function </usr/share/minetest/builtin/game/register.lua:409>

SmallJoker commented 2 years ago

Does this fix your issue?

diff --git a/callbacks.lua b/callbacks.lua
index e92175d..a8db7cf 100644
--- a/callbacks.lua
+++ b/callbacks.lua
@@ -19,14 +19,12 @@ minetest.register_on_joinplayer(function(player)
                unified_inventory.items_list
        unified_inventory.activefilter[player_name] = ""
        unified_inventory.active_search_direction[player_name] = "nochange"
-       unified_inventory.apply_filter(player, "", "nochange")
        unified_inventory.current_searchbox[player_name] = ""
        unified_inventory.current_category[player_name] = "all"
        unified_inventory.current_category_scroll[player_name] = 0
        unified_inventory.alternate[player_name] = 1
        unified_inventory.current_item[player_name] = nil
        unified_inventory.current_craft_direction[player_name] = "recipe"
-       unified_inventory.set_inventory_formspec(player, unified_inventory.default)

        -- Refill slot
        local refill = minetest.create_detached_inventory(player_name.."refill", {
@@ -48,6 +46,14 @@ minetest.register_on_joinplayer(function(player)
        refill:set_size("main", 1)
 end)

+minetest.register_on_mods_loaded(function()
+       minetest.register_on_joinplayer(function(player)
+               -- After everything is initialized, set up the inventory.
+               ui.apply_filter(player, "", "nochange")
+               ui.set_inventory_formspec(player, unified_inventory.default)
+       end)
+end)
+
 local function apply_new_filter(player, search_text, new_dir)
        local player_name = player:get_player_name()
mazes-80 commented 2 years ago

I patched unified inventory in a new branch for my home server.

I'm not sure to understand fully the logic, on_mod_loaded affects client side or server side (my guess here) if it affect server side I don't understand how it would prevent crash when this crash does not necessarly happen at first login. Anyway I'm quite new to minetest modding and I'll send feedback if it stops crashing. Next step revert the server option that seems to affect unified inventory as this option also breaks things for other mods (like no image in technic machines noticed even if I only use cnc)

debagos commented 2 years ago

Today my server crashed two times with the same error like the original poster reported. Here is one stack trace:

ERROR[Main]: ServerError: AsyncErr: Lua: Runtime error from mod 'unified_inventory' in callback on_joinplayer(): mods/unified_inventory/bags.lua:46: attempt to index a nil value
ERROR[Main]: stack traceback:
ERROR[Main]:    mods/unified_inventory/bags.lua:46: in function 'get_player_bag_stack'
ERROR[Main]:    mods/unified_inventory/bags.lua:52: in function 'get_formspec'
ERROR[Main]:    mods/unified_inventory/internal.lua:303: in function 'get_formspec'
ERROR[Main]:    mods/unified_inventory/internal.lua:328: in function 'set_inventory_formspec'
ERROR[Main]:    mods/unified_inventory/internal.lua:403: in function 'apply_filter'
ERROR[Main]:    mods/unified_inventory/callbacks.lua:22: in function 'func'
ERROR[Main]:    builtin/profiler/instrumentation.lua:107: in function builtin/profiler/instrumentation.lua:100>builtin/game/register.lua:425: in function <builtin/game/register.lua:409>

I'm going to apply the patch now you provided @SmallJoker and will report back soon :+1:

Edit: One day without a crash so far :)

debagos commented 2 years ago

Okay almost one week without any crash, seems like the patch you provided @SmallJoker is working well. Thank you :+1:

SmallJoker commented 2 years ago

c1fef26