From e28402d79f3ef8409cbe95a4db3f772e6b386142 Mon Sep 17 00:00:00 2001 From: SX <50966843+S-S-X@users.noreply.github.com> Date: Sun, 18 Oct 2020 06:56:47 +0300 Subject: [PATCH] #48 Allow setting/using machine_use_priv (#49) Co-authored-by: SX --- luatool/init.lua | 3 +++ metatool/api.lua | 17 ++++++++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/luatool/init.lua b/luatool/init.lua index bae2602..f02c8e4 100644 --- a/luatool/init.lua +++ b/luatool/init.lua @@ -14,6 +14,9 @@ local tool = metatool:register_tool('luatool', { name = 'LuaTool', texture = 'luatool_wand.png', recipe = recipe, + settings = { + machine_use_priv = 'server' + }, on_read_node = function(tooldef, player, pointed_thing, node, pos) local data, group = tooldef:copy(node, pos, player) local description = type(data) == 'table' and data.description or ('Data from ' .. minetest.pos_to_string(pos)) diff --git a/metatool/api.lua b/metatool/api.lua index 126e661..8113586 100644 --- a/metatool/api.lua +++ b/metatool/api.lua @@ -219,11 +219,18 @@ end -- Called when registered tool is used metatool.on_use = function(self, toolname, itemstack, player, pointed_thing) - if not player or type(player) == 'table' then - return - end local tool = self.tools[toolname] + if not player or not tool then return end + + if type(player) ~= 'userdata' then + -- if tool has machine_use_priv and player has it allow using tool even if player is not userdata (fake player) + local machine_use_priv = tool.settings.machine_use_priv + if not machine_use_priv or not metatool.check_privs(player, machine_use_priv) then + return + end + end + if self.privileged_tools[toolname] then if not metatool.check_privs(player, tool.privs) then minetest.chat_send_player(player:get_player_name(), 'You are not allowed to use this tool.') @@ -397,8 +404,8 @@ metatool.register_node = function(self, toolname, name, definition, override) end metatool.get_node = function(self, tool, player, pointed_thing) - if not player or type(player) == 'table' or not pointed_thing then - -- not valid player or fake player, fake player is not supported (yet) + if not player or not pointed_thing then + -- not valid player or pointed_thing return end