Open doors when right-clicking a door with a door.
authorAuke Kok <sofar@foo-projects.org>
Sun, 14 Feb 2016 04:27:03 +0000 (20:27 -0800)
committerparamat <mat.gregory@virginmedia.com>
Fri, 19 Feb 2016 19:54:50 +0000 (19:54 +0000)
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

index b1a04cc7b8c1631f840f8003ffc295eab59eff4b..f680897430431b6e09193663937e2d540d5460da 100644 (file)
@@ -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 }