forked from nalc/homedecor_modpack
		
	Merge pull request #2 from kaeza/master
Added locked stuff cabinets, refrigerator, and oven.
This commit is contained in:
		
							
								
								
									
										2
									
								
								init.lua
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								init.lua
									
									
									
									
									
								
							| @@ -834,4 +834,6 @@ dofile(minetest.get_modpath("homedecor").."/television.lua") | ||||
|  | ||||
| dofile(minetest.get_modpath("homedecor").."/crafts.lua") | ||||
|  | ||||
| dofile(minetest.get_modpath("homedecor").."/locked.lua") | ||||
|  | ||||
| print("[HomeDecor] Loaded!") | ||||
|   | ||||
							
								
								
									
										129
									
								
								locked.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										129
									
								
								locked.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,129 @@ | ||||
| -- Locked Stuff for Home Decor mod, by Kaeza | ||||
| -- 2013-02-19 | ||||
| -- | ||||
| -- The code is mostly copypasta from default:chest_locked, with a few | ||||
| -- tidbits to ease creation of new items, should need arise. | ||||
| -- | ||||
| -- License: LGPL | ||||
| -- | ||||
|  | ||||
| --[[ | ||||
|   |  create_locked ( name, infotext ) | ||||
|   | | ||||
|   |  Description: | ||||
|   |   This function takes a base node name such as "homedecor:refrigerator", | ||||
|   |   copies the definition from the original item into a new table, modifies | ||||
|   |   it a bit, and registers a new node with a "_locked" suffix such as | ||||
|   |   "homedecor:refrigerator_locked". The new node behaves identically to | ||||
|   |   the base node, except that moving items to/from the node's inventory | ||||
|   |   is only allowed for the original placer. In addition, it register a new | ||||
|   |   shapeless recipe for the node, using the base node plus a steel ingot. | ||||
|   | | ||||
|   |  Arguments: | ||||
|   |   name      The base node name | ||||
|   |   infotext  The infotext description (in case the name is too long). | ||||
|   | | ||||
|   |  Example Usage: | ||||
|   |   create_locked("homedecor:refrigerator", "Locked Fridge") | ||||
|   |   ^ This generates a new "Locked Refrigerator" node, whose infotext is | ||||
|   |   "Locked Fridge (owned by <placer>)". | ||||
|   | | ||||
|   |  Notes: | ||||
|   |   If <infotext> is not specified (or is nil), the infotext will be the | ||||
|   |   base node's description prefixed by "Locked ". | ||||
|   | | ||||
|   ]] | ||||
| local function create_locked ( name, infotext ) | ||||
|     local def = { } | ||||
|     for k, v in pairs(minetest.registered_nodes[name]) do | ||||
|         def[k] = v | ||||
|     end | ||||
|     def.type = nil | ||||
|     def.name = nil | ||||
|     local desc = "Locked "..def.description | ||||
|     def.description = desc | ||||
|     local after_place_node = def.after_place_node | ||||
|     def.after_place_node = function(pos, placer) | ||||
|         local meta = minetest.env:get_meta(pos) | ||||
|         meta:set_string("owner", placer:get_player_name() or "") | ||||
|         meta:set_string("infotext", (infotext or desc).." (owned by ".. | ||||
|                         meta:get_string("owner")..")") | ||||
|         if (after_place_node) then | ||||
|             return after_place_node(pos, placer) | ||||
|         end | ||||
|     end | ||||
|     local allow_metadata_inventory_move = def.allow_metadata_inventory_move; | ||||
| 	def.allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) | ||||
| 		local meta = minetest.env:get_meta(pos) | ||||
|         if (player:get_player_name() ~= meta:get_string("owner")) then | ||||
| 			minetest.log("action", player:get_player_name().. | ||||
| 					" tried to access a "..desc.." belonging to ".. | ||||
| 					meta:get_string("owner").." at ".. | ||||
| 					minetest.pos_to_string(pos)) | ||||
| 			return 0 | ||||
| 		end | ||||
| 		if (allow_metadata_inventory_move) then | ||||
| 		    return allow_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player) | ||||
| 		else | ||||
| 		    return count | ||||
|         end | ||||
| 	end | ||||
| 	local allow_metadata_inventory_put = def.allow_metadata_inventory_put; | ||||
|     def.allow_metadata_inventory_put = function(pos, listname, index, stack, player) | ||||
|         local meta = minetest.env:get_meta(pos) | ||||
|         if (player:get_player_name() ~= meta:get_string("owner")) then | ||||
|             minetest.log("action", player:get_player_name().. | ||||
|                     " tried to access a "..desc.." belonging to ".. | ||||
|                     meta:get_string("owner").." at ".. | ||||
|                     minetest.pos_to_string(pos)) | ||||
|             return 0 | ||||
|         end | ||||
|         if (allow_metadata_inventory_put) then | ||||
|             return allow_metadata_inventory_put(pos, listname, index, stack, player) | ||||
|         else | ||||
|             return stack:get_count() | ||||
|         end | ||||
|     end | ||||
|     local allow_metadata_inventory_take = def.allow_metadata_inventory_take; | ||||
|     def.allow_metadata_inventory_take = function(pos, listname, index, stack, player) | ||||
|         local meta = minetest.env:get_meta(pos) | ||||
|         if (player:get_player_name() ~= meta:get_string("owner")) then | ||||
|             minetest.log("action", player:get_player_name().. | ||||
|                     " tried to access a "..desc.." belonging to ".. | ||||
|                     meta:get_string("owner").." at ".. | ||||
|                     minetest.pos_to_string(pos)) | ||||
|             return 0 | ||||
|         end | ||||
|         if (allow_metadata_inventory_take) then | ||||
|             return allow_metadata_inventory_take(pos, listname, index, stack, player) | ||||
|         else | ||||
|             return stack:get_count() | ||||
|         end | ||||
|     end | ||||
|     minetest.register_node(name.."_locked", def) | ||||
|     minetest.register_craft({ | ||||
|         output = name.."_locked", | ||||
|         type = "shapeless", | ||||
|         recipe = { | ||||
|             name, | ||||
|             "default:steel_ingot", | ||||
|         } | ||||
|     }) | ||||
| end | ||||
|  | ||||
| local items = { | ||||
|     { "refrigerator", "Fridge" }, | ||||
|     { "kitchen_cabinet", "Cabinet" }, | ||||
|     { "kitchen_cabinet_half", "Cabinet" }, | ||||
|     { "kitchen_cabinet_with_sink", "Cabinet" }, | ||||
|     { "nightstand_oak_one_drawer", "Nightstand" }, | ||||
|     { "nightstand_oak_two_drawers", "Nightstand" }, | ||||
|     { "nightstand_mahogany_one_drawer", "Nightstand" }, | ||||
|     { "nightstand_mahogany_two_drawers", "Nightstand" }, | ||||
|     { "oven", "Oven" }, | ||||
| } | ||||
|  | ||||
| for _,item in ipairs(items) do | ||||
|     local info = (item[2] and "Locked "..item[2]); | ||||
|     create_locked("homedecor:"..item[1], info); | ||||
| end | ||||
		Reference in New Issue
	
	Block a user