diff --git a/mods/ITEMS/mcl_enchanting/enchantments.lua b/mods/ITEMS/mcl_enchanting/enchantments.lua index 265bdb74..ca936c31 100644 --- a/mods/ITEMS/mcl_enchanting/enchantments.lua +++ b/mods/ITEMS/mcl_enchanting/enchantments.lua @@ -155,7 +155,7 @@ mcl_enchanting.enchantments.efficiency = { description = S("Increases mining speed."), curse = false, on_enchant = function(itemstack, level) - mcl_enchanting.apply_efficiency(itemstack, level) + mcl_enchanting.update_groupcaps(itemstack) end, requires_tool = false, treasure = false, diff --git a/mods/ITEMS/mcl_enchanting/engine.lua b/mods/ITEMS/mcl_enchanting/engine.lua index acde352b..1325e577 100644 --- a/mods/ITEMS/mcl_enchanting/engine.lua +++ b/mods/ITEMS/mcl_enchanting/engine.lua @@ -235,12 +235,7 @@ local function get_after_use_callback(itemdef) -- one too. return function(itemstack, user, node, digparams) itemdef.after_use(itemstack, user, node, digparams) - - local enchantments = mcl_enchanting.get_enchantments(itemstack) - local level = enchantments.efficiency - if level then - mcl_enchanting.apply_efficiency(itemstack, level) - end + mcl_enchanting.update_groupcaps(itemstack) end end @@ -252,10 +247,7 @@ local function get_after_use_callback(itemdef) end local enchantments = mcl_enchanting.get_enchantments(itemstack) - local level = enchantments.efficiency - if level then - mcl_enchanting.enchantments.efficiency.on_enchant(itemstack, level) - end + mcl_enchanting.update_groupcaps(itemstack) end end diff --git a/mods/ITEMS/mcl_enchanting/efficiency.lua b/mods/ITEMS/mcl_enchanting/groupcaps.lua similarity index 69% rename from mods/ITEMS/mcl_enchanting/efficiency.lua rename to mods/ITEMS/mcl_enchanting/groupcaps.lua index d4b06e5f..3060000d 100644 --- a/mods/ITEMS/mcl_enchanting/efficiency.lua +++ b/mods/ITEMS/mcl_enchanting/groupcaps.lua @@ -1,4 +1,4 @@ -local efficiency_cache_table = {} +local groupcaps_cache = {} -- Compute a hash value. function compute_hash(value) @@ -8,18 +8,23 @@ function compute_hash(value) return string.sub(minetest.get_password_hash("ryvnf", minetest.serialize(value)), 1, 8) end --- Get the efficiency groupcaps and hash for a tool and efficiency level. If --- this function is called repeatedly with the same values it will return data --- from a cache. +-- Get the groupcaps and hash for an enchanted tool. If this function is called +-- repeatedly with the same values it will return data from a cache. +-- +-- Parameters: +-- toolname - Name of the tool +-- level - The efficiency level of the tool -- -- Returns a table with the following two fields: --- values - the groupcaps table --- hash - the hash of the groupcaps table +-- values - The groupcaps table +-- hash - The hash of the groupcaps table local function get_efficiency_groupcaps(toolname, level) - local toolcache = efficiency_cache_table[toolname] + local toolcache = groupcaps_cache[toolname] + local level = level + if not toolcache then toolcache = {} - efficiency_cache_table[toolname] = toolcache + groupcaps_cache[toolname] = toolcache end local levelcache = toolcache[level] @@ -33,15 +38,15 @@ local function get_efficiency_groupcaps(toolname, level) return levelcache end --- Apply efficiency enchantment to a tool. This will update the tools --- tool_capabilities to give it new digging times. This function will be called +-- Update groupcaps of an enchanted tool. This function will be called -- repeatedly to make sure the digging times stored in groupcaps stays in sync -- when the digging times of nodes can change. -- -- To make it more efficient it will first check a hash value to determine if -- the tool needs to be updated. -function mcl_enchanting.apply_efficiency(itemstack, level) +function mcl_enchanting.update_groupcaps(itemstack) local name = itemstack:get_name() + local level = mcl_enchanting.get_enchantment(itemstack, "efficiency") local groupcaps = get_efficiency_groupcaps(name, level) local hash = itemstack:get_meta():get_string("groupcaps_hash") diff --git a/mods/ITEMS/mcl_enchanting/init.lua b/mods/ITEMS/mcl_enchanting/init.lua index 45faa498..5858b85e 100644 --- a/mods/ITEMS/mcl_enchanting/init.lua +++ b/mods/ITEMS/mcl_enchanting/init.lua @@ -59,7 +59,7 @@ mcl_enchanting = { } dofile(modpath .. "/engine.lua") -dofile(modpath .. "/efficiency.lua") +dofile(modpath .. "/groupcaps.lua") dofile(modpath .. "/enchantments.lua") minetest.register_chatcommand("enchant", {