Skeleton key: Change to use left-click (tool on_use)
authorAuke Kok <sofar@foo-projects.org>
Tue, 14 Mar 2017 02:56:08 +0000 (19:56 -0700)
committerparamat <mat.gregory@virginmedia.com>
Wed, 15 Mar 2017 22:22:21 +0000 (22:22 +0000)
Instead of right click, the skeleton key is now a true `tool`
in the sense that it's default left-click action is to create
a key for the locked object.

This is far better than the outcome of the patches we've done
where the only way to create a key for a locked item was to
use sneak+rightclick. Now keys are perhaps a bit more sensible,
left for making keys, right for opening stuff with keys.

Fixes #1625

mods/default/tools.lua

index 51854b930a8552dd47af5b4121ab9c698b71af57..1a08b9184c765e162732f9ea76eba02231ab055f 100644 (file)
@@ -383,22 +383,13 @@ minetest.register_tool("default:skeleton_key", {
        description = "Skeleton Key",
        inventory_image = "default_key_skeleton.png",
        groups = {key = 1},
-       on_place = function(itemstack, placer, pointed_thing)
-               local under = pointed_thing.under
-               local node = minetest.get_node(under)
-               local def = minetest.registered_nodes[node.name]
-               if def and def.on_rightclick and
-                               not (placer and placer:get_player_control().sneak) then
-                       return def.on_rightclick(under, node, placer, itemstack,
-                               pointed_thing) or itemstack
-               end
-
+       on_use = function(itemstack, user, pointed_thing)
                if pointed_thing.type ~= "node" then
                        return itemstack
                end
 
                local pos = pointed_thing.under
-               node = minetest.get_node(pos)
+               local node = minetest.get_node(pos)
 
                if not node then
                        return itemstack
@@ -413,7 +404,7 @@ minetest.register_tool("default:skeleton_key", {
                                random(2^16) - 1, random(2^16) - 1,
                                random(2^16) - 1, random(2^16) - 1)
 
-                       local secret, _, _ = on_skeleton_key_use(pos, placer, newsecret)
+                       local secret, _, _ = on_skeleton_key_use(pos, user, newsecret)
 
                        if secret then
                                -- finish and return the new key
@@ -421,7 +412,7 @@ minetest.register_tool("default:skeleton_key", {
                                itemstack:add_item("default:key")
                                local meta = itemstack:get_meta()
                                meta:set_string("secret", secret)
-                               meta:set_string("description", "Key to "..placer:get_player_name().."'s "
+                               meta:set_string("description", "Key to "..user:get_player_name().."'s "
                                        ..minetest.registered_nodes[node.name].description)
                                return itemstack
                        end