diff options
| -rw-r--r-- | init.lua | 195 | ||||
| -rw-r--r-- | textures/mailbox_blank16.png | bin | 96 -> 0 bytes | |||
| -rw-r--r-- | textures/mailbox_letterbox.png | bin | 0 -> 3009 bytes | |||
| -rw-r--r-- | textures/mailbox_letterbox_bottom.png | bin | 0 -> 2858 bytes | |||
| -rw-r--r-- | textures/mailbox_letterbox_side.png | bin | 0 -> 2978 bytes | |||
| -rw-r--r-- | textures/mailbox_letterbox_top.png | bin | 0 -> 2860 bytes | |||
| -rw-r--r-- | textures/mailbox_mailbox.png (renamed from textures/xdecor_mailbox.png) | bin | 2887 -> 2887 bytes | |||
| -rw-r--r-- | textures/mailbox_mailbox_bottom.png (renamed from textures/xdecor_mailbox_bottom.png) | bin | 2811 -> 2811 bytes | |||
| -rw-r--r-- | textures/mailbox_mailbox_side.png (renamed from textures/xdecor_mailbox_side.png) | bin | 2868 -> 2868 bytes | |||
| -rw-r--r-- | textures/mailbox_mailbox_top.png (renamed from textures/xdecor_mailbox_top.png) | bin | 2811 -> 2811 bytes | 
10 files changed, 123 insertions, 72 deletions
| @@ -5,88 +5,139 @@  local mailbox = {}  screwdriver = screwdriver or {} -minetest.register_craft({ -	output = "mailbox:mailbox", -	recipe = { -		{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, -		{"dye:red", "default:paper", "dye:red"}, -		{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"} -	} -}) -minetest.register_node("mailbox:mailbox", { -	description = "Mailbox", -	tiles = { -		"xdecor_mailbox_top.png", "xdecor_mailbox_bottom.png", -		"xdecor_mailbox_side.png", "xdecor_mailbox_side.png", -		"xdecor_mailbox.png", "xdecor_mailbox.png", -	}, -	groups = {cracky = 3, oddly_breakable_by_hand = 1}, -	on_rotate = screwdriver.rotate_simple, -	sounds = default.node_sound_defaults(), -	paramtype2 = "facedir", -	after_place_node = function(pos, placer, _) -		local meta = minetest.get_meta(pos) -		local player_name = placer:get_player_name() +function mailbox.get_formspec(pos, owner, fs_type) +	local xbg = default.gui_bg..default.gui_bg_img..default.gui_slots +	local spos = pos.x .. "," ..pos.y .. "," .. pos.z -		meta:set_string("owner", player_name) -		meta:set_string("infotext", player_name.."'s Mailbox") +	if fs_type == 1 then +		return "size[8,9]" .. xbg .. default.get_hotbar_bg(0, 5.25) .. +			"checkbox[0,0;books_only;Only allow written books;false]" .. +			"list[nodemeta:" .. spos .. ";mailbox;0,0.75;8,4;]" .. +			"list[current_player;main;0,5.25;8,4;]" .. +			"listring[]" +	else +		return "size[8,5]" .. xbg .. default.get_hotbar_bg(0, 1.25) .. +			"label[0.5,0;Send your goods\nto " .. owner .. " :]" .. +			"list[nodemeta:" .. spos .. ";drop;3.5,0;1,1;]" .. +			"list[current_player;main;0,1.25;8,4;]" .. +			"listring[]" +	end +end -		local inv = meta:get_inventory() -		inv:set_size("mailbox", 8*4) -		inv:set_size("drop", 1) -	end, -	on_rightclick = function(pos, _, clicker, _) -		local meta = minetest.get_meta(pos) -		local player = clicker:get_player_name() -		local owner = meta:get_string("owner") +minetest.register_on_player_receive_fields(function(player, formname, fields) +	if not formname:match("mailbox:mailbox_") then +		return +	end -		if player == owner then -			minetest.show_formspec(player, "", mailbox.get_formspec(pos, owner, 1)) +	if fields.books_only then +		local pos = minetest.string_to_pos(formname:sub(17)) +		if minetest.get_node(pos).name == "mailbox:mailbox" then +			minetest.swap_node(pos, +					{name = "mailbox:letterbox"})  		else -			minetest.show_formspec(player, "", mailbox.get_formspec(pos, owner, 0)) +			minetest.swap_node(pos, +					{name = "mailbox:mailbox"})  		end -	end, -	can_dig = function(pos, player) +	end +end) + + +mailbox.after_place_node = function(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", 8*4) +	inv:set_size("drop", 1) +end + +mailbox.on_rightclick = function(pos, _, clicker, _) +	local meta = minetest.get_meta(pos) +	local player = clicker:get_player_name() +	local owner = meta:get_string("owner") + +	if player == owner then +		local spos = pos.x .. "," .. pos.y .. "," .. pos.z +		minetest.show_formspec(player, "mailbox:mailbox_" .. spos, mailbox.get_formspec(pos, owner, 1)) +	else +		minetest.show_formspec(player, "mailbox:mailbox", mailbox.get_formspec(pos, owner, 0)) +	end +end + +mailbox.can_dig = function(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 + +mailbox.on_metadata_inventory_put = function(pos, listname, _, stack, _) +	local inv = minetest.get_meta(pos):get_inventory() +	if listname == "drop" and inv:room_for_item("mailbox", stack) then +		inv:remove_item("drop", stack) +		inv:add_item("mailbox", stack) +	end +end + +mailbox.allow_metadata_inventory_put = function(pos, listname, _, stack, _) +	if listname == "drop" then  		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, -	on_metadata_inventory_put = function(pos, listname, _, stack, _) -		local inv = minetest.get_meta(pos):get_inventory() -		if listname == "drop" and inv:room_for_item("mailbox", stack) then -			inv:remove_item("drop", stack) -			inv:add_item("mailbox", stack) -		end -	end, -	allow_metadata_inventory_put = function(pos, listname, _, stack, _) -		if listname == "drop" then -			local meta = minetest.get_meta(pos) -			local inv = meta:get_inventory() -			if inv:room_for_item("mailbox", stack) then return -1 end +		if inv:room_for_item("mailbox", stack) then +			return -1  		end -		return 0  	end +	return 0 +end + + +minetest.register_node("mailbox:mailbox", { +	description = "Mailbox", +	tiles = { +		"mailbox_mailbox_top.png", "mailbox_mailbox_bottom.png", +		"mailbox_mailbox_side.png", "mailbox_mailbox_side.png", +		"mailbox_mailbox.png", "mailbox_mailbox.png", +	}, +	groups = {cracky = 3, oddly_breakable_by_hand = 1}, +	on_rotate = screwdriver.rotate_simple, +	sounds = default.node_sound_defaults(), +	paramtype2 = "facedir", +	after_place_node = mailbox.after_place_node, +	on_rightclick = mailbox.on_rightclick, +	can_dig = mailbox.can_dig, +	on_metadata_inventory_put = mailbox.on_metadata_inventory_put, +	allow_metadata_inventory_put = mailbox.allow_metadata_inventory_put,  }) -function mailbox.get_formspec(pos, owner, fs_type) -	local xbg = default.gui_bg..default.gui_bg_img..default.gui_slots -	local spos = pos.x..","..pos.y..","..pos.z +minetest.register_node("mailbox:letterbox", { +	description = "Mailbox", +	tiles = { +		"mailbox_letterbox_top.png", "mailbox_letterbox_bottom.png", +		"mailbox_letterbox_side.png", "mailbox_letterbox_side.png", +		"mailbox_letterbox.png", "mailbox_letterbox.png", +	}, +	groups = {cracky = 3, oddly_breakable_by_hand = 1}, +	on_rotate = screwdriver.rotate_simple, +	sounds = default.node_sound_defaults(), +	paramtype2 = "facedir", +	after_place_node = mailbox.after_place_node, +	on_rightclick = mailbox.on_rightclick, +	can_dig = mailbox.can_dig, +	on_metadata_inventory_put = mailbox.on_metadata_inventory_put, +	allow_metadata_inventory_put = mailbox.allow_metadata_inventory_put, +}) -	if fs_type == 1 then -		return "size[8,9]"..xbg..default.get_hotbar_bg(0,5.25).. -			"label[0,0;You received...]" .. -			"list[nodemeta:"..spos..";mailbox;0,0.75;8,4;]" .. -			"list[current_player;main;0,5.25;8,4;]" .. -			"listring[]" -	else -		return "size[8,5]"..xbg..default.get_hotbar_bg(0,1.25).. -			"label[0.5,0;Send your goods\nto "..owner.." :]" .. -			"list[nodemeta:"..spos..";drop;3.5,0;1,1;]" .. -			"list[current_player;main;0,1.25;8,4;]" .. -			"listring[]" -	end -end +minetest.register_craft({ +	output = "mailbox:mailbox", +	recipe = { +		{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, +		{"default:book", "default:chest", "default:book"}, +		{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"} +	} +}) diff --git a/textures/mailbox_blank16.png b/textures/mailbox_blank16.pngBinary files differ deleted file mode 100644 index 849e622..0000000 --- a/textures/mailbox_blank16.png +++ /dev/null diff --git a/textures/mailbox_letterbox.png b/textures/mailbox_letterbox.pngBinary files differ new file mode 100644 index 0000000..f8fd568 --- /dev/null +++ b/textures/mailbox_letterbox.png diff --git a/textures/mailbox_letterbox_bottom.png b/textures/mailbox_letterbox_bottom.pngBinary files differ new file mode 100644 index 0000000..ed7fb18 --- /dev/null +++ b/textures/mailbox_letterbox_bottom.png diff --git a/textures/mailbox_letterbox_side.png b/textures/mailbox_letterbox_side.pngBinary files differ new file mode 100644 index 0000000..b93514d --- /dev/null +++ b/textures/mailbox_letterbox_side.png diff --git a/textures/mailbox_letterbox_top.png b/textures/mailbox_letterbox_top.pngBinary files differ new file mode 100644 index 0000000..6904c4f --- /dev/null +++ b/textures/mailbox_letterbox_top.png diff --git a/textures/xdecor_mailbox.png b/textures/mailbox_mailbox.pngBinary files differ index f94cc36..f94cc36 100644 --- a/textures/xdecor_mailbox.png +++ b/textures/mailbox_mailbox.png diff --git a/textures/xdecor_mailbox_bottom.png b/textures/mailbox_mailbox_bottom.pngBinary files differ index 7b879d9..7b879d9 100644 --- a/textures/xdecor_mailbox_bottom.png +++ b/textures/mailbox_mailbox_bottom.png diff --git a/textures/xdecor_mailbox_side.png b/textures/mailbox_mailbox_side.pngBinary files differ index 61df62b..61df62b 100644 --- a/textures/xdecor_mailbox_side.png +++ b/textures/mailbox_mailbox_side.png diff --git a/textures/xdecor_mailbox_top.png b/textures/mailbox_mailbox_top.pngBinary files differ index 2b54fb1..2b54fb1 100644 --- a/textures/xdecor_mailbox_top.png +++ b/textures/mailbox_mailbox_top.png | 
