mirror of
				https://github.com/Sokomine/locks.git
				synced 2025-11-01 00:25:22 +01:00 
			
		
		
		
	Compare commits
	
		
			13 Commits
		
	
	
		
			2.3.1
			...
			f36403bcf9
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| f36403bcf9 | |||
|  | e789726fdf | ||
|  | 48103101ba | ||
| 79b8186ed8 | |||
| f0e4b2012e | |||
| 4d3a7e51df | |||
| bd6909326c | |||
| ca94c8d43e | |||
| 63a2a54be2 | |||
|  | ed0db28add | ||
|  | c79e8fe19e | ||
|  | bfce8b29eb | ||
|  | 09385b7da5 | 
| @@ -1,2 +1,3 @@ | ||||
| default | ||||
| pipeworks? | ||||
| basic_materials? | ||||
|   | ||||
							
								
								
									
										40
									
								
								init.lua
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								init.lua
									
									
									
									
									
								
							| @@ -46,7 +46,7 @@ minetest.register_privilege("diglocks",  { description = "allows to open/use and | ||||
|  | ||||
|  | ||||
| locks.config_button = [[ | ||||
| 	image_button[%d,%d;1,1;locks_lock16.png;locks_config;Config | ||||
| 	image_button[%s,%s;1,1;locks_lock16.png;locks_config;Config | ||||
| Locks] | ||||
| 	tooltip[locks_config;Configure the players or set the password to grant access to other players.] | ||||
| ]] | ||||
| @@ -56,7 +56,7 @@ function locks.get_config_button(x,y) | ||||
| end | ||||
|  | ||||
| locks.authorize_button = [[ | ||||
| 	image_button[%d,%d;1,1;locks_key16.png;locks_authorize;Autho- | ||||
| 	image_button[%s,%s;1,1;locks_key16.png;locks_authorize;Autho- | ||||
| rize] | ||||
| 	tooltip[locks_authorize;Opens a password prompt to grant you access to this object.] | ||||
| ]] | ||||
| @@ -181,6 +181,7 @@ function locks:lock_init( pos, default_formspec ) | ||||
|    meta:set_string("allowed_users",""); | ||||
|    -- objects can be unlocked by passwords as well (if it is set) | ||||
|    meta:set_string("password",""); | ||||
|    meta:mark_as_private("password") | ||||
|    -- the last player who entered the right password (to save space this is not a list) | ||||
|    meta:set_string("pw_user",""); | ||||
|    -- this formspec is presented on right-click for every user | ||||
| @@ -228,6 +229,7 @@ function locks:set_lockdata( pos, data ) | ||||
|    meta:set_string("owner",        (data.owner         or "")); | ||||
|    meta:set_string("allowed_users",(data.allowed_users or "")); | ||||
|    meta:set_string("password",     (data.password      or "")); | ||||
|    meta:mark_as_private("password") | ||||
|    meta:set_string("pw_user",      (data.pw_user       or "")); | ||||
|    meta:set_string("formspec",     (data.formspec      or "")); | ||||
| end | ||||
| @@ -598,6 +600,7 @@ function locks:lock_handle_input( pos, formname, fields, player ) | ||||
|  | ||||
|  | ||||
|       meta:set_string( "password", help[2]); | ||||
|       meta:mark_as_private("password") | ||||
|       -- reset the list of users who typed the right password | ||||
|       meta:set_string("pw_users",""); | ||||
|  | ||||
| @@ -747,22 +750,25 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) | ||||
| 	return false; | ||||
| end) | ||||
|  | ||||
| -- craftitem; that can be used to craft shared locked objects | ||||
| minetest.register_craftitem("locks:lock", { | ||||
|         description = "Lock to lock and share objects", | ||||
|         image = "locks_lock16.png", | ||||
| }); | ||||
| if minetest.get_modpath("basic_materials") then | ||||
| 	minetest.register_alias("locks:lock", "basic_materials:padlock") | ||||
| else | ||||
| 	-- craftitem; that can be used to craft shared locked objects | ||||
| 	minetest.register_craftitem("locks:lock", { | ||||
| 		description = "Lock to lock and share objects", | ||||
| 		image = "locks_lock16.png", | ||||
| 	}); | ||||
|  | ||||
|  | ||||
| minetest.register_craft({ | ||||
|         output = "locks:lock 2", | ||||
|         recipe = { | ||||
|                  {'default:steel_ingot', 'default:steel_ingot','default:steel_ingot'}, | ||||
|                  {'default:steel_ingot', '',                   'default:steel_ingot'}, | ||||
|                  {'',                    'default:steel_ingot',''}, | ||||
|                 } | ||||
|         }); | ||||
|  | ||||
| 	minetest.register_craft({ | ||||
| 			output = "locks:lock 2", | ||||
| 			recipe = { | ||||
| 				{'default:steel_ingot', 'default:steel_ingot','default:steel_ingot'}, | ||||
| 				{'default:steel_ingot', '',                   'default:steel_ingot'}, | ||||
| 				{'',                    'default:steel_ingot',''}, | ||||
| 			} | ||||
| 	}); | ||||
| end | ||||
|  | ||||
| -- a key allowes to open your own shared locked objects | ||||
| minetest.register_craftitem("locks:key", { | ||||
| @@ -798,3 +804,5 @@ dofile(minetest.get_modpath("locks").."/shared_locked_chest.lua"); | ||||
| dofile(minetest.get_modpath("locks").."/shared_locked_sign_wall.lua"); | ||||
| dofile(minetest.get_modpath("locks").."/shared_locked_xdoors2.lua"); | ||||
| dofile(minetest.get_modpath("locks").."/shared_locked_furnace.lua"); | ||||
|  | ||||
| minetest.log("action", "[locks] loaded.") | ||||
|   | ||||
							
								
								
									
										4
									
								
								mod.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mod.conf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| name = locks | ||||
| description = This Mod for Minetest adds objects that can be locked and shared. | ||||
| depends=default | ||||
| optional_depends = pipeworks,basic_materials | ||||
| @@ -140,7 +140,7 @@ minetest.register_node("locks:shared_locked_chest", { | ||||
| minetest.register_craft({ | ||||
|    output = 'locks:shared_locked_chest', | ||||
|    recipe = { | ||||
|       { 'default:chest', 'locks:lock', '' }, | ||||
|       { 'locks:lock', 'default:chest', minetest.get_modpath("basic_materials") and 'basic_materials:ic' or ''}, | ||||
|    }, | ||||
| }) | ||||
|  | ||||
|   | ||||
| @@ -428,7 +428,7 @@ minetest.register_abm({ | ||||
| minetest.register_craft({ | ||||
|    output = 'locks:shared_locked_furnace', | ||||
|    recipe = { | ||||
|       { 'default:furnace', 'locks:lock', '' }, | ||||
|       { 'locks:lock', 'default:furnace', minetest.get_modpath("basic_materials") and 'basic_materials:ic' or ''}, | ||||
|    }, | ||||
| }) | ||||
|  | ||||
|   | ||||
| @@ -71,7 +71,7 @@ minetest.register_node("locks:shared_locked_sign_wall", { | ||||
| minetest.register_craft({ | ||||
|    output = 'locks:shared_locked_sign_wall', | ||||
|    recipe = { | ||||
|       { 'default:sign_wall', 'locks:lock', '' }, | ||||
|       { 'locks:lock', 'default:sign_wall', minetest.get_modpath("basic_materials") and 'basic_materials:ic' or ''}, | ||||
|    }, | ||||
| }) | ||||
|  | ||||
|   | ||||
| @@ -6,217 +6,210 @@ | ||||
|  | ||||
| local door_bottom = {-0.5, -0.5, -0.5, 0.5, 0.5, -0.4} | ||||
| local door_top = { | ||||
|     {-0.5, -0.5, -0.5, -0.3, 0.5, -0.4}, | ||||
|     {0.3, -0.5, -0.5, 0.5, 0.5, -0.4}, | ||||
|     {-0.3, 0.3, -0.5, 0.3, 0.5, -0.4}, | ||||
|     {-0.3, -0.5, -0.5, 0.3, -0.4, -0.4}, | ||||
|     {-0.05, -0.4, -0.5, 0.05, 0.3, -0.4}, | ||||
|     {-0.3, -0.1, -0.5, -0.05, 0, -0.4}, | ||||
|     {0.05, -0.1, -0.5, 0.3, 0, -0.4} | ||||
| 	{-0.5, -0.5, -0.5, -0.3, 0.5, -0.4}, | ||||
| 	{0.3, -0.5, -0.5, 0.5, 0.5, -0.4}, | ||||
| 	{-0.3, 0.3, -0.5, 0.3, 0.5, -0.4}, | ||||
| 	{-0.3, -0.5, -0.5, 0.3, -0.4, -0.4}, | ||||
| 	{-0.05, -0.4, -0.5, 0.05, 0.3, -0.4}, | ||||
| 	{-0.3, -0.1, -0.5, -0.05, 0, -0.4}, | ||||
| 	{0.05, -0.1, -0.5, 0.3, 0, -0.4} | ||||
| } | ||||
|  | ||||
| local is_top = function(name) | ||||
|     return name:sub(12, 12) == "t" | ||||
| 	return name:sub(12, 12) == "t" | ||||
| end | ||||
|  | ||||
|  | ||||
| local xdoors2_transform = function(pos, node, puncher) | ||||
|  | ||||
|     if( not( locks:lock_allow_use( pos, puncher ))) then | ||||
|       minetest.chat_send_player( puncher:get_player_name(), "This door is locked. It can only be opened by its owner or people with a key that fits."); | ||||
|       return; | ||||
|     end | ||||
| 	if is_top(node.name) then | ||||
| 		pos = {x = pos.x, y = pos.y - 1, z = pos.z} | ||||
| 	end | ||||
|  | ||||
|     if is_top(node.name) then | ||||
|         pos = {x = pos.x, y = pos.y - 1, z = pos.z} | ||||
|     end | ||||
|     local t = 3 - node.name:sub(-1) | ||||
|     local p2 = 0 | ||||
|     if t == 2 then | ||||
|         p2 = (node.param2 + 1) % 4 | ||||
| 	minetest.sound_play("doors_door_open", { pos = pos, gain = 0.3, max_hear_distance = 10}) | ||||
|     else | ||||
|         p2 = (node.param2 + 3) % 4 | ||||
| 	minetest.sound_play("doors_door_close", { pos = pos, gain = 0.3, max_hear_distance = 10}) | ||||
|     end | ||||
| 	if( not( locks:lock_allow_use( pos, puncher ))) then | ||||
|       minetest.chat_send_player( puncher:get_player_name(), "This door is locked. It can only be opened by its owner or people with a key that fits.") | ||||
|       return | ||||
| 	end | ||||
|  | ||||
| 	local t = 3 - node.name:sub(-1) | ||||
| 	local p2 = 0 | ||||
| 	if t == 2 then | ||||
| 		p2 = (node.param2 + 1) % 4 | ||||
| 		minetest.sound_play("doors_door_open", { pos = pos, gain = 0.3, max_hear_distance = 10}) | ||||
| 	else | ||||
| 		p2 = (node.param2 + 3) % 4 | ||||
| 		minetest.sound_play("doors_door_close", { pos = pos, gain = 0.3, max_hear_distance = 10}) | ||||
| 	end | ||||
| 	 | ||||
|     local olddata = locks:get_lockdata( pos ); | ||||
|     minetest.add_node(pos, {name = "locks:door_bottom_"..t, param2 = p2}) | ||||
|     minetest.add_node({x = pos.x, y = pos.y + 1, z = pos.z}, {name = "locks:door_top_"..t, param2 = p2}) | ||||
|  | ||||
|     -- remember who owns the door, what passwords are set etc. | ||||
|     locks:set_lockdata( pos, olddata ); | ||||
|     locks:set_lockdata( {x = pos.x, y = pos.y + 1, z = pos.z}, olddata ); | ||||
| 	-- No need to remember who owns the door, what passwords are set etc. | ||||
| 	-- because minetest.swap_node() keeps metadata at pos | ||||
| 	minetest.swap_node(pos, {name = "locks:door_bottom_"..t, param2 = p2}) | ||||
| 	minetest.swap_node({x = pos.x, y = pos.y + 1, z = pos.z}, {name = "locks:door_top_"..t, param2 = p2}) | ||||
| end | ||||
|  | ||||
|  | ||||
| local xdoors2_destruct = function(pos, oldnode) | ||||
|     if is_top(oldnode.name) then | ||||
|         pos = {x = pos.x, y = pos.y - 1, z = pos.z} | ||||
|     end | ||||
|     minetest.remove_node(pos) | ||||
|     minetest.remove_node({x = pos.x, y = pos.y + 1, z = pos.z}) | ||||
| 	if is_top(oldnode.name) then | ||||
| 		pos = {x = pos.x, y = pos.y - 1, z = pos.z} | ||||
| 	end | ||||
| 	minetest.remove_node(pos) | ||||
| 	minetest.remove_node({x = pos.x, y = pos.y + 1, z = pos.z}) | ||||
| end | ||||
|  | ||||
| for i = 1, 2 do | ||||
|     minetest.register_node("locks:door_top_"..i, { | ||||
|         tiles = {"xdoors2_side.png", "xdoors2_side.png", "xdoors2_top.png", "xdoors2_bottom.png", "xdoors2_top_"..(3 - i)..".png", "xdoors2_top_"..i..".png"}, | ||||
|         paramtype = "light", | ||||
|         paramtype2 = "facedir", | ||||
|         drawtype = "nodebox", | ||||
|         drop = "locks:door", | ||||
|         groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, | ||||
|         node_box = { | ||||
|             type = "fixed", | ||||
|             fixed = door_top | ||||
|         }, | ||||
|         selection_box = { | ||||
|             type = "fixed", | ||||
|             fixed = door_bottom | ||||
|         }, | ||||
|         on_punch = xdoors2_transform, | ||||
|         after_dig_node = xdoors2_destruct, | ||||
| 	minetest.register_node("locks:door_top_"..i, { | ||||
| 		tiles = {"xdoors2_side.png", "xdoors2_side.png", "xdoors2_top.png", "xdoors2_bottom.png", "xdoors2_top_"..(3 - i)..".png", "xdoors2_top_"..i..".png"}, | ||||
| 		paramtype = "light", | ||||
| 		paramtype2 = "facedir", | ||||
| 		drawtype = "nodebox", | ||||
| 		drop = "locks:door", | ||||
| 		groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, | ||||
| 		node_box = { | ||||
| 			type = "fixed", | ||||
| 			fixed = door_top | ||||
| 		}, | ||||
| 		selection_box = { | ||||
| 			type = "fixed", | ||||
| 			fixed = door_bottom | ||||
| 		}, | ||||
| 		on_punch = xdoors2_transform, | ||||
| 		after_dig_node = xdoors2_destruct, | ||||
|  | ||||
|         on_construct = function(pos) | ||||
|                 locks:lock_init( pos, | ||||
|                                "size[8,2]".. | ||||
| 				locks.uniform_background.. | ||||
|                                "button_exit[6.3,1.2;1.7,1;locks_sent_input;Proceed]" ); | ||||
|         end, | ||||
| 		on_construct = function(pos) | ||||
| 			locks:lock_init( pos, | ||||
| 				"size[8,2]"..locks.uniform_background.. | ||||
| 					"button_exit[6.3,1.2;1.7,1;locks_sent_input;Proceed]" ) | ||||
| 		end, | ||||
|  | ||||
|         on_receive_fields = function(pos, formname, fields, sender) | ||||
|                 locks:lock_handle_input( pos, formname, fields, sender ); | ||||
|         end, | ||||
| 		on_receive_fields = function(pos, formname, fields, sender) | ||||
| 			locks:lock_handle_input( {x=pos.x, y=pos.y-1, z=pos.z}, formname, fields, sender ) | ||||
| 		end, | ||||
|  | ||||
|         can_dig = function(pos,player) | ||||
|                 return locks:lock_allow_dig( pos, player ); | ||||
|         end | ||||
|     }) | ||||
|     minetest.register_node("locks:door_bottom_"..i, { | ||||
|         tiles = {"xdoors2_side.png", "xdoors2_side.png", "xdoors2_top.png", "xdoors2_bottom.png", "locks_xdoors2_bottom_"..(3 - i)..".png", "locks_xdoors2_bottom_"..i..".png"}, | ||||
|         paramtype = "light", | ||||
|         paramtype2 = "facedir", | ||||
|         drawtype = "nodebox", | ||||
|         drop = "locks:door", | ||||
|         groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, | ||||
|         node_box = { | ||||
|             type = "fixed", | ||||
|             fixed = door_bottom | ||||
|         }, | ||||
|         selection_box = { | ||||
|             type = "fixed", | ||||
|             fixed = door_bottom | ||||
|         }, | ||||
|         on_punch = xdoors2_transform, | ||||
|         after_dig_node = xdoors2_destruct, | ||||
| 		can_dig = function(pos,player) | ||||
| 			return locks:lock_allow_dig( {x=pos.x, y=pos.y-1, z=pos.z}, player ) | ||||
| 		end | ||||
| 	}) | ||||
| 	minetest.register_node("locks:door_bottom_"..i, { | ||||
| 		tiles = {"xdoors2_side.png", "xdoors2_side.png", "xdoors2_top.png", "xdoors2_bottom.png", "locks_xdoors2_bottom_"..(3 - i)..".png", "locks_xdoors2_bottom_"..i..".png"}, | ||||
| 		paramtype = "light", | ||||
| 		paramtype2 = "facedir", | ||||
| 		drawtype = "nodebox", | ||||
| 		drop = "locks:door", | ||||
| 		groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, | ||||
| 		node_box = { | ||||
| 			type = "fixed", | ||||
| 			fixed = door_bottom | ||||
| 		}, | ||||
| 		selection_box = { | ||||
| 			type = "fixed", | ||||
| 			fixed = door_bottom | ||||
| 		}, | ||||
| 		on_punch = xdoors2_transform, | ||||
| 		after_dig_node = xdoors2_destruct, | ||||
|  | ||||
|         on_construct = function(pos) | ||||
|                 locks:lock_init( pos, | ||||
|                                "size[8,2]".. | ||||
| 				locks.uniform_background.. | ||||
|                                "button_exit[6.3,1.2;1.7,1;locks_sent_input;Proceed]" ); | ||||
|         end, | ||||
| 		on_construct = function(pos) | ||||
| 			locks:lock_init( pos, | ||||
| 				"size[8,2]"..locks.uniform_background.. | ||||
| 					"button_exit[6.3,1.2;1.7,1;locks_sent_input;Proceed]" ) | ||||
| 		end, | ||||
|  | ||||
|         on_receive_fields = function(pos, formname, fields, sender) | ||||
|                 locks:lock_handle_input( pos, formname, fields, sender ); | ||||
|         end, | ||||
| 		on_receive_fields = function(pos, formname, fields, sender) | ||||
| 			locks:lock_handle_input( pos, formname, fields, sender ) | ||||
| 		end, | ||||
|  | ||||
|         can_dig = function(pos,player) | ||||
|                 return locks:lock_allow_dig( pos, player ); | ||||
|         end | ||||
|     }) | ||||
| 		can_dig = function(pos,player) | ||||
| 			return locks:lock_allow_dig( pos, player ) | ||||
| 		end | ||||
| 	}) | ||||
| end | ||||
|  | ||||
| local delta = { | ||||
|     {x = -1, z = 0}, | ||||
|     {x = 0, z = 1}, | ||||
|     {x = 1, z = 0}, | ||||
|     {x = 0, z = -1} | ||||
| 	{x = -1, z = 0}, | ||||
| 	{x = 0, z = 1}, | ||||
| 	{x = 1, z = 0}, | ||||
| 	{x = 0, z = -1} | ||||
| } | ||||
|  | ||||
| minetest.register_node("locks:door", { | ||||
|     description = "Shared locked Wooden Door", | ||||
|     node_placement_prediction = "", | ||||
|     inventory_image = 'locks_xdoors2_door.png', | ||||
|     wield_image = 'xdoors2_door.png', | ||||
|     stack_max = 1, | ||||
|     sunlight_propogates = true, | ||||
|     on_place = function(itemstack, placer, pointed_thing) | ||||
|         local above = pointed_thing.above | ||||
| 	local above1 = {x = above.x, y = above.y + 1, z = above.z}; | ||||
|         if (minetest.is_protected(above,  placer:get_player_name()) | ||||
|          or minetest.is_protected(above1, placer:get_player_name())) then | ||||
| 	    minetest.chat_send_player(placer:get_player_name(), "This area is protected!") | ||||
| 	    return itemstack | ||||
| 	else | ||||
|             -- there should be 2 empty nodes | ||||
|             if minetest.get_node(above1).name ~= "air" then | ||||
|                 return itemstack | ||||
|             end | ||||
|          | ||||
|             local fdir = 0 | ||||
|             local placer_pos = placer:getpos() | ||||
|             if placer_pos then | ||||
|                 dir = { | ||||
|                     x = above.x - placer_pos.x, | ||||
|                     y = above.y - placer_pos.y, | ||||
|                     z = above.z - placer_pos.z | ||||
|                 } | ||||
|                 fdir = minetest.dir_to_facedir(dir) | ||||
|             end | ||||
| 	description = "Shared locked Wooden Door", | ||||
| 	node_placement_prediction = "", | ||||
| 	inventory_image = 'locks_xdoors2_door.png', | ||||
| 	wield_image = 'locks_xdoors2_door.png', | ||||
| 	stack_max = 1, | ||||
| 	sunlight_propogates = true, | ||||
| 	on_place = function(itemstack, placer, pointed_thing) | ||||
| 		local pname = placer:get_player_name() | ||||
| 		local above = pointed_thing.above | ||||
| 		local above1 = {x = above.x, y = above.y + 1, z = above.z} | ||||
| 		if (minetest.is_protected(above,  pname) | ||||
| 			 or minetest.is_protected(above1, pname)) then | ||||
| 			minetest.chat_send_player(pname, "This area is protected!") | ||||
| 			return itemstack | ||||
| 		else | ||||
| 			-- there should be 2 empty nodes | ||||
| 			if minetest.get_node(above1).name ~= "air" then | ||||
| 				return itemstack | ||||
| 			end | ||||
| 			 | ||||
| 			local fdir = 0 | ||||
| 			local placer_pos = placer:get_pos() | ||||
| 			if placer_pos then | ||||
| 				fdir = minetest.dir_to_facedir({ | ||||
| 					x = above.x - placer_pos.x, | ||||
| 					y = above.y - placer_pos.y, | ||||
| 					z = above.z - placer_pos.z | ||||
| 				}) | ||||
| 			end | ||||
|  | ||||
|             local t = 1 | ||||
|             local another_door = minetest.get_node({x = above.x + delta[fdir + 1].x, y = above.y, z = above.z + delta[fdir + 1].z}) | ||||
|             if (another_door.name:sub(-1) == "1" and another_door.param2 == fdir) | ||||
|                 or (another_door.name:sub(-1) == "2" and another_door.param2 == (fdir + 1) % 4) then | ||||
|                 t = 2 | ||||
|             end | ||||
| 			local t = 1 | ||||
| 			local another_door = minetest.get_node({x = above.x + delta[fdir + 1].x, y = above.y, z = above.z + delta[fdir + 1].z}) | ||||
| 			if (another_door.name:sub(-1) == "1" and another_door.param2 == fdir) | ||||
| 			or (another_door.name:sub(-1) == "2" and another_door.param2 == (fdir + 1) % 4) then | ||||
| 				t = 2 | ||||
| 			end | ||||
|  | ||||
|             minetest.add_node(above, {name = "locks:door_bottom_"..t, param2 = fdir}) | ||||
|             minetest.add_node({x = above.x, y = above.y + 1, z = above.z}, {name = "locks:door_top_"..t, param2 = fdir}) | ||||
| 			minetest.add_node(above, {name = "locks:door_bottom_"..t, param2 = fdir}) | ||||
| 			minetest.add_node(above1, {name = "locks:door_top_"..t, param2 = fdir}) | ||||
|  | ||||
|             -- store who owns the door; the other data can be default for now | ||||
|             locks:lock_set_owner( above, placer:get_player_name() or "", "Shared locked door"); | ||||
|             locks:lock_set_owner( {x = above.x, y = above.y + 1, z = above.z}, placer:get_player_name() or "", "Shared locked door"); | ||||
| 			-- store who owns the door; the other data can be default for now | ||||
| 			locks:lock_set_owner( above, pname or "", "Shared locked door") | ||||
| 			locks:lock_set_owner( above1, pname or "", "Shared locked door") | ||||
|  | ||||
|             return ItemStack("") | ||||
| 			return ItemStack("") | ||||
| 		end | ||||
| 	end | ||||
|     end | ||||
| }) | ||||
|  | ||||
|  | ||||
| local ing = minetest.get_modpath("basic_materials") and 'basic_materials:ic' or '' | ||||
| -- if xdoors2 is installed | ||||
| if( minetest.get_modpath("xdoors2") ~= nil ) then | ||||
|    minetest.register_craft({ | ||||
|       output = 'locks:door', | ||||
|       recipe = { | ||||
|          { 'xdoors2:door', 'locks:lock', '' }, | ||||
|       }, | ||||
|    }); | ||||
|  | ||||
| -- if the normal doors are installed | ||||
| else if( minetest.get_modpath("doors") ~= nil ) then | ||||
|  | ||||
|    minetest.register_craft({ | ||||
|       output = 'locks:door', | ||||
|       recipe = { | ||||
|          { 'doors:door_wood', 'locks:lock', '' }, | ||||
|       }, | ||||
| 		output = 'locks:door', | ||||
| 		recipe = { | ||||
| 			{ 'locks: lock', 'xdoors2:door', ing}, | ||||
| 		}, | ||||
|    }) | ||||
|  | ||||
| -- fallback if no doors can be found | ||||
| 	-- if the normal doors are installed | ||||
| elseif( minetest.get_modpath("doors") ~= nil ) then | ||||
|  | ||||
| 	minetest.register_craft({ | ||||
| 		output = 'locks:door', | ||||
| 		recipe = { | ||||
| 			{ 'locks:lock', 'doors:door_wood', ing}, | ||||
| 		}, | ||||
| 	}) | ||||
|  | ||||
| 	-- fallback if no doors can be found | ||||
| else | ||||
|    minetest.register_craft({ | ||||
|       output = 'locks:door', | ||||
|       recipe = { | ||||
|          { 'default:wood', 'default:wood', '' }, | ||||
|          { 'default:wood', 'default:wood', 'locks:lock' }, | ||||
|          { 'default:wood', 'default:wood', '' }, | ||||
|       }, | ||||
|    }); | ||||
| 	minetest.register_craft({ | ||||
| 		output = 'locks:door', | ||||
| 		recipe = { | ||||
| 			{ 'default:wood', 'default:wood', '' }, | ||||
| 			{ 'default:wood', 'default:wood', 'locks:lock' }, | ||||
| 			{ 'default:wood', 'default:wood', ing }, | ||||
| 		}, | ||||
| 	}) | ||||
| end | ||||
| end -- of previous else | ||||
|  | ||||
|  | ||||
|  | ||||
| print( "[Mod] locks: loading locks:door"); | ||||
| print( "[Mod] locks: loading locks:door") | ||||
|   | ||||
		Reference in New Issue
	
	Block a user