From ec08032b62d6377ef5d94dbba4fdcd923f09d298 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Thu, 29 Apr 2021 11:40:09 +0200 Subject: [PATCH] Add on_break callback --- mods/ITEMS/mcl_armor/api.lua | 2 ++ mods/ITEMS/mcl_armor/damage.lua | 16 ++++++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/mods/ITEMS/mcl_armor/api.lua b/mods/ITEMS/mcl_armor/api.lua index 2e5ba1112..566ce5c49 100644 --- a/mods/ITEMS/mcl_armor/api.lua +++ b/mods/ITEMS/mcl_armor/api.lua @@ -92,6 +92,7 @@ function mcl_armor.register_set(def) local groups = def.groups or {} local on_equip_callbacks = def.on_equip_callbacks or {} local on_unequip_callbacks = def.on_unequip_callbacks or {} + local on_break_callbacks = def.on_break_callbacks or {} local textures = def.textures or {} local previews = def.previews or {} local durabilities = def.durabilities or {} @@ -125,6 +126,7 @@ function mcl_armor.register_set(def) on_secondary_use = mcl_armor.equip_on_use, _on_equip = on_equip_callbacks[name] or def.on_equip, _on_unequip = on_unequip_callbacks[name] or def.on_unequip, + _on_break = on_break_callbacks[name] or def.on_break, _mcl_armor_element = name, _mcl_armor_texture = textures[name] or modname .. "_" .. itemname .. ".png", _mcl_armor_preview = previews[name] or modname .. "_" .. itemname .. "_preview.png", diff --git a/mods/ITEMS/mcl_armor/damage.lua b/mods/ITEMS/mcl_armor/damage.lua index 8ad566d18..f17033495 100644 --- a/mods/ITEMS/mcl_armor/damage.lua +++ b/mods/ITEMS/mcl_armor/damage.lua @@ -1,3 +1,12 @@ +local function use_durability(obj, inv, index, stack, uses) + local def = stack:get_definition() + mcl_util.use_item_durability(stack, uses) + if stack:is_empty() and def and def._on_break then + stack = def._on_break(obj) or stack + end + inv:set_stack("armor", index, stack) +end + mcl_damage.register_modifier(function(obj, damage, reason) local flags = reason.flags @@ -28,8 +37,7 @@ mcl_damage.register_modifier(function(obj, damage, reason) points = points + minetest.get_item_group(itemname, "mcl_armor_points") toughness = toughness + minetest.get_item_group(itemname, "mcl_armor_toughness") - mcl_util.use_item_durability(itemstack, uses) - inv:set_stack("armor", element.index, itemstack) + use_durability(obj, inv, element.index, itemstack, uses) end if not flags.bypasses_magic then @@ -84,8 +92,8 @@ mcl_damage.register_modifier(function(obj, damage, reason) mcl_util.deal_damage(reason.source, thorns_damage, {type = "thorns", direct = obj}) local thorns_item = thorns_pieces[math.random(#thorns_pieces)] - mcl_util.use_item_durability(thorns_item.itemstack, 2) - inv:set_stack("armor", thorns_item.index, thorns_item.itemstack) + + use_durability(obj, inv, thorns_item.index, thorns_item.itemstack, 2) end mcl_armor.update(obj)