forked from Mineclonia/Mineclonia
Fix efficiency and unbreaking not working together
This commit fixes an issue were tools enchanted with both efficiency and unbreaking would loose the effect of one of the enchantments in some conditions.
This commit is contained in:
parent
42c7186674
commit
d6e1fe42d1
|
@ -771,11 +771,11 @@ mcl_enchanting.enchantments.unbreaking = {
|
||||||
curse = false,
|
curse = false,
|
||||||
on_enchant = function(itemstack, level)
|
on_enchant = function(itemstack, level)
|
||||||
local tool_capabilities = itemstack:get_tool_capabilities()
|
local tool_capabilities = itemstack:get_tool_capabilities()
|
||||||
for group, capability in pairs(tool_capabilities.groupcaps) do
|
|
||||||
capability.uses = capability.uses * (1 + level)
|
|
||||||
end
|
|
||||||
tool_capabilities.punch_attack_uses = tool_capabilities.punch_attack_uses * (1 + level)
|
tool_capabilities.punch_attack_uses = tool_capabilities.punch_attack_uses * (1 + level)
|
||||||
itemstack:get_meta():set_tool_capabilities(tool_capabilities)
|
itemstack:get_meta():set_tool_capabilities(tool_capabilities)
|
||||||
|
|
||||||
|
-- Unbreaking for groupcaps is handled in this function.
|
||||||
|
mcl_enchanting.update_groupcaps(itemstack)
|
||||||
end,
|
end,
|
||||||
requires_tool = true,
|
requires_tool = true,
|
||||||
treasure = false,
|
treasure = false,
|
||||||
|
|
|
@ -17,6 +17,7 @@ function mcl_enchanting.unload_enchantments(itemstack)
|
||||||
local meta = itemstack:get_meta()
|
local meta = itemstack:get_meta()
|
||||||
if meta:get_string("name") == "" then
|
if meta:get_string("name") == "" then
|
||||||
meta:set_string("description", "")
|
meta:set_string("description", "")
|
||||||
|
meta:set_string("groupcaps_hash", "")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -50,13 +50,21 @@ function mcl_enchanting.update_groupcaps(itemstack)
|
||||||
end
|
end
|
||||||
|
|
||||||
local name = itemstack:get_name()
|
local name = itemstack:get_name()
|
||||||
local level = mcl_enchanting.get_enchantment(itemstack, "efficiency")
|
local efficiency = mcl_enchanting.get_enchantment(itemstack, "efficiency")
|
||||||
local groupcaps = get_efficiency_groupcaps(name, level)
|
local groupcaps = get_efficiency_groupcaps(name, efficiency)
|
||||||
local hash = itemstack:get_meta():get_string("groupcaps_hash")
|
local hash = itemstack:get_meta():get_string("groupcaps_hash")
|
||||||
|
|
||||||
if not hash or hash ~= groupcaps.hash then
|
if not hash or hash ~= groupcaps.hash then
|
||||||
local tool_capabilities = itemstack:get_tool_capabilities()
|
local tool_capabilities = itemstack:get_tool_capabilities()
|
||||||
tool_capabilities.groupcaps = groupcaps.values
|
tool_capabilities.groupcaps = groupcaps.values
|
||||||
|
|
||||||
|
-- Increase the number of uses depending on the unbreaking level
|
||||||
|
-- of the tool.
|
||||||
|
local unbreaking = mcl_enchanting.get_enchantment(itemstack, "unbreaking")
|
||||||
|
for group, capability in pairs(tool_capabilities.groupcaps) do
|
||||||
|
capability.uses = capability.uses * (1 + unbreaking)
|
||||||
|
end
|
||||||
|
|
||||||
itemstack:get_meta():set_tool_capabilities(tool_capabilities)
|
itemstack:get_meta():set_tool_capabilities(tool_capabilities)
|
||||||
itemstack:get_meta():set_string("groupcaps_hash", groupcaps.hash)
|
itemstack:get_meta():set_string("groupcaps_hash", groupcaps.hash)
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue