From 6281dc744dc3951234931a9f44c3bdd353f79df7 Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Fri, 27 Oct 2017 15:13:31 -0400 Subject: updated boost cart, homedecor modpack, castles modpack, currency, farming-redo, maptools, mesecons, moreblocks, moreores, pipeworks, quartz --- pipeworks/wielder.lua | 65 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 56 insertions(+), 9 deletions(-) (limited to 'pipeworks/wielder.lua') diff --git a/pipeworks/wielder.lua b/pipeworks/wielder.lua index 4e2882b..51ee278 100644 --- a/pipeworks/wielder.lua +++ b/pipeworks/wielder.lua @@ -19,12 +19,33 @@ 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)) + -- brief documentation of minetest.get_dig_params() as it's not yet documented in lua_api.txt: + -- takes two arguments, a node's block groups and a tool's capabilities, + -- both as they appear in their respective definitions. + -- returns a table with the following fields: + -- diggable: boolean, can this tool dig this node at all + -- time: float, time needed to dig with this tool + -- wear: int, number of wear points to inflict on the item + local nodegroups = minetest.registered_nodes[nodename].groups + local diggable = minetest.get_dig_params(nodegroups, toolcaps).diggable + if not diggable then + -- a pickaxe can't actually dig leaves based on it's groups alone, + -- but a player holding one can - the game seems to fall back to the hand. + -- fall back to checking the hand's properties if the tool isn't the correct one. + local hand_caps = minetest.registered_items[""].tool_capabilities + diggable = minetest.get_dig_params(nodegroups, hand_caps) + end + return diggable +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 wielder_node.name = data.name_base.."_on" minetest.swap_node(wielder_pos, wielder_node) - nodeupdate(wielder_pos) + minetest.check_for_falling(wielder_pos) local wielder_meta = minetest.get_meta(wielder_pos) local inv = wielder_meta:get_inventory() local wield_inv_name = data.wield_inv_name @@ -154,7 +175,7 @@ local function wielder_off(data, pos, node) if node.name == data.name_base.."_on" then node.name = data.name_base.."_off" minetest.swap_node(pos, node) - nodeupdate(pos) + minetest.check_for_falling(pos) end end @@ -281,19 +302,22 @@ end if pipeworks.enable_node_breaker then local data + -- see after end of data table for other use of these variables + local name_base = "pipeworks:nodebreaker" + local wield_inv_name = "pick" data = { - name_base = "pipeworks:nodebreaker", + name_base = name_base, description = "Node Breaker", texture_base = "pipeworks_nodebreaker", texture_stateful = { top = true, bottom = true, side2 = true, side1 = true, front = true }, tube_connect_sides = { top=1, bottom=1, left=1, right=1, back=1 }, tube_permit_anteroposterior_insert = false, - wield_inv_name = "pick", + wield_inv_name = wield_inv_name, wield_inv_width = 1, 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 +370,26 @@ 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() + else + --pipeworks.logger(dname.."couldn't dig node!") + end end local wieldname = wieldstack:get_name() if wieldname == oldwieldstack:get_name() then @@ -379,9 +412,9 @@ if pipeworks.enable_node_breaker then minetest.register_craft({ output = "pipeworks:nodebreaker_off", recipe = { - { "group:wood", "default:pick_mese", "group:wood" }, + { "pipeworks:gear", "pipeworks:gear", "pipeworks:gear" }, { "default:stone", "mesecons:piston", "default:stone" }, - { "default:stone", "mesecons:mesecon", "default:stone" }, + { "group:wood", "mesecons:mesecon", "group:wood" }, } }) -- aliases for when someone had technic installed, but then uninstalled it but not pipeworks @@ -391,6 +424,20 @@ if pipeworks.enable_node_breaker then minetest.register_alias("technic:node_breaker_on", "pipeworks:nodebreaker_on") -- turn legacy auto-tree-taps into node breakers dofile(pipeworks.modpath.."/legacy.lua") + + -- register LBM for transition to cheaper node breakers + local lbm_id = "pipeworks:refund_node_breaker_pick" + minetest.register_lbm({ + name = lbm_id, + label = "Give back mese pick for pre-transition node breakers", + run_at_every_load = false, + nodenames = { name_base.."_on", name_base.."_off" }, + action = function(pos, node) + pipeworks.logger(lbm_id.." entry, nodename="..node.name) + local invref = minetest.get_meta(pos):get_inventory() + invref:add_item(wield_inv_name, ItemStack("default:pick_mese")) + end + }) end if pipeworks.enable_deployer then -- cgit v1.2.3