]> git.lizzy.rs Git - Crafter.git/blob - mods/enchanting/init.lua
remove server debug
[Crafter.git] / mods / enchanting / init.lua
1 --[[
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
11 ]]--
12 local enchantment_list = {"swiftness", "durable", "careful", "fortune", "autorepair",  "sharpness"}
13
14 local temp_names = {"Monster", "Behemoth", "Ultra", "Wow!", "Oh Em Gee", "The Ultimatum", "Holy Moly!", "Infinity"}
15
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()
26                         
27                         local meta = stack:get_meta()
28                         
29                         if meta:get_string("enchanted") == "true" then return end
30                         
31                         if not minetest.registered_tools[itemstack:get_name()] then return end
32                         
33                         local tool_caps = itemstack:get_tool_capabilities()
34                         local groupcaps = tool_caps.groupcaps
35                         
36                         if not groupcaps then return end
37                         
38                         local able_enchantments = table.copy(enchantment_list)
39                         
40
41                         local player_level = get_player_xp_level(clicker)
42                         
43                         local enchants_available = math.floor(player_level/5)
44                         local max_enchant_level = math.floor(player_level/5)
45                         if enchants_available <= 0 then return end
46                         if enchants_available > 3 then enchants_available = 3 end
47                         local stock_name = minetest.registered_tools[stack:get_name()].name
48                         local description = minetest.registered_tools[stack:get_name()].description--temp_names[math.random(1,table.getn(temp_names))]
49                         for i = 1,enchants_available do
50                                 local new_enchant = enchantment_list[math.random(1,table.getn(enchantment_list))]
51                                 local level = math.random(1,max_enchant_level)
52                                 if meta:get_int(new_enchant) == 0 then
53                                         player_level = player_level - 5
54                                         meta:set_int(new_enchant, level)
55                                         description = description.."\n"..new_enchant:gsub("^%l", string.upper)..": "..tostring(level)
56                                         if new_enchant == "swiftness" then
57                                                 for index,table in pairs(groupcaps) do
58                                                         for index2,time in pairs(table.times) do
59                                                                 tool_caps["groupcaps"][index]["times"][index2] = time/(level+1)
60                                                         end
61                                                 end
62                                         end
63                                         if new_enchant == "durable" then
64                                                 for index,table in pairs(groupcaps) do
65                                                         tool_caps["groupcaps"][index]["uses"] = table.uses*(level+1)
66                                                 end
67                                         end
68                                         
69                                         if new_enchant == "sharpness" then
70                                                 for index,data in pairs(tool_caps.damage_groups) do
71                                                         tool_caps.damage_groups[index] = data*(level+1)
72                                                 end
73                                         end
74                                 end
75                         end
76                         
77                         meta:set_string("description", "Enchanted "..description)
78                         meta:set_string("enchanted", "true")
79                         meta:set_tool_capabilities(tool_caps)
80                         
81                         set_player_xp_level(clicker,player_level)
82                         
83                         
84                         --create truly random hex
85                         local colorstring = "#"
86                         for i = 1,6 do
87                                 colorstring = colorstring..hexer[math.random(1,16)]
88                         end
89                         stack = minetest.itemstring_with_color(stack, colorstring)
90                         clicker:set_wielded_item(stack)
91                 end,clicker)
92         end
93 })
94
95 minetest.register_craft({
96         output = "enchanting:table",
97         recipe = {
98                 {"nether:obsidian", "nether:obsidian", "nether:obsidian"},
99                 {"nether:obsidian", "main:diamond", "nether:obsidian"},
100                 {"nether:obsidian", "nether:obsidian", "nether:obsidian"},
101         },
102 })