Creative: Make the placenode registration check for non-player placers
[oweals/minetest_game.git] / mods / default / tools.lua
1 -- mods/default/tools.lua
2
3 -- The hand
4 minetest.register_item(":", {
5         type = "none",
6         wield_image = "wieldhand.png",
7         wield_scale = {x=1,y=1,z=2.5},
8         tool_capabilities = {
9                 full_punch_interval = 0.9,
10                 max_drop_level = 0,
11                 groupcaps = {
12                         crumbly = {times={[2]=3.00, [3]=0.70}, uses=0, maxlevel=1},
13                         snappy = {times={[3]=0.40}, uses=0, maxlevel=1},
14                         oddly_breakable_by_hand = {times={[1]=3.50,[2]=2.00,[3]=0.70}, uses=0}
15                 },
16                 damage_groups = {fleshy=1},
17         }
18 })
19
20 --
21 -- Picks
22 --
23
24 minetest.register_tool("default:pick_wood", {
25         description = "Wooden Pickaxe",
26         inventory_image = "default_tool_woodpick.png",
27         tool_capabilities = {
28                 full_punch_interval = 1.2,
29                 max_drop_level=0,
30                 groupcaps={
31                         cracky = {times={[3]=1.60}, uses=10, maxlevel=1},
32                 },
33                 damage_groups = {fleshy=2},
34         },
35         groups = {flammable = 2},
36         sound = {breaks = "default_tool_breaks"},
37 })
38
39 minetest.register_tool("default:pick_stone", {
40         description = "Stone Pickaxe",
41         inventory_image = "default_tool_stonepick.png",
42         tool_capabilities = {
43                 full_punch_interval = 1.3,
44                 max_drop_level=0,
45                 groupcaps={
46                         cracky = {times={[2]=2.0, [3]=1.00}, uses=20, maxlevel=1},
47                 },
48                 damage_groups = {fleshy=3},
49         },
50         sound = {breaks = "default_tool_breaks"},
51 })
52
53 minetest.register_tool("default:pick_steel", {
54         description = "Steel Pickaxe",
55         inventory_image = "default_tool_steelpick.png",
56         tool_capabilities = {
57                 full_punch_interval = 1.0,
58                 max_drop_level=1,
59                 groupcaps={
60                         cracky = {times={[1]=4.00, [2]=1.60, [3]=0.80}, uses=20, maxlevel=2},
61                 },
62                 damage_groups = {fleshy=4},
63         },
64         sound = {breaks = "default_tool_breaks"},
65 })
66
67 minetest.register_tool("default:pick_bronze", {
68         description = "Bronze Pickaxe",
69         inventory_image = "default_tool_bronzepick.png",
70         tool_capabilities = {
71                 full_punch_interval = 1.0,
72                 max_drop_level=1,
73                 groupcaps={
74                         cracky = {times={[1]=4.00, [2]=1.60, [3]=0.80}, uses=30, maxlevel=2},
75                 },
76                 damage_groups = {fleshy=4},
77         },
78         sound = {breaks = "default_tool_breaks"},
79 })
80
81 minetest.register_tool("default:pick_mese", {
82         description = "Mese Pickaxe",
83         inventory_image = "default_tool_mesepick.png",
84         tool_capabilities = {
85                 full_punch_interval = 0.9,
86                 max_drop_level=3,
87                 groupcaps={
88                         cracky = {times={[1]=2.4, [2]=1.2, [3]=0.60}, uses=20, maxlevel=3},
89                 },
90                 damage_groups = {fleshy=5},
91         },
92         sound = {breaks = "default_tool_breaks"},
93 })
94
95 minetest.register_tool("default:pick_diamond", {
96         description = "Diamond Pickaxe",
97         inventory_image = "default_tool_diamondpick.png",
98         tool_capabilities = {
99                 full_punch_interval = 0.9,
100                 max_drop_level=3,
101                 groupcaps={
102                         cracky = {times={[1]=2.0, [2]=1.0, [3]=0.50}, uses=30, maxlevel=3},
103                 },
104                 damage_groups = {fleshy=5},
105         },
106         sound = {breaks = "default_tool_breaks"},
107 })
108
109 --
110 -- Shovels
111 --
112
113 minetest.register_tool("default:shovel_wood", {
114         description = "Wooden Shovel",
115         inventory_image = "default_tool_woodshovel.png",
116         wield_image = "default_tool_woodshovel.png^[transformR90",
117         tool_capabilities = {
118                 full_punch_interval = 1.2,
119                 max_drop_level=0,
120                 groupcaps={
121                         crumbly = {times={[1]=3.00, [2]=1.60, [3]=0.60}, uses=10, maxlevel=1},
122                 },
123                 damage_groups = {fleshy=2},
124         },
125         groups = {flammable = 2},
126         sound = {breaks = "default_tool_breaks"},
127 })
128
129 minetest.register_tool("default:shovel_stone", {
130         description = "Stone Shovel",
131         inventory_image = "default_tool_stoneshovel.png",
132         wield_image = "default_tool_stoneshovel.png^[transformR90",
133         tool_capabilities = {
134                 full_punch_interval = 1.4,
135                 max_drop_level=0,
136                 groupcaps={
137                         crumbly = {times={[1]=1.80, [2]=1.20, [3]=0.50}, uses=20, maxlevel=1},
138                 },
139                 damage_groups = {fleshy=2},
140         },
141         sound = {breaks = "default_tool_breaks"},
142 })
143
144 minetest.register_tool("default:shovel_steel", {
145         description = "Steel Shovel",
146         inventory_image = "default_tool_steelshovel.png",
147         wield_image = "default_tool_steelshovel.png^[transformR90",
148         tool_capabilities = {
149                 full_punch_interval = 1.1,
150                 max_drop_level=1,
151                 groupcaps={
152                         crumbly = {times={[1]=1.50, [2]=0.90, [3]=0.40}, uses=30, maxlevel=2},
153                 },
154                 damage_groups = {fleshy=3},
155         },
156         sound = {breaks = "default_tool_breaks"},
157 })
158
159 minetest.register_tool("default:shovel_bronze", {
160         description = "Bronze Shovel",
161         inventory_image = "default_tool_bronzeshovel.png",
162         wield_image = "default_tool_bronzeshovel.png^[transformR90",
163         tool_capabilities = {
164                 full_punch_interval = 1.1,
165                 max_drop_level=1,
166                 groupcaps={
167                         crumbly = {times={[1]=1.50, [2]=0.90, [3]=0.40}, uses=40, maxlevel=2},
168                 },
169                 damage_groups = {fleshy=3},
170         },
171         sound = {breaks = "default_tool_breaks"},
172 })
173
174 minetest.register_tool("default:shovel_mese", {
175         description = "Mese Shovel",
176         inventory_image = "default_tool_meseshovel.png",
177         wield_image = "default_tool_meseshovel.png^[transformR90",
178         tool_capabilities = {
179                 full_punch_interval = 1.0,
180                 max_drop_level=3,
181                 groupcaps={
182                         crumbly = {times={[1]=1.20, [2]=0.60, [3]=0.30}, uses=20, maxlevel=3},
183                 },
184                 damage_groups = {fleshy=4},
185         },
186         sound = {breaks = "default_tool_breaks"},
187 })
188
189 minetest.register_tool("default:shovel_diamond", {
190         description = "Diamond Shovel",
191         inventory_image = "default_tool_diamondshovel.png",
192         wield_image = "default_tool_diamondshovel.png^[transformR90",
193         tool_capabilities = {
194                 full_punch_interval = 1.0,
195                 max_drop_level=1,
196                 groupcaps={
197                         crumbly = {times={[1]=1.10, [2]=0.50, [3]=0.30}, uses=30, maxlevel=3},
198                 },
199                 damage_groups = {fleshy=4},
200         },
201         sound = {breaks = "default_tool_breaks"},
202 })
203
204 --
205 -- Axes
206 --
207
208 minetest.register_tool("default:axe_wood", {
209         description = "Wooden Axe",
210         inventory_image = "default_tool_woodaxe.png",
211         tool_capabilities = {
212                 full_punch_interval = 1.0,
213                 max_drop_level=0,
214                 groupcaps={
215                         choppy = {times={[2]=3.00, [3]=1.60}, uses=10, maxlevel=1},
216                 },
217                 damage_groups = {fleshy=2},
218         },
219         groups = {flammable = 2},
220         sound = {breaks = "default_tool_breaks"},
221 })
222
223 minetest.register_tool("default:axe_stone", {
224         description = "Stone Axe",
225         inventory_image = "default_tool_stoneaxe.png",
226         tool_capabilities = {
227                 full_punch_interval = 1.2,
228                 max_drop_level=0,
229                 groupcaps={
230                         choppy={times={[1]=3.00, [2]=2.00, [3]=1.30}, uses=20, maxlevel=1},
231                 },
232                 damage_groups = {fleshy=3},
233         },
234         sound = {breaks = "default_tool_breaks"},
235 })
236
237 minetest.register_tool("default:axe_steel", {
238         description = "Steel Axe",
239         inventory_image = "default_tool_steelaxe.png",
240         tool_capabilities = {
241                 full_punch_interval = 1.0,
242                 max_drop_level=1,
243                 groupcaps={
244                         choppy={times={[1]=2.50, [2]=1.40, [3]=1.00}, uses=20, maxlevel=2},
245                 },
246                 damage_groups = {fleshy=4},
247         },
248         sound = {breaks = "default_tool_breaks"},
249 })
250
251 minetest.register_tool("default:axe_bronze", {
252         description = "Bronze Axe",
253         inventory_image = "default_tool_bronzeaxe.png",
254         tool_capabilities = {
255                 full_punch_interval = 1.0,
256                 max_drop_level=1,
257                 groupcaps={
258                         choppy={times={[1]=2.50, [2]=1.40, [3]=1.00}, uses=30, maxlevel=2},
259                 },
260                 damage_groups = {fleshy=4},
261         },
262         sound = {breaks = "default_tool_breaks"},
263 })
264
265 minetest.register_tool("default:axe_mese", {
266         description = "Mese Axe",
267         inventory_image = "default_tool_meseaxe.png",
268         tool_capabilities = {
269                 full_punch_interval = 0.9,
270                 max_drop_level=1,
271                 groupcaps={
272                         choppy={times={[1]=2.20, [2]=1.00, [3]=0.60}, uses=20, maxlevel=3},
273                 },
274                 damage_groups = {fleshy=6},
275         },
276         sound = {breaks = "default_tool_breaks"},
277 })
278
279 minetest.register_tool("default:axe_diamond", {
280         description = "Diamond Axe",
281         inventory_image = "default_tool_diamondaxe.png",
282         tool_capabilities = {
283                 full_punch_interval = 0.9,
284                 max_drop_level=1,
285                 groupcaps={
286                         choppy={times={[1]=2.10, [2]=0.90, [3]=0.50}, uses=30, maxlevel=2},
287                 },
288                 damage_groups = {fleshy=7},
289         },
290         sound = {breaks = "default_tool_breaks"},
291 })
292
293 --
294 -- Swords
295 --
296
297 minetest.register_tool("default:sword_wood", {
298         description = "Wooden Sword",
299         inventory_image = "default_tool_woodsword.png",
300         tool_capabilities = {
301                 full_punch_interval = 1,
302                 max_drop_level=0,
303                 groupcaps={
304                         snappy={times={[2]=1.6, [3]=0.40}, uses=10, maxlevel=1},
305                 },
306                 damage_groups = {fleshy=2},
307         },
308         groups = {flammable = 2},
309         sound = {breaks = "default_tool_breaks"},
310 })
311
312 minetest.register_tool("default:sword_stone", {
313         description = "Stone Sword",
314         inventory_image = "default_tool_stonesword.png",
315         tool_capabilities = {
316                 full_punch_interval = 1.2,
317                 max_drop_level=0,
318                 groupcaps={
319                         snappy={times={[2]=1.4, [3]=0.40}, uses=20, maxlevel=1},
320                 },
321                 damage_groups = {fleshy=4},
322         },
323         sound = {breaks = "default_tool_breaks"},
324 })
325
326 minetest.register_tool("default:sword_steel", {
327         description = "Steel Sword",
328         inventory_image = "default_tool_steelsword.png",
329         tool_capabilities = {
330                 full_punch_interval = 0.8,
331                 max_drop_level=1,
332                 groupcaps={
333                         snappy={times={[1]=2.5, [2]=1.20, [3]=0.35}, uses=30, maxlevel=2},
334                 },
335                 damage_groups = {fleshy=6},
336         },
337         sound = {breaks = "default_tool_breaks"},
338 })
339
340 minetest.register_tool("default:sword_bronze", {
341         description = "Bronze Sword",
342         inventory_image = "default_tool_bronzesword.png",
343         tool_capabilities = {
344                 full_punch_interval = 0.8,
345                 max_drop_level=1,
346                 groupcaps={
347                         snappy={times={[1]=2.5, [2]=1.20, [3]=0.35}, uses=40, maxlevel=2},
348                 },
349                 damage_groups = {fleshy=6},
350         },
351         sound = {breaks = "default_tool_breaks"},
352 })
353
354 minetest.register_tool("default:sword_mese", {
355         description = "Mese Sword",
356         inventory_image = "default_tool_mesesword.png",
357         tool_capabilities = {
358                 full_punch_interval = 0.7,
359                 max_drop_level=1,
360                 groupcaps={
361                         snappy={times={[1]=2.0, [2]=1.00, [3]=0.35}, uses=30, maxlevel=3},
362                 },
363                 damage_groups = {fleshy=7},
364         },
365         sound = {breaks = "default_tool_breaks"},
366 })
367
368 minetest.register_tool("default:sword_diamond", {
369         description = "Diamond Sword",
370         inventory_image = "default_tool_diamondsword.png",
371         tool_capabilities = {
372                 full_punch_interval = 0.7,
373                 max_drop_level=1,
374                 groupcaps={
375                         snappy={times={[1]=1.90, [2]=0.90, [3]=0.30}, uses=40, maxlevel=3},
376                 },
377                 damage_groups = {fleshy=8},
378         },
379         sound = {breaks = "default_tool_breaks"},
380 })
381
382 minetest.register_tool("default:key", {
383         description = "Key",
384         inventory_image = "default_key.png",
385         groups = {key = 1, not_in_creative_inventory = 1},
386         stack_max = 1,
387         on_place = function(itemstack, placer, pointed_thing)
388                 local under = pointed_thing.under
389                 local node = minetest.get_node(under)
390                 local def = minetest.registered_nodes[node.name]
391                 if def and def.on_rightclick and
392                                 not (placer and placer:get_player_control().sneak) then
393                         return def.on_rightclick(under, node, placer, itemstack,
394                                 pointed_thing) or itemstack
395                 end
396                 if pointed_thing.type ~= "node" then
397                         return itemstack
398                 end
399
400                 local pos = pointed_thing.under
401                 node = minetest.get_node(pos)
402
403                 if not node or node.name == "ignore" then
404                         return itemstack
405                 end
406
407                 local ndef = minetest.registered_nodes[node.name]
408                 if not ndef then
409                         return itemstack
410                 end
411
412                 local on_key_use = ndef.on_key_use
413                 if on_key_use then
414                         on_key_use(pos, placer)
415                 end
416
417                 return nil
418         end
419 })