+
+ return [[ size[9.5,9]
+ label[0,0;Mailbox]
+ label[6,0;Last donators]
+ box[6,0.72;3.3,3.5;#555555]
+ listring[current_player;main]
+ list[current_player;main;0.75,5.25;8,4;]
+ tableoptions[background=#00000000;highlight=#00000000;border=false] ]]
+ .."tablecolumns[color;text;image,"..img.."0;color;text]"..
+ "table[6,0.75;3.3,4;givers;"..giver.."]"..
+ "list[nodemeta:"..spos..";mailbox;0,0.75;6,4;]"..
+ "listring[nodemeta:"..spos..";mailbox]"..
+ xbg..default.get_hotbar_bg(0.75,5.25)
+ else
+ return [[ size[8,5]
+ list[current_player;main;0,1.25;8,4;]
+ tablecolumns[color;text;color;text]
+ tableoptions[background=#00000000;highlight=#00000000;border=false] ]]
+ .."table[0,0;3,1;sendform;#FFFFFF,Send your goods to,,,#FFFF00,"..owner.."]"..
+ "list[nodemeta:"..spos..";drop;3.5,0;1,1;]"..
+ xbg..default.get_hotbar_bg(0,1.25)
+ 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 inv = meta:get_inventory()
+
+ return inv:is_empty("mailbox") and player and player_name == owner
+end
+
+function mailbox.after_place_node(pos, placer)
+ local meta = minetest.get_meta(pos)
+ local player_name = placer:get_player_name()
+
+ meta:set_string("owner", player_name)
+ meta:set_string("infotext", player_name.."'s Mailbox")
+
+ local inv = meta:get_inventory()
+ inv:set_size("mailbox", 6*4)
+ inv:set_size("drop", 1)
+end
+
+function mailbox.rightclick(pos, _, clicker)
+ local meta = minetest.get_meta(pos)
+ local player = clicker:get_player_name()
+ local owner = meta:get_string("owner")
+
+ if player == owner then
+ minetest.show_formspec(player, "xdecor:mailbox", mailbox:formspec(pos, owner, 1))
+ else
+ minetest.show_formspec(player, "xdecor:mailbox", mailbox:formspec(pos, owner, 0))
+ end
+end
+
+function mailbox.put(pos, listname, _, stack, player)
+ if listname == "drop" then