From a84d08d7a7c294a56c1774ca0f4c0c36a5bf945d Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Tue, 16 Apr 2024 18:40:49 +0200 Subject: [PATCH] Fix crash in rp_crafting --- mods/rp_crafting/init.lua | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/mods/rp_crafting/init.lua b/mods/rp_crafting/init.lua index dd167712..ac75dd66 100644 --- a/mods/rp_crafting/init.lua +++ b/mods/rp_crafting/init.lua @@ -23,6 +23,7 @@ crafting.registered_crafts = {} -- User table of last selected row etc. local userdata = {} +local userdata_init = { mode = MODE_CRAFTABLE } -- Crafting can only take a limited number of itemstacks as -- input for sanity/interface reasons @@ -318,6 +319,9 @@ form = form .. "container_end[]" form = form .. "tablecolumns[text,align=left,width=2;text,align=left,width=40]" function crafting.get_formspec(name) + if not userdata[name] then + userdata[name] = table.copy(userdata_init) + end local selected_craft_id = (userdata[name] and userdata[name].craft_id) or 1 if userdata[name] and userdata[name].old_craft_id then @@ -349,9 +353,9 @@ function crafting.get_formspec(name) -- In the craft guide, the list of craftable items is cached for -- the player so it doesn't have to be recalculated that often. - local craftable_cache = userdata[name].craftable_cache + local craftable_cache = userdata[name] and userdata[name].craftable_cache local cache_update_required - if userdata[name].mode == MODE_GUIDE and craftable_cache == nil then + if userdata[name] and userdata[name].mode == MODE_GUIDE and craftable_cache == nil then cache_update_required = true craftable_cache = {} userdata[name].craftable_cache = craftable_cache @@ -749,7 +753,9 @@ local function on_joinplayer(player) local inv = player:get_inventory() - userdata[name] = {mode = MODE_CRAFTABLE} + if not userdata then + userdata[name] = table.copy(userdata_init) + end if inv:get_size("craft_in") ~= 4 then inv:set_size("craft_in", 4)