@@ -6,6 +6,15 @@ local _doors = {}
66_doors .registered_doors = {}
77_doors .registered_trapdoors = {}
88
9+ local function replace_old_owner_information (pos )
10+ local meta = minetest .get_meta (pos )
11+ local owner = meta :get_string (" doors_owner" )
12+ if owner and owner ~= " " then
13+ meta :set_string (" owner" , owner )
14+ meta :set_string (" doors_owner" , " " )
15+ end
16+ end
17+
918-- returns an object to a door object or nil
1019function doors .get (pos )
1120 local node_name = minetest .get_node (pos ).name
@@ -139,28 +148,10 @@ function _doors.door_toggle(pos, node, clicker)
139148 state = tonumber (state )
140149 end
141150
142- if clicker and not minetest .check_player_privs (clicker , " protection_bypass" ) then
143- -- is player wielding the right key?
144- local item = clicker :get_wielded_item ()
145- local owner = meta :get_string (" doors_owner" )
146- if item :get_name () == " default:key" then
147- local key_meta = item :get_meta ()
148- local secret = meta :get_string (" key_lock_secret" )
149-
150- if key_meta :get_string (" secret" ) == " " then
151- key_meta :set_string (" secret" , minetest .parse_json (item :get_metadata ()).secret )
152- item :set_metadata (" " )
153- end
151+ replace_old_owner_information (pos )
154152
155- if secret ~= key_meta :get_string (" secret" ) then
156- return false
157- end
158-
159- elseif owner ~= " " then
160- if clicker :get_player_name () ~= owner then
161- return false
162- end
163- end
153+ if not default .can_interact_with_node (clicker , pos ) then
154+ return false
164155 end
165156
166157 -- until Lua-5.2 we have no bitwise operators :(
@@ -211,11 +202,8 @@ local function on_place_node(place_to, newnode,
211202end
212203
213204local function can_dig_door (pos , digger )
214- local digger_name = digger and digger :get_player_name ()
215- if digger_name and minetest .get_player_privs (digger_name ).protection_bypass then
216- return true
217- end
218- return minetest .get_meta (pos ):get_string (" doors_owner" ) == digger_name
205+ replace_old_owner_information (pos )
206+ return default .can_interact_with_node (digger , pos )
219207end
220208
221209function doors .register (name , def )
@@ -330,7 +318,7 @@ function doors.register(name, def)
330318 meta :set_int (" state" , state )
331319
332320 if def .protected then
333- meta :set_string (" doors_owner " , pn )
321+ meta :set_string (" owner " , pn )
334322 meta :set_string (" infotext" , " Owned by " .. pn )
335323 end
336324
@@ -394,8 +382,9 @@ function doors.register(name, def)
394382 door :toggle (player )
395383 end
396384 def .on_skeleton_key_use = function (pos , player , newsecret )
385+ replace_old_owner_information (pos )
397386 local meta = minetest .get_meta (pos )
398- local owner = meta :get_string (" doors_owner " )
387+ local owner = meta :get_string (" owner " )
399388 local pname = player :get_player_name ()
400389
401390 -- verify placer is owner of lockable door
@@ -532,28 +521,11 @@ end
532521
533522function _doors .trapdoor_toggle (pos , node , clicker )
534523 node = node or minetest .get_node (pos )
535- if clicker and not minetest .check_player_privs (clicker , " protection_bypass" ) then
536- -- is player wielding the right key?
537- local item = clicker :get_wielded_item ()
538- local meta = minetest .get_meta (pos )
539- local owner = meta :get_string (" doors_owner" )
540- if item :get_name () == " default:key" then
541- local key_meta = item :get_meta ()
542- local secret = meta :get_string (" key_lock_secret" )
543-
544- if key_meta :get_string (" secret" ) == " " then
545- key_meta :set_string (" secret" , minetest .parse_json (item :get_metadata ()).secret )
546- end
547524
548- if secret ~= key_meta :get_string (" secret" ) then
549- return false
550- end
525+ replace_old_owner_information (pos )
551526
552- elseif owner ~= " " then
553- if clicker :get_player_name () ~= owner then
554- return false
555- end
556- end
527+ if not default .can_interact_with_node (clicker , pos ) then
528+ return false
557529 end
558530
559531 local def = minetest .registered_nodes [node .name ]
@@ -595,7 +567,7 @@ function doors.register_trapdoor(name, def)
595567 def .after_place_node = function (pos , placer , itemstack , pointed_thing )
596568 local pn = placer :get_player_name ()
597569 local meta = minetest .get_meta (pos )
598- meta :set_string (" doors_owner " , pn )
570+ meta :set_string (" owner " , pn )
599571 meta :set_string (" infotext" , " Owned by " .. pn )
600572
601573 return minetest .setting_getbool (" creative_mode" )
@@ -607,8 +579,9 @@ function doors.register_trapdoor(name, def)
607579 door :toggle (player )
608580 end
609581 def .on_skeleton_key_use = function (pos , player , newsecret )
582+ replace_old_owner_information (pos )
610583 local meta = minetest .get_meta (pos )
611- local owner = meta :get_string (" doors_owner " )
584+ local owner = meta :get_string (" owner " )
612585 local pname = player :get_player_name ()
613586
614587 -- verify placer is owner of lockable door
0 commit comments