mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-12-29 03:19:33 +01:00
731dc4947b
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.
790 lines
22 KiB
Lua
790 lines
22 KiB
Lua
local S = minetest.get_translator("mcl_enchanting")
|
|
|
|
-- Taken from https://minecraft.gamepedia.com/Enchanting
|
|
|
|
local function increase_damage(damage_group, factor)
|
|
return function(itemstack, level)
|
|
local tool_capabilities = itemstack:get_tool_capabilities()
|
|
tool_capabilities.damage_groups[damage_group] = (tool_capabilities.damage_groups[damage_group] or 0) + level * factor
|
|
itemstack:get_meta():set_tool_capabilities(tool_capabilities)
|
|
end
|
|
end
|
|
|
|
-- requires engine change
|
|
--[[mcl_enchanting.enchantments.aqua_affinity = {
|
|
name = S("Aqua Affinity"),
|
|
max_level = 1,
|
|
primary = {armor_head = true},
|
|
secondary = {},
|
|
disallow = {non_combat_armor = true},
|
|
incompatible = {},
|
|
weight = 2,
|
|
description = S("Increases underwater mining speed."),
|
|
curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{1, 41}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = false,
|
|
}]]--
|
|
|
|
-- implemented via on_enchant and additions in mobs_mc; Slowness IV part unimplemented
|
|
mcl_enchanting.enchantments.bane_of_arthropods = {
|
|
name = S("Bane of Arthropods"),
|
|
max_level = 5,
|
|
primary = {sword = true},
|
|
secondary = {axe = true},
|
|
disallow = {},
|
|
incompatible = {smite = true, sharpness = true},
|
|
weight = 5,
|
|
description = S("Increases damage and applies Slowness IV to arthropod mobs (spiders, cave spiders, silverfish and endermites)."),
|
|
curse = false,
|
|
on_enchant = increase_damage("anthropod", 2.5),
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{5, 25}, {13, 33}, {21, 41}, {29, 49}, {37, 57}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = false,
|
|
}
|
|
|
|
-- implemented in mcl_armor
|
|
mcl_enchanting.enchantments.blast_protection = {
|
|
name = S("Blast Protection"),
|
|
max_level = 4,
|
|
primary = {armor_head = true, armor_torso = true, armor_legs = true, armor_feet = true},
|
|
secondary = {},
|
|
disallow = {non_combat_armor = true},
|
|
incompatible = {fire_protection = true, protection = true, projectile_protection = true},
|
|
weight = 2,
|
|
description = S("Reduces explosion damage and knockback."),
|
|
curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{5, 13}, {13, 21}, {21, 29}, {29, 37}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = false,
|
|
}
|
|
|
|
-- requires missing MineClone2 feature
|
|
--[[mcl_enchanting.enchantments.channeling = {
|
|
name = S("Channeling"),
|
|
max_level = 1,
|
|
primary = {trident = true},
|
|
secondary = {},
|
|
disallow = {},
|
|
incompatible = {riptide = true},
|
|
weight = 1,
|
|
description = S("Channels a bolt of lightning toward a target. Works only during thunderstorms and if target is unobstructed with opaque blocks."),
|
|
curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{25, 50}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = false,
|
|
}]]--
|
|
|
|
-- implemented in mcl_armor
|
|
mcl_enchanting.enchantments.curse_of_binding = {
|
|
name = S("Curse of Binding"),
|
|
max_level = 1,
|
|
primary = {},
|
|
secondary = {armor_head = true, armor_torso = true, armor_legs = true, armor_feet = true},
|
|
disallow = {},
|
|
incompatible = {},
|
|
weight = 1,
|
|
description = S("Item cannot be removed from armor slots except due to death, breaking or in Creative Mode."),
|
|
curse = true,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = true,
|
|
power_range_table = {{25, 50}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = false,
|
|
}
|
|
|
|
-- implemented in mcl_death_drop
|
|
mcl_enchanting.enchantments.curse_of_vanishing = {
|
|
name = S("Curse of Vanishing"),
|
|
max_level = 1,
|
|
primary = {},
|
|
secondary = {armor_head = true, armor_torso = true, armor_legs = true, armor_feet = true, tool = true, weapon = true},
|
|
disallow = {},
|
|
incompatible = {},
|
|
weight = 1,
|
|
description = S("Item destroyed on death."),
|
|
curse = true,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = true,
|
|
power_range_table = {{25, 50}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = true,
|
|
}
|
|
|
|
-- implemented in mcl_playerplus
|
|
mcl_enchanting.enchantments.depth_strider = {
|
|
name = S("Depth Strider"),
|
|
max_level = 3,
|
|
primary = {},
|
|
secondary = {armor_feet = true},
|
|
disallow = {non_combat_armor = true},
|
|
incompatible = {frost_walker = true},
|
|
weight = 2,
|
|
description = S("Increases underwater movement speed."),
|
|
curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{10, 25}, {20, 35}, {30, 45}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = false,
|
|
}
|
|
|
|
-- implemented via on_enchant
|
|
mcl_enchanting.enchantments.efficiency = {
|
|
name = S("Efficiency"),
|
|
max_level = 5,
|
|
primary = {pickaxe = true, shovel = true, axe = true, hoe = true},
|
|
secondary = {shears = true},
|
|
disallow = {},
|
|
incompatible = {},
|
|
weight = 10,
|
|
description = S("Increases mining speed."),
|
|
curse = false,
|
|
on_enchant = function(itemstack, level)
|
|
mcl_enchanting.update_groupcaps(itemstack)
|
|
end,
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{1, 61}, {11, 71}, {21, 81}, {31, 91}, {41, 101}},
|
|
inv_combat_tab = false,
|
|
inv_tool_tab = true,
|
|
}
|
|
|
|
-- implemented in mcl_armor
|
|
mcl_enchanting.enchantments.feather_falling = {
|
|
name = S("Feather Falling"),
|
|
max_level = 4,
|
|
primary = {armor_feet = true},
|
|
secondary = {},
|
|
disallow = {non_combat_armor = true},
|
|
incompatible = {},
|
|
weight = 5,
|
|
description = S("Reduces fall damage."),curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{5, 11}, {11, 17}, {17, 23}, {23, 29}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = false,
|
|
}
|
|
|
|
-- implemented in mcl_mobs and via register_on_punchplayer callback
|
|
mcl_enchanting.enchantments.fire_aspect = {
|
|
name = S("Fire Aspect"),
|
|
max_level = 2,
|
|
primary = {sword = true},
|
|
secondary = {},
|
|
disallow = {},
|
|
incompatible = {},
|
|
weight = 2,
|
|
description = S("Sets target on fire."),
|
|
curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{10, 61}, {30, 71}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = false,
|
|
}
|
|
|
|
minetest.register_on_punchplayer(function(player, hitter, time_from_last_punch, tool_capabilities, dir, damage)
|
|
if hitter and hitter:is_player() then
|
|
local wielditem = hitter:get_wielded_item()
|
|
if wielditem then
|
|
local fire_aspect_level = mcl_enchanting.get_enchantment(wielditem, "fire_aspect")
|
|
if fire_aspect_level > 0 then
|
|
mcl_burning.set_on_fire(player, fire_aspect_level * 4, hitter:get_player_name())
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- implemented in mcl_armor
|
|
mcl_enchanting.enchantments.fire_protection = {
|
|
name = S("Fire Protection"),
|
|
max_level = 4,
|
|
primary = {armor_head = true, armor_torso = true, armor_legs = true, armor_feet = true},
|
|
secondary = {},
|
|
disallow = {non_combat_armor = true},
|
|
incompatible = {blast_protection = true, protection = true, projectile_protection = true},
|
|
weight = 5,
|
|
description = S("Reduces fire damage."),
|
|
curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{10, 18}, {18, 26}, {26, 34}, {34, 42}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = false,
|
|
}
|
|
|
|
mcl_enchanting.enchantments.flame = {
|
|
name = S("Flame"),
|
|
max_level = 1,
|
|
primary = {bow = true},
|
|
secondary = {},
|
|
disallow = {},
|
|
incompatible = {},
|
|
weight = 2,
|
|
description = S("Arrows set target on fire."),
|
|
curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{20, 50}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = false,
|
|
}
|
|
|
|
-- implemented in mcl_item_entity
|
|
mcl_enchanting.enchantments.fortune = {
|
|
name = S("Fortune"),
|
|
max_level = 3,
|
|
primary = {pickaxe = true, shovel = true, axe = true, hoe = true},
|
|
secondary = {},
|
|
disallow = {},
|
|
incompatible = {silk_touch = true},
|
|
weight = 2,
|
|
description = S("Increases certain block drops."),
|
|
curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{15, 61}, {24, 71}, {33, 81}},
|
|
inv_combat_tab = false,
|
|
inv_tool_tab = true,
|
|
}
|
|
|
|
-- implemented via walkover.register_global
|
|
mcl_enchanting.enchantments.frost_walker = {
|
|
name = S("Frost Walker"),
|
|
max_level = 2,
|
|
primary = {},
|
|
secondary = {armor_feet = true},
|
|
disallow = {non_combat_armor = true},
|
|
incompatible = {depth_strider = true},
|
|
weight = 2,
|
|
description = S("Turns water beneath the player into frosted ice and prevents the damage from magma blocks."),
|
|
curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = true,
|
|
power_range_table = {{10, 25}, {20, 35}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = false,
|
|
}
|
|
|
|
walkover.register_global(function(pos, _, player)
|
|
local boots = player:get_inventory():get_stack("armor", 5)
|
|
local frost_walker = mcl_enchanting.get_enchantment(boots, "frost_walker")
|
|
if frost_walker <= 0 then
|
|
return
|
|
end
|
|
local radius = frost_walker + 2
|
|
local minp = {x = pos.x - radius, y = pos.y, z = pos.z - radius}
|
|
local maxp = {x = pos.x + radius, y = pos.y, z = pos.z + radius}
|
|
local positions = minetest.find_nodes_in_area_under_air(minp, maxp, "mcl_core:water_source")
|
|
for _, p in ipairs(positions) do
|
|
if vector.distance(pos, p) <= radius then
|
|
minetest.set_node(p, {name = "mcl_core:frosted_ice_0"})
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- requires missing MineClone2 feature
|
|
--[[mcl_enchanting.enchantments.impaling = {
|
|
name = S("Impaling"),
|
|
max_level = 5,
|
|
primary = {trident = true},
|
|
secondary = {},
|
|
disallow = {},
|
|
incompatible = {},
|
|
weight = 2,
|
|
description = S("Trident deals additional damage to ocean mobs."),
|
|
curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{1, 21}, {9, 29}, {17, 37}, {25, 45}, {33, 53}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = false,
|
|
}]]--
|
|
|
|
-- implemented in mcl_bows
|
|
mcl_enchanting.enchantments.infinity = {
|
|
name = S("Infinity"),
|
|
max_level = 1,
|
|
primary = {bow = true},
|
|
secondary = {},
|
|
disallow = {},
|
|
incompatible = {mending = true},
|
|
weight = 1,
|
|
description = S("Shooting consumes no regular arrows."),
|
|
curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{20, 50}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = false,
|
|
}
|
|
|
|
-- implemented via minetest.calculate_knockback
|
|
mcl_enchanting.enchantments.knockback = {
|
|
name = S("Knockback"),
|
|
max_level = 2,
|
|
primary = {sword = true},
|
|
secondary = {},
|
|
disallow = {},
|
|
incompatible = {},
|
|
weight = 5,
|
|
description = S("Increases knockback."),
|
|
curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{5, 61}, {25, 71}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = false,
|
|
}
|
|
|
|
local old_calculate_knockback = minetest.calculate_knockback
|
|
function minetest.calculate_knockback(player, hitter, time_from_last_punch, tool_capabilities, dir, distance, damage)
|
|
local knockback = old_calculate_knockback(player, hitter, time_from_last_punch, tool_capabilities, dir, distance, damage)
|
|
local luaentity
|
|
if hitter then
|
|
luaentity = hitter:get_luaentity()
|
|
end
|
|
if hitter and hitter:is_player() then
|
|
local wielditem = hitter:get_wielded_item()
|
|
knockback = knockback + 3 * mcl_enchanting.get_enchantment(wielditem, "knockback")
|
|
elseif luaentity and luaentity._knockback then
|
|
knockback = knockback + luaentity._knockback
|
|
end
|
|
return knockback
|
|
end
|
|
|
|
-- implemented in mcl_mobs and mobs_mc
|
|
mcl_enchanting.enchantments.looting = {
|
|
name = S("Looting"),
|
|
max_level = 3,
|
|
primary = {sword = true},
|
|
secondary = {},
|
|
disallow = {},
|
|
incompatible = {},
|
|
weight = 2,
|
|
description = S("Increases mob loot."),
|
|
curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{15, 61}, {24, 71}, {33, 81}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = false,
|
|
}
|
|
|
|
-- requires missing MineClone2 feature
|
|
--[[mcl_enchanting.enchantments.loyalty = {
|
|
name = S("Loyalty"),
|
|
max_level = 3,
|
|
primary = {trident = true},
|
|
secondary = {},
|
|
disallow = {},
|
|
incompatible = {riptide = true},
|
|
weight = 5,
|
|
description = S("Trident returns after being thrown. Higher levels reduce return time."),
|
|
curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{12, 50}, {19, 50}, {26, 50}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = false,
|
|
}]]--
|
|
|
|
-- implemented in mcl_fishing
|
|
mcl_enchanting.enchantments.luck_of_the_sea = {
|
|
name = S("Luck of the Sea"),
|
|
max_level = 3,
|
|
primary = {fishing_rod = true},
|
|
secondary = {},
|
|
disallow = {},
|
|
incompatible = {},
|
|
weight = 2,
|
|
description = S("Increases rate of good loot (enchanting books, etc.)"),
|
|
curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{15, 61}, {24, 71}, {33, 81}},
|
|
inv_combat_tab = false,
|
|
inv_tool_tab = true,
|
|
}
|
|
|
|
-- implemented in mcl_fishing
|
|
mcl_enchanting.enchantments.lure = {
|
|
name = S("Lure"),
|
|
max_level = 3,
|
|
primary = {fishing_rod = true},
|
|
secondary = {},
|
|
disallow = {},
|
|
incompatible = {},
|
|
weight = 2,
|
|
description = S("Decreases time until rod catches something."),
|
|
curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{15, 61}, {24, 71}, {33, 81}},
|
|
inv_combat_tab = false,
|
|
inv_tool_tab = true,
|
|
}
|
|
|
|
-- implemented in mcl_experience
|
|
mcl_enchanting.enchantments.mending = {
|
|
name = S("Mending"),
|
|
max_level = 1,
|
|
primary = {},
|
|
secondary = {armor_head = true, armor_torso = true, armor_legs = true, armor_feet = true, tool = true, weapon = true},
|
|
disallow = {},
|
|
incompatible = {infinity = true},
|
|
weight = 2,
|
|
description = S("Repair the item while gaining XP orbs."),
|
|
curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = true,
|
|
treasure = true,
|
|
power_range_table = {{25, 75}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = true,
|
|
}
|
|
|
|
-- requires missing MineClone2 feature
|
|
--[[mcl_enchanting.enchantments.multishot = {
|
|
name = S("Multishot"),
|
|
max_level = 1,
|
|
primary = {crossbow = true},
|
|
secondary = {},
|
|
disallow = {},
|
|
incompatible = {piercing = true},
|
|
weight = 2,
|
|
description = S("Shoot 3 arrows at the cost of one."),
|
|
curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{20, 50}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = false,
|
|
}]]--
|
|
|
|
-- requires missing MineClone2 feature
|
|
--[[mcl_enchanting.enchantments.piercing = {
|
|
name = S("Piercing"),
|
|
max_level = 4,
|
|
primary = {crossbow = true},
|
|
secondary = {},
|
|
disallow = {},
|
|
incompatible = {multishot = true},
|
|
weight = 10,
|
|
description = S("Arrows passes through multiple objects."),
|
|
curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{1, 50}, {11, 50}, {21, 50}, {31, 50}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = false,
|
|
}]]--
|
|
|
|
-- implemented in mcl_bows
|
|
mcl_enchanting.enchantments.power = {
|
|
name = S("Power"),
|
|
max_level = 5,
|
|
primary = {bow = true},
|
|
secondary = {},
|
|
disallow = {},
|
|
incompatible = {},
|
|
weight = 10,
|
|
description = S("Increases arrow damage."),
|
|
curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{1, 16}, {11, 26}, {21, 36}, {31, 46}, {41, 56}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = false,
|
|
}
|
|
|
|
-- implemented in mcl_armor
|
|
mcl_enchanting.enchantments.projectile_protection = {
|
|
name = S("Projectile Protection"),
|
|
max_level = 4,
|
|
primary = {armor_head = true, armor_torso = true, armor_legs = true, armor_feet = true},
|
|
secondary = {},
|
|
disallow = {non_combat_armor = true},
|
|
incompatible = {blast_protection = true, fire_protection = true, protection = true},
|
|
weight = 5,
|
|
description = S("Reduces projectile damage."),
|
|
curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{1, 16}, {11, 26}, {21, 36}, {31, 46}, {41, 56}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = false,
|
|
}
|
|
|
|
-- implemented in mcl_armor
|
|
mcl_enchanting.enchantments.protection = {
|
|
name = S("Protection"),
|
|
max_level = 4,
|
|
primary = {armor_head = true, armor_torso = true, armor_legs = true, armor_feet = true},
|
|
secondary = {},
|
|
disallow = {non_combat_armor = true},
|
|
incompatible = {blast_protection = true, fire_protection = true, projectile_protection = true},
|
|
weight = 10,
|
|
description = S("Reduces most types of damage by 4% for each level."),
|
|
curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{1, 12}, {12, 23}, {23, 34}, {34, 45}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = false,
|
|
}
|
|
|
|
-- implemented via minetest.calculate_knockback (together with the Knockback enchantment) and mcl_bows
|
|
mcl_enchanting.enchantments.punch = {
|
|
name = S("Punch"),
|
|
max_level = 2,
|
|
primary = {},
|
|
secondary = {bow = true},
|
|
disallow = {},
|
|
incompatible = {},
|
|
weight = 2,
|
|
description = S("Increases arrow knockback."),
|
|
curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{12, 37}, {32, 57}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = false,
|
|
}
|
|
|
|
-- requires missing MineClone2 feature
|
|
--[[mcl_enchanting.enchantments.quick_charge = {
|
|
name = S("Quick Charge"),
|
|
max_level = 3,
|
|
primary = {crossbow = true},
|
|
secondary = {},
|
|
disallow = {},
|
|
incompatible = {},
|
|
weight = 5,
|
|
description = S("Decreases crossbow charging time."),
|
|
curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{12, 50}, {32, 50}, {52, 50}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = false,
|
|
}]]--
|
|
|
|
-- unimplemented
|
|
--[[mcl_enchanting.enchantments.respiration = {
|
|
name = S("Respiration"),
|
|
max_level = 3,
|
|
primary = {armor_head = true},
|
|
secondary = {},
|
|
disallow = {non_combat_armor = true},
|
|
incompatible = {},
|
|
weight = 2,
|
|
description = S("Extends underwater breathing time."),
|
|
curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{10, 40}, {20, 50}, {30, 60}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = false,
|
|
}]]--
|
|
|
|
-- requires missing MineClone2 feature
|
|
--[[mcl_enchanting.enchantments.riptide = {
|
|
name = S("Riptide"),
|
|
max_level = 3,
|
|
primary = {trident = true},
|
|
secondary = {},
|
|
disallow = {},
|
|
incompatible = {channeling = true, loyalty = true},
|
|
weight = 2,
|
|
description = S("Trident launches player with itself when thrown. Works only in water or rain."),
|
|
curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{17, 50}, {24, 50}, {31, 50}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = false,
|
|
}]]--
|
|
|
|
-- implemented via on_enchant
|
|
mcl_enchanting.enchantments.sharpness = {
|
|
name = S("Sharpness"),
|
|
max_level = 5,
|
|
primary = {sword = true},
|
|
secondary = {axe = true},
|
|
disallow = {},
|
|
incompatible = {bane_of_arthropods = true, smite = true},
|
|
weight = 5,
|
|
description = S("Increases damage."),
|
|
curse = false,
|
|
on_enchant = increase_damage("fleshy", 0.5),
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{1, 21}, {12, 32}, {23, 43}, {34, 54}, {45, 65}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = false,
|
|
}
|
|
|
|
-- implemented in mcl_item_entity
|
|
mcl_enchanting.enchantments.silk_touch = {
|
|
name = S("Silk Touch"),
|
|
max_level = 1,
|
|
primary = {pickaxe = true, shovel = true, axe = true, hoe = true},
|
|
secondary = {shears = true},
|
|
disallow = {},
|
|
incompatible = {fortune = true},
|
|
weight = 1,
|
|
description = S("Mined blocks drop themselves."),
|
|
curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{15, 61}},
|
|
inv_combat_tab = false,
|
|
inv_tool_tab = true,
|
|
}
|
|
|
|
-- implemented via on_enchant and additions in mobs_mc
|
|
mcl_enchanting.enchantments.smite = {
|
|
name = S("Smite"),
|
|
max_level = 5,
|
|
primary = {sword = true},
|
|
secondary = {axe = true},
|
|
disallow = {},
|
|
incompatible = {bane_of_arthropods = true, sharpness = true},
|
|
weight = 5,
|
|
description = S("Increases damage to undead mobs."),
|
|
curse = false,
|
|
on_enchant = increase_damage("undead", 2.5),
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{5, 25}, {13, 33}, {21, 41}, {29, 49}, {37, 57}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = false,
|
|
}
|
|
|
|
-- implemented in mcl_playerplus
|
|
mcl_enchanting.enchantments.soul_speed = {
|
|
name = S("Soul Speed"),
|
|
max_level = 3,
|
|
primary = {},
|
|
secondary = {armor_feet = true},
|
|
disallow = {non_combat_armor = true},
|
|
incompatible = {frost_walker = true},
|
|
weight = 2,
|
|
description = S("Increases walking speed on soul sand."),
|
|
curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = true,
|
|
power_range_table = {{10, 25}, {20, 35}, {30, 45}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = false,
|
|
}
|
|
|
|
-- requires missing MineClone2 feature
|
|
--[[mcl_enchanting.enchantments.sweeping_edge = {
|
|
name = S("Sweeping Edge"),
|
|
max_level = 3,
|
|
primary = {sword = true},
|
|
secondary = {},
|
|
disallow = {},
|
|
incompatible = {},
|
|
weight = 2,
|
|
description = S("Increases sweeping attack damage."),
|
|
curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{5, 20}, {14, 29}, {23, 38}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = false,
|
|
}]]--
|
|
|
|
-- implemented in mcl_armor
|
|
mcl_enchanting.enchantments.thorns = {
|
|
name = S("Thorns"),
|
|
max_level = 3,
|
|
primary = {armor_head = true},
|
|
secondary = {armor_torso = true, armor_legs = true, armor_feet = true},
|
|
disallow = {non_combat_armor = true},
|
|
incompatible = {},
|
|
weight = 1,
|
|
description = S("Reflects some of the damage taken when hit, at the cost of reducing durability with each proc."),
|
|
curse = false,
|
|
on_enchant = function() end,
|
|
requires_tool = false,
|
|
treasure = false,
|
|
power_range_table = {{10, 61}, {30, 71}, {50, 81}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = false,
|
|
}
|
|
|
|
-- for tools & weapons implemented via on_enchant; for bows implemented in mcl_bows; for armor implemented in mcl_armor and mcl_tt; for fishing rods implemented in mcl_fishing
|
|
mcl_enchanting.enchantments.unbreaking = {
|
|
name = S("Unbreaking"),
|
|
max_level = 3,
|
|
primary = {armor_head = true, armor_torso = true, armor_legs = true, armor_feet = true, pickaxe = true, shovel = true, axe = true, hoe = true, sword = true, fishing_rod = true, bow = true},
|
|
secondary = {tool = true},
|
|
disallow = {non_combat_armor = true},
|
|
incompatible = {},
|
|
weight = 5,
|
|
description = S("Increases item durability."),
|
|
curse = false,
|
|
on_enchant = function(itemstack, level)
|
|
local name = itemstack:get_name()
|
|
if not minetest.registered_tools[name].tool_capabilities then
|
|
return
|
|
end
|
|
|
|
local tool_capabilities = itemstack:get_tool_capabilities()
|
|
tool_capabilities.punch_attack_uses = tool_capabilities.punch_attack_uses * (1 + level)
|
|
itemstack:get_meta():set_tool_capabilities(tool_capabilities)
|
|
|
|
-- Unbreaking for groupcaps is handled in this function.
|
|
mcl_enchanting.update_groupcaps(itemstack)
|
|
end,
|
|
requires_tool = true,
|
|
treasure = false,
|
|
power_range_table = {{5, 61}, {13, 71}, {21, 81}},
|
|
inv_combat_tab = true,
|
|
inv_tool_tab = true,
|
|
}
|