1 -- mods/default/tools.lua
4 minetest.register_item(":", {
6 wield_image = "wieldhand.png",
7 wield_scale = {x=1,y=1,z=2.5},
9 full_punch_interval = 0.9,
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}
16 damage_groups = {fleshy=1},
24 minetest.register_tool("default:pick_wood", {
25 description = "Wooden Pickaxe",
26 inventory_image = "default_tool_woodpick.png",
28 full_punch_interval = 1.2,
31 cracky = {times={[3]=1.60}, uses=10, maxlevel=1},
33 damage_groups = {fleshy=2},
35 groups = {flammable = 2},
36 sound = {breaks = "default_tool_breaks"},
39 minetest.register_tool("default:pick_stone", {
40 description = "Stone Pickaxe",
41 inventory_image = "default_tool_stonepick.png",
43 full_punch_interval = 1.3,
46 cracky = {times={[2]=2.0, [3]=1.00}, uses=20, maxlevel=1},
48 damage_groups = {fleshy=3},
50 sound = {breaks = "default_tool_breaks"},
53 minetest.register_tool("default:pick_steel", {
54 description = "Steel Pickaxe",
55 inventory_image = "default_tool_steelpick.png",
57 full_punch_interval = 1.0,
60 cracky = {times={[1]=4.00, [2]=1.60, [3]=0.80}, uses=20, maxlevel=2},
62 damage_groups = {fleshy=4},
64 sound = {breaks = "default_tool_breaks"},
67 minetest.register_tool("default:pick_bronze", {
68 description = "Bronze Pickaxe",
69 inventory_image = "default_tool_bronzepick.png",
71 full_punch_interval = 1.0,
74 cracky = {times={[1]=4.00, [2]=1.60, [3]=0.80}, uses=30, maxlevel=2},
76 damage_groups = {fleshy=4},
78 sound = {breaks = "default_tool_breaks"},
81 minetest.register_tool("default:pick_mese", {
82 description = "Mese Pickaxe",
83 inventory_image = "default_tool_mesepick.png",
85 full_punch_interval = 0.9,
88 cracky = {times={[1]=2.4, [2]=1.2, [3]=0.60}, uses=20, maxlevel=3},
90 damage_groups = {fleshy=5},
92 sound = {breaks = "default_tool_breaks"},
95 minetest.register_tool("default:pick_diamond", {
96 description = "Diamond Pickaxe",
97 inventory_image = "default_tool_diamondpick.png",
99 full_punch_interval = 0.9,
102 cracky = {times={[1]=2.0, [2]=1.0, [3]=0.50}, uses=30, maxlevel=3},
104 damage_groups = {fleshy=5},
106 sound = {breaks = "default_tool_breaks"},
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,
121 crumbly = {times={[1]=3.00, [2]=1.60, [3]=0.60}, uses=10, maxlevel=1},
123 damage_groups = {fleshy=2},
125 groups = {flammable = 2},
126 sound = {breaks = "default_tool_breaks"},
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,
137 crumbly = {times={[1]=1.80, [2]=1.20, [3]=0.50}, uses=20, maxlevel=1},
139 damage_groups = {fleshy=2},
141 sound = {breaks = "default_tool_breaks"},
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,
152 crumbly = {times={[1]=1.50, [2]=0.90, [3]=0.40}, uses=30, maxlevel=2},
154 damage_groups = {fleshy=3},
156 sound = {breaks = "default_tool_breaks"},
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,
167 crumbly = {times={[1]=1.50, [2]=0.90, [3]=0.40}, uses=40, maxlevel=2},
169 damage_groups = {fleshy=3},
171 sound = {breaks = "default_tool_breaks"},
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,
182 crumbly = {times={[1]=1.20, [2]=0.60, [3]=0.30}, uses=20, maxlevel=3},
184 damage_groups = {fleshy=4},
186 sound = {breaks = "default_tool_breaks"},
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,
197 crumbly = {times={[1]=1.10, [2]=0.50, [3]=0.30}, uses=30, maxlevel=3},
199 damage_groups = {fleshy=4},
201 sound = {breaks = "default_tool_breaks"},
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,
215 choppy = {times={[2]=3.00, [3]=1.60}, uses=10, maxlevel=1},
217 damage_groups = {fleshy=2},
219 groups = {flammable = 2},
220 sound = {breaks = "default_tool_breaks"},
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,
230 choppy={times={[1]=3.00, [2]=2.00, [3]=1.30}, uses=20, maxlevel=1},
232 damage_groups = {fleshy=3},
234 sound = {breaks = "default_tool_breaks"},
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,
244 choppy={times={[1]=2.50, [2]=1.40, [3]=1.00}, uses=20, maxlevel=2},
246 damage_groups = {fleshy=4},
248 sound = {breaks = "default_tool_breaks"},
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,
258 choppy={times={[1]=2.50, [2]=1.40, [3]=1.00}, uses=30, maxlevel=2},
260 damage_groups = {fleshy=4},
262 sound = {breaks = "default_tool_breaks"},
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,
272 choppy={times={[1]=2.20, [2]=1.00, [3]=0.60}, uses=20, maxlevel=3},
274 damage_groups = {fleshy=6},
276 sound = {breaks = "default_tool_breaks"},
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,
286 choppy={times={[1]=2.10, [2]=0.90, [3]=0.50}, uses=30, maxlevel=2},
288 damage_groups = {fleshy=7},
290 sound = {breaks = "default_tool_breaks"},
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,
304 snappy={times={[2]=1.6, [3]=0.40}, uses=10, maxlevel=1},
306 damage_groups = {fleshy=2},
308 groups = {flammable = 2},
309 sound = {breaks = "default_tool_breaks"},
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,
319 snappy={times={[2]=1.4, [3]=0.40}, uses=20, maxlevel=1},
321 damage_groups = {fleshy=4},
323 sound = {breaks = "default_tool_breaks"},
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,
333 snappy={times={[1]=2.5, [2]=1.20, [3]=0.35}, uses=30, maxlevel=2},
335 damage_groups = {fleshy=6},
337 sound = {breaks = "default_tool_breaks"},
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,
347 snappy={times={[1]=2.5, [2]=1.20, [3]=0.35}, uses=40, maxlevel=2},
349 damage_groups = {fleshy=6},
351 sound = {breaks = "default_tool_breaks"},
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,
361 snappy={times={[1]=2.0, [2]=1.00, [3]=0.35}, uses=30, maxlevel=3},
363 damage_groups = {fleshy=7},
365 sound = {breaks = "default_tool_breaks"},
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,
375 snappy={times={[1]=1.90, [2]=0.90, [3]=0.30}, uses=40, maxlevel=3},
377 damage_groups = {fleshy=8},
379 sound = {breaks = "default_tool_breaks"},
382 minetest.register_craftitem("default:skeleton_key", {
383 description = "Skeleton Key",
384 inventory_image = "default_key_skeleton.png",
386 on_use = function(itemstack, user, pointed_thing)
387 if pointed_thing.type ~= "node" then
391 local pos = pointed_thing.under
392 local node = minetest.get_node(pos)
398 local on_skeleton_key_use = minetest.registered_nodes[node.name].on_skeleton_key_use
399 if on_skeleton_key_use then
400 -- make a new key secret in case the node callback needs it
401 local random = math.random
402 local newsecret = string.format(
404 random(2^16) - 1, random(2^16) - 1,
405 random(2^16) - 1, random(2^16) - 1)
407 local secret, _, _ = on_skeleton_key_use(pos, user, newsecret)
410 -- update original itemstack
411 itemstack:take_item()
413 -- finish and return the new key
414 local new_stack = ItemStack("default:key")
415 local meta = new_stack:get_meta()
416 local inv = minetest.get_inventory({type="player", name=user:get_player_name()})
417 meta:set_string("secret", secret)
418 meta:set_string("description", "Key to "..user:get_player_name().."'s "
419 ..minetest.registered_nodes[node.name].description)
421 if itemstack:get_count() == 0 then
422 itemstack = new_stack
424 if inv:add_item("main", new_stack):get_count() > 0 then
425 minetest.add_item(user:getpos(), new_stack)
436 minetest.register_tool("default:key", {
438 inventory_image = "default_key.png",
439 groups = {key = 1, not_in_creative_inventory = 1},
441 on_place = function(itemstack, placer, pointed_thing)
442 local under = pointed_thing.under
443 local node = minetest.get_node(under)
444 local def = minetest.registered_nodes[node.name]
445 if def and def.on_rightclick and
446 not (placer and placer:get_player_control().sneak) then
447 return def.on_rightclick(under, node, placer, itemstack,
448 pointed_thing) or itemstack
450 if pointed_thing.type ~= "node" then
454 local pos = pointed_thing.under
455 node = minetest.get_node(pos)
457 if not node or node.name == "ignore" then
461 local ndef = minetest.registered_nodes[node.name]
466 local on_key_use = ndef.on_key_use
468 on_key_use(pos, placer)