summaryrefslogtreecommitdiff
path: root/pipeworks/wielder.lua
diff options
context:
space:
mode:
authorVanessa Ezekowitz <vanessaezekowitz@gmail.com>2017-10-27 15:13:31 -0400
committerVanessa Ezekowitz <vanessaezekowitz@gmail.com>2017-10-27 15:13:31 -0400
commit6281dc744dc3951234931a9f44c3bdd353f79df7 (patch)
tree0ead0d0d18be58bed7480cb9a5ea1495230c568f /pipeworks/wielder.lua
parent2e6082ccdbd121cd5fc0f82a931ac01ac00dcb76 (diff)
downloaddreambuilder_modpack-6281dc744dc3951234931a9f44c3bdd353f79df7.tar
dreambuilder_modpack-6281dc744dc3951234931a9f44c3bdd353f79df7.tar.gz
dreambuilder_modpack-6281dc744dc3951234931a9f44c3bdd353f79df7.tar.bz2
dreambuilder_modpack-6281dc744dc3951234931a9f44c3bdd353f79df7.tar.xz
dreambuilder_modpack-6281dc744dc3951234931a9f44c3bdd353f79df7.zip
updated boost cart, homedecor modpack, castles modpack, currency, farming-redo,
maptools, mesecons, moreblocks, moreores, pipeworks, quartz
Diffstat (limited to 'pipeworks/wielder.lua')
-rw-r--r--pipeworks/wielder.lua65
1 files changed, 56 insertions, 9 deletions
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