add all files

This commit is contained in:
haui 2024-06-12 19:41:16 +02:00
commit 35fcb21ea7
18 changed files with 2977 additions and 0 deletions

751
enchantments.lua Normal file
View file

@ -0,0 +1,751 @@
local S = minetest.get_translator(minetest.get_current_modname())
-- 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
-- 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,
}
-- 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_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()
-- Updating digging speed is handled by update_groupcaps which
-- is called from load_enchantments.
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_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
local player_pos = player:get_pos()
local hitter_pos = hitter:get_pos()
if vector.distance(hitter_pos, player_pos) <= 3 then
mcl_burning.set_on_fire(player, fire_aspect_level * 4)
end
end
end
end
end)
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() and distance <= 3 then
local wielditem = hitter:get_wielded_item()
--knockback = knockback + 3 * mcl_enchanting.get_enchantment(wielditem, "knockback")
local enchant = mcl_enchanting.get_enchantment(wielditem, "knockback")
knockback = knockback + 3.22 * enchant
-- add vertical lift to knockback
local v = player:get_velocity()
local added_v = 0
local invul = player:get_meta():get_int("mcl_damage:invulnerable")
if v and v.y <= 0.01 and v.y >= -0.01 and invul == 0 then
local regular_v = 6.4
local enchant_v = 7
regular_v = regular_v * math.abs(dir.y - 1)
enchant_v = enchant_v * math.abs(dir.y - 1)
if enchant == 0 then
player:add_velocity({x = 0, y = regular_v, z = 0})
added_v = regular_v
else
player:add_velocity({x = 0, y = enchant_v, z = 0})
added_v = enchant_v
end
-- add minimum knockback
if knockback <= 1.5 then
knockback = knockback + 4.875
elseif knockback <= 6.19 then
knockback = knockback + 0.609375
end
end
-- counteract forward velocity when hit
local self_dir_dot = (v.x * dir.x) + (v.z * dir.z)
if self_dir_dot < 0 then
player:add_velocity({x = v.x * -1, y = 0, z = v.z * -1})
end
-- add player velocity to knockback
local h_name = hitter:get_player_name()
local hv = hitter:get_velocity()
local dir_dot = (hv.x * dir.x) + (hv.z * dir.z)
local hitter_mag = math.sqrt((hv.x * hv.x) + (hv.z * hv.z))
if dir_dot > 0 and mcl_sprint.is_sprinting(h_name) then
knockback = knockback + hitter_mag * 0.6875
elseif dir_dot > 0 then
knockback = knockback + hitter_mag * 0.515625
end
-- reduce floatiness
minetest.after(0.25, function()
player:add_velocity({x = 0, y = (v.y + added_v) * -0.375, z = 0})
end)
-- reduce knockback when moving towards hitter while attacking
local self_dir_dot = (v.x * dir.x) + (v.z * dir.z)
local control = player:get_player_control()
if self_dir_dot < -4.3 and control.up and control.LMB then
knockback = knockback * 0.6
end
-- remove knockback if invulnerable
if invul > 0 then
knockback = 0
end
elseif hitter and hitter:is_player() and distance > 3 then
knockback = 0
elseif luaentity and luaentity._knockback then
local kb = knockback + luaentity._knockback / 4
local punch_dir = dir
punch_dir.y = 0
punch_dir = vector.normalize(punch_dir) * kb
punch_dir.y = 4
player:add_velocity(punch_dir)
knockback = 0
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,
}
mcl_experience.register_on_add_xp(function(player, xp)
local inv = player:get_inventory()
local candidates = {
{list = "main", index = player:get_wield_index()},
{list = "armor", index = 2},
{list = "armor", index = 3},
{list = "armor", index = 4},
{list = "armor", index = 5},
{list = "offhand", index = 1},
}
local final_candidates = {}
for _, can in ipairs(candidates) do
local stack = inv:get_stack(can.list, can.index)
local wear = stack:get_wear()
if mcl_enchanting.has_enchantment(stack, "mending") and wear > 0 then
can.stack = stack
can.wear = wear
table.insert(final_candidates, can)
end
end
if #final_candidates > 0 then
local can = final_candidates[math.random(#final_candidates)]
local stack, list, index, wear = can.stack, can.list, can.index, can.wear
local uses = mcl_util.calculate_durability(stack)
local multiplier = 2 * 65535 / uses
local repair = xp * multiplier
local new_wear = wear - repair
if new_wear < 0 then
xp = math.floor(-new_wear / multiplier + 0.5)
new_wear = 0
else
xp = 0
end
stack:set_wear(math.floor(new_wear))
tt.reload_itemstack_description(stack) -- update tooltip
inv:set_stack(list, index, stack)
end
return xp
end, 0)
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 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,
}]]--
-- 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)
-- Updating digging durability is handled by update_groupcaps
-- which is called from load_enchantments.
end,
requires_tool = true,
treasure = false,
power_range_table = {{5, 61}, {13, 71}, {21, 81}},
inv_combat_tab = true,
inv_tool_tab = true,
}

732
engine.lua Normal file
View file

@ -0,0 +1,732 @@
local S = minetest.get_translator(minetest.get_current_modname())
local F = minetest.formspec_escape
function mcl_enchanting.is_book(itemname)
return itemname == "mcl_books:book" or itemname == "mcl_enchanting:book_enchanted" or
itemname == "mcl_books:book_enchanted"
end
function mcl_enchanting.get_enchantments(itemstack)
if not itemstack then
return {}
end
return minetest.deserialize(itemstack:get_meta():get_string("mcl_enchanting:enchantments")) or {}
end
function mcl_enchanting.unload_enchantments(itemstack)
local itemdef = itemstack:get_definition()
local meta = itemstack:get_meta()
if itemdef.tool_capabilities then
meta:set_tool_capabilities(nil)
meta:set_string("groupcaps_hash", "")
end
if meta:get_string("name") == "" then
meta:set_string("description", "")
meta:set_string("groupcaps_hash", "")
end
end
function mcl_enchanting.load_enchantments(itemstack, enchantments)
if not mcl_enchanting.is_book(itemstack:get_name()) then
mcl_enchanting.unload_enchantments(itemstack)
for enchantment, level in pairs(enchantments or mcl_enchanting.get_enchantments(itemstack)) do
local enchantment_def = mcl_enchanting.enchantments[enchantment]
if enchantment_def.on_enchant then
enchantment_def.on_enchant(itemstack, level)
end
end
mcl_enchanting.update_groupcaps(itemstack)
end
tt.reload_itemstack_description(itemstack)
end
function mcl_enchanting.set_enchantments(itemstack, enchantments)
itemstack:get_meta():set_string("mcl_enchanting:enchantments", minetest.serialize(enchantments))
mcl_enchanting.load_enchantments(itemstack)
end
function mcl_enchanting.get_enchantment(itemstack, enchantment)
return mcl_enchanting.get_enchantments(itemstack)[enchantment] or 0
end
function mcl_enchanting.has_enchantment(itemstack, enchantment)
return mcl_enchanting.get_enchantment(itemstack, enchantment) > 0
end
function mcl_enchanting.get_enchantment_description(enchantment, level)
local enchantment_def = mcl_enchanting.enchantments[enchantment]
return enchantment_def.name ..
(enchantment_def.max_level == 1 and "" or " " .. mcl_util.to_roman(level))
end
function mcl_enchanting.get_colorized_enchantment_description(enchantment, level)
return minetest.colorize(mcl_enchanting.enchantments[enchantment].curse and mcl_colors.RED or mcl_colors.GRAY,
mcl_enchanting.get_enchantment_description(enchantment, level))
end
function mcl_enchanting.get_enchanted_itemstring(itemname)
local def = minetest.registered_items[itemname]
return def and def._mcl_enchanting_enchanted_tool
end
function mcl_enchanting.set_enchanted_itemstring(itemstack)
itemstack:set_name(mcl_enchanting.get_enchanted_itemstring(itemstack:get_name()))
end
function mcl_enchanting.is_enchanted(itemname)
return minetest.get_item_group(itemname, "enchanted") > 0
end
function mcl_enchanting.not_enchantable_on_enchanting_table(itemname)
return mcl_enchanting.get_enchantability(itemname) == -1
end
function mcl_enchanting.is_enchantable(itemname)
return mcl_enchanting.get_enchantability(itemname) > 0 or
mcl_enchanting.not_enchantable_on_enchanting_table(itemname)
end
function mcl_enchanting.can_enchant_freshly(itemname)
return mcl_enchanting.is_enchantable(itemname) and not mcl_enchanting.is_enchanted(itemname)
end
function mcl_enchanting.get_enchantability(itemname)
return minetest.get_item_group(itemname, "enchantability")
end
function mcl_enchanting.item_supports_enchantment(itemname, enchantment, early)
if not mcl_enchanting.is_enchantable(itemname) then
return false
end
local enchantment_def = mcl_enchanting.enchantments[enchantment]
if mcl_enchanting.is_book(itemname) then
return true, (not enchantment_def.treasure)
end
local itemdef = minetest.registered_items[itemname]
if itemdef.type ~= "tool" and enchantment_def.requires_tool then
return false
end
for disallow in pairs(enchantment_def.disallow) do
if minetest.get_item_group(itemname, disallow) > 0 then
return false
end
end
for group in pairs(enchantment_def.primary) do
if minetest.get_item_group(itemname, group) > 0 then
return true, true
end
end
for group in pairs(enchantment_def.secondary) do
if minetest.get_item_group(itemname, group) > 0 then
return true, false
end
end
return false
end
function mcl_enchanting.can_enchant(itemstack, enchantment, level)
local enchantment_def = mcl_enchanting.enchantments[enchantment]
if not enchantment_def then
return false, "enchantment invalid"
end
local itemname = itemstack:get_name()
if itemname == "" then
return false, "item missing"
end
local supported, primary = mcl_enchanting.item_supports_enchantment(itemname, enchantment)
if not supported then
return false, "item not supported"
end
if not level then
return false, "level invalid"
end
if level > enchantment_def.max_level then
return false, "level too high", enchantment_def.max_level
elseif level < 1 then
return false, "level too small", 1
end
local item_enchantments = mcl_enchanting.get_enchantments(itemstack)
local enchantment_level = item_enchantments[enchantment]
if enchantment_level then
return false, "incompatible", mcl_enchanting.get_enchantment_description(enchantment, enchantment_level)
end
if not mcl_enchanting.is_book(itemname) then
for incompatible in pairs(enchantment_def.incompatible) do
local incompatible_level = item_enchantments[incompatible]
if incompatible_level then
return false, "incompatible",
mcl_enchanting.get_enchantment_description(incompatible, incompatible_level)
end
end
end
return true, nil, nil, primary
end
function mcl_enchanting.enchant(itemstack, enchantment, level)
mcl_enchanting.set_enchanted_itemstring(itemstack)
local enchantments = mcl_enchanting.get_enchantments(itemstack)
enchantments[enchantment] = level
mcl_enchanting.set_enchantments(itemstack, enchantments)
return itemstack
end
function mcl_enchanting.combine(itemstack, combine_with)
local itemname = itemstack:get_name()
local combine_name = combine_with:get_name()
local enchanted_itemname = mcl_enchanting.get_enchanted_itemstring(itemname)
if not enchanted_itemname or
enchanted_itemname ~= mcl_enchanting.get_enchanted_itemstring(combine_name) and
not mcl_enchanting.is_book(combine_name) then
return false
end
local enchantments = mcl_enchanting.get_enchantments(itemstack)
local any_new_enchantment = false
for enchantment, combine_level in pairs(mcl_enchanting.get_enchantments(combine_with)) do
local enchantment_def = mcl_enchanting.enchantments[enchantment]
local enchantment_level = enchantments[enchantment]
if enchantment_level then -- The enchantment already exist in the provided item
if enchantment_level == combine_level then
enchantment_level = math.min(enchantment_level + 1, enchantment_def.max_level)
else
enchantment_level = math.max(enchantment_level, combine_level)
end
any_new_enchantment = any_new_enchantment or ( enchantment_level ~= enchantments[enchantment] )
elseif mcl_enchanting.item_supports_enchantment(itemname, enchantment) then -- this is a new enchantement to try to add
local supported = true
for incompatible in pairs(enchantment_def.incompatible) do
if enchantments[incompatible] then
supported = false
break
end
end
if supported then
enchantment_level = combine_level
any_new_enchantment = true
end
end
if enchantment_level and enchantment_level > 0 then
enchantments[enchantment] = enchantment_level
end
end
if any_new_enchantment then
itemstack:set_name(enchanted_itemname)
mcl_enchanting.set_enchantments(itemstack, enchantments)
end
return any_new_enchantment
end
function mcl_enchanting.enchantments_snippet(_, _, itemstack)
if not itemstack then
return
end
local enchantments = mcl_enchanting.get_enchantments(itemstack)
local text = ""
for enchantment, level in pairs(enchantments) do
text = text .. mcl_enchanting.get_colorized_enchantment_description(enchantment, level) .. "\n"
end
if text ~= "" then
if not itemstack:get_definition()._tt_original_description then
text = text:sub(1, text:len() - 1)
end
return text, false
end
end
-- Returns the after_use callback function to use when registering an enchanted
-- item. The after_use callback is used to update the tool_capabilities of
-- efficiency enchanted tools with outdated digging times.
--
-- It does this by calling apply_efficiency to reapply the efficiency
-- enchantment. That function is written to use hash values to only update the
-- tool if neccessary.
--
-- This is neccessary for digging times of tools to be in sync when MineClone2
-- or mods add new hardness values.
local function get_after_use_callback(itemdef)
if itemdef.after_use then
-- If the tool already has an after_use, make sure to call that
-- one too.
return function(itemstack, user, node, digparams)
itemdef.after_use(itemstack, user, node, digparams)
mcl_enchanting.update_groupcaps(itemstack)
end
end
-- If the tool does not have after_use, add wear to the tool as if no
-- after_use was registered.
return function(itemstack, user, node, digparams)
if not minetest.is_creative_enabled(user:get_player_name()) then
itemstack:add_wear(digparams.wear)
end
--local enchantments = mcl_enchanting.get_enchantments(itemstack)
mcl_enchanting.update_groupcaps(itemstack)
end
end
function mcl_enchanting.initialize()
local register_tool_list = {}
local register_item_list = {}
for itemname, itemdef in pairs(minetest.registered_items) do
if mcl_enchanting.can_enchant_freshly(itemname) and not mcl_enchanting.is_book(itemname) then
local new_name = itemname .. "_enchanted"
minetest.override_item(itemname, { _mcl_enchanting_enchanted_tool = new_name })
local new_def = table.copy(itemdef)
new_def.inventory_image = itemdef.inventory_image .. mcl_enchanting.overlay
if new_def.wield_image then
new_def.wield_image = new_def.wield_image .. mcl_enchanting.overlay
end
new_def.groups.not_in_creative_inventory = 1
new_def.groups.not_in_craft_guide = 1
new_def.groups.enchanted = 1
if new_def._mcl_armor_texture then
if type(new_def._mcl_armor_texture) == "string" then
new_def._mcl_armor_texture = new_def._mcl_armor_texture .. mcl_enchanting.overlay
end
end
new_def._mcl_enchanting_enchanted_tool = new_name
new_def.after_use = get_after_use_callback(itemdef)
local register_list = register_item_list
if itemdef.type == "tool" then
register_list = register_tool_list
end
register_list[":" .. new_name] = new_def
end
end
for new_name, new_def in pairs(register_item_list) do
minetest.register_craftitem(new_name, new_def)
end
for new_name, new_def in pairs(register_tool_list) do
minetest.register_tool(new_name, new_def)
end
end
function mcl_enchanting.random(pr, ...)
local r = pr and pr:next(...) or math.random(...)
if pr and not ({ ... })[1] then
r = r / 32767
end
return r
end
function mcl_enchanting.get_random_enchantment(itemstack, treasure, weighted, exclude, pr)
local possible = {}
for enchantment, enchantment_def in pairs(mcl_enchanting.enchantments) do
local can_enchant, _, _, primary = mcl_enchanting.can_enchant(itemstack, enchantment, 1)
if can_enchant and (primary or treasure) and (not exclude or table.indexof(exclude, enchantment) == -1) then
local weight = weighted and enchantment_def.weight or 1
for i = 1, weight do
table.insert(possible, enchantment)
end
end
end
return #possible > 0 and possible[mcl_enchanting.random(pr, 1, #possible)]
end
function mcl_enchanting.generate_random_enchantments(itemstack, enchantment_level, treasure, no_reduced_bonus_chance,
ignore_already_enchanted, pr)
local itemname = itemstack:get_name()
if (not mcl_enchanting.can_enchant_freshly(itemname) and not ignore_already_enchanted) or
mcl_enchanting.not_enchantable_on_enchanting_table(itemname) then
return
end
itemstack = ItemStack(itemstack)
local enchantability = minetest.get_item_group(itemname, "enchantability")
enchantability = 1 + mcl_enchanting.random(pr, 0, math.floor(enchantability / 4)) +
mcl_enchanting.random(pr, 0, math.floor(enchantability / 4))
enchantment_level = enchantment_level + enchantability
enchantment_level = enchantment_level +
enchantment_level * (mcl_enchanting.random(pr) + mcl_enchanting.random(pr) - 1) * 0.15
enchantment_level = math.max(math.floor(enchantment_level + 0.5), 1)
local enchantments = {}
local description
enchantment_level = enchantment_level * 2
repeat
enchantment_level = math.floor(enchantment_level / 2)
if enchantment_level == 0 then
break
end
local selected_enchantment = mcl_enchanting.get_random_enchantment(itemstack, treasure, true, nil, pr)
if not selected_enchantment then
break
end
local enchantment_def = mcl_enchanting.enchantments[selected_enchantment]
local power_range_table = enchantment_def.power_range_table
local enchantment_power
for i = enchantment_def.max_level, 1, -1 do
local power_range = power_range_table[i]
if enchantment_level >= power_range[1] and enchantment_level <= power_range[2] then
enchantment_power = i
break
end
end
if not description then
if not enchantment_power then
return
end
description = mcl_enchanting.get_enchantment_description(selected_enchantment, enchantment_power)
end
if enchantment_power then
enchantments[selected_enchantment] = enchantment_power
mcl_enchanting.enchant(itemstack, selected_enchantment, enchantment_power)
end
until not no_reduced_bonus_chance and mcl_enchanting.random(pr) >= (enchantment_level + 1) / 50
return enchantments, description
end
function mcl_enchanting.generate_random_enchantments_reliable(itemstack, enchantment_level, treasure, no_reduced_bonus_chance, ignore_already_enchanted, pr)
local enchantments
repeat
enchantments = mcl_enchanting.generate_random_enchantments(itemstack, enchantment_level, treasure,
no_reduced_bonus_chance, ignore_already_enchanted, pr)
until enchantments
return enchantments
end
function mcl_enchanting.enchant_randomly(itemstack, enchantment_level, treasure, no_reduced_bonus_chance,
ignore_already_enchanted, pr)
local enchantments = mcl_enchanting.generate_random_enchantments_reliable(itemstack, enchantment_level, treasure, no_reduced_bonus_chance, ignore_already_enchanted, pr)
mcl_enchanting.set_enchanted_itemstring(itemstack)
mcl_enchanting.set_enchantments(itemstack, enchantments)
return itemstack
end
function mcl_enchanting.enchant_uniform_randomly(stack, exclude, pr)
local enchantment = mcl_enchanting.get_random_enchantment(stack, true, false, exclude, pr)
if enchantment then
mcl_enchanting.enchant(stack, enchantment,
mcl_enchanting.random(pr, 1, mcl_enchanting.enchantments[enchantment].max_level))
end
return stack
end
function mcl_enchanting.get_random_glyph_row()
local glyphs = ""
local x = 1.3
for i = 1, 9 do
glyphs = glyphs ..
"image[" .. x .. ",0.1;0.5,0.5;mcl_enchanting_glyph_" .. math.random(18) .. ".png^[colorize:#675D49:255]"
x = x + 0.6
end
return glyphs
end
function mcl_enchanting.generate_random_table_slots(itemstack, num_bookshelves)
local base = math.random(8) + math.floor(num_bookshelves / 2) + math.random(0, num_bookshelves)
local required_levels = {
math.max(base / 3, 1),
(base * 2) / 3 + 1,
math.max(base, num_bookshelves * 2)
}
local slots = {}
for i, enchantment_level in ipairs(required_levels) do
local slot = false
local enchantments, description = mcl_enchanting.generate_random_enchantments(itemstack, enchantment_level)
if enchantments then
slot = {
enchantments = enchantments,
description = description,
glyphs = mcl_enchanting.get_random_glyph_row(),
level_requirement = math.max(i, math.floor(enchantment_level)),
}
end
slots[i] = slot
end
return slots
end
function mcl_enchanting.get_table_slots(player, itemstack, num_bookshelves)
local itemname = itemstack:get_name()
if (not mcl_enchanting.can_enchant_freshly(itemname)) or mcl_enchanting.not_enchantable_on_enchanting_table(itemname) then
return { false, false, false }
end
local meta = player:get_meta()
local player_slots = minetest.deserialize(meta:get_string("mcl_enchanting:slots")) or {}
local player_bookshelves_slots = player_slots[num_bookshelves] or {}
local player_bookshelves_item_slots = player_bookshelves_slots[itemname]
if player_bookshelves_item_slots then
return player_bookshelves_item_slots
else
player_bookshelves_item_slots = mcl_enchanting.generate_random_table_slots(itemstack, num_bookshelves)
if player_bookshelves_item_slots then
player_bookshelves_slots[itemname] = player_bookshelves_item_slots
player_slots[num_bookshelves] = player_bookshelves_slots
meta:set_string("mcl_enchanting:slots", minetest.serialize(player_slots))
return player_bookshelves_item_slots
else
return { false, false, false }
end
end
end
function mcl_enchanting.reset_table_slots(player)
player:get_meta():set_string("mcl_enchanting:slots", "")
end
function mcl_enchanting.show_enchanting_formspec(player)
local C = minetest.get_color_escape_sequence
local name = player:get_player_name()
local meta = player:get_meta()
local inv = player:get_inventory()
local num_bookshelves = meta:get_int("mcl_enchanting:num_bookshelves")
local table_name = meta:get_string("mcl_enchanting:table_name")
local formspec = table.concat({
"formspec_version[4]",
"size[11.75,10.425]",
"label[0.375,0.375;" .. F(C(mcl_formspec.label_color) .. table_name) .. "]",
mcl_formspec.get_itemslot_bg_v4(1, 3.25, 1, 1),
"list[current_player;enchanting_item;1,3.25;1,1]",
mcl_formspec.get_itemslot_bg_v4(2.25, 3.25, 1, 1),
"image[2.25,3.25;1,1;mcl_enchanting_lapis_background.png]",
"list[current_player;enchanting_lapis;2.25,3.25;1,1]",
"image[4.125,0.56;7.25,4.1;mcl_enchanting_button_background.png]",
"label[0.375,4.7;" .. F(C(mcl_formspec.label_color) .. S("Inventory")) .. "]",
mcl_formspec.get_itemslot_bg_v4(0.375, 5.1, 9, 3),
"list[current_player;main;0.375,5.1;9,3;9]",
mcl_formspec.get_itemslot_bg_v4(0.375, 9.05, 9, 1),
"list[current_player;main;0.375,9.05;9,1;]",
"listring[current_player;enchanting_item]",
"listring[current_player;main]",
"listring[current_player;enchanting]",
"listring[current_player;main]",
"listring[current_player;enchanting_lapis]",
"listring[current_player;main]",
})
local itemstack = inv:get_stack("enchanting_item", 1)
local player_levels = mcl_experience.get_level(player)
local y = 0.65
local any_enchantment = false
local table_slots = mcl_enchanting.get_table_slots(player, itemstack, num_bookshelves)
for i, slot in ipairs(table_slots) do
any_enchantment = any_enchantment or slot
local enough_lapis = inv:contains_item("enchanting_lapis", ItemStack({ name = "mcl_core:lapis", count = i }))
local enough_levels = slot and slot.level_requirement <= player_levels
local can_enchant = (slot and enough_lapis and enough_levels)
local ending = (can_enchant and "" or "_off")
local hover_ending = (can_enchant and "_hovered" or "_off")
formspec = formspec
.. "container[4.125," .. y .. "]"
..
(
slot and
"tooltip[button_" ..
i ..
";" ..
C("#818181") ..
((slot.description and F(slot.description)) or "") ..
" " ..
C("#FFFFFF") ..
" . . . ?\n\n" ..
(
enough_levels and
C(enough_lapis and "#818181" or "#FC5454") ..
F(S("@1 Lapis Lazuli", i)) .. "\n" .. C("#818181") .. F(S("@1 Enchantment Levels", i)) or
C("#FC5454") .. F(S("Level requirement: @1", slot.level_requirement))) .. "]" or "")
..
"style[button_" ..
i ..
";bgimg=mcl_enchanting_button" ..
ending ..
".png;bgimg_hovered=mcl_enchanting_button" ..
hover_ending .. ".png;bgimg_pressed=mcl_enchanting_button" .. hover_ending .. ".png]"
.. "button[0,0;7.25,1.3;button_" .. i .. ";]"
.. (slot and "image[0,0;1.3,1.3;mcl_enchanting_number_" .. i .. ending .. ".png]" or "")
.. (slot and "label[6.8,1;" .. C(can_enchant and "#80FF20" or "#407F10") .. slot.level_requirement .. "]" or "")
.. (slot and slot.glyphs or "")
.. "container_end[]"
y = y + 1.3
end
formspec = formspec
..
"image[" ..
(any_enchantment and 1.1 or 1.67) ..
",1.2;" ..
(any_enchantment and 2 or 0.87) ..
",1.43;mcl_enchanting_book_" .. (any_enchantment and "open" or "closed") .. ".png]"
minetest.show_formspec(name, "mcl_enchanting:table", formspec)
end
function mcl_enchanting.handle_formspec_fields(player, formname, fields)
if formname == "mcl_enchanting:table" then
local button_pressed
for i = 1, 3 do
if fields["button_" .. i] then
button_pressed = i
end
end
if not button_pressed then return end
local name = player:get_player_name()
local inv = player:get_inventory()
local meta = player:get_meta()
local num_bookshelfes = meta:get_int("mcl_enchanting:num_bookshelves")
local itemstack = inv:get_stack("enchanting_item", 1)
local cost = ItemStack({ name = "mcl_core:lapis", count = button_pressed })
if not inv:contains_item("enchanting_lapis", cost) then
return
end
local slots = mcl_enchanting.get_table_slots(player, itemstack, num_bookshelfes)
local slot = slots[button_pressed]
if not slot then
return
end
local player_level = mcl_experience.get_level(player)
if player_level < slot.level_requirement then
return
end
mcl_experience.set_level(player, player_level - button_pressed)
inv:remove_item("enchanting_lapis", cost)
mcl_enchanting.set_enchanted_itemstring(itemstack)
mcl_enchanting.set_enchantments(itemstack, slot.enchantments)
inv:set_stack("enchanting_item", 1, itemstack)
minetest.sound_play("mcl_enchanting_enchant", { to_player = name, gain = 5.0 })
mcl_enchanting.reset_table_slots(player)
mcl_enchanting.show_enchanting_formspec(player)
awards.unlock(player:get_player_name(), "mcl:enchanter")
end
end
function mcl_enchanting.initialize_player(player)
local inv = player:get_inventory()
inv:set_size("enchanting", 1)
inv:set_size("enchanting_item", 1)
inv:set_size("enchanting_lapis", 1)
end
function mcl_enchanting.is_enchanting_inventory_action(action, inventory, inventory_info)
if inventory:get_location().type == "player" then
local enchanting_lists = mcl_enchanting.enchanting_lists
if action == "move" then
local is_from = table.indexof(enchanting_lists, inventory_info.from_list) ~= -1
local is_to = table.indexof(enchanting_lists, inventory_info.to_list) ~= -1
return is_from or is_to, is_to
elseif (action == "put" or action == "take") and table.indexof(enchanting_lists, inventory_info.listname) ~= -1 then
return true
end
else
return false
end
end
function mcl_enchanting.allow_inventory_action(player, action, inventory, inventory_info)
local is_enchanting_action, do_limit = mcl_enchanting.is_enchanting_inventory_action(action, inventory,
inventory_info)
if is_enchanting_action and do_limit then
if action == "move" then
local listname = inventory_info.to_list
local stack = inventory:get_stack(inventory_info.from_list, inventory_info.from_index)
if stack:get_name() == "mcl_core:lapis" and listname ~= "enchanting_item" then
local count = stack:get_count()
local old_stack = inventory:get_stack("enchanting_lapis", 1)
if old_stack:get_name() ~= "" then
count = math.min(count, old_stack:get_free_space())
end
return count
elseif inventory:get_stack("enchanting_item", 1):get_count() == 0 and listname ~= "enchanting_lapis" then
return 1
else
return 0
end
else
return 0
end
end
end
function mcl_enchanting.on_inventory_action(player, action, inventory, inventory_info)
if mcl_enchanting.is_enchanting_inventory_action(action, inventory, inventory_info) then
if action == "move" and inventory_info.to_list == "enchanting" then
local stack = inventory:get_stack("enchanting", 1)
local result_list
if stack:get_name() == "mcl_core:lapis" then
result_list = "enchanting_lapis"
stack:add_item(inventory:get_stack("enchanting_lapis", 1))
else
result_list = "enchanting_item"
end
inventory:set_stack(result_list, 1, stack)
inventory:set_stack("enchanting", 1, nil)
end
mcl_enchanting.show_enchanting_formspec(player)
end
end
function mcl_enchanting.schedule_book_animation(self, anim)
self.scheduled_anim = { timer = self.anim_length, anim = anim }
end
function mcl_enchanting.set_book_animation(self, anim)
local anim_index = mcl_enchanting.book_animations[anim]
local start, stop = mcl_enchanting.book_animation_steps[anim_index],
mcl_enchanting.book_animation_steps[anim_index + 1]
self.object:set_animation({ x = start, y = stop }, mcl_enchanting.book_animation_speed, 0,
mcl_enchanting.book_animation_loop[anim] or false)
self.scheduled_anim = nil
self.anim_length = (stop - start) / 40
end
function mcl_enchanting.check_animation_schedule(self, dtime)
local schedanim = self.scheduled_anim
if schedanim then
schedanim.timer = schedanim.timer - dtime
if schedanim.timer <= 0 then
mcl_enchanting.set_book_animation(self, schedanim.anim)
end
end
end
function mcl_enchanting.look_at(self, pos2)
local pos1 = self.object:get_pos()
local vec = vector.subtract(pos1, pos2)
local yaw = math.atan(vec.z / vec.x) - math.pi / 2
yaw = yaw + (pos1.x >= pos2.x and math.pi or 0)
self.object:set_yaw(yaw + math.pi)
end
function mcl_enchanting.get_bookshelves(pos)
local absolute, relative = {}, {}
for i, rp in ipairs(mcl_enchanting.bookshelf_positions) do
local airp = vector.add(pos, mcl_enchanting.air_positions[i])
local ap = vector.add(pos, rp)
if minetest.get_node(ap).name == "mcl_books:bookshelf" and minetest.get_node(airp).name == "air" then
table.insert(absolute, ap)
table.insert(relative, rp)
end
end
return absolute, relative
end

72
groupcaps.lua Normal file
View file

@ -0,0 +1,72 @@
local groupcaps_cache = {}
-- Compute a hash value.
function compute_hash(value)
return string.sub(minetest.sha1(minetest.serialize(value)), 1, 8)
end
-- 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
local function get_efficiency_groupcaps(toolname, level)
local toolcache = groupcaps_cache[toolname]
local level = level
if not toolcache then
toolcache = {}
groupcaps_cache[toolname] = toolcache
end
local levelcache = toolcache[level]
if not levelcache then
levelcache = {}
levelcache.values = mcl_autogroup.get_groupcaps(toolname, level)
levelcache.hash = compute_hash(levelcache.values)
toolcache[level] = levelcache
end
return levelcache
end
-- 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.update_groupcaps(itemstack)
local name = itemstack:get_name()
if not minetest.registered_tools[name] or not minetest.registered_tools[name].tool_capabilities then
return
end
local efficiency = mcl_enchanting.get_enchantment(itemstack, "efficiency")
local unbreaking = mcl_enchanting.get_enchantment(itemstack, "unbreaking")
if unbreaking == 0 and efficiency == 0 then
return
end
local groupcaps = get_efficiency_groupcaps(name, efficiency)
local hash = itemstack:get_meta():get_string("groupcaps_hash")
if not hash or hash ~= groupcaps.hash then
local tool_capabilities = itemstack:get_tool_capabilities()
tool_capabilities.groupcaps = table.copy(groupcaps.values)
-- Increase the number of uses depending on the unbreaking level
-- of the tool.
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_string("groupcaps_hash", groupcaps.hash)
end
end

367
init.lua Normal file
View file

@ -0,0 +1,367 @@
local modname = minetest.get_current_modname()
local modpath = minetest.get_modpath(modname)
local S = minetest.get_translator(modname)
local math = math
local vector = vector
mcl_enchanting = {
book_offset = vector.new(0, 0.75, 0),
book_animations = {["close"] = 1, ["opening"] = 2, ["open"] = 3, ["closing"] = 4},
book_animation_steps = {0, 640, 680, 700, 740},
book_animation_loop = {["open"] = true, ["close"] = true},
book_animation_speed = 40,
enchantments = {},
overlay = "^[colorize:purple:50",
--overlay = "^[invert:rgb^[multiply:#4df44d:50^[invert:rgb",
enchanting_lists = {"enchanting", "enchanting_item", "enchanting_lapis"},
bookshelf_positions = {
{x = -2, y = 0, z = -2}, {x = -2, y = 1, z = -2},
{x = -1, y = 0, z = -2}, {x = -1, y = 1, z = -2},
{x = 0, y = 0, z = -2}, {x = 0, y = 1, z = -2},
{x = 1, y = 0, z = -2}, {x = 1, y = 1, z = -2},
{x = 2, y = 0, z = -2}, {x = 2, y = 1, z = -2},
{x = -2, y = 0, z = 2}, {x = -2, y = 1, z = 2},
{x = -1, y = 0, z = 2}, {x = -1, y = 1, z = 2},
{x = 0, y = 0, z = 2}, {x = 0, y = 1, z = 2},
{x = 1, y = 0, z = 2}, {x = 1, y = 1, z = 2},
{x = 2, y = 0, z = 2}, {x = 2, y = 1, z = 2},
-- {x = -2, y = 0, z = -2}, {x = -2, y = 1, z = -2},
{x = -2, y = 0, z = -1}, {x = -2, y = 1, z = -1},
{x = -2, y = 0, z = 0}, {x = -2, y = 1, z = 0},
{x = -2, y = 0, z = 1}, {x = -2, y = 1, z = 1},
-- {x = -2, y = 0, z = 2}, {x = -2, y = 1, z = 2},
-- {x = 2, y = 0, z = -2}, {x = 2, y = 1, z = -2},
{x = 2, y = 0, z = -1}, {x = 2, y = 1, z = -1},
{x = 2, y = 0, z = 0}, {x = 2, y = 1, z = 0},
{x = 2, y = 0, z = 1}, {x = 2, y = 1, z = 1},
-- {x = 2, y = 0, z = 2}, {x = 2, y = 1, z = 2},
},
air_positions = {
{x = -1, y = 0, z = -1}, {x = -1, y = 1, z = -1},
{x = -1, y = 0, z = -1}, {x = -1, y = 1, z = -1},
{x = 0, y = 0, z = -1}, {x = 0, y = 1, z = -1},
{x = 1, y = 0, z = -1}, {x = 1, y = 1, z = -1},
{x = 1, y = 0, z = -1}, {x = 1, y = 1, z = -1},
{x = -1, y = 0, z = 1}, {x = -1, y = 1, z = 1},
{x = -1, y = 0, z = 1}, {x = -1, y = 1, z = 1},
{x = 0, y = 0, z = 1}, {x = 0, y = 1, z = 1},
{x = 1, y = 0, z = 1}, {x = 1, y = 1, z = 1},
{x = 1, y = 0, z = 1}, {x = 1, y = 1, z = 1},
-- {x = -1, y = 0, z = -1}, {x = -1, y = 1, z = -1},
{x = -1, y = 0, z = -1}, {x = -1, y = 1, z = -1},
{x = -1, y = 0, z = 0}, {x = -1, y = 1, z = 0},
{x = -1, y = 0, z = 1}, {x = -1, y = 1, z = 1},
-- {x = -1, y = 0, z = 1}, {x = -1, y = 1, z = 1},
-- {x = 1, y = 0, z = -1}, {x = 1, y = 1, z = -1},
{x = 1, y = 0, z = -1}, {x = 1, y = 1, z = -1},
{x = 1, y = 0, z = 0}, {x = 1, y = 1, z = 0},
{x = 1, y = 0, z = 1}, {x = 1, y = 1, z = 1},
-- {x = 1, y = 0, z = 1}, {x = 1, y = 1, z = 1},
},
}
dofile(modpath .. "/engine.lua")
dofile(modpath .. "/groupcaps.lua")
dofile(modpath .. "/enchantments.lua")
minetest.register_chatcommand("enchant", {
description = S("Enchant an item"),
params = S("<player> <enchantment> [<level>]"),
privs = {give = true},
func = function(_, param)
local sparam = param:split(" ")
local target_name = sparam[1]
local enchantment = sparam[2]
local level_str = sparam[3]
local level = tonumber(level_str or "1")
if not target_name or not enchantment then
return false, S("Usage: /enchant <player> <enchantment> [<level>]")
end
local target = minetest.get_player_by_name(target_name)
if not target then
return false, S("Player '@1' cannot be found.", target_name)
end
local itemstack = target:get_wielded_item()
local can_enchant, errorstring, extra_info = mcl_enchanting.can_enchant(itemstack, enchantment, level)
if not can_enchant then
if errorstring == "enchantment invalid" then
return false, S("There is no such enchantment '@1'.", enchantment)
elseif errorstring == "item missing" then
return false, S("The target doesn't hold an item.")
elseif errorstring == "item not supported" then
return false, S("The selected enchantment can't be added to the target item.")
elseif errorstring == "level invalid" then
return false, S("'@1' is not a valid number", level_str)
elseif errorstring == "level too high" then
return false, S("The number you have entered (@1) is too big, it must be at most @2.", level_str, extra_info)
elseif errorstring == "level too small" then
return false, S("The number you have entered (@1) is too small, it must be at least @2.", level_str, extra_info)
elseif errorstring == "incompatible" then
return false, S("@1 can't be combined with @2.", mcl_enchanting.get_enchantment_description(enchantment, level), extra_info)
end
else
target:set_wielded_item(mcl_enchanting.enchant(itemstack, enchantment, level))
return true, S("Enchanting succeded.")
end
end
})
minetest.register_chatcommand("forceenchant", {
description = S("Forcefully enchant an item"),
params = S("<player> <enchantment> [<level>]"),
privs = {give = true},
func = function(_, param)
local sparam = param:split(" ")
local target_name = sparam[1]
local enchantment = sparam[2]
local level_str = sparam[3]
local level = tonumber(level_str or "1")
if not target_name or not enchantment then
return false, S("Usage: /forceenchant <player> <enchantment> [<level>]")
end
local target = minetest.get_player_by_name(target_name)
if not target then
return false, S("Player '@1' cannot be found.", target_name)
end
local itemstack = target:get_wielded_item()
local _, errorstring = mcl_enchanting.can_enchant(itemstack, enchantment, level)
if errorstring == "enchantment invalid" then
return false, S("There is no such enchantment '@1'.", enchantment)
elseif errorstring == "item missing" then
return false, S("The target doesn't hold an item.")
elseif errorstring == "item not supported" and not mcl_enchanting.is_enchantable(itemstack:get_name()) then
return false, S("The target item is not enchantable.")
elseif errorstring == "level invalid" then
return false, S("'@1' is not a valid number.", level_str)
else
target:set_wielded_item(mcl_enchanting.enchant(itemstack, enchantment, level))
return true, S("Enchanting succeded.")
end
end
})
minetest.register_craftitem("mcl_enchanting:book_enchanted", {
description = S("Enchanted Book"),
inventory_image = "mcl_enchanting_book_enchanted.png" .. mcl_enchanting.overlay,
groups = {enchanted = 1, not_in_creative_inventory = 1, enchantability = 1},
_mcl_enchanting_enchanted_tool = "mcl_enchanting:book_enchanted",
stack_max = 1,
})
minetest.register_alias("mcl_books:book_enchanted", "mcl_enchanting:book_enchanted")
local function spawn_book_entity(pos, respawn)
if respawn then
-- Check if we already have a book
local objs = minetest.get_objects_inside_radius(pos, 1)
for o=1, #objs do
local obj = objs[o]
local lua = obj:get_luaentity()
if lua and lua.name == "mcl_enchanting:book" then
if lua._table_pos and vector.equals(pos, lua._table_pos) then
return
end
end
end
end
local obj = minetest.add_entity(vector.add(pos, mcl_enchanting.book_offset), "mcl_enchanting:book")
if obj then
local lua = obj:get_luaentity()
if lua then
lua._table_pos = table.copy(pos)
end
end
end
minetest.register_entity("mcl_enchanting:book", {
initial_properties = {
visual = "mesh",
mesh = "mcl_enchanting_book.b3d",
visual_size = {x = 12.5, y = 12.5},
collisionbox = {0, 0, 0},
pointable = false,
physical = false,
textures = {"mcl_enchanting_book_entity.png", "mcl_enchanting_book_entity.png", "mcl_enchanting_book_entity.png", "mcl_enchanting_book_entity.png", "mcl_enchanting_book_entity.png"},
static_save = false,
},
_player_near = false,
_table_pos = nil,
on_activate = function(self, staticdata)
self.object:set_armor_groups({immortal = 1})
mcl_enchanting.set_book_animation(self, "close")
end,
on_step = function(self, dtime)
local old_player_near = self._player_near
local player_near = false
local player
for _, obj in pairs(minetest.get_objects_inside_radius(vector.subtract(self.object:get_pos(), mcl_enchanting.book_offset), 2.5)) do
if obj:is_player() then
player_near = true
player = obj
end
end
if player_near and not old_player_near then
mcl_enchanting.set_book_animation(self, "opening")
mcl_enchanting.schedule_book_animation(self, "open")
elseif old_player_near and not player_near then
mcl_enchanting.set_book_animation(self, "closing")
mcl_enchanting.schedule_book_animation(self, "close")
end
if player then
mcl_enchanting.look_at(self, player:get_pos())
end
self._player_near = player_near
mcl_enchanting.check_animation_schedule(self, dtime)
end,
})
local rotate
if minetest.get_modpath("screwdriver") then
rotate = screwdriver.rotate_simple
end
minetest.register_node("mcl_enchanting:table", {
description = S("Enchanting Table"),
_tt_help = S("Spend experience, and lapis to enchant various items."),
_doc_items_longdesc = S("Enchanting Tables will let you enchant armors, tools, weapons, and books with various abilities. But, at the cost of some experience, and lapis lazuli."),
_doc_items_usagehelp =
S("Rightclick the Enchanting Table to open the enchanting menu.").."\n"..
S("Place a tool, armor, weapon or book into the top left slot, and then place 1-3 Lapis Lazuli in the slot to the right.").."\n".."\n"..
S("After placing your items in the slots, the enchanting options will be shown. Hover over the options to read what is available to you.").."\n"..
S("These options are randomized, and dependent on experience level; but the enchantment strength can be increased.").."\n".."\n"..
S("To increase the enchantment strength, place bookshelves around the enchanting table. However, you will need to keep 1 air node between the table, & the bookshelves to empower the enchanting table.").."\n".."\n"..
S("After finally selecting your enchantment; left-click on the selection, and you will see both the lapis lazuli and your experience levels consumed. And, an enchanted item left in its place."),
_doc_items_hidden = false,
drawtype = "nodebox",
tiles = {"mcl_enchanting_table_top.png", "mcl_enchanting_table_bottom.png", "mcl_enchanting_table_side.png", "mcl_enchanting_table_side.png", "mcl_enchanting_table_side.png", "mcl_enchanting_table_side.png"},
use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false,
node_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0.25, 0.5},
},
sounds = mcl_sounds.node_sound_stone_defaults(),
groups = {pickaxey = 2, deco_block = 1},
on_rotate = rotate,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
local player_meta = clicker:get_meta()
--local table_meta = minetest.get_meta(pos)
--local num_bookshelves = table_meta:get_int("mcl_enchanting:num_bookshelves")
local table_name = minetest.get_meta(pos):get_string("name")
if table_name == "" then
table_name = S("Enchant")
end
local bookshelves = mcl_enchanting.get_bookshelves(pos)
player_meta:set_int("mcl_enchanting:num_bookshelves", math.min(15, #bookshelves))
player_meta:set_string("mcl_enchanting:table_name", table_name)
mcl_enchanting.show_enchanting_formspec(clicker)
-- Respawn book entity just in case it got lost
spawn_book_entity(pos, true)
end,
on_construct = function(pos)
spawn_book_entity(pos)
end,
after_dig_node = function(pos, oldnode, oldmetadata, digger)
local dname = (digger and digger:get_player_name()) or ""
if minetest.is_creative_enabled(dname) then
return
end
local itemstack = ItemStack("mcl_enchanting:table")
local meta = minetest.get_meta(pos)
local itemmeta = itemstack:get_meta()
itemmeta:set_string("name", meta:get_string("name"))
itemmeta:set_string("description", meta:get_string("description"))
minetest.add_item(pos, itemstack)
end,
after_place_node = function(pos, placer, itemstack, pointed_thing)
local meta = minetest.get_meta(pos)
local itemmeta = itemstack:get_meta()
meta:set_string("name", itemmeta:get_string("name"))
meta:set_string("description", itemmeta:get_string("description"))
end,
after_destruct = function(pos)
local objs = minetest.get_objects_inside_radius(pos, 1)
for o=1, #objs do
local obj = objs[o]
local lua = obj:get_luaentity()
if lua and lua.name == "mcl_enchanting:book" then
if lua._table_pos and vector.equals(pos, lua._table_pos) then
obj:remove()
end
end
end
end,
drop = "",
_mcl_blast_resistance = 1200,
_mcl_hardness = 5,
})
minetest.register_craft({
output = "mcl_enchanting:table",
recipe = {
{"", "mcl_books:book", ""},
{"mcl_core:diamond", "mcl_core:obsidian", "mcl_core:diamond"},
{"mcl_core:obsidian", "mcl_core:obsidian", "mcl_core:obsidian"}
}
})
minetest.register_abm({
label = "Enchanting table bookshelf particles",
interval = 1,
chance = 1,
nodenames = "mcl_enchanting:table",
action = function(pos)
local playernames = {}
for _, obj in pairs(minetest.get_objects_inside_radius(pos, 15)) do
if obj:is_player() then
table.insert(playernames, obj:get_player_name())
end
end
if #playernames < 1 then
return
end
local absolute, relative = mcl_enchanting.get_bookshelves(pos)
for i, ap in ipairs(absolute) do
if math.random(5) == 1 then
local rp = relative[i]
local t = math.random()+1 --time
local d = {x = rp.x, y=rp.y-0.7, z=rp.z} --distance
local v = {x = -math.random()*d.x, y = math.random(), z = -math.random()*d.z} --velocity
local a = {x = 2*(-v.x*t - d.x)/t/t, y = 2*(-v.y*t - d.y)/t/t, z = 2*(-v.z*t - d.z)/t/t} --acceleration
local s = math.random()+0.9 --size
t = t - 0.1 --slightly decrease time to avoid texture overlappings
local tx = "mcl_enchanting_glyph_" .. math.random(18) .. ".png"
for _, name in pairs(playernames) do
minetest.add_particle({
pos = ap,
velocity = v,
acceleration = a,
expirationtime = t,
size = s,
texture = tx,
collisiondetection = false,
playername = name
})
end
end
end
end
})
minetest.register_lbm({
label = "(Re-)spawn book entity above enchanting table",
name = "mcl_enchanting:spawn_book_entity",
nodenames = {"mcl_enchanting:table"},
run_at_every_load = true,
action = function(pos)
spawn_book_entity(pos, true)
end,
})
minetest.register_on_mods_loaded(mcl_enchanting.initialize)
minetest.register_on_joinplayer(mcl_enchanting.initialize_player)
minetest.register_on_player_receive_fields(mcl_enchanting.handle_formspec_fields)
minetest.register_allow_player_inventory_action(mcl_enchanting.allow_inventory_action)
minetest.register_on_player_inventory_action(mcl_enchanting.on_inventory_action)
tt.register_priority_snippet(mcl_enchanting.enchantments_snippet)

100
locale/mcl_enchanting.de.tr Normal file
View file

@ -0,0 +1,100 @@
# textdomain: mcl_enchanting
Aqua Affinity=Aquaaffinität
Increases underwater mining speed.=Erhöht Unterwassergrabegeschwindigkeit.
Bane of Arthropods=Schrecken der Gliederfüßler
Increases damage and applies Slowness IV to arthropod mobs (spiders, cave spiders, silverfish and endermites).=Erhöht Schaden und gibt Langsamkeit IV an Gliederfüßlern (Spinnen, Höhlenspinenn, Silberfischchen und Endermilben).
Blast Protection=Explosionsschutz
Reduces explosion damage and knockback.=Reduziert Explosionsschaden und -rückschlag.
Channeling=Kanalisierung
Channels a bolt of lightning toward a target. Works only during thunderstorms and if target is unobstructed with opaque blocks.=Kanalisiert einen Blitz zu einem Ziel. Funktioniert nur während Gewitterstürmen und solange kein undurchsichtiger Block im Weg ist.
Curse of Binding=Fluch der Bindung
Item cannot be removed from armor slots except due to death, breaking or in Creative Mode.=Gegenstand kann nicht von den Rüstungsplätzen entfernt werden, außer beim Tod, Zerbrechen oder im Kreativmodus.
Curse of Vanishing=Fluch des Verschwindens
Item destroyed on death.=Gegenstand wird bei Tod zerstört.
Depth Strider=Tiefenstreicher
Increases underwater movement speed.=Erhöht Bewegungsgeschwindigkeit im Wasser.
Efficiency=Effizienz
Increases mining speed.=Erhöht Grabegeschwindigkeit.
Feather Falling=Federfall
Reduces fall damage.=Reduziert Fallschaden.
Fire Aspect=Feueraspekt
Sets target on fire.=Zündet das Ziel an.
Fire Protection=Feuerschutz
Reduces fire damage.=Reduziert Feuerschaden
Flame=Flamme
Arrows set target on fire.=Pfeile zünden Ziel an.
Fortune=Glück
Increases certain block drops.=Erhöht bestimmte Blockabwürfe.
Frost Walker=Frostläufer
Turns water beneath the player into frosted ice and prevents the damage from magma blocks.=Verwandelt Wasser unter dem Spieler zu brüchigem Eis und verhindert Schaden von Magmablöcken.
Impaling=Aufspießen
Trident deals additional damage to ocean mobs.=Dreizack richtet Zusatzschaden an Ozeanmobs an.
Infinity=Unendlichkeit
Shooting consumes no regular arrows.=Schüsse verbrauchen keine regulären Pfeile.
Knockback=Rückschlag
Increases knockback.=Verstärkt Rückschlag.
Looting=Plünderer
Increases mob loot.=Erhöht Abwürfe von Mobs.
Loyalty=Loyalität
Trident returns after being thrown. Higher levels reduce return time.=Dreizack kehrt nach Wurf zurück. Höhere Stufen reduzieren die Rückkehrzeit.
Luck of the Sea=Glück des Meeres
Increases rate of good loot (enchanting books, etc.)=Erhöht die Rate von guten Abwürfen (verzauberte Bücher, usw.)
Lure=Köder
Decreases time until rod catches something.=Reduziert die Zeit, bis die Angel etwas fängt.
Mending=Ausbessern
Repair the item while gaining XP orbs.=Gegenstand reparieren, während man Erfahrungskugeln erhält.
Multishot=Mehrfachschuss
Shoot 3 arrows at the cost of one.=3 Pfeile zum Preis von 1 schießen.
Piercing=Durchbohren
Arrows passes through multiple objects.=Pfeile durchdringen mehrere Objekte.
Power=Stärke
Increases arrow damage.=Erhöht Pfeilschaden.
Projectile Protection=Projektilprojektion
Reduces projectile damage.=Reduziert Projektilschaden.
Protection=Schutz
Reduces most types of damage by 4% for each level.=Reduziert die meisten Schadensarten um 4% je Stufe.
Punch=Schlag
Increases arrow knockback.=Erhöht Pfeilrückschlag.
Quick Charge=Schnellladen
Decreases crossbow charging time.=Reduziert Armbrustladezeit.
Respiration=Atmung
Extends underwater breathing time.=Erhöht Unterwasseratemzeit.
Riptide=Strömung
Trident launches player with itself when thrown. Works only in water or rain.=Dreizack wirft den Spieler mit. Funktioniert nur im Wasser oder Regen.
Sharpness=Schärfe
Increases damage.=Erhöht Schaden.
Silk Touch=Sorgfalt
Mined blocks drop themselves.=Abgebaute Blöcke werfen sich selbst ab.
Smite=Qual
Increases damage to undead mobs.=Erhöht Schaden für untote Mobs.
Soul Speed=Schnelle Seele
Increases walking speed on soul sand.=Erhöht Gehgeschwindigkeit auf Seelensand.
Sweeping Edge=Schwungklinge
Increases sweeping attack damage.=Erhöht Schwungangriffsschaden.
Thorns=Dornen
Reflects some of the damage taken when hit, at the cost of reducing durability with each proc.=Reflektiert etwas des Schadens beim Erleiden eines Treffers, auf Kosten der Haltbarkeit.
Unbreaking=Haltbarkeit
Increases item durability.=Erhöht Haltbarkeit des Gegenstands.
Inventory=Inventar
@1 Lapis Lazuli=@1 Lapislazuli
@1 Enchantment Levels=@1 Verzauberungsstufen
Level requirement: @1=Level benötigt: @1
Enchant an item=Gegenstand verzaubern
<player> <enchantment> [<level>]=<Spieler> <Verzauberung> [<Stufe>]
Usage: /enchant <player> <enchantment> [<level>]=Verwendung: /enchant <Spieler> <Verzauberung> [<Stufe>]
Player '@1' cannot be found.=Spieler „@1“ kann nicht gefunden werden.
There is no such enchantment '@1'.=Es gibt keine Verzauberung namens „@1“.
The target doesn't hold an item.=Das Ziel hält keinen Gegenstand.
The selected enchantment can't be added to the target item.=Die gewählte Verzauberug kann nicht dem Ziel gegeben werden.
'@1' is not a valid number='@1' ist keine gültige Zahl
The number you have entered (@1) is too big, it must be at most @2.=Die eingegebene Zahl (@1) ist zu groß, maximal @1 erlaubt.
The number you have entered (@1) is too small, it must be at least @2.=Die eingegebene Zahl (@1) ist zu klein, minimal @1 erlaubt.
@1 can't be combined with @2.=@1 kann nicht mit @2 kombiniert werden.
Enchanting succeded.=Verzauberug erfolgreich.
Forcefully enchant an item=Einen Gegenstand zwangsweise verzaubern
Usage: /forceenchant <player> <enchantment> [<level>]=Verwendung: /forceenchant <Spieler> <Verzauberung> [<Stufe>]
The target item is not enchantable.=Der Zielgegenstand ist nicht verzauberbar.
'@1' is not a valid number.='@1' ist keine gültige Zahl.
Enchanted Book=Verzaubertes Buch
Enchanting Table=Zaubertisch
Enchant=Verzaubern

123
locale/mcl_enchanting.es.tr Normal file
View file

@ -0,0 +1,123 @@
# textdomain: mcl_enchanting
### enchantments.lua ###
Arrows passes through multiple objects.=Las flechas atraviesan multiples enemigos.
Arrows set target on fire.=Las flechas prenderan los enemigos.
Bane of Arthropods=Perdición de los Artrópodos
Channeling=Conductividad
Channels a bolt of lightning toward a target. Works only during thunderstorms and if target is unobstructed with opaque blocks.=Canaliza los rayos de una tormenta hacia el enemigo.
Curse of Vanishing=Maldición de Desaparición
Decreases crossbow charging time.=Disminuye el tiempo de carga de las ballestas.
Decreases time until rod catches something.=Disminuye el tiempo que tardan en picar los cebos en la pesca.
Depth Strider=Agilidad acuática
Efficiency=Eficiencia
Extends underwater breathing time.=Aumenta el tiempo de mantener la respiración.
Fire Aspect=Aspecto Ígneo
Flame=Fuego
Fortune=Fortuna
Frost Walker=Paso Helado
Impaling=Empalamiento
Increases arrow damage.=Incrementa el daño de las flechas.
Increases arrow knockback.=Incrementa el empuje de las flechas.
Increases certain block drops.=Incrementa la cantidad de objetos que sueltan los bloques.
Increases damage and applies Slowness IV to arthropod mobs (spiders, cave spiders, silverfish and endermites).=Incrementa el daño y ralentiza a los artrópodos. (arañas, lepismas, endermitas, etc)
Increases damage to undead mobs.=Incrementa el daño contra no-muertos.
Increases damage.=Incrementa el daño.
Increases item durability.=Incrementa la durabilidad de una herramienta.
Increases knockback.=Incrementa el empuje.
Increases mining speed.=Incrementa la velocidad de picado.
Increases mob loot.=Incrementa el botín de los enemigos.
Increases rate of good loot (enchanting books, etc.)=Incrementa la probabilidad de encontrar tesoros.
Increases sweeping attack damage.=Incrementa el daño de efecto area.
Increases underwater movement speed.=Incrementa la velocidad de nado bajo el agua.
Increases walking speed on soul sand.=Incrementa la velocidad al caminar sobre arena de Almas.
Infinity=Infinidad
Item destroyed on death.=El objeto se destruye tras tu muerte.
Knockback=Empuje
Looting=Botín
Loyalty=Lealtad
Luck of the Sea=Suerte Marina
Lure=Atracción
Mending=Reparación
Mined blocks drop themselves.=Los bloques se minarán enteros.
Multishot=Multidisparo
Piercing=Perforación
Power=Poder
Punch=Retroceso
Quick Charge=Carga Rápida
Repair the item while gaining XP orbs.=Repara los objetos portados al recibir orbes de experiencia.
Respiration=Respiración
Riptide=Propulsión acuática
Sets target on fire.=Incencia al enemigo.
Sharpness=Filo
Shoot 3 arrows at the cost of one.=Dispara 3 flechas al precio de una.
Shooting consumes no regular arrows.=No se consumiran las flechas lanzadas.
Silk Touch=Toque de Seda
Smite=Golpeo
Soul Speed=Velocidad de Almas
Sweeping Edge=Filo Arrasador
Trident deals additional damage to ocean mobs.=Incrementa el daño del tridente sobre criaturas acuáticas.
Trident launches player with itself when thrown. Works only in water or rain.=El tridente impulsa al portador dentro del agua o bajo la lluvia.
Trident returns after being thrown. Higher levels reduce return time.=El tridente regresa al portador tras lanzarlo.
Turns water beneath the player into frosted ice and prevents the damage from magma blocks.=Congela el agua bajo tus pies y evita el daño de los bloques de magma.
Unbreaking=Irrompibilidad
### engine.lua ###
@1 Enchantment Levels=Nivel de encantamiento: @1
@1 Lapis Lazuli=@1 Lapis Lázuli
Inventory=Inventario
Level requirement: @1=Nivel requerido: @1
### init.lua ###
'@1' is not a valid number='@1' no es un número válido
'@1' is not a valid number.='@1' no es un número válido
<player> <enchantment> [<level>]=<jugador> <encantamiento> [<nivel>]
@1 can't be combined with @2.=@1 no se puede combinar con @2
After finally selecting your enchantment; left-click on the selection, and you will see both the lapis lazuli and your experience levels consumed. And, an enchanted item left in its place.=Despues elige tu encantamiento, los niveles de experiencia y el lapis lázuli seran consumidos y el encantamiento aplicado al objeto.
After placing your items in the slots, the enchanting options will be shown. Hover over the options to read what is available to you.=Coloca el objeto en su ranura yse mostraran los encantamientos a elegir.
Enchant=Encantamiento
Enchant an item=Encantar objeto
Enchanted Book=Libro Encantado
Enchanting Table=Mesa de Encantamientos
Enchanting Tables will let you enchant armors, tools, weapons, and books with various abilities. But, at the cost of some experience, and lapis lazuli.=La mesa de Encantamientos dara a tus herramientas, armas o armadura algunas habilidades magicas. Pero a coste de algo de experiencia y lapis lázuli.
Enchanting succeded.=Encantado correctamente.
Forcefully enchant an item=Encantar objeto a la fuerza.
Place a tool, armor, weapon or book into the top left slot, and then place 1-3 Lapis Lazuli in the slot to the right.=Coloca una herramienta, arma, armadura o libro sobre la ranura izquierda, coloca de 1 a 3 Lapis lázulis en la ranura derecha.
Player '@1' cannot be found.=Jugador @1 no encontrado.
Rightclick the Enchanting Table to open the enchanting menu.=Clic derecho sobre la mesa de encantamientos para abrir la interfaz.
Spend experience, and lapis to enchant various items.=Experiencia y Lapis para encantar varios objetos.
The number you have entered (@1) is too big, it must be at most @2.=@1 es muy grande, debe ser menor que @2
The number you have entered (@1) is too small, it must be at least @2.=@1 es muy pequeño, debe ser mayor a @2
The selected enchantment can't be added to the target item.=El encantamiento seleccionado no puede añadirse a ese objeto.
The target doesn't hold an item.=El jugador no sujeta un objeto.
The target item is not enchantable.=El objeto del jugador no se puede encantar.
There is no such enchantment '@1'.=@1 no es un encantamiento.
These options are randomized, and dependent on experience level; but the enchantment strength can be increased.=Las opciones seran aleatorias dependiendo del nivel de experiencia, los niveles de encantamiento pueden ser aumentados.
To increase the enchantment strength, place bookshelves around the enchanting table. However, you will need to keep 1 air node between the table, & the bookshelves to empower the enchanting table.=Para aumentar los niveles de encantamientos, coloca librerias alrededor y cerca de la mesa de encantamientos.
Usage: /enchant <player> <enchantment> [<level>]=Usa: /enchant <jugador> <encantamiento> [<nivel>]
Usage: /forceenchant <player> <enchantment> [<level>]=Usa /forceenchant <jugador> <encantamiento> [<nivel>]

144
locale/mcl_enchanting.fr.tr Normal file
View file

@ -0,0 +1,144 @@
# textdomain: mcl_enchanting
### enchantments.lua ###
Arrows passes through multiple objects.=Les flèches traversent plusieurs objets.
Arrows set target on fire.=Les flèches mettent le feu à la cible.
Bane of Arthropods=Fléau des arthropodes
Channeling=Canalisation
Channels a bolt of lightning toward a target. Works only during thunderstorms and if target is unobstructed with opaque blocks.=Canalise un éclair vers une cible. Fonctionne uniquement pendant les orages et si la cible n'est pas obstruée par des blocs opaques.
Curse of Vanishing=Malédiction de disparition
Decreases crossbow charging time.=Diminue le temps de chargement de l'arbalète.
Decreases time until rod catches something.=Diminue le temps jusqu'à ce qu'un poisson ne morde à l'hameçon.
Depth Strider=Agilité aquatique
Efficiency=Efficacité
Extends underwater breathing time.=Prolonge le temps de respiration sous l'eau.
Fire Aspect=Aura de feu
Flame=Flamme
Fortune=Fortune
Frost Walker=Semelles givrantes
Impaling=Empalement
Increases arrow damage.=Augmente les dégâts des flèches.
Increases arrow knockback.=Augmente le recul de la flèche.
Increases certain block drops.=Multiplie les objets droppés
Increases damage and applies Slowness IV to arthropod mobs (spiders, cave spiders, silverfish and endermites).=Augmente les dégâts et applique la lenteur IV aux mobs arthropodes (araignées, araignées des cavernes, poissons d'argent et endermites).
Increases damage to undead mobs.=Augmente les dégâts infligés aux monstres morts-vivants.
Increases damage.=Augmente les dégâts.
Increases item durability.=Augmente la durabilité des objets.
Increases knockback.=Augmente le recul.
Increases mining speed.=Augmente la vitesse de minage.
Increases mob loot.=Augmente le butin des mobs.
Increases rate of good loot (enchanting books, etc.)=Augmente le taux de bon butin (livres enchanteurs, etc.)
Increases sweeping attack damage.=Augmente les dégâts de l'épée
Increases underwater movement speed.=Augmente la vitesse de déplacement sous l'eau.
Increases walking speed on soul sand.=Augmente la vitesse de marche sur le sable des âmes.
Infinity=Infinité
Item destroyed on death.=Objet détruit à la mort.
Knockback=Recul
Looting=Butin
Loyalty=Loyauté
Luck of the Sea=Chance de la mer
Lure=Appât
Mending=Raccommodage
Mined blocks drop themselves.=Vous obtenez les blocs minés en minant.
Multishot=Tir multiple
Piercing=Perforation
Power=Puissance
Punch=Frappe
Quick Charge=Charge rapide
Repair the item while gaining XP orbs.=Réparez l'objet tout en gagnant des points d'XP.
Respiration=Apnée
Riptide=Impulsion
Sets target on fire.=Enflamme la cible.
Sharpness=Tranchant
Shoot 3 arrows at the cost of one.=Tirez 3 flèches pour le prix d'une.
Shooting consumes no regular arrows.=Le tir ne consomme pas de flèches standard.
Silk Touch=Toucher de soie
Smite=Châtiment
Soul Speed=Agilité des âmes
Sweeping Edge=Affilage
Trident deals additional damage to ocean mobs.=Le trident inflige des dégâts supplémentaires aux animaux océaniques.
Trident launches player with itself when thrown. Works only in water or rain.=Le trident emporte le joueur avec lui-même lorsqu'il est lancé. Fonctionne uniquement sous l'eau ou sous la pluie.
Trident returns after being thrown. Higher levels reduce return time.=Le trident revient après avoir été jeté. Des niveaux plus élevés réduisent le temps de retour.
Turns water beneath the player into frosted ice and prevents the damage from magma blocks.=Transforme l'eau sous le joueur en glace givrée et empêche les dégâts causés par les blocs de magma.
Unbreaking=Solidité
### engine.lua ###
@1 Enchantment Levels=@1 Niveaux d'enchantement
@1 Lapis Lazuli=@1 Lapis Lazuli
Inventory=Inventaire
Level requirement: @1=Niveau requis : @1
### init.lua ###
'@1' is not a valid number='@1' n'est pas un nombre valide
'@1' is not a valid number.='@1' n'est pas un nombre valide.
<player> <enchantment> [<level>]=<joueur> <enchantement> [<niveau>]
@1 can't be combined with @2.=@1 ne peut pas être combiné avec @2.
After finally selecting your enchantment; left-click on the selection, and you will see both the lapis lazuli and your experience levels consumed. And, an enchanted item left in its place.=Après avoir finalement sélectionné un enchantement ; cliquer gauche la sélection, et vous verrez à la fois les lapis-lazuli et vos niveaux d'expérience consommés. Un objet enchanté est laissé à leur place.
After placing your items in the slots, the enchanting options will be shown. Hover over the options to read what is available to you.=Après avoir placé vos objets dans les emplacements, les options d'enchantement seront montrées. Passer au-dessus des options pour lire ce qui est disponible.
Enchant=Enchantement
Enchant an item=Enchanter un objet
Enchanted Book=Livre enchanté
Enchanting Table=Table d'enchantement
Enchanting Tables will let you enchant armors, tools, weapons, and books with various abilities. But, at the cost of some experience, and lapis lazuli.=La table d'enchantement vous permet d'enchanter des armures, des outils, des armes et des livres avec diverses propriétés. Mais cela coûte de l'expérience et des lapis-lazuli.
Enchanting succeded.=L'enchantement a réussi.
Forcefully enchant an item=Enchantement forcé d'un objet
Place a tool, armor, weapon or book into the top left slot, and then place 1-3 Lapis Lazuli in the slot to the right.=Placer un outil, armure, arme ou livre dans l'emplacement en haut à gauche, puis 1-3 Lapis-Lazuli dans l'emplacement à droite.
Player '@1' cannot be found.=Le joueur '@1' est introuvable.
Rightclick the Enchanting Table to open the enchanting menu.=Cliquer droit la table d'enchantement pour ouvrir le menu d'enchantement.
Spend experience, and lapis to enchant various items.=Dépenser de l'expérience, et des lapis pour enchanter divers objets.
The number you have entered (@1) is too big, it must be at most @2.=Le nombre que vous avez entré (@1) est trop grand, il doit être au plus de @2.
The number you have entered (@1) is too small, it must be at least @2.=Le nombre que vous avez entré (@1) est trop petit, il doit être au moins de @2.
The selected enchantment can't be added to the target item.=L'enchantement sélectionné ne peut pas être ajouté à la cible.
The target doesn't hold an item.=La cible ne contient aucun élément.
The target item is not enchantable.=L'objet cible n'est pas enchantable.
There is no such enchantment '@1'.=L'enchantement '@1' n'existe pas.
These options are randomized, and dependent on experience level; but the enchantment strength can be increased.=Ces options sont aléatoires et dépendent du niveau d'expérience ; mais la force d'enchantement peut être augmentée.
To increase the enchantment strength, place bookshelves around the enchanting table. However, you will need to keep 1 air node between the table, & the bookshelves to empower the enchanting table.=Pour augmenter la force d'enchantement, placer des bibliothèques autour de la table d'enchantement. Cependant, vous devrez garder au moins un bloc d'air entre la table et les bibliothèques pour alimenter la table d'enchantement.
Usage: /enchant <player> <enchantment> [<level>]=Usage: /enchant <joueur> <enchantement> [<niveau>]
Usage: /forceenchant <player> <enchantment> [<level>]=Usage: /forceenchant <joueur> <enchantement> [<niveau>]
##### not used anymore #####
# textdomain: mcl_enchanting
Aqua Affinity=Affinité aquatique
Increases underwater mining speed.=Augmente la vitesse de minage sous-marine.
Blast Protection=Protection contre les explosions
Reduces explosion damage and knockback.=Réduit les dégâts d'explosion et de recul.
Curse of Binding=Malédiction du lien éternel
Item cannot be removed from armor slots except due to death, breaking or in Creative Mode.=L'objet ne peut pas être retiré des emplacements d'armure sauf en cas de mort, de rupture ou en mode créatif.
Feather Falling=Chute amortie
Reduces fall damage.=Reduit les dégats de chute.
Fire Protection=Protection contre le feu
Reduces fire damage.=Reduit les dégats de feu.
Projectile Protection=Protection contre les projectiles
Reduces projectile damage.=Réduit les dégâts causés par les projectiles.
Protection=Protection
Reduces most types of damage by 4% for each level.=éduit la plupart des types de dégâts de 4% pour chaque niveau.
Reflects some of the damage taken when hit, at the cost of reducing durability with each proc.=Reflète une partie des dégâts subis lors de la frappe, au prix d'une réduction de la durabilité à chaque déclenchement.
Thorns=Épines

144
locale/mcl_enchanting.ja.tr Normal file
View file

@ -0,0 +1,144 @@
# textdomain: mcl_enchanting
### enchantments.lua ###
Arrows passes through multiple objects.=矢が複数のオブジェクトを貫通します。
Arrows set target on fire.=矢がターゲットを燃やします。
Bane of Arthropods=殺虫力
Channeling=召雷
Channels a bolt of lightning toward a target. Works only during thunderstorms and if target is unobstructed with opaque blocks.=ターゲットに向けて稲妻を落とします。雷雨の時、且つターゲットが不透明なブロックで遮られていない場合のみ有効です。
Curse of Vanishing=消滅の呪い
Decreases crossbow charging time.=クロスボウの装填時間が短くなります。
Decreases time until rod catches something.=釣りで獲物のかかる間隔が短くなります。
Depth Strider=水中移動
Efficiency=効率化
Extends underwater breathing time.=水中での呼吸時間を延長します。
Fire Aspect=火属性
Flame=フレイム
Fortune=幸運
Frost Walker=氷結歩行
Impaling=串刺し
Increases arrow damage.=矢のダメージが増加します。
Increases arrow knockback.=矢のノックバックを強化します。
Increases certain block drops.=特定のブロックのドロップが増加します。
Increases damage and applies Slowness IV to arthropod mobs (spiders, cave spiders, silverfish and endermites).=虫系のMOBクモ、洞窟グモ、シルバーフィッシュ、エンダーマイトに対してダメージが増加し、鈍化IVを適用します。
Increases damage to undead mobs.=アンデッド系のMOBへのダメージが増加します。
Increases damage.=ダメージが増加します。
Increases item durability.=アイテムの耐久度が向上します。
Increases knockback.=ノックバックを強化します。
Increases mining speed.=採掘速度が増加します。
Increases mob loot.=MOBの戦利品が増加します。
Increases rate of good loot (enchanting books, etc.)=釣果の質が良くなります(エンチャントの本など)。
Increases sweeping attack damage.=なぎ払い攻撃のダメージが増加します。
Increases underwater movement speed.=水中での横移動速度が増加します。
Increases walking speed on soul sand.=ソウルサンドとソウルソイルの上を歩く速度が増加します。
Infinity=無限
Item destroyed on death.=死亡時にアイテムが消滅します。
Knockback=ノックバック
Looting=奪取
Loyalty=忠誠
Luck of the Sea=宝釣り
Lure=入れ食い
Mending=自己修復
Mined blocks drop themselves.=採掘したブロックそのものをドロップするようになります。
Multishot=拡散弾
Piercing=貫通
Power=パワー
Punch=衝撃
Quick Charge=高速装填
Repair the item while gaining XP orbs.=アイテムが経験値を得て自己を修復します。
Respiration=水中呼吸
Riptide=激流
Sets target on fire.=ターゲットに火をつけます。
Sharpness=鋭利
Shoot 3 arrows at the cost of one.=1本分のコストで、3本の矢を同時に拡散発射します。
Shooting consumes no regular arrows.=普通の矢は射ても消費しなくなります。
Silk Touch=シルクタッチ
Smite=破邪
Soul Speed=ソウルスピード
Sweeping Edge=スイープエッジ
Trident deals additional damage to ocean mobs.=トライデントは水生系のMOBに追加ダメージを与えます。
Trident launches player with itself when thrown. Works only in water or rain.=投擲したトライデントと共に、プレイヤーを突進させます。水中か雨天でのみ機能します。
Trident returns after being thrown. Higher levels reduce return time.=投擲したトライデントが手に戻ってきます。レベルが高いほど戻る時間が短縮されます。
Turns water beneath the player into frosted ice and prevents the damage from magma blocks.=プレイヤーの下の水を薄氷に変え、また、マグマブロックからのダメージを防ぎます。
Unbreaking=耐久力
### engine.lua ###
@1 Enchantment Levels=@1 エンチャントレベル
@1 Lapis Lazuli=@1 ラピスラズリ
Inventory=インベントリ
Level requirement: @1=必要レベル:@1
### init.lua ###
'@1' is not a valid number='@1'は有効ではない数字
'@1' is not a valid number.='@1'は有効な数字ではありません。
<player> <enchantment> [<level>]=<プレイヤー> <エンチャント> [<レベル>]
@1 can't be combined with @2.=@1は@2と組み合わせられません。
After finally selecting your enchantment; left-click on the selection, and you will see both the lapis lazuli and your experience levels consumed. And, an enchanted item left in its place.=最終的にエンチャントを決めたら;選ぶ箇所を左クリックすると、ラピスラズリと経験値の両方が消費されているのがわかります。そしてエンチャントしたアイテムがその場に残されます。
After placing your items in the slots, the enchanting options will be shown. Hover over the options to read what is available to you.=アイテムをスロットに配置すると、エンチャント オプションが表示されます。オプションにカーソルを合わせると、利用可能なオプションが表示されます。
Enchant=エンチャント
Enchant an item=アイテムにエンチャントする
Enchanted Book=エンチャント本
Enchanting Table=エンチャントテーブル
Enchanting Tables will let you enchant armors, tools, weapons, and books with various abilities. But, at the cost of some experience, and lapis lazuli.=エンチャントテーブルでは、防具や道具、武器、本などに様々な能力をエンチャントできます。ただし多少の経験値や、ラピスラズリを費やすことになります。
Enchanting succeded.=エンチャントが成功しました。
Forcefully enchant an item=アイテムに強制的にエンチャント
Place a tool, armor, weapon or book into the top left slot, and then place 1-3 Lapis Lazuli in the slot to the right.=左上のスロットに道具、防具、武器、本を入れ、その右のスロットにラピスラズリ13個を入れます。
Player '@1' cannot be found.=プレイヤー'@1'が見つかりません。
Rightclick the Enchanting Table to open the enchanting menu.=エンチャントテーブルを右クリックすると、エンチャント メニューが表示されます。
Spend experience, and lapis to enchant various items.=経験値とラピスを消費して、様々なアイテムにエンチャントできます。
The number you have entered (@1) is too big, it must be at most @2.=入力した数値(@1は大きすぎます、@2以下である必要があります。
The number you have entered (@1) is too small, it must be at least @2.=入力した数値(@1は小さすぎます、@2以上である必要があります。
The selected enchantment can't be added to the target item.=選択したエンチャントは、対象アイテムに付加できません。
The target doesn't hold an item.=対象がアイテムを保持していません。
The target item is not enchantable.=対象アイテムは、エンチャント不可です。
There is no such enchantment '@1'.='@1'というエンチャントはありません。
These options are randomized, and dependent on experience level; but the enchantment strength can be increased.=これらのオプションはランダム且つ経験値に依存します;しかし、エンチャントを強化できます。
To increase the enchantment strength, place bookshelves around the enchanting table. However, you will need to keep 1 air node between the table, & the bookshelves to empower the enchanting table.=エンチャントテーブルの周囲に本棚を置くと、エンチャントを強化できます。ただし、テーブルと本棚の間に空気ードを1つ入れないと、エンチャントテーブルに力を与えられません。
Usage: /enchant <player> <enchantment> [<level>]=使用方法:/enchant <プレイヤー> <エンチャント> [<レベル>]
Usage: /forceenchant <player> <enchantment> [<level>]=使用方法:/forceenchant <プレイヤー> <エンチャント> [<レベル>]
##### not used anymore #####
# textdomain: mcl_enchanting
Aqua Affinity=水中採掘
Increases underwater mining speed.=水中での採掘速度が向上します。
Blast Protection=爆風耐性
Reduces explosion damage and knockback.=爆発ダメージとノックバックを軽減します。
Curse of Binding=束縛の呪い
Item cannot be removed from armor slots except due to death, breaking or in Creative Mode.=次の場合を除き、防具スロットからアイテムを外せません;アイテムが破損/自身が死亡/クリエイティブモード中
Feather Falling=落下耐性
Reduces fall damage.=落下ダメージを軽減します。
Fire Protection=炎上耐性
Reduces fire damage.=火炎ダメージを軽減します(溶岩は対象外)。
Projectile Protection=飛来物耐性
Reduces projectile damage.=飛来物ダメージを軽減します。
Protection=外傷耐性
Reduces most types of damage by 4% for each level.=体の外からのダメージ全般を軽減します(レベル毎に+4%)。
Thorns=イバラ
Reflects some of the damage taken when hit, at the cost of reducing durability with each proc.=受けたダメージの一部を与え返せますが、その代わり耐久度が余計に削られます。

100
locale/mcl_enchanting.pl.tr Normal file
View file

@ -0,0 +1,100 @@
# textdomain: mcl_enchanting
Aqua Affinity=Powinowactwo wodne
Increases underwater mining speed.=Przyspiesza wydobywanie pod wodą.
Bane of Arthropods=Zmora stawonogów
Increases damage and applies Slowness IV to arthropod mobs (spiders, cave spiders, silverfish and endermites).=Zwiększa obrażenia i aplikuje Spowolnienie IV stawonogom (pająkom, pająkom jaskiniowym, rybikom cukrowym i endermitom)
Blast Protection=Ochrona od wybuchów
Reduces explosion damage and knockback.=Zmniejsza obrażenia od wybuchów i odrzut.
Channeling=Przekierowanie
Channels a bolt of lightning toward a target. Works only during thunderstorms and if target is unobstructed with opaque blocks.=Przekierowuje błyskawicę w stronę celu. Działa tylko podczas burz jeśli cel nie jest zasłonięty przez nieprzezroczyste bloki.
Curse of Binding=Klątwa wiązania
Item cannot be removed from armor slots except due to death, breaking or in Creative Mode.=Przedmiotu nie można zdjąć z miejsc na zbroję inaczej niż przez śmierć, zepsucie bądź w trybie kreatywnym.
Curse of Vanishing=Klątwa znikania
Item destroyed on death.=Przedmiot niszczony przy śmierci
Depth Strider=Głębinowy wędrowiec
Increases underwater movement speed.=Zwiększa prędkość poruszania pod wodą.
Efficiency=Wydajność
Increases mining speed.=Zwiększa prędkość wydobywania zasobów.
Feather Falling=Powolne opadanie
Reduces fall damage.=Zmniejsza obrażenia od upadku.
Fire Aspect=Zaklęty ogień
Sets target on fire.=Podpala cel.
Fire Protection=Ochrona przed ogniem
Reduces fire damage.=Zmniejsza obrażenia od ognia
Flame=Płomień
Arrows set target on fire.=Strzały podpalają cel.
Fortune=Fortuna
Increases certain block drops.=Zwiększa prawdopodobieństwo wypadnięcia przedmiotów z niektórych bloków.
Frost Walker=Mroźny piechur
Turns water beneath the player into frosted ice and prevents the damage from magma blocks.=Zamienia wodę pod graczem w oszroniony lód i pozwala uniknąć obrażeń od bloków magmy.
Impaling=Przebicie
Trident deals additional damage to ocean mobs.=Trójząb zadaje dodatkowe obrażenia podwodnym stworzeniom.
Infinity=Nieskończoność
Shooting consumes no regular arrows.=Strzelanie nie zużywa zwykłych strzał.
Knockback=Odrzut
Increases knockback.=Zwiększa odrzut.
Looting=Grabież
Increases mob loot.=Zwiększa liczbę przedmiotów wypadających z mobów.
Loyalty=Lojalność
Trident returns after being thrown. Higher levels reduce return time.=Trydent wraca do gracza po rzuceniu. Większy poziom zmniejsza czas powrotu.
Luck of the Sea=Morska fortuna
Increases rate of good loot (enchanting books, etc.)=Zwiększa szansę na wypadnięcie dobrych przedmiotów (zaklętych książek itp.)
Lure=Przynęta
Decreases time until rod catches something.=Zmniejsza czas po którym coś złapie się na wędkę
Mending=Naprawa
Repair the item while gaining XP orbs.=Naprawia przedmiot podczas podnoszenia kul doświadczenia.
Multishot=Wielostrzał
Shoot 3 arrows at the cost of one.=Wystrzel 3 strzały kosztem jednej.
Piercing=Przeszycie
Arrows passes through multiple objects.=Strzała przelatuje przez wiele obiektów.
Power=Moc
Increases arrow damage.=Zwiększa obrażenia od strzał.
Projectile Protection=Ochrona przed pociskami
Reduces projectile damage.=Zmniejsza obrażenia od pocisków.
Protection=Obrona
Reduces most types of damage by 4% for each level.=Zmniejsza obrażenia większości typów o 4% za każdy poziom.
Punch=Uderzenie
Increases arrow knockback.=Zwiększa odrzut strzał.
Quick Charge=Szybkie ładowanie
Decreases crossbow charging time.=Zmniejsza czas ładowania kuszy.
Respiration=Oddychanie
Extends underwater breathing time.=Zwiększa czas na który można wstrzymać oddech pod wodą.
Riptide=Torpeda
Trident launches player with itself when thrown. Works only in water or rain.=Trydent porywa gracza ze sobą podczas rzucania. Działa tylko w wodzie lub w deszczu.
Sharpness=Ostrość
Increases damage.=Zwiększa obrażenia.
Silk Touch=Jedwabny dotyk
Mined blocks drop themselves.=Z wydobywanych bloków wypadają one same.
Smite=Pogromca nieumarłych
Increases damage to undead mobs.=Zwiększa obrażenia zadawane nieumarłym mobom.
Soul Speed=Prędkość dusz
Increases walking speed on soul sand.=Zwiększa szybkość chodzenia po piasku dusz.
Sweeping Edge=Szerokie ostrze
Increases sweeping attack damage.=Zwiększa obrażenia przy ataku z zamachu.
Thorns=Ciernie
Reflects some of the damage taken when hit, at the cost of reducing durability with each proc.=Odbija część zadanych obrażeń kosztem utraty wytrzymałości zbroi.
Unbreaking=Niezniszczalność
Increases item durability.=Zwiększa wytrzymałość przedmiotu.
Inventory=Ekwipunek
@1 Lapis Lazuli=@1 Lazurytów
@1 Enchantment Levels=@1 poziomów zaklęcia
Level requirement: @1=Wymagany poziom: @1
Enchant an item=Zaczaruj przedmiot
<player> <enchantment> [<level>]=<gracz> <zaklęcie> [<poziom>]
Usage: /enchant <player> <enchantment> [<level>]=Użycie: /enchant <gracz> <zaklęcie> [<poziom>]
Player '@1' cannot be found.=Gracz '@1' nie został znaleziony.
There is no such enchantment '@1'.=Nie ma takiego zaklęcia '@1'.
The target doesn't hold an item.=Cel nie trzyma żadnego przedmiotu.
The selected enchantment can't be added to the target item.=Wybrane zaklęcie nie może zostać zaaplikowane do docelowego przedmiotu.
'@1' is not a valid number='@1' nie jest poprawną liczbą.
The number you have entered (@1) is too big, it must be at most @2.=Liczba którą wpisałaś (@1) jest zbyt duża, nie może być większa niż @2.
The number you have entered (@1) is too small, it must be at least @2.=Liczba którą wpisałaś (@1) jest zbyt mała, nie może być mniejsza niż @2.
@1 can't be combined with @2.=@1 nie może być połączone z @2.
Enchanting succeded.=Zaklinanie powiodło się.
Forcefully enchant an item=Bezwzględnie zaczaruj przedmiot.
Usage: /forceenchant <player> <enchantment> [<level>]=Użycie: /forceenchant <gracz> <zaklęcie> [<poziom>]
The target item is not enchantable.=Docelowego przedmiotu nie można zaczarować.
'@1' is not a valid number.='@1' nie jest poprawną liczbą.
Enchanted Book=Zaklęta książka
Enchanting Table=Stół do zaklinania
Enchant=Zaczaruj

View file

@ -0,0 +1,144 @@
# textdomain: mcl_enchanting
### enchantments.lua ###
Arrows passes through multiple objects.=Flechas atravessam múltiplos objetos.
Arrows set target on fire.=Flechas colocam fogo no alvo.
Bane of Arthropods=Ruína dos Artrópodes
Channeling=Condutividade
Channels a bolt of lightning toward a target. Works only during thunderstorms and if target is unobstructed with opaque blocks.=Canaliza um relâmpago em direção ao alvo. Funciona apenas durante tempestades e se o alvo estiver desobistruido por blocos opacos.
Curse of Vanishing=Maldição do Desaparecimento
Decreases crossbow charging time.=Diminui o tempo de recarga da besta.
Decreases time until rod catches something.=Diminui o tempo para a vara coletar alguma coisa.
Depth Strider=Passos Profundos
Efficiency=Eficiência
Extends underwater breathing time.=Extende o tempo de respiração em baixo da água.
Fire Aspect=Aspecto Flamejante
Flame=Chama
Fortune=Fortuna
Frost Walker=Passos Gelados
Impaling=Penetração
Increases arrow damage.=Aumenta o dano das flechas.
Increases arrow knockback.=Aumenta a repulsão das flechas.
Increases certain block drops.=Aumenta o drop de certos blocos.
Increases damage and applies Slowness IV to arthropod mobs (spiders, cave spiders, silverfish and endermites).=Aumenta o dano e aplica Lentidão IV para mobs artrópodes (aranhas, aranhas de cavernas, traças e endermites).
Increases damage to undead mobs.=Aumenta o dano para mobs mortos-vivos.
Increases damage.=Aumenta o dano
Increases item durability.=Aumenta a durabilidade do item.
Increases knockback.=Aumenta a repulsão.
Increases mining speed.=Aumenta a velocidade de mineração.
Increases mob loot.=Aumenta o saque de mobs.
Increases rate of good loot (enchanting books, etc.)=Aumenta a taxa de bons saques (livros encantados, etc.)
Increases sweeping attack damage.=
Increases underwater movement speed.=Aumenta a velocidade de movimento embaixo da água.
Increases walking speed on soul sand.=Aumenta a velocidade de caminhada na areia das almas.
Infinity=Infinidade
Item destroyed on death.=Item é destruído na morte.
Knockback=Repulsão
Looting=Saque
Loyalty=Lealdade
Luck of the Sea=Sorte do Mar
Lure=Isca
Mending=Remendo
Mined blocks drop themselves.=Blocos minerados dropam a si mesmos.
Multishot=Rajada
Piercing=Perfuração
Power=Força
Punch=Impacto
Quick Charge=Recarga Rápida
Repair the item while gaining XP orbs.=Repara o item enquanto ganha orbes de XP.
Respiration=Respiração
Riptide=Correnteza
Sets target on fire.=Coloca fogo no alvo.
Sharpness=Afiação
Shoot 3 arrows at the cost of one.=Atira 3 flechas ao custo de uma.
Shooting consumes no regular arrows.=Atirar não consome flechas normais.
Silk Touch=Toque Suave
Smite=Julgamento
Soul Speed=Velocidade das Almas
Sweeping Edge=Alcance
Trident deals additional damage to ocean mobs.=Tridente dá dano adicional em mobs oceanicos.
Trident launches player with itself when thrown. Works only in water or rain.=Tridente lança o jogador junto de si mesmo quando lançado.
Trident returns after being thrown. Higher levels reduce return time.=Tridente retorna depois de ser arremessado. Níveis altos reduzem o tempo de retorno.
Turns water beneath the player into frosted ice and prevents the damage from magma blocks.=Transforma a água abaixo do jogador em gelo e previne o dano dos blocos de magma.
Unbreaking=Inquebrável
### engine.lua ###
@1 Enchantment Levels=@1 Níveis de Encantamento
@1 Lapis Lazuli=@1 Lápis Lazuli
Inventory=Inventário
Level requirement: @1=Nível requerido: @1
### init.lua ###
'@1' is not a valid number='@1' não é um número válido
'@1' is not a valid number.='@1' não é um número válido.
<player> <enchantment> [<level>]=<jogador> <encantament> [<nível>]
@1 can't be combined with @2.=@1 não pode ser combinado com @2.
After finally selecting your enchantment; left-click on the selection, and you will see both the lapis lazuli and your experience levels consumed. And, an enchanted item left in its place.=Depois de finalmente selecionar seu encantamento; clique com o botão esquerdo na seleção, e você irá ver ambos os lápis lazuli e seus níveis de experiência serem consumidos. E, um item encantado deixado em seu lugar.
After placing your items in the slots, the enchanting options will be shown. Hover over the options to read what is available to you.=Depois de posicionar seus itens nos slots, as opções de encantamentos serão mostradas. Passe o mouse sobre as opções para ler o que está disponível para você.
Enchant=Encantar
Enchant an item=Encantar um item
Enchanted Book=Livro Encantado
Enchanting Table=Mesa de Encantamento
Enchanting Tables will let you enchant armors, tools, weapons, and books with various abilities. But, at the cost of some experience, and lapis lazuli.=A mesa de encantamentos permitem a você encantar armaduras, ferramentas, armas, e livros com várias habilidades. Mas, ao custo de alguma experiência, e lápis lazuli.
Enchanting succeded.=Encantamento sucessido.
Forcefully enchant an item=Encantamento forçado em um item.
Place a tool, armor, weapon or book into the top left slot, and then place 1-3 Lapis Lazuli in the slot to the right.=Posicione uma ferramenta, armadura, arma ou livro no slot superior esquerdo, e então posicione 1-3 lápis lazuli no slot da direita.
Player '@1' cannot be found.=Jogador '@1' não pôde ser encontrado.
Rightclick the Enchanting Table to open the enchanting menu.=Clique com o botão direito na mesa de encantamentos para abrir o menu de encantamentos.
Spend experience, and lapis to enchant various items.=Invista experiência, e lápis para encantar vários itens.
The number you have entered (@1) is too big, it must be at most @2.=O número que você inseriu (@1) é muito grande, deve ser no máximo @2.
The number you have entered (@1) is too small, it must be at least @2.=O número que você inseriu (@1) é muito pequeno, deve ser no mínimo @2.
The selected enchantment can't be added to the target item.=O encantamento selecionado não pode ser adicionado ao item alvo.
The target doesn't hold an item.=O alvo não está segurando um item.
The target item is not enchantable.=O item alvo não é encantável.
There is no such enchantment '@1'.=Não existe um encantamento '@1'.
These options are randomized, and dependent on experience level; but the enchantment strength can be increased.=Essas opções são aleatorias, e dependentes do nível de experiência; mas a força do encantamento pode ser aumentado.
To increase the enchantment strength, place bookshelves around the enchanting table. However, you will need to keep 1 air node between the table, & the bookshelves to empower the enchanting table.=Para aumentar a força do encantamento, posicione estantes de livros em volta da mesa de encantamentos. Porém, você precisará manter 1 bloco de ar entre a mesa e as estantes para potencializar a mesa de encantamentos.
Usage: /enchant <player> <enchantment> [<level>]=Uso: /enchant <Jogador> <encantamento> [<nível>]
Usage: /forceenchant <player> <enchantment> [<level>]=Uso: /forceenchant <jogador> <encantamento> [<nível>]
##### not used anymore #####
# textdomain: mcl_enchanting
Aqua Affinity=Afinidade Aquática
Increases underwater mining speed.=Aumenta a velocidade de mineração em baixo da água.
Blast Protection=Proteção Contra Explosões
Reduces explosion damage and knockback.=Reduz dano de explosão e repulsão.
Curse of Binding=Maldição do Ligamento
Item cannot be removed from armor slots except due to death, breaking or in Creative Mode.=Item não pode ser removido dos slots de armadura exceto em caso de morte, quebra ou no Modo Criativo.
Feather Falling=Peso-Pena
Reduces fall damage.=Reduz o dano de queda.
Fire Protection=Proteção Contra Fogo
Reduces fire damage.=Reduz o dano do fogo.
Projectile Protection=Proteção Contra Projéteis
Reduces projectile damage.=Reduz danos de projéteis.
Protection=Proteção
Reduces most types of damage by 4% for each level.=Reduz a maioria dos tipos de danos em 4% para cada nível.
Thorns=Espinhos
Reflects some of the damage taken when hit, at the cost of reducing durability with each proc.=Reflete parte do dano recebido quando acertado, ao custo de reduzir a durabilidade em cada processo.

144
locale/mcl_enchanting.ru.tr Normal file
View file

@ -0,0 +1,144 @@
# textdomain: mcl_enchanting
### enchantments.lua ###
Arrows passes through multiple objects.=Стрела пробивает насквозь несколько объектов.
Arrows set target on fire.=Стрелы поджигают цель.
Bane of Arthropods=Бич членистоногих
Channeling=Громовержец
Channels a bolt of lightning toward a target. Works only during thunderstorms and if target is unobstructed with opaque blocks.=Бьёт молнией в цель. Работает только во время грозы, когда цель не защищена плотными блоками.
Curse of Vanishing=Проклятье утраты
Decreases crossbow charging time.=Уменьшает время заряда снаряда.
Decreases time until rod catches something.=Уменьшает время ожидания клёва.
Depth Strider=Покоритель глубин
Efficiency=Эффективность
Extends underwater breathing time.=Увеличивает время дыхания под водой.
Fire Aspect=Заговор огня
Flame=Горящая стрела
Fortune=Удача
Frost Walker=Ледоход
Impaling=Пронзатель
Increases arrow damage.=Увеличивает урон от стрел.
Increases arrow knockback.=Увеличивает отбрасывание от стрелы.
Increases certain block drops.=Даёт шанс выпадения большего количества ресурсов из блоков.
Increases damage and applies Slowness IV to arthropod mobs (spiders, cave spiders, silverfish and endermites).=Увеличивает урон и применяет Замедление IV к насекомым и членистоногим (паукам, пещерным паукам, чешуйницам и чешуйницам Края).
Increases damage to undead mobs.=Дополнительный урон нежити.
Increases damage.=Увеличенный урон.
Increases item durability.=Увеличивает прочность предмета.
Increases knockback.=Увеличивает отдачу.
Increases mining speed.=Увеличивает скорость добычи.
Increases mob loot.=Увеличивает добычу от мобов.
Increases rate of good loot (enchanting books, etc.)=Увеличивает шанс поймать сокровище (зачарованные книги и т.п.)
Increases sweeping attack damage.=Увеличивает урон по мобам, стоящих рядом с целью.
Increases underwater movement speed.=Увеличивает скорость передвижения под водой.
Increases walking speed on soul sand.=Увеличивает скорость ходьбы по песку душ.
Infinity=Бесконечность
Item destroyed on death.=Предмет уничтожается при смерти.
Knockback=Отдача
Looting=Добыча
Loyalty=Верность
Luck of the Sea=Везучий рыбак
Lure=Приманка
Mending=Починка
Mined blocks drop themselves.=Добываемый блок выпадает сам, даже если из него должно выпадать что-то другое.
Multishot=Залп
Piercing=Бронебойность
Power=Сила
Punch=Отбрасывание
Quick Charge=Быстрая перезарядка
Repair the item while gaining XP orbs.=Предмет чинится при сборе сфер опыта.
Respiration=Подводное дыхание
Riptide=Тягун
Sets target on fire.=Поджигает цель.
Sharpness=Острота
Shoot 3 arrows at the cost of one.=Выстреливают три стрелы по стоимости одной.
Shooting consumes no regular arrows.=При стрельбе не расходуются обычные стрелы.
Silk Touch=Шёлковое касание
Smite=Небесная кара
Soul Speed=Скорость души
Sweeping Edge=Разящий клинок
Trident deals additional damage to ocean mobs.=Трезубец наносит дополнительный урон океаническим мобам.
Trident launches player with itself when thrown. Works only in water or rain.=Трезубец тянет игрока за собой. Работает только в воде или под дождём.
Trident returns after being thrown. Higher levels reduce return time.=Возвращает трезубец после броска. Более высокие уровни сокращают время возврата.
Turns water beneath the player into frosted ice and prevents the damage from magma blocks.=Превращает воду под игроком в подмороженный лёд и предотвращает урон от магмовых блоков.
Unbreaking=Прочность
### engine.lua ###
@1 Enchantment Levels=@1 уровень зачаровывания
@1 Lapis Lazuli=@1 лазурит(а)
Inventory=Инвентарь
Level requirement: @1=Требуемый уровень: @1
### init.lua ###
'@1' is not a valid number='@1' не является допустимым числом
'@1' is not a valid number.='@1' не является допустимым числом.
<player> <enchantment> [<level>]=<игрок> <зачарование> [<уровень>]
@1 can't be combined with @2.=@1 нельзя сочетать с @2.
After finally selecting your enchantment; left-click on the selection, and you will see both the lapis lazuli and your experience levels consumed. And, an enchanted item left in its place.=Кликните на выбранное зачарование - ваш опыт и лазурит потратятся, и зачарованный предмет появится слева.
After placing your items in the slots, the enchanting options will be shown. Hover over the options to read what is available to you.=Варианты зачарований будут показаны как только вы разместите предметы в слоты. Наведите, чтобы прочитать что вам доступно.
Enchant=Зачаровать
Enchant an item=Зачаровать предмет
Enchanted Book=Зачарованная книга
Enchanting Table=Стол зачаровывания
Enchanting Tables will let you enchant armors, tools, weapons, and books with various abilities. But, at the cost of some experience, and lapis lazuli.=Стол зачаровывания позволяет зачаровывать броню, инструменты, оружие и книги разными способностями. Но ценой опыта и лазурита.
Enchanting succeded.=Зачарование выполнено.
Forcefully enchant an item=Принудительно зачаровать предмет
Place a tool, armor, weapon or book into the top left slot, and then place 1-3 Lapis Lazuli in the slot to the right.=Поместите инстумент, броню, оружие или книгу в верхний левый слот, затем поместите 1-3 лазурита в правый слот.
Player '@1' cannot be found.=Не удалось найти игрока '@1'.
Rightclick the Enchanting Table to open the enchanting menu.=Правый клик по столу зачаровывания, чтобы открыть меню зачаровывания.
Spend experience, and lapis to enchant various items.=Зачаровывает предметы за опыт и лазурит
The number you have entered (@1) is too big, it must be at most @2.=Число, которое вы задали (@1), слишком велико, оно должно быть максимум @2.
The number you have entered (@1) is too small, it must be at least @2.=Число, которое вы задали (@1), слишком мало, оно должно быть минимум @2.
The selected enchantment can't be added to the target item.=Выбранное зачарование не может быть добавлено к целевому предмету.
The target doesn't hold an item.=Цель не держит предмета.
The target item is not enchantable.=Целевой предмет нельзя зачаровать.
There is no such enchantment '@1'.=Нет такого зачарования: '@1'.
These options are randomized, and dependent on experience level; but the enchantment strength can be increased.=Эти опции случайны и зависят от уровня опыта; но зачарование может быть усилено.
To increase the enchantment strength, place bookshelves around the enchanting table. However, you will need to keep 1 air node between the table, & the bookshelves to empower the enchanting table.=Чтобы усилить зачарование, поставьте книжные полки вокруг стола зачаровывания. Но вам нужно сохранять 1 блок пустого пространства между столом и полками.
Usage: /enchant <player> <enchantment> [<level>]=Использование: /enchant <игрок> <зачарование> [<уровень>]
Usage: /forceenchant <player> <enchantment> [<level>]=Использование: /forceenchant <игрок> <зачарование> [<уровень>]
##### not used anymore #####
# textdomain: mcl_enchanting
Aqua Affinity=
Increases underwater mining speed.=
Blast Protection=
Reduces explosion damage and knockback.=
Curse of Binding=
Item cannot be removed from armor slots except due to death, breaking or in Creative Mode.=
Feather Falling=
Reduces fall damage.=
Fire Protection=
Reduces fire damage.=
Projectile Protection=
Reduces projectile damage.=
Protection=
Reduces most types of damage by 4% for each level.=
Thorns=
Reflects some of the damage taken when hit, at the cost of reducing durability with each proc.=

144
locale/template.txt Normal file
View file

@ -0,0 +1,144 @@
# textdomain: mcl_enchanting
### enchantments.lua ###
Arrows passes through multiple objects.=
Arrows set target on fire.=
Bane of Arthropods=
Channeling=
Channels a bolt of lightning toward a target. Works only during thunderstorms and if target is unobstructed with opaque blocks.=
Curse of Vanishing=
Decreases crossbow charging time.=
Decreases time until rod catches something.=
Depth Strider=
Efficiency=
Extends underwater breathing time.=
Fire Aspect=
Flame=
Fortune=
Frost Walker=
Impaling=
Increases arrow damage.=
Increases arrow knockback.=
Increases certain block drops.=
Increases damage and applies Slowness IV to arthropod mobs (spiders, cave spiders, silverfish and endermites).=
Increases damage to undead mobs.=
Increases damage.=
Increases item durability.=
Increases knockback.=
Increases mining speed.=
Increases mob loot.=
Increases rate of good loot (enchanting books, etc.)=
Increases sweeping attack damage.=
Increases underwater movement speed.=
Increases walking speed on soul sand.=
Infinity=
Item destroyed on death.=
Knockback=
Looting=
Loyalty=
Luck of the Sea=
Lure=
Mending=
Mined blocks drop themselves.=
Multishot=
Piercing=
Power=
Punch=
Quick Charge=
Repair the item while gaining XP orbs.=
Respiration=
Riptide=
Sets target on fire.=
Sharpness=
Shoot 3 arrows at the cost of one.=
Shooting consumes no regular arrows.=
Silk Touch=
Smite=
Soul Speed=
Sweeping Edge=
Trident deals additional damage to ocean mobs.=
Trident launches player with itself when thrown. Works only in water or rain.=
Trident returns after being thrown. Higher levels reduce return time.=
Turns water beneath the player into frosted ice and prevents the damage from magma blocks.=
Unbreaking=
### engine.lua ###
@1 Enchantment Levels=
@1 Lapis Lazuli=
Inventory=
Level requirement: @1=
### init.lua ###
'@1' is not a valid number=
'@1' is not a valid number.=
<player> <enchantment> [<level>]=
@1 can't be combined with @2.=
After finally selecting your enchantment; left-click on the selection, and you will see both the lapis lazuli and your experience levels consumed. And, an enchanted item left in its place.=
After placing your items in the slots, the enchanting options will be shown. Hover over the options to read what is available to you.=
Enchant=
Enchant an item=
Enchanted Book=
Enchanting Table=
Enchanting Tables will let you enchant armors, tools, weapons, and books with various abilities. But, at the cost of some experience, and lapis lazuli.=
Enchanting succeded.=
Forcefully enchant an item=
Place a tool, armor, weapon or book into the top left slot, and then place 1-3 Lapis Lazuli in the slot to the right.=
Player '@1' cannot be found.=
Rightclick the Enchanting Table to open the enchanting menu.=
Spend experience, and lapis to enchant various items.=
The number you have entered (@1) is too big, it must be at most @2.=
The number you have entered (@1) is too small, it must be at least @2.=
The selected enchantment can't be added to the target item.=
The target doesn't hold an item.=
The target item is not enchantable.=
There is no such enchantment '@1'.=
These options are randomized, and dependent on experience level; but the enchantment strength can be increased.=
To increase the enchantment strength, place bookshelves around the enchanting table. However, you will need to keep 1 air node between the table, & the bookshelves to empower the enchanting table.=
Usage: /enchant <player> <enchantment> [<level>]=
Usage: /forceenchant <player> <enchantment> [<level>]=
##### not used anymore #####
# textdomain: mcl_enchanting
Aqua Affinity=
Increases underwater mining speed.=
Blast Protection=
Reduces explosion damage and knockback.=
Curse of Binding=
Item cannot be removed from armor slots except due to death, breaking or in Creative Mode.=
Feather Falling=
Reduces fall damage.=
Fire Protection=
Reduces fire damage.=
Projectile Protection=
Reduces projectile damage.=
Protection=
Reduces most types of damage by 4% for each level.=
Thorns=
Reflects some of the damage taken when hit, at the cost of reducing durability with each proc.=

5
mod.conf Normal file
View file

@ -0,0 +1,5 @@
name = mcl_enchanting
description = Enchanting for MineClone2
depends = tt, walkover, mcl_sounds, mcl_colors, mcl_experience, mcl_util
optional_depends = screwdriver
author = Fleckenstein

Binary file not shown.

7
sounds/attributions.txt Normal file
View file

@ -0,0 +1,7 @@
Alecia Shepherd (CC BY-SA 4.0):
mcl_enchanting_enchant.0.ogg
mcl_enchanting_enchant.1.ogg
mcl_enchanting_enchant.2.ogg
Source: SnowSong sound and music pack <https://opengameart.org/content/snowsong-sound-and-music-pack>

Binary file not shown.

Binary file not shown.

Binary file not shown.