]> git.lizzy.rs Git - xdecor.git/blobdiff - mailbox.lua
Don't crash on nil-player in can_dig and check the right players for attachment in...
[xdecor.git] / mailbox.lua
index dc02521df01c470c10fb51ad446235053699577a..cd9a03c4845abce370fb999775974a250b799502 100644 (file)
@@ -1,14 +1,34 @@
 local mailbox = {}
 screwdriver = screwdriver or {}
 
+local function get_img(img)
+       local img_name = img:match("(.*)%.png")
+       if img_name then return img_name..".png" end
+end
+
 local function img_col(stack)
        local def = minetest.registered_items[stack]
        if not def then return "" end
 
        if def.inventory_image ~= "" then
-               return def.inventory_image:match("(.*)%.png")..".png"
+               local img = get_img(def.inventory_image)
+               if img then return img end
        end
-       return def.tiles[1]:match("(.*)%.png")..".png"
+
+       if def.tiles then
+               local img
+               local tile = def.tiles[1]
+
+               if type(tile) == "table" then
+                       img = get_img(tile.name)
+               elseif type(tile) == "string" then
+                       img = get_img(tile)
+               end
+
+               if img then return img end
+       end
+
+       return ""
 end
 
 function mailbox:formspec(pos, owner, num)
@@ -28,7 +48,7 @@ function mailbox:formspec(pos, owner, num)
                                giver = giver.."#FFFF00,"..giver_name..","..i..",#FFFFFF,x "..stack_count..","
                                -- Hack to force using a 16px resolution for images in formspec's tablecolumn.
                                -- The engine doesn't scale them automatically yet.
-                               img = img..i.."=mailbox_blank16.png^"..img_col(stack_name)..","
+                               img = img..i.."="..img_col(stack_name).."^\\[resize:16x16,"
                        end
                end
 
@@ -58,10 +78,10 @@ end
 function mailbox.dig(pos, player)
        local meta = minetest.get_meta(pos)
        local owner = meta:get_string("owner")
-       local player_name = player:get_player_name()
+       local player_name = player and player:get_player_name()
        local inv = meta:get_inventory()
 
-       return inv:is_empty("mailbox") and player and player_name == owner
+       return inv:is_empty("mailbox") and player_name == owner
 end
 
 function mailbox.after_place_node(pos, placer)
@@ -76,7 +96,7 @@ function mailbox.after_place_node(pos, placer)
        inv:set_size("drop", 1)
 end
 
-function mailbox.rightclick(pos, _, clicker)
+function mailbox.rightclick(pos, node, clicker, itemstack, pointed_thing)
        local meta = minetest.get_meta(pos)
        local player = clicker:get_player_name()
        local owner = meta:get_string("owner")
@@ -86,6 +106,7 @@ function mailbox.rightclick(pos, _, clicker)
        else
                minetest.show_formspec(player, "xdecor:mailbox", mailbox:formspec(pos, owner, 0))
        end
+       return itemstack
 end
 
 function mailbox.put(pos, listname, _, stack, player)
@@ -94,7 +115,7 @@ function mailbox.put(pos, listname, _, stack, player)
                if inv:room_for_item("mailbox", stack) then
                        return -1
                else
-                       minetest.chat_send_player(player:get_player_name(), "[!] The mailbox is full")
+                       minetest.chat_send_player(player:get_player_name(), "The mailbox is full")
                end
        end
        return 0
@@ -131,4 +152,3 @@ xdecor.register("mailbox", {
        allow_metadata_inventory_put = mailbox.put,
        after_place_node = mailbox.after_place_node
 })
-