Screwdriver: Allow non-native rotations if supported by targeted node
authorAlex Ford <gordion42@gmail.com>
Sat, 8 Apr 2017 04:03:11 +0000 (22:03 -0600)
committerparamat <mat.gregory@virginmedia.com>
Tue, 11 Apr 2017 02:58:13 +0000 (03:58 +0100)
This also allows custom actions (such as using the screwdriver as a wrench).

mods/screwdriver/init.lua

index 2a53ae377ffab174d8711915f1e58e047e8f2c54..e76f0545f1c419e6054ce72e536b8c36b9cdc3c3 100644 (file)
@@ -98,12 +98,17 @@ screwdriver.handler = function(itemstack, user, pointed_thing, mode, uses)
        end
        -- can we rotate this paramtype2?
        local fn = screwdriver.rotate[ndef.paramtype2]
-       if not fn then
+       if not fn and not ndef.on_rotate then
                return itemstack
        end
 
        local should_rotate = true
-       local new_param2 = fn(pos, node, mode)
+       local new_param2
+       if fn then
+               new_param2 = fn(pos, node, mode)
+       else
+               new_param2 = node.param2
+       end
 
        -- Node provides a handler, so let the handler decide instead if the node can be rotated
        if ndef.on_rotate then
@@ -122,7 +127,7 @@ screwdriver.handler = function(itemstack, user, pointed_thing, mode, uses)
                return itemstack
        end
 
-       if should_rotate then
+       if should_rotate and new_param2 ~= node.param2 then
                node.param2 = new_param2
                minetest.swap_node(pos, node)
                minetest.check_for_falling(pos)