diff --git a/doors_chest.lua b/doors_chest.lua index c7ba8de..89aaf54 100644 --- a/doors_chest.lua +++ b/doors_chest.lua @@ -569,67 +569,66 @@ minetest.register_node("protector:chest", { minetest.register_on_player_receive_fields(function(player, formname, fields) - if string.sub(formname, 0, string.len("protector:chest_")) == "protector:chest_" then - - local pos_s = string.sub(formname,string.len("protector:chest_") + 1) - local pos = minetest.string_to_pos(pos_s) - local meta = minetest.get_meta(pos) - local chest_inv = meta:get_inventory() - local player_inv = player:get_inventory() - local leftover - - if fields.toup then - - -- copy contents of players inventory to chest - for i, v in pairs (player_inv:get_list("main") or {}) do - - if chest_inv - and chest_inv:room_for_item('main', v) then - - leftover = chest_inv:add_item('main', v) - - player_inv:remove_item("main", v) - - if leftover - and not leftover:is_empty() then - player_inv:add_item("main", v) - end - end - end - - elseif fields.todn then - - -- copy contents of chest to players inventory - for i, v in pairs (chest_inv:get_list('main') or {}) do - - if player_inv:room_for_item("main", v) then - - leftover = player_inv:add_item("main", v) - - chest_inv:remove_item('main', v) - - if leftover - and not leftover:is_empty() then - chest_inv:add_item('main', v) - end - end - end - - elseif fields.chestname then - - -- change chest infotext to display name - if fields.chestname ~= "" then - - meta:set_string("name", fields.chestname) - meta:set_string("infotext", - S("Protected Chest (@1)", fields.chestname)) - else - meta:set_string("infotext", S("Protected Chest")) - end - - end + if string.sub(formname, 0, string.len("protector:chest_")) ~= "protector:chest_" then + return end + local pos_s = string.sub(formname,string.len("protector:chest_") + 1) + local pos = minetest.string_to_pos(pos_s) + local meta = minetest.get_meta(pos) ; if not meta then return end + local chest_inv = meta:get_inventory() ; if not chest_inv then return end + local player_inv = player:get_inventory() + local leftover + + if fields.toup then + + -- copy contents of players inventory to chest + for i, v in ipairs(player_inv:get_list("main") or {}) do + + if chest_inv:room_for_item("main", v) then + + leftover = chest_inv:add_item("main", v) + + player_inv:remove_item("main", v) + + if leftover + and not leftover:is_empty() then + player_inv:add_item("main", v) + end + end + end + + elseif fields.todn then + + -- copy contents of chest to players inventory + for i, v in ipairs(chest_inv:get_list("main") or {}) do + + if player_inv:room_for_item("main", v) then + + leftover = player_inv:add_item("main", v) + + chest_inv:remove_item("main", v) + + if leftover + and not leftover:is_empty() then + chest_inv:add_item("main", v) + end + end + end + + elseif fields.chestname then + + -- change chest infotext to display name + if fields.chestname ~= "" then + + meta:set_string("name", fields.chestname) + meta:set_string("infotext", + S("Protected Chest (@1)", fields.chestname)) + else + meta:set_string("infotext", S("Protected Chest")) + end + + end end) -- Protected Chest recipes diff --git a/init.lua b/init.lua index bf526e1..09c10d6 100644 --- a/init.lua +++ b/init.lua @@ -23,20 +23,12 @@ local S if minetest.get_modpath("intllib") then S = intllib.Getter() else - S = function(s, a, ...) - if a == nil then - return s - end - a = {a, ...} - return s:gsub("(@?)@(%(?)(%d+)(%)?)", - function(e, o, n, c) - if e == ""then - return a[tonumber(n)] .. (o == "" and c or "") - else - return "@" .. o .. n .. c - end - end) - end + S = function(s, a, ...) a = {a, ...} + return s:gsub("@(%d+)", function(n) + return a[tonumber(n)] + end) + end + end protector.intllib = S