forked from mtcontrib/locks
		
	Compare commits
	
		
			12 Commits
		
	
	
		
			nalc-1.0
			...
			f36403bcf9
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| f36403bcf9 | |||
| 
						 | 
					e789726fdf | ||
| 
						 | 
					48103101ba | ||
| 79b8186ed8 | |||
| f0e4b2012e | |||
| 4d3a7e51df | |||
| bd6909326c | |||
| ca94c8d43e | |||
| 63a2a54be2 | |||
| 
						 | 
					ed0db28add | ||
| 
						 | 
					c79e8fe19e | ||
| 
						 | 
					bfce8b29eb | 
@@ -1,2 +1,3 @@
 | 
			
		||||
default
 | 
			
		||||
pipeworks?
 | 
			
		||||
basic_materials?
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										38
									
								
								init.lua
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								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", {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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