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)
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
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)
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")
else
minetest.show_formspec(player, "xdecor:mailbox", mailbox:formspec(pos, owner, 0))
end
+ return itemstack
end
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
allow_metadata_inventory_put = mailbox.put,
after_place_node = mailbox.after_place_node
})
-