nodecore-cd2025/mods/nc_api/item_touch_hurt.lua
2020-05-26 20:52:54 -04:00

42 lines
1.4 KiB
Lua

-- LUALOCALS < ---------------------------------------------------------
local ItemStack, minetest, nodecore
= ItemStack, minetest, nodecore
-- LUALOCALS > ---------------------------------------------------------
local function toolcandig(wield, node)
if (not wield) or wield:is_empty() then return end
local def = node and node.name and minetest.registered_items[node.name]
if not (def and def.groups) then return end
local toolspeed = nodecore.toolspeed(wield, def.groups)
if not toolspeed then return end
local handspeed = nodecore.toolspeed(ItemStack(""), def.groups)
return handspeed and (toolspeed < handspeed)
end
nodecore.register_on_register_item(function(_, def)
local dmg = def.pointable ~= false and def.groups
and def.groups.damage_touch
if not (dmg and dmg > 0) then return end
def.on_punch = def.on_punch or function(pos, node, puncher, ...)
if puncher and puncher:is_player()
and (not toolcandig(puncher:get_wielded_item(), node)) then
nodecore.addphealth(puncher, -dmg, {
nc_type = "node_touch_hurt",
node = node
})
end
return minetest.node_punch(pos, node, puncher, ...)
end
def.on_scaling = def.on_scaling or function(_, _, player, node)
if player and player:is_player() then
nodecore.addphealth(player, -dmg, {
nc_type = "node_touch_hurt",
node = node
})
end
return true
end
end)