forked from mtcontrib/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").."/crafts.lua") | ||||||
|  |  | ||||||
|  | dofile(minetest.get_modpath("homedecor").."/locked.lua") | ||||||
|  |  | ||||||
| print("[HomeDecor] Loaded!") | 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