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  |