@@ -6,6 +6,15 @@ local _doors = {}
6
6
_doors .registered_doors = {}
7
7
_doors .registered_trapdoors = {}
8
8
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
+
9
18
-- returns an object to a door object or nil
10
19
function doors .get (pos )
11
20
local node_name = minetest .get_node (pos ).name
@@ -139,28 +148,10 @@ function _doors.door_toggle(pos, node, clicker)
139
148
state = tonumber (state )
140
149
end
141
150
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 )
154
152
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
164
155
end
165
156
166
157
-- until Lua-5.2 we have no bitwise operators :(
@@ -211,11 +202,8 @@ local function on_place_node(place_to, newnode,
211
202
end
212
203
213
204
local 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 )
219
207
end
220
208
221
209
function doors .register (name , def )
@@ -330,7 +318,7 @@ function doors.register(name, def)
330
318
meta :set_int (" state" , state )
331
319
332
320
if def .protected then
333
- meta :set_string (" doors_owner " , pn )
321
+ meta :set_string (" owner " , pn )
334
322
meta :set_string (" infotext" , " Owned by " .. pn )
335
323
end
336
324
@@ -394,8 +382,9 @@ function doors.register(name, def)
394
382
door :toggle (player )
395
383
end
396
384
def .on_skeleton_key_use = function (pos , player , newsecret )
385
+ replace_old_owner_information (pos )
397
386
local meta = minetest .get_meta (pos )
398
- local owner = meta :get_string (" doors_owner " )
387
+ local owner = meta :get_string (" owner " )
399
388
local pname = player :get_player_name ()
400
389
401
390
-- verify placer is owner of lockable door
@@ -532,28 +521,11 @@ end
532
521
533
522
function _doors .trapdoor_toggle (pos , node , clicker )
534
523
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
547
524
548
- if secret ~= key_meta :get_string (" secret" ) then
549
- return false
550
- end
525
+ replace_old_owner_information (pos )
551
526
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
557
529
end
558
530
559
531
local def = minetest .registered_nodes [node .name ]
@@ -595,7 +567,7 @@ function doors.register_trapdoor(name, def)
595
567
def .after_place_node = function (pos , placer , itemstack , pointed_thing )
596
568
local pn = placer :get_player_name ()
597
569
local meta = minetest .get_meta (pos )
598
- meta :set_string (" doors_owner " , pn )
570
+ meta :set_string (" owner " , pn )
599
571
meta :set_string (" infotext" , " Owned by " .. pn )
600
572
601
573
return minetest .setting_getbool (" creative_mode" )
@@ -607,8 +579,9 @@ function doors.register_trapdoor(name, def)
607
579
door :toggle (player )
608
580
end
609
581
def .on_skeleton_key_use = function (pos , player , newsecret )
582
+ replace_old_owner_information (pos )
610
583
local meta = minetest .get_meta (pos )
611
- local owner = meta :get_string (" doors_owner " )
584
+ local owner = meta :get_string (" owner " )
612
585
local pname = player :get_player_name ()
613
586
614
587
-- verify placer is owner of lockable door
0 commit comments