]> git.lizzy.rs Git - Crafter.git/blob - mods/main/tools.lua
71d9fb1c1ae406cbfc87a7633facc7b258ec245a
[Crafter.git] / mods / main / tools.lua
1 --Quick definition of tools
2 local tool = {"shovel","axe","pick"}
3 local material = {"wood","stone","iron","gold","diamond"}
4
5 for _,material in pairs(material) do
6         for id,tool in pairs(tool) do
7
8                 --print(id,tool,level,material)
9                 local groupcaps
10                 local damage
11                 local wear
12                 --shovel
13                 if tool == "shovel" then
14                         if material == "wood" then
15                                 groupcaps2={
16                                         dirt =  {times={[1]=0.4,[2]=1.5,[3]=3,[4]=6,[5]=12},    uses=59, maxlevel=1},
17                                         snow =  {times={[1]=0.4,[2]=1.5,[3]=3,[4]=6,[5]=12},    uses=59, maxlevel=1},
18                                         grass = {times={[1]=0.45,[2]=1.5,[3]=3,[4]=6,[5]=12},   uses=59, maxlevel=1},
19                                         sand =  {times={[1]=0.4,[2]=1.5,[3]=3,[4]=6,[5]=12},    uses=59, maxlevel=1},
20                                 }
21                                 damage = 2.5
22                                 wear = 500
23                         elseif material == "stone" then
24                                 groupcaps2={
25                                         dirt =  {times={[1]=0.2,[2]=0.2,[3]=1.5,[4]=3,[5]=6},   uses=131, maxlevel=1},
26                                         snow =  {times={[1]=0.2,[2]=0.2,[3]=1.5,[4]=3,[5]=6},   uses=131, maxlevel=1},
27                                         grass = {times={[1]=0.25,[2]=0.25,[3]=1.5,[4]=3,[5]=6}, uses=131, maxlevel=1},
28                                         sand =  {times={[1]=0.2,[2]=0.2,[3]=1.5,[4]=3,[5]=6},   uses=131, maxlevel=1},
29                                 }
30                                 damage = 3.5
31                                 wear = 400
32                         elseif material == "iron" then
33                                 groupcaps2={
34                                         dirt =  {times={[1]=0.15,[2]=0.15,[3]=0.15,[4]=1.5,[5]=3}, uses=250, maxlevel=1},
35                                         snow =  {times={[1]=0.15,[2]=0.15,[3]=0.15,[4]=1.5,[5]=3}, uses=250, maxlevel=1},
36                                         grass = {times={[1]=0.15,[2]=0.15,[3]=0.15,[4]=1.5,[5]=3}, uses=250, maxlevel=1},
37                                         sand =  {times={[1]=0.15,[2]=0.15,[3]=0.15,[4]=1.5,[5]=3}, uses=250, maxlevel=1},
38                                 }
39                                 damage = 4.5
40                                 wear = 300
41                         elseif material == "gold" then
42                                 groupcaps2={
43                                         dirt =  {times={[1]=0.1,[2]=0.1,[3]=0.1,[4]=0.1,[5]=1.5}, uses=32, maxlevel=1},
44                                         snow =  {times={[1]=0.1,[2]=0.1,[3]=0.1,[4]=0.1,[5]=1.5}, uses=32, maxlevel=1},
45                                         grass = {times={[1]=0.1,[2]=0.1,[3]=0.1,[4]=0.1,[5]=1.5}, uses=32, maxlevel=1},
46                                         sand =  {times={[1]=0.1,[2]=0.1,[3]=0.1,[4]=0.1,[5]=1.5}, uses=32, maxlevel=1},
47                                 }
48                                 damage = 2.5
49                                 wear = 1000
50                         elseif material == "diamond" then
51                                 groupcaps2={
52                                         dirt =  {times={[1]= 0.1,[2]=0.1,[3]=0.1,[4]=0.1,[5]=1.5},     uses=1561, maxlevel=1},
53                                         snow =  {times={[1]= 0.1,[2]=0.1,[3]=0.1,[4]=0.1,[5]=1.5},     uses=1561, maxlevel=1},
54                                         grass = {times={[1]= 0.15,[2]=0.15,[3]=0.15,[4]=0.15,[5]=1.5}, uses=1561, maxlevel=1},
55                                         sand =  {times={[1]= 0.1,[2]=0.1,[3]=0.1,[4]=0.1,[5]=1.5},     uses=1561, maxlevel=1},
56                                 }
57                                 damage = 5.5
58                                 wear = 100
59                         end
60                 end             
61                 --axe
62                 if tool == "axe" then
63                         if material == "wood" then
64                                 groupcaps2={
65                                         wood = {times={[1]=1.5,[2]=3,[3]=6,[4]=9,[5]=12}, uses=59, maxlevel=1}
66                                 }
67                                 damage = 7
68                                 wear = 500
69                         elseif material == "stone" then
70                                 groupcaps2={
71                                         wood = {times={[1]=0.75,[2]=0.75,[3]=3,[4]=6,[5]=9}, uses=131, maxlevel=1}
72                                 }
73                                 damage=9
74                                 wear = 400
75                         elseif material == "iron" then
76                                 groupcaps2={
77                                         wood = {times={[1]=0.5,[2]=0.5,[3]=0.5,[4]=3,[5]=6}, uses=250, maxlevel=1}
78                                 }
79                                 damage = 9
80                                 wear = 300
81                         elseif material == "gold" then
82                                 groupcaps2={
83                                         wood = {times={[1]=0.25,[2]=0.25,[3]=0.25,[4]=0.25,[5]=3}, uses=32, maxlevel=1}
84                                 }
85                                 damage = 7
86                                 wear = 1000
87                         elseif material == "diamond" then
88                                 groupcaps2={
89                                         wood = {times={[1]= 0.4,[2]=0.4,[3]=0.4,[4]=0.4,[5]=3}, uses=1561, maxlevel=1}
90                                 }
91                                 damage = 9
92                                 wear = 100
93                         end
94                 end             
95                 --pickaxe
96                 if tool == "pick" then
97                         if material == "wood" then
98                                 groupcaps2={
99                                         --ore hardness
100                                         --1 stone, 1 coal, 2 iron, 3 gold, 4 diamond, 5 obsidian
101                                         stone = {times={[1]=1.15,[2]=16,[3]=32,[4]=64,[5]=128}, uses=59, maxlevel=1},
102                                         glass = {times={[1]=0.575,[2]=16,[3]=32,[4]=64,[5]=128}, uses=59, maxlevel=1},
103                                         netherrack = {times={[1]=0.2875,[2]=16,[3]=32,[4]=64,[5]=128}, uses=59, maxlevel=1},
104                                 }
105                                 damage = 3
106                                 wear = 500
107                         elseif material == "stone" then
108                                 groupcaps2={
109                                         stone = {times={[1]=0.6,[2]=0.6,[3]=32,[4]=64,[5]=128}, uses=131, maxlevel=1},
110                                         glass = {times={[1]=0.3,[2]=0.3,[3]=32,[4]=64,[5]=128}, uses=131, maxlevel=1},
111                                         netherrack = {times={[1]=0.15,[2]=0.15,[3]=32,[4]=64,[5]=128}, uses=131, maxlevel=1},
112                                 }
113                                 damage=4
114                                 wear = 400
115                         elseif material == "iron" then
116                                 groupcaps2={
117                                         stone = {times={[1]=0.4,[2]=0.4,[3]=0.4,[4]=32,[5]=64}, uses=250, maxlevel=1},
118                                         glass = {times={[1]=0.2,[2]=0.2,[3]=0.2,[4]=32,[5]=64}, uses=250, maxlevel=1},
119                                         netherrack = {times={[1]=0.1,[2]=0.1,[3]=0.1,[4]=32,[5]=64}, uses=250, maxlevel=1},
120                                 }
121                                 damage = 5
122                                 wear = 300
123                         elseif material == "gold" then
124                                 groupcaps2={
125                                         stone = {times={[1]=0.2,[2]=0.2,[3]=0.2,[4]=0.2,[5]=32}, uses=32, maxlevel=1},
126                                         glass = {times={[1]=0.1,[2]=0.1,[3]=0.1,[4]=0.1,[5]=32}, uses=32, maxlevel=1},
127                                         netherrack = {times={[1]=0.05,[2]=0.05,[3]=0.05,[4]=0.05,[5]=32}, uses=32, maxlevel=1},
128                                 }
129                                 damage = 3
130                                 wear = 1000
131                         elseif material == "diamond" then
132                                 groupcaps2={
133                                         stone = {times={[1]= 0.3,[2]=0.3,[3]=0.3,[4]=0.3,[5]=4}, uses=1561, maxlevel=1},
134                                         glass = {times={[1]= 0.15,[2]=0.15,[3]=0.15,[4]=0.15,[5]=4}, uses=1561, maxlevel=1},
135                                         netherrack = {times={[1]= 0.075,[2]=0.075,[3]=0.075,[4]=0.075,[5]=4}, uses=1561, maxlevel=1},
136                                 }
137                                 damage = 6
138                                 wear = 100
139                         end
140                 end
141                 minetest.register_tool("main:"..material..tool, {
142                         description = material:gsub("^%l", string.upper).." "..tool:gsub("^%l", string.upper),
143                         inventory_image = material..tool..".png",
144                         tool_capabilities = {
145                                 --full_punch_interval = 1.2,
146                                 --max_drop_level=0,
147                                 groupcaps=groupcaps2,
148                                 damage_groups = {damage=damage},
149                         },
150                         sound = {breaks = {name="tool_break",gain=0.4}}, -- change this
151                         groups = {flammable = 2, tool=1 },
152                         mob_hit_wear = wear,
153                         --torch rightclick - hacked in since api doesn't call on_place correctly
154                         on_place = function(itemstack, placer, pointed_thing)
155                                 local inv = placer:get_inventory()
156                                 local torch = inv:contains_item("main", "torch:torch")
157                                 local is_air = minetest.get_node(pointed_thing.above).name == "air"
158                                 local dir = vector.subtract(pointed_thing.under, pointed_thing.above)
159                                 local diff = dir.y
160                                 local noddef = minetest.registered_nodes[minetest.get_node(pointed_thing.under).name]
161                                 local walkable = noddef.walkable
162                                 local sneak = placer:get_player_control().sneak
163                                 
164                                 if not sneak and noddef.on_rightclick then
165                                         minetest.item_place(itemstack, placer, pointed_thing)
166                                         return
167                                 end
168                                 
169                                 if torch and is_air and walkable then
170                                         if diff == 0 then
171                                                 local param2 = minetest.dir_to_wallmounted(dir)
172                                                 minetest.set_node(pointed_thing.above, {name="torch:wall",param2=param2})
173                                                 minetest.sound_play("wood", {pos=pointed_thing.above, gain = 1.0})
174                                         elseif diff == -1 then
175                                                 minetest.place_node(pointed_thing.above,{name="torch:floor"})
176                                         end
177                                         --take item
178                                         if diff == 0 or diff == -1 then
179                                                 inv:remove_item("main", "torch:torch")
180                                         end     
181                                 end
182                         end,
183                 })
184         end
185         
186         
187         local wear
188         
189         if material == "wood" then
190                 damage = 4
191                 wear = 500
192         elseif material == "stone" then
193                 damage = 5
194                 wear = 400
195         elseif material == "iron" then
196                 damage = 6
197                 wear = 300
198         elseif material == "gold" then
199                 damage = 4
200                 wear = 1000
201         elseif material == "diamond" then
202                 damage = 7
203                 wear = 100
204         end
205
206         
207         --add swords
208         minetest.register_tool("main:"..material.."sword", {
209                 description = material:gsub("^%l", string.upper).." Sword",
210                 inventory_image = material.."sword.png",
211                 tool_capabilities = {
212                         --full_punch_interval = 1.2,
213                         --max_drop_level=0,
214                         groupcaps={leaves = {times={[4]=0.7,[3]=0.7,[2]=0.7,[1]=0.7}, uses=10, maxlevel=1},},
215                         damage_groups = {damage = damage},
216                 },
217                 mob_hit_wear = wear,
218                 sound = {breaks = {name="tool_break",gain=0.4}}, -- change this
219                 groups = {damage=damage }
220         })
221 end
222
223 --shears
224 minetest.register_tool("main:shears", {
225         description = "Shears",
226         inventory_image = "shears.png",
227         tool_capabilities = {
228                 groupcaps = {
229                 leaves = {times={[1]= 0.05,[2]=0.05,[3]=0.05,[4]=0.05,[5]=0.05}, uses=500, maxlevel=1},
230                 }
231         },
232         sound = {breaks = "default_tool_breaks"}, -- change this
233         groups = {shears = 1}
234 })