From 2cc6640edffd96fcef16fe76901a1de7ab3326f0 Mon Sep 17 00:00:00 2001
From: Auke Kok <sofar@foo-projects.org>
Date: Sat, 13 Feb 2016 20:27:03 -0800
Subject: [PATCH] Open doors when right-clicking a door with a door.

And similarly, if we wield a door and right click any node
that has an on_rightclick() handler, call the handler
instead.

Just to be on the safe side, assure that none of this
code runs when right-clicking an entity or player, which
would likely crash the server.

Fold in PR #831 as well - prevent server crash on door
place on unknown blocks, by @tenplus1.
---
 mods/doors/init.lua | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/mods/doors/init.lua b/mods/doors/init.lua
index b1a04cc7..f6808974 100644
--- a/mods/doors/init.lua
+++ b/mods/doors/init.lua
@@ -185,16 +185,26 @@ function doors.register(name, def)
 		on_place = function(itemstack, placer, pointed_thing)
 			local pos = nil
 
+			if not pointed_thing.type == "node" then
+				return itemstack
+			end
+
 			local node = minetest.get_node(pointed_thing.under)
-			if minetest.registered_nodes[node.name].buildable_to then
+			local def = minetest.registered_nodes[node.name]
+			if def and def.on_rightclick then
+				return def.on_rightclick(pointed_thing.under,
+						node, placer, itemstack)
+			end
+
+			if def and def.buildable_to then
 				pos = pointed_thing.under
 			else
 				pos = pointed_thing.above
 				node = minetest.get_node(pos)
-			end
-
-			if not minetest.registered_nodes[node.name].buildable_to then
-				return itemstack
+				def = minetest.registered_nodes[node.name]
+				if not def or not def.buildable_to then
+					return itemstack
+				end
 			end
 
 			local above = { x = pos.x, y = pos.y + 1, z = pos.z }
-- 
GitLab