-function enchanting.register_enchtools(init, m, def)
- local longer = init.uses * 1.2 -- Higher number = longer use.
- local faster = {}
- for i = 1, 3 do
- faster[i] = init.times[i] - 0.1 -- Higher number = faster dig.
- end
-
- local fast = {times=faster, uses=def.uses, maxlevel=def.maxlvl}
- local long = {times=def.times, uses=longer, maxlevel=def.maxlvl}
+local function cap(S) return S:gsub("^%l", string.upper) end
+
+for mod, defs in pairs(enchanting.tools) do
+for material in defs[1]:gmatch("[%w_]+") do
+for _, tooldef in next, defs, 1 do
+for enchant in tooldef[2]:gmatch("[%w_]+") do
+ local tool, group = tooldef[1], ""
+ local original_tool = minetest.registered_tools[mod..":"..tool.."_"..material]
+
+ if original_tool then
+ if original_tool.tool_capabilities then
+ local original_damage_groups = original_tool.tool_capabilities.damage_groups
+ local original_groupcaps = original_tool.tool_capabilities.groupcaps
+ local groupcaps = table.copy(original_groupcaps)
+ local fleshy = original_damage_groups.fleshy
+ local full_punch_interval = original_tool.tool_capabilities.full_punch_interval
+ local max_drop_level = original_tool.tool_capabilities.max_drop_level
+ group = tostring(next(original_groupcaps))
+
+ if enchant == "durable" then
+ groupcaps[group].uses = math.ceil(original_groupcaps[group].uses * enchanting.uses)
+ elseif enchant == "fast" then
+ for i = 1, 3 do
+ groupcaps[group].times[i] = original_groupcaps[group].times[i] - enchanting.times
+ end
+ elseif enchant == "sharp" then
+ fleshy = fleshy + enchanting.damages
+ end
+
+ minetest.register_tool(":"..mod..":enchanted_"..tool.."_"..material.."_"..enchant, {
+ description = "Enchanted "..cap(material).." "..cap(tool).." ("..cap(enchant)..")",
+ inventory_image = original_tool.inventory_image.."^[colorize:violet:50",
+ wield_image = original_tool.wield_image,
+ groups = {not_in_creative_inventory=1},
+ tool_capabilities = {
+ groupcaps = groupcaps, damage_groups = {fleshy = fleshy},
+ full_punch_interval = full_punch_interval, max_drop_level = max_drop_level
+ }
+ })
+ end