From f8cb55a60eada4e521954e0dab4177854ee7e389 Mon Sep 17 00:00:00 2001 From: thetaepsilon-gamedev Date: Sat, 14 Oct 2017 18:51:57 +0100 Subject: [PATCH] wielder.lua: set default ghost tool for node breaker to the hand, add stub implementation of can_tool_dig_node() to check if set tool can dig node --- wielder.lua | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/wielder.lua b/wielder.lua index 36c1eb9..d1a1822 100644 --- a/wielder.lua +++ b/wielder.lua @@ -19,6 +19,11 @@ local function set_wielder_formspec(data, meta) meta:set_string("infotext", data.description) end +local can_tool_dig_node = function(nodename, toolcaps, toolname) + pipeworks.logger("can_tool_dig_node() STUB nodename="..tostring(nodename).." toolname="..tostring(toolname).." toolcaps: "..dump(toolcaps)) + return true +end + local function wielder_on(data, wielder_pos, wielder_node) data.fixup_node(wielder_pos, wielder_node) if wielder_node.name ~= data.name_base.."_off" then return end @@ -293,7 +298,7 @@ if pipeworks.enable_node_breaker then wield_inv_height = 1, can_dig_nonempty_wield_inv = true, ghost_inv_name = "ghost_pick", - ghost_tool = "default:pick_mese", + ghost_tool = ":", -- hand by default fixup_node = function (pos, node) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() @@ -346,17 +351,24 @@ if pipeworks.enable_node_breaker then masquerade_as_owner = true, sneak = false, act = function(virtplayer, pointed_thing) + --local dname = "nodebreaker.act() " local wieldstack = virtplayer:get_wielded_item() local oldwieldstack = ItemStack(wieldstack) local on_use = (minetest.registered_items[wieldstack:get_name()] or {}).on_use if on_use then + --pipeworks.logger(dname.."invoking on_use "..tostring(on_use)) wieldstack = on_use(wieldstack, virtplayer, pointed_thing) or wieldstack virtplayer:set_wielded_item(wieldstack) else local under_node = minetest.get_node(pointed_thing.under) local on_dig = (minetest.registered_nodes[under_node.name] or {on_dig=minetest.node_dig}).on_dig - on_dig(pointed_thing.under, under_node, virtplayer) - wieldstack = virtplayer:get_wielded_item() + -- check that the current tool is capable of destroying the target node. + -- if we can't, don't dig, and leave the wield stack unchanged. + -- note that wieldstack:get_tool_capabilities() returns hand properties if the item has none of it's own. + if can_tool_dig_node(under_node.name, wieldstack:get_tool_capabilities(), wieldstack:get_name()) then + on_dig(pointed_thing.under, under_node, virtplayer) + wieldstack = virtplayer:get_wielded_item() + end end local wieldname = wieldstack:get_name() if wieldname == oldwieldstack:get_name() then