import bas080's inbox mod
							
								
								
									
										1
									
								
								inbox/depends.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1 @@
 | 
			
		||||
default
 | 
			
		||||
							
								
								
									
										109
									
								
								inbox/init.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -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!")
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								inbox/textures/inbox_back.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 272 B  | 
							
								
								
									
										
											BIN
										
									
								
								inbox/textures/inbox_bottom.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 297 B  | 
							
								
								
									
										
											BIN
										
									
								
								inbox/textures/inbox_east.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 276 B  | 
							
								
								
									
										
											BIN
										
									
								
								inbox/textures/inbox_front.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 319 B  | 
							
								
								
									
										
											BIN
										
									
								
								inbox/textures/inbox_side_and_back.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 193 B  | 
							
								
								
									
										
											BIN
										
									
								
								inbox/textures/inbox_top.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 268 B  | 
							
								
								
									
										
											BIN
										
									
								
								inbox/textures/inbox_west.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 235 B  |