diff --git a/inbox/depends.txt b/inbox/depends.txt new file mode 100644 index 00000000..4ad96d51 --- /dev/null +++ b/inbox/depends.txt @@ -0,0 +1 @@ +default diff --git a/inbox/init.lua b/inbox/init.lua new file mode 100644 index 00000000..7e334882 --- /dev/null +++ b/inbox/init.lua @@ -0,0 +1,109 @@ +local inbox = {} + +--[[ +TODO +* Different node_box and texture for empty mailbox +]] + +minetest.register_craft({ + output ="inbox:empty", + recipe = { + {"","default:steel_ingot",""}, + {"default:steel_ingot","","default:steel_ingot"}, + {"default:steel_ingot","default:steel_ingot","default:steel_ingot"} + } +}) + +minetest.register_node("inbox:empty", { + paramtype = "light", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-4/12, -6/12, -6/12, 4/12, 0/12, 6/12}, + {-3/12, 0/12, -6/12, 3/12, 2/12, 6/12}, + {3/12, 0/12, -4/12, 4/12, 5/12, -2/12}, + {3/12, 3/12, -2/12, 4/12, 5/12, 0/12} + } + }, + description = "Mailbox", + tiles = {"inbox_top.png", "inbox_bottom.png", "inbox_east.png", + "inbox_west.png", "inbox_back.png", "inbox_front.png"}, + paramtype2 = "facedir", + groups = {choppy=2,oddly_breakable_by_hand=2}, + sounds = default.node_sound_wood_defaults(), + after_place_node = function(pos, placer, itemstack) + local meta = minetest.get_meta(pos) + local owner = placer:get_player_name() + meta:set_string("owner", owner) + meta:set_string("infotext", owner.."'s Mailbox") + local inv = meta:get_inventory() + inv:set_size("main", 8*4) + inv:set_size("drop", 1) + end, + on_rightclick = function(pos, node, clicker, itemstack) + local meta = minetest.get_meta(pos) + local player = clicker:get_player_name() + local owner = meta:get_string("owner") + local meta = minetest.get_meta(pos) + if owner == player then + minetest.show_formspec( + clicker:get_player_name(), + "default:chest_locked", + inbox.get_inbox_formspec(pos)) + else + minetest.show_formspec( + clicker:get_player_name(), + "default:chest_locked", + inbox.get_inbox_insert_formspec(pos)) + end + end, + can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local owner = meta:get_string("owner") + local inv = meta:get_inventory() + return player:get_player_name() == owner and inv:is_empty("main") + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + if listname == "drop" and inv:room_for_item("main", stack) then + inv:remove_item("drop", stack) + inv:add_item("main", stack) + end + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + if listname == "main" then + return 0 + end + if listname == "drop" then + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + if inv:room_for_item("main", stack) then + return -1 + else + return 0 + end + end + end, +}) + +function inbox.get_inbox_formspec(pos) + local spos = pos.x .. "," .. pos.y .. "," ..pos.z + local formspec = + "size[8,9]".. + "list[nodemeta:".. spos .. ";main;0,0;8,4;]".. + "list[current_player;main;0,5;8,4;]" + return formspec +end + +function inbox.get_inbox_insert_formspec(pos) + local spos = pos.x .. "," .. pos.y .. "," ..pos.z + local formspec = + "size[8,9]".. + "list[nodemeta:".. spos .. ";drop;3.5,2;1,1;]".. + "list[current_player;main;0,5;8,4;]" + return formspec +end + +print("[Mod]Inbox Loaded!") diff --git a/inbox/textures/inbox_back.png b/inbox/textures/inbox_back.png new file mode 100644 index 00000000..346aa922 Binary files /dev/null and b/inbox/textures/inbox_back.png differ diff --git a/inbox/textures/inbox_bottom.png b/inbox/textures/inbox_bottom.png new file mode 100644 index 00000000..027b8327 Binary files /dev/null and b/inbox/textures/inbox_bottom.png differ diff --git a/inbox/textures/inbox_east.png b/inbox/textures/inbox_east.png new file mode 100644 index 00000000..176a1938 Binary files /dev/null and b/inbox/textures/inbox_east.png differ diff --git a/inbox/textures/inbox_front.png b/inbox/textures/inbox_front.png new file mode 100644 index 00000000..bd8a9637 Binary files /dev/null and b/inbox/textures/inbox_front.png differ diff --git a/inbox/textures/inbox_side_and_back.png b/inbox/textures/inbox_side_and_back.png new file mode 100644 index 00000000..343732bc Binary files /dev/null and b/inbox/textures/inbox_side_and_back.png differ diff --git a/inbox/textures/inbox_top.png b/inbox/textures/inbox_top.png new file mode 100644 index 00000000..fcda957c Binary files /dev/null and b/inbox/textures/inbox_top.png differ diff --git a/inbox/textures/inbox_west.png b/inbox/textures/inbox_west.png new file mode 100644 index 00000000..0d4dbfb8 Binary files /dev/null and b/inbox/textures/inbox_west.png differ