@@ -203,6 +203,14 @@ local function on_place_node(place_to, newnode,
203
203
end
204
204
end
205
205
206
+ local function can_dig_door (pos , digger )
207
+ local digger_name = digger and digger :get_player_name ()
208
+ if digger_name and minetest .get_player_privs (digger_name ).protection_bypass then
209
+ return true
210
+ end
211
+ return minetest .get_meta (pos ):get_string (" doors_owner" ) == digger_name
212
+ end
213
+
206
214
function doors .register (name , def )
207
215
if not name :find (" :" ) then
208
216
name = " doors:" .. name
@@ -273,8 +281,10 @@ function doors.register(name, def)
273
281
end
274
282
275
283
local above = {x = pos .x , y = pos .y + 1 , z = pos .z }
276
- if not minetest .registered_nodes [
277
- minetest .get_node (above ).name ].buildable_to then
284
+ local top_node = minetest .get_node_or_nil (above )
285
+ local topdef = top_node and minetest .registered_nodes [top_node .name ]
286
+
287
+ if not topdef or not topdef .buildable_to then
278
288
return itemstack
279
289
end
280
290
@@ -336,21 +346,6 @@ function doors.register(name, def)
336
346
end
337
347
def .recipe = nil
338
348
339
- local can_dig = function (pos , digger )
340
- if not def .protected then
341
- return true
342
- end
343
- if minetest .check_player_privs (digger , " protection_bypass" ) then
344
- return true
345
- end
346
- local meta = minetest .get_meta (pos )
347
- local owner_name
348
- if digger then
349
- owner_name = digger :get_player_name ()
350
- end
351
- return meta :get_string (" doors_owner" ) == owner_name
352
- end
353
-
354
349
if not def .sounds then
355
350
def .sounds = default .node_sound_wood_defaults ()
356
351
end
@@ -379,14 +374,12 @@ function doors.register(name, def)
379
374
minetest .remove_node ({x = pos .x , y = pos .y + 1 , z = pos .z })
380
375
nodeupdate ({x = pos .x , y = pos .y + 1 , z = pos .z })
381
376
end
382
- def .can_dig = function (pos , player )
383
- return can_dig (pos , player )
384
- end
385
377
def .on_rotate = function (pos , node , user , mode , new_param2 )
386
378
return false
387
379
end
388
380
389
381
if def .protected then
382
+ def .can_dig = can_dig_door
390
383
def .on_blast = function () end
391
384
else
392
385
def .on_blast = function (pos , intensity )
@@ -540,16 +533,6 @@ function doors.register_trapdoor(name, def)
540
533
local name_closed = name
541
534
local name_opened = name .. " _open"
542
535
543
- local function check_player_priv (pos , player )
544
- if not def .protected or
545
- minetest .check_player_privs (player , " protection_bypass" ) then
546
- return true
547
- end
548
- local meta = minetest .get_meta (pos )
549
- local player_name = player and player :get_player_name ()
550
- return meta :get_string (" doors_owner" ) == player_name
551
- end
552
-
553
536
def .on_rightclick = function (pos , node , clicker , itemstack , pointed_thing )
554
537
_doors .trapdoor_toggle (pos , node , clicker )
555
538
return itemstack
@@ -560,9 +543,9 @@ function doors.register_trapdoor(name, def)
560
543
def .paramtype = " light"
561
544
def .paramtype2 = " facedir"
562
545
def .is_ground_content = false
563
- def .can_dig = check_player_priv
564
546
565
547
if def .protected then
548
+ def .can_dig = can_dig_door
566
549
def .after_place_node = function (pos , placer , itemstack , pointed_thing )
567
550
local pn = placer :get_player_name ()
568
551
local meta = minetest .get_meta (pos )
0 commit comments