summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorthetaepsilon-gamedev <thetaepsilon-gamedev@noreply.users.github.com>2017-10-14 18:51:57 +0100
committerthetaepsilon-gamedev <thetaepsilon-gamedev@noreply.users.github.com>2017-10-14 18:51:57 +0100
commitf8cb55a60eada4e521954e0dab4177854ee7e389 (patch)
treea80fc9d1eeb4874273aec2c3b26948c639c29a6a
parent366dd24e5b8506d47a02b11cba6ff0f456be7bb7 (diff)
downloadpipeworks-f8cb55a60eada4e521954e0dab4177854ee7e389.tar
pipeworks-f8cb55a60eada4e521954e0dab4177854ee7e389.tar.gz
pipeworks-f8cb55a60eada4e521954e0dab4177854ee7e389.tar.bz2
pipeworks-f8cb55a60eada4e521954e0dab4177854ee7e389.tar.xz
pipeworks-f8cb55a60eada4e521954e0dab4177854ee7e389.zip
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
-rw-r--r--wielder.lua18
1 files 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