2 swiftness - how fast you mine
3 hardness - allows the tool to go way above it's level
4 durable - makes the tool last longer
5 slippery - you drop the tool randomly
6 careful - "not silk touch"
7 fortune - drops extra items and experience
8 autorepair - tool will repair itself randomly
9 spiky - the tool will randomly hurt you when used
10 sharpness - the tool does more damage
12 local enchantment_list = {"swiftness", "durable", "slippery", "careful", "fortune", "autorepair", "spiky", "sharpness", "treecapitator"}
14 local temp_names = {"Monster", "Behemoth", "Ultra", "Wow!", "Oh Em Gee", "The Ultimatum", "Holy Moly!", "Infinity"}
16 local hexer = {"a","b","c","d","e","f","1","2","3","4","5","6","7","8","9","0"}
17 minetest.register_node("enchanting:table", {
18 description = "Enchanting Table",
19 tiles = {"bedrock.png"},
20 groups = {wood = 1, pathable = 1},
21 sounds = main.stoneSound(),
22 is_ground_content = false,
23 on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
24 minetest.after(0,function(clicker)
25 local stack = clicker:get_wielded_item()
27 local meta = stack:get_meta()
29 if meta:get_string("enchanted") == "true" then return end
31 if not minetest.registered_tools[itemstack:get_name()] then return end
33 local tool_caps = itemstack:get_tool_capabilities()
34 local groupcaps = tool_caps.groupcaps
36 if not groupcaps then return end
38 local able_enchantments = table.copy(enchantment_list)
39 local player_meta = clicker:get_meta()
40 local player_level = player_meta:get_int("experience_level")
42 local enchants_available = math.floor(player_level/5)
43 local max_enchant_level = math.floor(player_level/5)
44 if enchants_available <= 0 then return end
45 if enchants_available > 3 then enchants_available = 3 end
47 local description = minetest.registered_tools[stack:get_name()].description--temp_names[math.random(1,table.getn(temp_names))]
48 for i = 1,enchants_available do
49 local new_enchant = enchantment_list[math.random(1,table.getn(enchantment_list))]
50 local level = math.random(1,max_enchant_level)
51 if meta:get_int(new_enchant) == 0 then
52 player_level = player_level - 5
53 meta:set_int(new_enchant, level)
54 description = description.."\n"..new_enchant:gsub("^%l", string.upper)..": "..tostring(level)
55 if new_enchant == "swiftness" then
56 for index,table in pairs(groupcaps) do
57 for index2,time in pairs(table.times) do
58 tool_caps["groupcaps"][index]["times"][index2] = time/(level+1)
62 if new_enchant == "durable" then
63 for index,table in pairs(groupcaps) do
64 tool_caps["groupcaps"][index]["uses"] = table.uses*(level+1)
68 if new_enchant == "sharpness" then
69 for index,data in pairs(tool_caps.damage_groups) do
70 tool_caps.damage_groups[index] = data*(level+1)
76 meta:set_string("description", description)
77 meta:set_string("enchanted", "true")
78 meta:set_tool_capabilities(tool_caps)
80 player_meta:set_int("experience_level", player_level)
82 local hud_fg_id = player_meta:get_int("experience_level_fg")
83 local hud_bg_id = player_meta:get_int("experience_level_bg")
85 clicker:hud_change(hud_bg_id, "text", tostring(player_level))
86 clicker:hud_change(hud_fg_id, "text", tostring(player_level))
88 --create truly random hex
89 local colorstring = "#"
91 colorstring = colorstring..hexer[math.random(1,16)]
93 stack = minetest.itemstring_with_color(stack, colorstring)
94 clicker:set_wielded_item(stack)
99 minetest.register_chatcommand("xp", {
101 description = "Spawn x amount of a mob, used as /spawn 'mob' 10 or /spawn 'mob' for one",
102 privs = {server = true},
103 func = function(name)
104 local player = minetest.get_player_by_name(name)
105 local pos = player:get_pos()
106 minetest.throw_experience(pos, math.random(200,300))
111 minetest.register_craft({
112 output = "enchanting:table",
114 {"nether:obsidian", "nether:obsidian", "nether:obsidian"},
115 {"nether:obsidian", "main:diamond", "nether:obsidian"},
116 {"nether:obsidian", "nether:obsidian", "nether:obsidian"},