Default, vessels: Darken shelf empty slot icons
[oweals/minetest_game.git] / mods / default / nodes.lua
1 -- mods/default/nodes.lua
2
3
4 --[[ Node name convention:
5
6 Although many node names are in combined-word form, the required form for new
7 node names is words separated by underscores. If both forms are used in written
8 language (for example pinewood and pine wood) the underscore form should be used.
9
10 --]]
11
12
13 --[[ Index:
14
15 Stone
16 -----
17 (1. Material 2. Cobble variant 3. Brick variant 4. Modified forms)
18
19 default:stone
20 default:cobble
21 default:stonebrick
22 default:stone_block
23 default:mossycobble
24
25 default:desert_stone
26 default:desert_cobble
27 default:desert_stonebrick
28 default:desert_stone_block
29
30 default:sandstone
31 default:sandstonebrick
32 default:sandstone_block
33
34 default:obsidian
35 default:obsidianbrick
36 default:obsidian_block
37
38 Soft / Non-Stone
39 ----------------
40 (1. Material 2. Modified forms)
41
42 default:dirt
43 default:dirt_with_grass
44 default:dirt_with_grass_footsteps
45 default:dirt_with_dry_grass
46 default:dirt_with_snow
47
48 default:sand
49 default:desert_sand
50 default:silver_sand
51
52 default:gravel
53
54 default:clay
55
56 default:snow
57 default:snowblock
58
59 default:ice
60
61 Trees
62 -----
63 (1. Trunk 2. Fabricated trunk 3. Leaves 4. Sapling 5. Fruits)
64
65 default:tree
66 default:wood
67 default:leaves
68 default:sapling
69 default:apple
70
71 default:jungletree
72 default:junglewood
73 default:jungleleaves
74 default:junglesapling
75
76 default:pine_tree
77 default:pine_wood
78 default:pine_needles
79 default:pine_sapling
80
81 default:acacia_tree
82 default:acacia_wood
83 default:acacia_leaves
84 default:acacia_sapling
85
86 default:aspen_tree
87 default:aspen_wood
88 default:aspen_leaves
89 default:aspen_sapling
90
91 Ores
92 ----
93 (1. In stone 2. Blocks)
94
95 default:stone_with_coal
96 default:coalblock
97
98 default:stone_with_iron
99 default:steelblock
100
101 default:stone_with_copper
102 default:copperblock
103 default:bronzeblock
104
105 default:stone_with_gold
106 default:goldblock
107
108 default:stone_with_mese
109 default:mese
110
111 default:stone_with_diamond
112 default:diamondblock
113
114 Plantlife
115 ---------
116
117 default:cactus
118 default:papyrus
119 default:dry_shrub
120 default:junglegrass
121
122 default:grass_1
123 default:grass_2
124 default:grass_3
125 default:grass_4
126 default:grass_5
127
128 default:dry_grass_1
129 default:dry_grass_2
130 default:dry_grass_3
131 default:dry_grass_4
132 default:dry_grass_5
133
134 default:bush_stem
135 default:bush_leaves
136 default:acacia_bush_stem
137 default:acacia_bush_leaves
138
139 Corals
140 ------
141
142 default:coral_brown
143 default:coral_orange
144 default:coral_skeleton
145
146 Liquids
147 -------
148 (1. Source 2. Flowing)
149
150 default:water_source
151 default:water_flowing
152
153 default:river_water_source
154 default:river_water_flowing
155
156 default:lava_source
157 default:lava_flowing
158
159 Tools / "Advanced" crafting / Non-"natural"
160 -------------------------------------------
161
162 default:torch
163
164 default:chest
165 default:chest_locked
166
167 default:bookshelf
168
169 default:sign_wall_wood
170 default:sign_wall_steel
171
172 default:ladder_wood
173 default:ladder_steel
174
175 default:fence_wood
176 default:fence_acacia_wood
177 default:fence_junglewood
178 default:fence_pine_wood
179 default:fence_aspen_wood
180
181 default:glass
182 default:obsidian_glass
183
184 default:rail
185
186 default:brick
187
188 default:meselamp
189
190 Misc
191 ----
192
193 default:cloud
194
195 --]]
196
197 --
198 -- Stone
199 --
200
201 minetest.register_node("default:stone", {
202         description = "Stone",
203         tiles = {"default_stone.png"},
204         groups = {cracky = 3, stone = 1},
205         drop = 'default:cobble',
206         legacy_mineral = true,
207         sounds = default.node_sound_stone_defaults(),
208 })
209
210 minetest.register_node("default:cobble", {
211         description = "Cobblestone",
212         tiles = {"default_cobble.png"},
213         is_ground_content = false,
214         groups = {cracky = 3, stone = 2},
215         sounds = default.node_sound_stone_defaults(),
216 })
217
218 minetest.register_node("default:stonebrick", {
219         description = "Stone Brick",
220         paramtype2 = "facedir",
221         place_param2 = 0,
222         tiles = {"default_stone_brick.png"},
223         is_ground_content = false,
224         groups = {cracky = 2, stone = 1},
225         sounds = default.node_sound_stone_defaults(),
226 })
227
228 minetest.register_node("default:stone_block", {
229         description = "Stone Block",
230         tiles = {"default_stone_block.png"},
231         is_ground_content = false,
232         groups = {cracky = 2, stone = 1},
233         sounds = default.node_sound_stone_defaults(),
234 })
235
236 minetest.register_node("default:mossycobble", {
237         description = "Mossy Cobblestone",
238         tiles = {"default_mossycobble.png"},
239         is_ground_content = false,
240         groups = {cracky = 3, stone = 1},
241         sounds = default.node_sound_stone_defaults(),
242 })
243
244
245 minetest.register_node("default:desert_stone", {
246         description = "Desert Stone",
247         tiles = {"default_desert_stone.png"},
248         groups = {cracky = 3, stone = 1},
249         drop = 'default:desert_cobble',
250         legacy_mineral = true,
251         sounds = default.node_sound_stone_defaults(),
252 })
253
254 minetest.register_node("default:desert_cobble", {
255         description = "Desert Cobblestone",
256         tiles = {"default_desert_cobble.png"},
257         is_ground_content = false,
258         groups = {cracky = 3, stone = 2},
259         sounds = default.node_sound_stone_defaults(),
260 })
261
262 minetest.register_node("default:desert_stonebrick", {
263         description = "Desert Stone Brick",
264         paramtype2 = "facedir",
265         place_param2 = 0,
266         tiles = {"default_desert_stone_brick.png"},
267         is_ground_content = false,
268         groups = {cracky = 2, stone = 1},
269         sounds = default.node_sound_stone_defaults(),
270 })
271
272 minetest.register_node("default:desert_stone_block", {
273         description = "Desert Stone Block",
274         tiles = {"default_desert_stone_block.png"},
275         is_ground_content = false,
276         groups = {cracky = 2, stone = 1},
277         sounds = default.node_sound_stone_defaults(),
278 })
279
280
281 minetest.register_node("default:sandstone", {
282         description = "Sandstone",
283         tiles = {"default_sandstone.png"},
284         groups = {crumbly = 1, cracky = 3},
285         sounds = default.node_sound_stone_defaults(),
286 })
287
288 minetest.register_node("default:sandstonebrick", {
289         description = "Sandstone Brick",
290         paramtype2 = "facedir",
291         place_param2 = 0,
292         tiles = {"default_sandstone_brick.png"},
293         is_ground_content = false,
294         groups = {cracky = 2},
295         sounds = default.node_sound_stone_defaults(),
296 })
297
298 minetest.register_node("default:sandstone_block", {
299         description = "Sandstone Block",
300         tiles = {"default_sandstone_block.png"},
301         is_ground_content = false,
302         groups = {cracky = 2},
303         sounds = default.node_sound_stone_defaults(),
304 })
305
306
307 minetest.register_node("default:obsidian", {
308         description = "Obsidian",
309         tiles = {"default_obsidian.png"},
310         sounds = default.node_sound_stone_defaults(),
311         groups = {cracky = 1, level = 2},
312 })
313
314 minetest.register_node("default:obsidianbrick", {
315         description = "Obsidian Brick",
316         paramtype2 = "facedir",
317         place_param2 = 0,
318         tiles = {"default_obsidian_brick.png"},
319         is_ground_content = false,
320         sounds = default.node_sound_stone_defaults(),
321         groups = {cracky = 1, level = 2},
322 })
323
324 minetest.register_node("default:obsidian_block", {
325         description = "Obsidian Block",
326         tiles = {"default_obsidian_block.png"},
327         is_ground_content = false,
328         sounds = default.node_sound_stone_defaults(),
329         groups = {cracky = 1, level = 2},
330 })
331
332 --
333 -- Soft / Non-Stone
334 --
335
336 minetest.register_node("default:dirt", {
337         description = "Dirt",
338         tiles = {"default_dirt.png"},
339         groups = {crumbly = 3, soil = 1},
340         sounds = default.node_sound_dirt_defaults(),
341 })
342
343 minetest.register_node("default:dirt_with_grass", {
344         description = "Dirt with Grass",
345         tiles = {"default_grass.png", "default_dirt.png",
346                 {name = "default_dirt.png^default_grass_side.png",
347                         tileable_vertical = false}},
348         groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1},
349         drop = 'default:dirt',
350         sounds = default.node_sound_dirt_defaults({
351                 footstep = {name = "default_grass_footstep", gain = 0.25},
352         }),
353 })
354
355 minetest.register_node("default:dirt_with_grass_footsteps", {
356         description = "Dirt with Grass and Footsteps",
357         tiles = {"default_grass.png^default_footprint.png", "default_dirt.png",
358                 {name = "default_dirt.png^default_grass_side.png",
359                         tileable_vertical = false}},
360         groups = {crumbly = 3, soil = 1, not_in_creative_inventory = 1},
361         drop = 'default:dirt',
362         sounds = default.node_sound_dirt_defaults({
363                 footstep = {name = "default_grass_footstep", gain = 0.25},
364         }),
365 })
366
367 minetest.register_node("default:dirt_with_dry_grass", {
368         description = "Dirt with Dry Grass",
369         tiles = {"default_dry_grass.png",
370                 "default_dirt.png",
371                 {name = "default_dirt.png^default_dry_grass_side.png",
372                         tileable_vertical = false}},
373         groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1},
374         drop = 'default:dirt',
375         sounds = default.node_sound_dirt_defaults({
376                 footstep = {name = "default_grass_footstep", gain = 0.4},
377         }),
378 })
379
380 minetest.register_node("default:dirt_with_snow", {
381         description = "Dirt with Snow",
382         tiles = {"default_snow.png", "default_dirt.png",
383                 {name = "default_dirt.png^default_snow_side.png",
384                         tileable_vertical = false}},
385         groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1},
386         drop = 'default:dirt',
387         sounds = default.node_sound_dirt_defaults({
388                 footstep = {name = "default_snow_footstep", gain = 0.15},
389         }),
390 })
391
392 minetest.register_node("default:sand", {
393         description = "Sand",
394         tiles = {"default_sand.png"},
395         groups = {crumbly = 3, falling_node = 1, sand = 1},
396         sounds = default.node_sound_sand_defaults(),
397 })
398
399 minetest.register_node("default:desert_sand", {
400         description = "Desert Sand",
401         tiles = {"default_desert_sand.png"},
402         groups = {crumbly = 3, falling_node = 1, sand = 1},
403         sounds = default.node_sound_sand_defaults(),
404 })
405
406 minetest.register_node("default:silver_sand", {
407         description = "Silver Sand",
408         tiles = {"default_silver_sand.png"},
409         groups = {crumbly = 3, falling_node = 1, sand = 1},
410         sounds = default.node_sound_sand_defaults(),
411 })
412
413
414 minetest.register_node("default:gravel", {
415         description = "Gravel",
416         tiles = {"default_gravel.png"},
417         groups = {crumbly = 2, falling_node = 1},
418         sounds = default.node_sound_gravel_defaults(),
419         drop = {
420                 max_items = 1,
421                 items = {
422                         {items = {'default:flint'}, rarity = 16},
423                         {items = {'default:gravel'}}
424                 }
425         }
426 })
427
428 minetest.register_node("default:clay", {
429         description = "Clay",
430         tiles = {"default_clay.png"},
431         groups = {crumbly = 3},
432         drop = 'default:clay_lump 4',
433         sounds = default.node_sound_dirt_defaults(),
434 })
435
436
437 minetest.register_node("default:snow", {
438         description = "Snow",
439         tiles = {"default_snow.png"},
440         inventory_image = "default_snowball.png",
441         wield_image = "default_snowball.png",
442         paramtype = "light",
443         buildable_to = true,
444         floodable = true,
445         walkable = false,
446         drawtype = "nodebox",
447         node_box = {
448                 type = "fixed",
449                 fixed = {
450                         {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5},
451                 },
452         },
453         groups = {crumbly = 3, falling_node = 1, puts_out_fire = 1},
454         sounds = default.node_sound_dirt_defaults({
455                 footstep = {name = "default_snow_footstep", gain = 0.15},
456                 dug = {name = "default_snow_footstep", gain = 0.2},
457                 dig = {name = "default_snow_footstep", gain = 0.2}
458         }),
459
460         on_construct = function(pos)
461                 pos.y = pos.y - 1
462                 if minetest.get_node(pos).name == "default:dirt_with_grass" then
463                         minetest.set_node(pos, {name = "default:dirt_with_snow"})
464                 end
465         end,
466 })
467
468 minetest.register_node("default:snowblock", {
469         description = "Snow Block",
470         tiles = {"default_snow.png"},
471         groups = {crumbly = 3, puts_out_fire = 1},
472         sounds = default.node_sound_dirt_defaults({
473                 footstep = {name = "default_snow_footstep", gain = 0.15},
474                 dug = {name = "default_snow_footstep", gain = 0.2},
475                 dig = {name = "default_snow_footstep", gain = 0.2}
476         }),
477 })
478
479 minetest.register_node("default:ice", {
480         description = "Ice",
481         tiles = {"default_ice.png"},
482         is_ground_content = false,
483         paramtype = "light",
484         groups = {cracky = 3, puts_out_fire = 1},
485         sounds = default.node_sound_glass_defaults(),
486 })
487
488 --
489 -- Trees
490 --
491
492 minetest.register_node("default:tree", {
493         description = "Tree",
494         tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"},
495         paramtype2 = "facedir",
496         is_ground_content = false,
497         groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
498         sounds = default.node_sound_wood_defaults(),
499
500         on_place = minetest.rotate_node
501 })
502
503 minetest.register_node("default:wood", {
504         description = "Wooden Planks",
505         paramtype2 = "facedir",
506         place_param2 = 0,
507         tiles = {"default_wood.png"},
508         is_ground_content = false,
509         groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1},
510         sounds = default.node_sound_wood_defaults(),
511 })
512
513 minetest.register_node("default:sapling", {
514         description = "Sapling",
515         drawtype = "plantlike",
516         visual_scale = 1.0,
517         tiles = {"default_sapling.png"},
518         inventory_image = "default_sapling.png",
519         wield_image = "default_sapling.png",
520         paramtype = "light",
521         sunlight_propagates = true,
522         walkable = false,
523         on_timer = default.grow_sapling,
524         selection_box = {
525                 type = "fixed",
526                 fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16}
527         },
528         groups = {snappy = 2, dig_immediate = 3, flammable = 2,
529                 attached_node = 1, sapling = 1},
530         sounds = default.node_sound_leaves_defaults(),
531
532         on_construct = function(pos)
533                 minetest.get_node_timer(pos):start(math.random(2400,4800))
534         end,
535
536         on_place = function(itemstack, placer, pointed_thing)
537                 itemstack = default.sapling_on_place(itemstack, placer, pointed_thing,
538                         "default:sapling",
539                         -- minp, maxp to be checked, relative to sapling pos
540                         -- minp_relative.y = 1 because sapling pos has been checked
541                         {x = -2, y = 1, z = -2},
542                         {x = 2, y = 6, z = 2},
543                         -- maximum interval of interior volume check
544                         4)
545
546                 return itemstack
547         end,
548 })
549
550 minetest.register_node("default:leaves", {
551         description = "Leaves",
552         drawtype = "allfaces_optional",
553         waving = 1,
554         tiles = {"default_leaves.png"},
555         special_tiles = {"default_leaves_simple.png"},
556         paramtype = "light",
557         is_ground_content = false,
558         groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
559         drop = {
560                 max_items = 1,
561                 items = {
562                         {
563                                 -- player will get sapling with 1/20 chance
564                                 items = {'default:sapling'},
565                                 rarity = 20,
566                         },
567                         {
568                                 -- player will get leaves only if he get no saplings,
569                                 -- this is because max_items is 1
570                                 items = {'default:leaves'},
571                         }
572                 }
573         },
574         sounds = default.node_sound_leaves_defaults(),
575
576         after_place_node = default.after_place_leaves,
577 })
578
579 minetest.register_node("default:apple", {
580         description = "Apple",
581         drawtype = "plantlike",
582         visual_scale = 1.0,
583         tiles = {"default_apple.png"},
584         inventory_image = "default_apple.png",
585         paramtype = "light",
586         sunlight_propagates = true,
587         walkable = false,
588         is_ground_content = false,
589         selection_box = {
590                 type = "fixed",
591                 fixed = {-3 / 16, -7 / 16, -3 / 16, 3 / 16, 4 / 16, 3 / 16}
592         },
593         groups = {fleshy = 3, dig_immediate = 3, flammable = 2,
594                 leafdecay = 3, leafdecay_drop = 1},
595         on_use = minetest.item_eat(2),
596         sounds = default.node_sound_leaves_defaults(),
597
598         after_place_node = function(pos, placer, itemstack)
599                 if placer:is_player() then
600                         minetest.set_node(pos, {name = "default:apple", param2 = 1})
601                 end
602         end,
603 })
604
605
606 minetest.register_node("default:jungletree", {
607         description = "Jungle Tree",
608         tiles = {"default_jungletree_top.png", "default_jungletree_top.png",
609                 "default_jungletree.png"},
610         paramtype2 = "facedir",
611         is_ground_content = false,
612         groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
613         sounds = default.node_sound_wood_defaults(),
614
615         on_place = minetest.rotate_node
616 })
617
618 minetest.register_node("default:junglewood", {
619         description = "Junglewood Planks",
620         paramtype2 = "facedir",
621         place_param2 = 0,
622         tiles = {"default_junglewood.png"},
623         is_ground_content = false,
624         groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1},
625         sounds = default.node_sound_wood_defaults(),
626 })
627
628 minetest.register_node("default:jungleleaves", {
629         description = "Jungle Leaves",
630         drawtype = "allfaces_optional",
631         waving = 1,
632         tiles = {"default_jungleleaves.png"},
633         special_tiles = {"default_jungleleaves_simple.png"},
634         paramtype = "light",
635         is_ground_content = false,
636         groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
637         drop = {
638                 max_items = 1,
639                 items = {
640                         {items = {'default:junglesapling'}, rarity = 20},
641                         {items = {'default:jungleleaves'}}
642                 }
643         },
644         sounds = default.node_sound_leaves_defaults(),
645
646         after_place_node = default.after_place_leaves,
647 })
648
649 minetest.register_node("default:junglesapling", {
650         description = "Jungle Sapling",
651         drawtype = "plantlike",
652         visual_scale = 1.0,
653         tiles = {"default_junglesapling.png"},
654         inventory_image = "default_junglesapling.png",
655         wield_image = "default_junglesapling.png",
656         paramtype = "light",
657         sunlight_propagates = true,
658         walkable = false,
659         on_timer = default.grow_sapling,
660         selection_box = {
661                 type = "fixed",
662                 fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16}
663         },
664         groups = {snappy = 2, dig_immediate = 3, flammable = 2,
665                 attached_node = 1, sapling = 1},
666         sounds = default.node_sound_leaves_defaults(),
667
668         on_construct = function(pos)
669                 minetest.get_node_timer(pos):start(math.random(2400,4800))
670         end,
671
672         on_place = function(itemstack, placer, pointed_thing)
673                 itemstack = default.sapling_on_place(itemstack, placer, pointed_thing,
674                         "default:junglesapling",
675                         -- minp, maxp to be checked, relative to sapling pos
676                         -- minp_relative.y = 1 because sapling pos has been checked
677                         {x = -2, y = 1, z = -2},
678                         {x = 2, y = 15, z = 2},
679                         -- maximum interval of interior volume check
680                         4)
681
682                 return itemstack
683         end,
684 })
685
686
687 minetest.register_node("default:pine_tree", {
688         description = "Pine Tree",
689         tiles = {"default_pine_tree_top.png", "default_pine_tree_top.png",
690                 "default_pine_tree.png"},
691         paramtype2 = "facedir",
692         is_ground_content = false,
693         groups = {tree = 1, choppy = 3, oddly_breakable_by_hand = 1, flammable = 3},
694         sounds = default.node_sound_wood_defaults(),
695
696         on_place = minetest.rotate_node
697 })
698
699 minetest.register_node("default:pine_wood", {
700         description = "Pine Wood Planks",
701         paramtype2 = "facedir",
702         place_param2 = 0,
703         tiles = {"default_pine_wood.png"},
704         is_ground_content = false,
705         groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3, wood = 1},
706         sounds = default.node_sound_wood_defaults(),
707 })
708
709 minetest.register_node("default:pine_needles",{
710         description = "Pine Needles",
711         drawtype = "allfaces_optional",
712         tiles = {"default_pine_needles.png"},
713         waving = 1,
714         paramtype = "light",
715         is_ground_content = false,
716         groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
717         drop = {
718                 max_items = 1,
719                 items = {
720                         {items = {"default:pine_sapling"}, rarity = 20},
721                         {items = {"default:pine_needles"}}
722                 }
723         },
724         sounds = default.node_sound_leaves_defaults(),
725
726         after_place_node = default.after_place_leaves,
727 })
728
729 minetest.register_node("default:pine_sapling", {
730         description = "Pine Sapling",
731         drawtype = "plantlike",
732         visual_scale = 1.0,
733         tiles = {"default_pine_sapling.png"},
734         inventory_image = "default_pine_sapling.png",
735         wield_image = "default_pine_sapling.png",
736         paramtype = "light",
737         sunlight_propagates = true,
738         walkable = false,
739         on_timer = default.grow_sapling,
740         selection_box = {
741                 type = "fixed",
742                 fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16}
743         },
744         groups = {snappy = 2, dig_immediate = 3, flammable = 3,
745                 attached_node = 1, sapling = 1},
746         sounds = default.node_sound_leaves_defaults(),
747
748         on_construct = function(pos)
749                 minetest.get_node_timer(pos):start(math.random(2400,4800))
750         end,
751
752         on_place = function(itemstack, placer, pointed_thing)
753                 itemstack = default.sapling_on_place(itemstack, placer, pointed_thing,
754                         "default:pine_sapling",
755                         -- minp, maxp to be checked, relative to sapling pos
756                         -- minp_relative.y = 1 because sapling pos has been checked
757                         {x = -2, y = 1, z = -2},
758                         {x = 2, y = 12, z = 2},
759                         -- maximum interval of interior volume check
760                         4)
761
762                 return itemstack
763         end,
764 })
765
766
767 minetest.register_node("default:acacia_tree", {
768         description = "Acacia Tree",
769         tiles = {"default_acacia_tree_top.png", "default_acacia_tree_top.png",
770                 "default_acacia_tree.png"},
771         paramtype2 = "facedir",
772         is_ground_content = false,
773         groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
774         sounds = default.node_sound_wood_defaults(),
775
776         on_place = minetest.rotate_node
777 })
778
779 minetest.register_node("default:acacia_wood", {
780         description = "Acacia Wood Planks",
781         paramtype2 = "facedir",
782         place_param2 = 0,
783         tiles = {"default_acacia_wood.png"},
784         is_ground_content = false,
785         groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1},
786         sounds = default.node_sound_wood_defaults(),
787 })
788
789 minetest.register_node("default:acacia_leaves", {
790         description = "Acacia Leaves",
791         drawtype = "allfaces_optional",
792         tiles = {"default_acacia_leaves.png"},
793         special_tiles = {"default_acacia_leaves_simple.png"},
794         waving = 1,
795         paramtype = "light",
796         is_ground_content = false,
797         groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
798         drop = {
799                 max_items = 1,
800                 items = {
801                         {items = {"default:acacia_sapling"}, rarity = 20},
802                         {items = {"default:acacia_leaves"}}
803                 }
804         },
805         sounds = default.node_sound_leaves_defaults(),
806
807         after_place_node = default.after_place_leaves,
808 })
809
810 minetest.register_node("default:acacia_sapling", {
811         description = "Acacia Tree Sapling",
812         drawtype = "plantlike",
813         visual_scale = 1.0,
814         tiles = {"default_acacia_sapling.png"},
815         inventory_image = "default_acacia_sapling.png",
816         wield_image = "default_acacia_sapling.png",
817         paramtype = "light",
818         sunlight_propagates = true,
819         walkable = false,
820         on_timer = default.grow_sapling,
821         selection_box = {
822                 type = "fixed",
823                 fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16}
824         },
825         groups = {snappy = 2, dig_immediate = 3, flammable = 2,
826                 attached_node = 1, sapling = 1},
827         sounds = default.node_sound_leaves_defaults(),
828
829         on_construct = function(pos)
830                 minetest.get_node_timer(pos):start(math.random(2400,4800))
831         end,
832
833         on_place = function(itemstack, placer, pointed_thing)
834                 itemstack = default.sapling_on_place(itemstack, placer, pointed_thing,
835                         "default:acacia_sapling",
836                         -- minp, maxp to be checked, relative to sapling pos
837                         -- minp_relative.y = 1 because sapling pos has been checked
838                         {x = -4, y = 1, z = -4},
839                         {x = 4, y = 6, z = 4},
840                         -- maximum interval of interior volume check
841                         4)
842
843                 return itemstack
844         end,
845 })
846
847 minetest.register_node("default:aspen_tree", {
848         description = "Aspen Tree",
849         tiles = {"default_aspen_tree_top.png", "default_aspen_tree_top.png",
850                 "default_aspen_tree.png"},
851         paramtype2 = "facedir",
852         is_ground_content = false,
853         groups = {tree = 1, choppy = 3, oddly_breakable_by_hand = 1, flammable = 3},
854         sounds = default.node_sound_wood_defaults(),
855
856         on_place = minetest.rotate_node
857 })
858
859 minetest.register_node("default:aspen_wood", {
860         description = "Aspen Wood Planks",
861         paramtype2 = "facedir",
862         place_param2 = 0,
863         tiles = {"default_aspen_wood.png"},
864         is_ground_content = false,
865         groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3, wood = 1},
866         sounds = default.node_sound_wood_defaults(),
867 })
868
869 minetest.register_node("default:aspen_leaves", {
870         description = "Aspen Leaves",
871         drawtype = "allfaces_optional",
872         tiles = {"default_aspen_leaves.png"},
873         waving = 1,
874         paramtype = "light",
875         is_ground_content = false,
876         groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
877         drop = {
878                 max_items = 1,
879                 items = {
880                         {items = {"default:aspen_sapling"}, rarity = 20},
881                         {items = {"default:aspen_leaves"}}
882                 }
883         },
884         sounds = default.node_sound_leaves_defaults(),
885
886         after_place_node = default.after_place_leaves,
887 })
888
889 minetest.register_node("default:aspen_sapling", {
890         description = "Aspen Tree Sapling",
891         drawtype = "plantlike",
892         visual_scale = 1.0,
893         tiles = {"default_aspen_sapling.png"},
894         inventory_image = "default_aspen_sapling.png",
895         wield_image = "default_aspen_sapling.png",
896         paramtype = "light",
897         sunlight_propagates = true,
898         walkable = false,
899         on_timer = default.grow_sapling,
900         selection_box = {
901                 type = "fixed",
902                 fixed = {-3 / 16, -0.5, -3 / 16, 3 / 16, 0.5, 3 / 16}
903         },
904         groups = {snappy = 2, dig_immediate = 3, flammable = 3,
905                 attached_node = 1, sapling = 1},
906         sounds = default.node_sound_leaves_defaults(),
907
908         on_construct = function(pos)
909                 minetest.get_node_timer(pos):start(math.random(2400,4800))
910         end,
911
912         on_place = function(itemstack, placer, pointed_thing)
913                 itemstack = default.sapling_on_place(itemstack, placer, pointed_thing,
914                         "default:aspen_sapling",
915                         -- minp, maxp to be checked, relative to sapling pos
916                         -- minp_relative.y = 1 because sapling pos has been checked
917                         {x = -2, y = 1, z = -2},
918                         {x = 2, y = 12, z = 2},
919                         -- maximum interval of interior volume check
920                         4)
921
922                 return itemstack
923         end,
924 })
925
926 --
927 -- Ores
928 --
929
930 minetest.register_node("default:stone_with_coal", {
931         description = "Coal Ore",
932         tiles = {"default_stone.png^default_mineral_coal.png"},
933         groups = {cracky = 3},
934         drop = 'default:coal_lump',
935         sounds = default.node_sound_stone_defaults(),
936 })
937
938 minetest.register_node("default:coalblock", {
939         description = "Coal Block",
940         tiles = {"default_coal_block.png"},
941         is_ground_content = false,
942         groups = {cracky = 3},
943         sounds = default.node_sound_stone_defaults(),
944 })
945
946
947 minetest.register_node("default:stone_with_iron", {
948         description = "Iron Ore",
949         tiles = {"default_stone.png^default_mineral_iron.png"},
950         groups = {cracky = 2},
951         drop = 'default:iron_lump',
952         sounds = default.node_sound_stone_defaults(),
953 })
954
955 minetest.register_node("default:steelblock", {
956         description = "Steel Block",
957         tiles = {"default_steel_block.png"},
958         is_ground_content = false,
959         groups = {cracky = 1, level = 2},
960         sounds = default.node_sound_metal_defaults(),
961 })
962
963
964 minetest.register_node("default:stone_with_copper", {
965         description = "Copper Ore",
966         tiles = {"default_stone.png^default_mineral_copper.png"},
967         groups = {cracky = 2},
968         drop = 'default:copper_lump',
969         sounds = default.node_sound_stone_defaults(),
970 })
971
972 minetest.register_node("default:copperblock", {
973         description = "Copper Block",
974         tiles = {"default_copper_block.png"},
975         is_ground_content = false,
976         groups = {cracky = 1, level = 2},
977         sounds = default.node_sound_metal_defaults(),
978 })
979
980 minetest.register_node("default:bronzeblock", {
981         description = "Bronze Block",
982         tiles = {"default_bronze_block.png"},
983         is_ground_content = false,
984         groups = {cracky = 1, level = 2},
985         sounds = default.node_sound_metal_defaults(),
986 })
987
988
989 minetest.register_node("default:stone_with_mese", {
990         description = "Mese Ore",
991         tiles = {"default_stone.png^default_mineral_mese.png"},
992         groups = {cracky = 1},
993         drop = "default:mese_crystal",
994         sounds = default.node_sound_stone_defaults(),
995 })
996
997 minetest.register_node("default:mese", {
998         description = "Mese Block",
999         tiles = {"default_mese_block.png"},
1000         paramtype = "light",
1001         groups = {cracky = 1, level = 2},
1002         sounds = default.node_sound_stone_defaults(),
1003         light_source = 3,
1004 })
1005
1006
1007 minetest.register_node("default:stone_with_gold", {
1008         description = "Gold Ore",
1009         tiles = {"default_stone.png^default_mineral_gold.png"},
1010         groups = {cracky = 2},
1011         drop = "default:gold_lump",
1012         sounds = default.node_sound_stone_defaults(),
1013 })
1014
1015 minetest.register_node("default:goldblock", {
1016         description = "Gold Block",
1017         tiles = {"default_gold_block.png"},
1018         is_ground_content = false,
1019         groups = {cracky = 1},
1020         sounds = default.node_sound_metal_defaults(),
1021 })
1022
1023
1024 minetest.register_node("default:stone_with_diamond", {
1025         description = "Diamond Ore",
1026         tiles = {"default_stone.png^default_mineral_diamond.png"},
1027         groups = {cracky = 1},
1028         drop = "default:diamond",
1029         sounds = default.node_sound_stone_defaults(),
1030 })
1031
1032 minetest.register_node("default:diamondblock", {
1033         description = "Diamond Block",
1034         tiles = {"default_diamond_block.png"},
1035         is_ground_content = false,
1036         groups = {cracky = 1, level = 3},
1037         sounds = default.node_sound_stone_defaults(),
1038 })
1039
1040 --
1041 -- Plantlife (non-cubic)
1042 --
1043
1044 minetest.register_node("default:cactus", {
1045         description = "Cactus",
1046         tiles = {"default_cactus_top.png", "default_cactus_top.png",
1047                 "default_cactus_side.png"},
1048         paramtype2 = "facedir",
1049         groups = {snappy = 1, choppy = 3},
1050         sounds = default.node_sound_wood_defaults(),
1051         on_place = minetest.rotate_node,
1052 })
1053
1054 minetest.register_node("default:papyrus", {
1055         description = "Papyrus",
1056         drawtype = "plantlike",
1057         tiles = {"default_papyrus.png"},
1058         inventory_image = "default_papyrus.png",
1059         wield_image = "default_papyrus.png",
1060         paramtype = "light",
1061         sunlight_propagates = true,
1062         walkable = false,
1063         selection_box = {
1064                 type = "fixed",
1065                 fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 0.5, 6 / 16},
1066         },
1067         groups = {snappy = 3, flammable = 2},
1068         sounds = default.node_sound_leaves_defaults(),
1069
1070         after_dig_node = function(pos, node, metadata, digger)
1071                 default.dig_up(pos, node, digger)
1072         end,
1073 })
1074
1075 minetest.register_node("default:dry_shrub", {
1076         description = "Dry Shrub",
1077         drawtype = "plantlike",
1078         waving = 1,
1079         visual_scale = 1.0,
1080         tiles = {"default_dry_shrub.png"},
1081         inventory_image = "default_dry_shrub.png",
1082         wield_image = "default_dry_shrub.png",
1083         paramtype = "light",
1084         sunlight_propagates = true,
1085         walkable = false,
1086         buildable_to = true,
1087         groups = {snappy = 3, flammable = 3, attached_node = 1},
1088         sounds = default.node_sound_leaves_defaults(),
1089         selection_box = {
1090                 type = "fixed",
1091                 fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 4 / 16, 5 / 16},
1092         },
1093 })
1094
1095 minetest.register_node("default:junglegrass", {
1096         description = "Jungle Grass",
1097         drawtype = "plantlike",
1098         waving = 1,
1099         visual_scale = 1.3,
1100         tiles = {"default_junglegrass.png"},
1101         inventory_image = "default_junglegrass.png",
1102         wield_image = "default_junglegrass.png",
1103         paramtype = "light",
1104         sunlight_propagates = true,
1105         walkable = false,
1106         buildable_to = true,
1107         groups = {snappy = 3, flora = 1, attached_node = 1, grass = 1, flammable = 1},
1108         sounds = default.node_sound_leaves_defaults(),
1109         selection_box = {
1110                 type = "fixed",
1111                 fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, 1.19, 7 / 16},
1112         },
1113 })
1114
1115
1116 minetest.register_node("default:grass_1", {
1117         description = "Grass",
1118         drawtype = "plantlike",
1119         waving = 1,
1120         tiles = {"default_grass_1.png"},
1121         -- Use texture of a taller grass stage in inventory
1122         inventory_image = "default_grass_3.png",
1123         wield_image = "default_grass_3.png",
1124         paramtype = "light",
1125         sunlight_propagates = true,
1126         walkable = false,
1127         buildable_to = true,
1128         groups = {snappy = 3, flora = 1, attached_node = 1, grass = 1, flammable = 1},
1129         sounds = default.node_sound_leaves_defaults(),
1130         selection_box = {
1131                 type = "fixed",
1132                 fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -5 / 16, 6 / 16},
1133         },
1134
1135         on_place = function(itemstack, placer, pointed_thing)
1136                 -- place a random grass node
1137                 local stack = ItemStack("default:grass_" .. math.random(1,5))
1138                 local ret = minetest.item_place(stack, placer, pointed_thing)
1139                 return ItemStack("default:grass_1 " ..
1140                         itemstack:get_count() - (1 - ret:get_count()))
1141         end,
1142 })
1143
1144 for i = 2, 5 do
1145         minetest.register_node("default:grass_" .. i, {
1146                 description = "Grass",
1147                 drawtype = "plantlike",
1148                 waving = 1,
1149                 tiles = {"default_grass_" .. i .. ".png"},
1150                 inventory_image = "default_grass_" .. i .. ".png",
1151                 wield_image = "default_grass_" .. i .. ".png",
1152                 paramtype = "light",
1153                 sunlight_propagates = true,
1154                 walkable = false,
1155                 buildable_to = true,
1156                 drop = "default:grass_1",
1157                 groups = {snappy = 3, flora = 1, attached_node = 1,
1158                         not_in_creative_inventory = 1, grass = 1, flammable = 1},
1159                 sounds = default.node_sound_leaves_defaults(),
1160                 selection_box = {
1161                         type = "fixed",
1162                         fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -3 / 16, 6 / 16},
1163                 },
1164         })
1165 end
1166
1167
1168 minetest.register_node("default:dry_grass_1", {
1169         description = "Dry Grass",
1170         drawtype = "plantlike",
1171         waving = 1,
1172         tiles = {"default_dry_grass_1.png"},
1173         inventory_image = "default_dry_grass_3.png",
1174         wield_image = "default_dry_grass_3.png",
1175         paramtype = "light",
1176         sunlight_propagates = true,
1177         walkable = false,
1178         buildable_to = true,
1179         groups = {snappy = 3, flammable = 3, flora = 1,
1180                 attached_node = 1, dry_grass = 1},
1181         sounds = default.node_sound_leaves_defaults(),
1182         selection_box = {
1183                 type = "fixed",
1184                 fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -3 / 16, 6 / 16},
1185         },
1186
1187         on_place = function(itemstack, placer, pointed_thing)
1188                 -- place a random dry grass node
1189                 local stack = ItemStack("default:dry_grass_" .. math.random(1, 5))
1190                 local ret = minetest.item_place(stack, placer, pointed_thing)
1191                 return ItemStack("default:dry_grass_1 " ..
1192                         itemstack:get_count() - (1 - ret:get_count()))
1193         end,
1194 })
1195
1196 for i = 2, 5 do
1197         minetest.register_node("default:dry_grass_" .. i, {
1198                 description = "Dry Grass",
1199                 drawtype = "plantlike",
1200                 waving = 1,
1201                 tiles = {"default_dry_grass_" .. i .. ".png"},
1202                 inventory_image = "default_dry_grass_" .. i .. ".png",
1203                 wield_image = "default_dry_grass_" .. i .. ".png",
1204                 paramtype = "light",
1205                 sunlight_propagates = true,
1206                 walkable = false,
1207                 buildable_to = true,
1208                 groups = {snappy = 3, flammable = 3, flora = 1, attached_node = 1,
1209                         not_in_creative_inventory=1, dry_grass = 1},
1210                 drop = "default:dry_grass_1",
1211                 sounds = default.node_sound_leaves_defaults(),
1212                 selection_box = {
1213                         type = "fixed",
1214                         fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -1 / 16, 6 / 16},
1215                 },
1216         })
1217 end
1218
1219
1220 minetest.register_node("default:bush_stem", {
1221         description = "Bush Stem",
1222         drawtype = "plantlike",
1223         visual_scale = 1.18,
1224         tiles = {"default_bush_stem.png"},
1225         inventory_image = "default_bush_stem.png",
1226         wield_image = "default_bush_stem.png",
1227         paramtype = "light",
1228         sunlight_propagates = true,
1229         groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
1230         sounds = default.node_sound_wood_defaults(),
1231         selection_box = {
1232                 type = "fixed",
1233                 fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, 0.54, 7 / 16},
1234         },
1235 })
1236
1237 minetest.register_node("default:bush_leaves", {
1238         description = "Bush Leaves",
1239         drawtype = "allfaces_optional",
1240         waving = 1,
1241         tiles = {"default_leaves_simple.png"},
1242         paramtype = "light",
1243         groups = {snappy = 3, flammable = 2, leaves = 1},
1244         sounds = default.node_sound_leaves_defaults(),
1245 })
1246
1247 minetest.register_node("default:acacia_bush_stem", {
1248         description = "Acacia Bush Stem",
1249         drawtype = "plantlike",
1250         visual_scale = 1.18,
1251         tiles = {"default_acacia_bush_stem.png"},
1252         inventory_image = "default_acacia_bush_stem.png",
1253         wield_image = "default_acacia_bush_stem.png",
1254         paramtype = "light",
1255         sunlight_propagates = true,
1256         groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
1257         sounds = default.node_sound_wood_defaults(),
1258         selection_box = {
1259                 type = "fixed",
1260                 fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, 0.54, 7 / 16},
1261         },
1262 })
1263
1264 minetest.register_node("default:acacia_bush_leaves", {
1265         description = "Acacia Bush Leaves",
1266         drawtype = "allfaces_optional",
1267         waving = 1,
1268         tiles = {"default_acacia_leaves_simple.png"},
1269         paramtype = "light",
1270         groups = {snappy = 3, flammable = 2, leaves = 1},
1271         sounds = default.node_sound_leaves_defaults(),
1272 })
1273
1274
1275 --
1276 -- Corals
1277 --
1278
1279 minetest.register_node("default:coral_brown", {
1280         description = "Brown Coral",
1281         tiles = {"default_coral_brown.png"},
1282         groups = {cracky = 3},
1283         drop = "default:coral_skeleton",
1284         sounds = default.node_sound_stone_defaults(),
1285 })
1286
1287 minetest.register_node("default:coral_orange", {
1288         description = "Orange Coral",
1289         tiles = {"default_coral_orange.png"},
1290         groups = {cracky = 3},
1291         drop = "default:coral_skeleton",
1292         sounds = default.node_sound_stone_defaults(),
1293 })
1294
1295 minetest.register_node("default:coral_skeleton", {
1296         description = "Coral Skeleton",
1297         tiles = {"default_coral_skeleton.png"},
1298         groups = {cracky = 3},
1299         sounds = default.node_sound_stone_defaults(),
1300 })
1301
1302
1303 --
1304 -- Liquids
1305 --
1306
1307 minetest.register_node("default:water_source", {
1308         description = "Water Source",
1309         drawtype = "liquid",
1310         tiles = {
1311                 {
1312                         name = "default_water_source_animated.png",
1313                         animation = {
1314                                 type = "vertical_frames",
1315                                 aspect_w = 16,
1316                                 aspect_h = 16,
1317                                 length = 2.0,
1318                         },
1319                 },
1320         },
1321         special_tiles = {
1322                 -- New-style water source material (mostly unused)
1323                 {
1324                         name = "default_water_source_animated.png",
1325                         animation = {
1326                                 type = "vertical_frames",
1327                                 aspect_w = 16,
1328                                 aspect_h = 16,
1329                                 length = 2.0,
1330                         },
1331                         backface_culling = false,
1332                 },
1333         },
1334         alpha = 160,
1335         paramtype = "light",
1336         walkable = false,
1337         pointable = false,
1338         diggable = false,
1339         buildable_to = true,
1340         is_ground_content = false,
1341         drop = "",
1342         drowning = 1,
1343         liquidtype = "source",
1344         liquid_alternative_flowing = "default:water_flowing",
1345         liquid_alternative_source = "default:water_source",
1346         liquid_viscosity = 1,
1347         post_effect_color = {a = 103, r = 30, g = 60, b = 90},
1348         groups = {water = 3, liquid = 3, puts_out_fire = 1},
1349 })
1350
1351 minetest.register_node("default:water_flowing", {
1352         description = "Flowing Water",
1353         drawtype = "flowingliquid",
1354         tiles = {"default_water.png"},
1355         special_tiles = {
1356                 {
1357                         name = "default_water_flowing_animated.png",
1358                         backface_culling = false,
1359                         animation = {
1360                                 type = "vertical_frames",
1361                                 aspect_w = 16,
1362                                 aspect_h = 16,
1363                                 length = 0.8,
1364                         },
1365                 },
1366                 {
1367                         name = "default_water_flowing_animated.png",
1368                         backface_culling = true,
1369                         animation = {
1370                                 type = "vertical_frames",
1371                                 aspect_w = 16,
1372                                 aspect_h = 16,
1373                                 length = 0.8,
1374                         },
1375                 },
1376         },
1377         alpha = 160,
1378         paramtype = "light",
1379         paramtype2 = "flowingliquid",
1380         walkable = false,
1381         pointable = false,
1382         diggable = false,
1383         buildable_to = true,
1384         is_ground_content = false,
1385         drop = "",
1386         drowning = 1,
1387         liquidtype = "flowing",
1388         liquid_alternative_flowing = "default:water_flowing",
1389         liquid_alternative_source = "default:water_source",
1390         liquid_viscosity = 1,
1391         post_effect_color = {a = 103, r = 30, g = 60, b = 90},
1392         groups = {water = 3, liquid = 3, puts_out_fire = 1,
1393                 not_in_creative_inventory = 1},
1394 })
1395
1396
1397 minetest.register_node("default:river_water_source", {
1398         description = "River Water Source",
1399         drawtype = "liquid",
1400         tiles = {
1401                 {
1402                         name = "default_river_water_source_animated.png",
1403                         animation = {
1404                                 type = "vertical_frames",
1405                                 aspect_w = 16,
1406                                 aspect_h = 16,
1407                                 length = 2.0,
1408                         },
1409                 },
1410         },
1411         special_tiles = {
1412                 {
1413                         name = "default_river_water_source_animated.png",
1414                         animation = {
1415                                 type = "vertical_frames",
1416                                 aspect_w = 16,
1417                                 aspect_h = 16,
1418                                 length = 2.0,
1419                         },
1420                         backface_culling = false,
1421                 },
1422         },
1423         alpha = 160,
1424         paramtype = "light",
1425         walkable = false,
1426         pointable = false,
1427         diggable = false,
1428         buildable_to = true,
1429         is_ground_content = false,
1430         drop = "",
1431         drowning = 1,
1432         liquidtype = "source",
1433         liquid_alternative_flowing = "default:river_water_flowing",
1434         liquid_alternative_source = "default:river_water_source",
1435         liquid_viscosity = 1,
1436         liquid_renewable = false,
1437         liquid_range = 2,
1438         post_effect_color = {a = 103, r = 30, g = 76, b = 90},
1439         groups = {water = 3, liquid = 3, puts_out_fire = 1},
1440 })
1441
1442 minetest.register_node("default:river_water_flowing", {
1443         description = "Flowing River Water",
1444         drawtype = "flowingliquid",
1445         tiles = {"default_river_water.png"},
1446         special_tiles = {
1447                 {
1448                         name = "default_river_water_flowing_animated.png",
1449                         backface_culling = false,
1450                         animation = {
1451                                 type = "vertical_frames",
1452                                 aspect_w = 16,
1453                                 aspect_h = 16,
1454                                 length = 0.8,
1455                         },
1456                 },
1457                 {
1458                         name = "default_river_water_flowing_animated.png",
1459                         backface_culling = true,
1460                         animation = {
1461                                 type = "vertical_frames",
1462                                 aspect_w = 16,
1463                                 aspect_h = 16,
1464                                 length = 0.8,
1465                         },
1466                 },
1467         },
1468         alpha = 160,
1469         paramtype = "light",
1470         paramtype2 = "flowingliquid",
1471         walkable = false,
1472         pointable = false,
1473         diggable = false,
1474         buildable_to = true,
1475         is_ground_content = false,
1476         drop = "",
1477         drowning = 1,
1478         liquidtype = "flowing",
1479         liquid_alternative_flowing = "default:river_water_flowing",
1480         liquid_alternative_source = "default:river_water_source",
1481         liquid_viscosity = 1,
1482         liquid_renewable = false,
1483         liquid_range = 2,
1484         post_effect_color = {a = 103, r = 30, g = 76, b = 90},
1485         groups = {water = 3, liquid = 3, puts_out_fire = 1,
1486                 not_in_creative_inventory = 1},
1487 })
1488
1489
1490 minetest.register_node("default:lava_source", {
1491         description = "Lava Source",
1492         drawtype = "liquid",
1493         tiles = {
1494                 {
1495                         name = "default_lava_source_animated.png",
1496                         animation = {
1497                                 type = "vertical_frames",
1498                                 aspect_w = 16,
1499                                 aspect_h = 16,
1500                                 length = 3.0,
1501                         },
1502                 },
1503         },
1504         special_tiles = {
1505                 -- New-style lava source material (mostly unused)
1506                 {
1507                         name = "default_lava_source_animated.png",
1508                         animation = {
1509                                 type = "vertical_frames",
1510                                 aspect_w = 16,
1511                                 aspect_h = 16,
1512                                 length = 3.0,
1513                         },
1514                         backface_culling = false,
1515                 },
1516         },
1517         paramtype = "light",
1518         light_source = default.LIGHT_MAX - 1,
1519         walkable = false,
1520         pointable = false,
1521         diggable = false,
1522         buildable_to = true,
1523         is_ground_content = false,
1524         drop = "",
1525         drowning = 1,
1526         liquidtype = "source",
1527         liquid_alternative_flowing = "default:lava_flowing",
1528         liquid_alternative_source = "default:lava_source",
1529         liquid_viscosity = 7,
1530         liquid_renewable = false,
1531         damage_per_second = 4 * 2,
1532         post_effect_color = {a = 191, r = 255, g = 64, b = 0},
1533         groups = {lava = 3, liquid = 2, igniter = 1},
1534 })
1535
1536 minetest.register_node("default:lava_flowing", {
1537         description = "Flowing Lava",
1538         drawtype = "flowingliquid",
1539         tiles = {"default_lava.png"},
1540         special_tiles = {
1541                 {
1542                         name = "default_lava_flowing_animated.png",
1543                         backface_culling = false,
1544                         animation = {
1545                                 type = "vertical_frames",
1546                                 aspect_w = 16,
1547                                 aspect_h = 16,
1548                                 length = 3.3,
1549                         },
1550                 },
1551                 {
1552                         name = "default_lava_flowing_animated.png",
1553                         backface_culling = true,
1554                         animation = {
1555                                 type = "vertical_frames",
1556                                 aspect_w = 16,
1557                                 aspect_h = 16,
1558                                 length = 3.3,
1559                         },
1560                 },
1561         },
1562         paramtype = "light",
1563         paramtype2 = "flowingliquid",
1564         light_source = default.LIGHT_MAX - 1,
1565         walkable = false,
1566         pointable = false,
1567         diggable = false,
1568         buildable_to = true,
1569         is_ground_content = false,
1570         drop = "",
1571         drowning = 1,
1572         liquidtype = "flowing",
1573         liquid_alternative_flowing = "default:lava_flowing",
1574         liquid_alternative_source = "default:lava_source",
1575         liquid_viscosity = 7,
1576         liquid_renewable = false,
1577         damage_per_second = 4 * 2,
1578         post_effect_color = {a = 191, r = 255, g = 64, b = 0},
1579         groups = {lava = 3, liquid = 2, igniter = 1,
1580                 not_in_creative_inventory = 1},
1581 })
1582
1583 --
1584 -- Tools / "Advanced" crafting / Non-"natural"
1585 --
1586
1587 minetest.register_node("default:torch", {
1588         description = "Torch",
1589         drawtype = "torchlike",
1590         tiles = {
1591                 {
1592                         name = "default_torch_on_floor_animated.png",
1593                         animation = {
1594                                 type = "vertical_frames",
1595                                 aspect_w = 16,
1596                                 aspect_h = 16,
1597                                 length = 3.0
1598                         },
1599                 },
1600                 {
1601                         name="default_torch_on_ceiling_animated.png",
1602                         animation = {
1603                                 type = "vertical_frames",
1604                                 aspect_w = 16,
1605                                 aspect_h = 16,
1606                                 length = 3.0
1607                         },
1608                 },
1609                 {
1610                         name="default_torch_animated.png",
1611                         animation = {
1612                                 type = "vertical_frames",
1613                                 aspect_w = 16,
1614                                 aspect_h = 16,
1615                                 length = 3.0
1616                         },
1617                 },
1618         },
1619         inventory_image = "default_torch_on_floor.png",
1620         wield_image = "default_torch_on_floor.png",
1621         paramtype = "light",
1622         paramtype2 = "wallmounted",
1623         sunlight_propagates = true,
1624         is_ground_content = false,
1625         walkable = false,
1626         light_source = default.LIGHT_MAX - 1,
1627         selection_box = {
1628                 type = "wallmounted",
1629                 wall_top = {-0.1, 0.5 - 0.6, -0.1, 0.1, 0.5, 0.1},
1630                 wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5 + 0.6, 0.1},
1631                 wall_side = {-0.5, -0.3, -0.1, -0.5 + 0.3, 0.3, 0.1},
1632         },
1633         groups = {choppy = 2, dig_immediate = 3, flammable = 1, attached_node = 1},
1634         legacy_wallmounted = true,
1635         sounds = default.node_sound_defaults(),
1636 })
1637
1638
1639 local chest_formspec =
1640         "size[8,9]" ..
1641         default.gui_bg ..
1642         default.gui_bg_img ..
1643         default.gui_slots ..
1644         "list[current_name;main;0,0.3;8,4;]" ..
1645         "list[current_player;main;0,4.85;8,1;]" ..
1646         "list[current_player;main;0,6.08;8,3;8]" ..
1647         "listring[current_name;main]" ..
1648         "listring[current_player;main]" ..
1649         default.get_hotbar_bg(0,4.85)
1650
1651 local function get_locked_chest_formspec(pos)
1652         local spos = pos.x .. "," .. pos.y .. "," .. pos.z
1653         local formspec =
1654                 "size[8,9]" ..
1655                 default.gui_bg ..
1656                 default.gui_bg_img ..
1657                 default.gui_slots ..
1658                 "list[nodemeta:" .. spos .. ";main;0,0.3;8,4;]" ..
1659                 "list[current_player;main;0,4.85;8,1;]" ..
1660                 "list[current_player;main;0,6.08;8,3;8]" ..
1661                 "listring[nodemeta:" .. spos .. ";main]" ..
1662                 "listring[current_player;main]" ..
1663                 default.get_hotbar_bg(0,4.85)
1664  return formspec
1665 end
1666
1667 local function has_locked_chest_privilege(meta, player)
1668         local name = ""
1669         if player then
1670                 if minetest.check_player_privs(player, "protection_bypass") then
1671                         return true
1672                 end
1673                 name = player:get_player_name()
1674         end
1675         if name ~= meta:get_string("owner") then
1676                 return false
1677         end
1678         return true
1679 end
1680
1681 minetest.register_node("default:chest", {
1682         description = "Chest",
1683         tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
1684                 "default_chest_side.png", "default_chest_side.png", "default_chest_front.png"},
1685         paramtype2 = "facedir",
1686         groups = {choppy = 2, oddly_breakable_by_hand = 2},
1687         legacy_facedir_simple = true,
1688         is_ground_content = false,
1689         sounds = default.node_sound_wood_defaults(),
1690
1691         on_construct = function(pos)
1692                 local meta = minetest.get_meta(pos)
1693                 meta:set_string("formspec", chest_formspec)
1694                 local inv = meta:get_inventory()
1695                 inv:set_size("main", 8*4)
1696         end,
1697         can_dig = function(pos,player)
1698                 local meta = minetest.get_meta(pos);
1699                 local inv = meta:get_inventory()
1700                 return inv:is_empty("main")
1701         end,
1702         on_metadata_inventory_move = function(pos, from_list, from_index,
1703                         to_list, to_index, count, player)
1704                 minetest.log("action", player:get_player_name() ..
1705                         " moves stuff in chest at " .. minetest.pos_to_string(pos))
1706         end,
1707     on_metadata_inventory_put = function(pos, listname, index, stack, player)
1708                 minetest.log("action", player:get_player_name() ..
1709                         " moves " .. stack:get_name() ..
1710                         " to chest at " .. minetest.pos_to_string(pos))
1711         end,
1712     on_metadata_inventory_take = function(pos, listname, index, stack, player)
1713                 minetest.log("action", player:get_player_name() ..
1714                         " takes " .. stack:get_name() ..
1715                         " from chest at " .. minetest.pos_to_string(pos))
1716         end,
1717         on_blast = function(pos)
1718                 local drops = {}
1719                 default.get_inventory_drops(pos, "main", drops)
1720                 drops[#drops+1] = "default:chest"
1721                 minetest.remove_node(pos)
1722                 return drops
1723         end,
1724 })
1725
1726 minetest.register_node("default:chest_locked", {
1727         description = "Locked Chest",
1728         tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
1729                 "default_chest_side.png", "default_chest_side.png", "default_chest_lock.png"},
1730         paramtype2 = "facedir",
1731         groups = {choppy = 2, oddly_breakable_by_hand = 2},
1732         legacy_facedir_simple = true,
1733         is_ground_content = false,
1734         sounds = default.node_sound_wood_defaults(),
1735
1736         after_place_node = function(pos, placer)
1737                 local meta = minetest.get_meta(pos)
1738                 meta:set_string("owner", placer:get_player_name() or "")
1739                 meta:set_string("infotext", "Locked Chest (owned by " ..
1740                                 meta:get_string("owner") .. ")")
1741         end,
1742         on_construct = function(pos)
1743                 local meta = minetest.get_meta(pos)
1744                 meta:set_string("owner", "")
1745                 local inv = meta:get_inventory()
1746                 inv:set_size("main", 8 * 4)
1747         end,
1748         can_dig = function(pos,player)
1749                 local meta = minetest.get_meta(pos);
1750                 local inv = meta:get_inventory()
1751                 return inv:is_empty("main") and has_locked_chest_privilege(meta, player)
1752         end,
1753         allow_metadata_inventory_move = function(pos, from_list, from_index,
1754                         to_list, to_index, count, player)
1755                 local meta = minetest.get_meta(pos)
1756                 if not has_locked_chest_privilege(meta, player) then
1757                         return 0
1758                 end
1759                 return count
1760         end,
1761     allow_metadata_inventory_put = function(pos, listname, index, stack, player)
1762                 local meta = minetest.get_meta(pos)
1763                 if not has_locked_chest_privilege(meta, player) then
1764                         return 0
1765                 end
1766                 return stack:get_count()
1767         end,
1768     allow_metadata_inventory_take = function(pos, listname, index, stack, player)
1769                 local meta = minetest.get_meta(pos)
1770                 if not has_locked_chest_privilege(meta, player) then
1771                         return 0
1772                 end
1773                 return stack:get_count()
1774         end,
1775     on_metadata_inventory_put = function(pos, listname, index, stack, player)
1776                 minetest.log("action", player:get_player_name() ..
1777                         " moves " .. stack:get_name() ..
1778                         " to locked chest at " .. minetest.pos_to_string(pos))
1779         end,
1780     on_metadata_inventory_take = function(pos, listname, index, stack, player)
1781                 minetest.log("action", player:get_player_name() ..
1782                         " takes " .. stack:get_name()  ..
1783                         " from locked chest at " .. minetest.pos_to_string(pos))
1784         end,
1785         on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
1786                 local meta = minetest.get_meta(pos)
1787                 if has_locked_chest_privilege(meta, clicker) then
1788                         minetest.show_formspec(
1789                                 clicker:get_player_name(),
1790                                 "default:chest_locked",
1791                                 get_locked_chest_formspec(pos)
1792                         )
1793                 end
1794                 return itemstack
1795         end,
1796         on_blast = function() end,
1797 })
1798
1799
1800 local bookshelf_formspec =
1801         "size[8,7;]" ..
1802         default.gui_bg ..
1803         default.gui_bg_img ..
1804         default.gui_slots ..
1805         "list[context;books;0,0.3;8,2;]" ..
1806         "list[current_player;main;0,2.85;8,1;]" ..
1807         "list[current_player;main;0,4.08;8,3;8]" ..
1808         "listring[context;books]" ..
1809         "listring[current_player;main]" ..
1810         default.get_hotbar_bg(0,2.85)
1811
1812 -- Inventory slots overlay
1813 local bx, by = 0, 0.3
1814 for i = 1, 16 do
1815         if i == 9 then
1816                 bx = 0
1817                 by = by + 1
1818         end
1819         bookshelf_formspec = bookshelf_formspec ..
1820                 "image[" .. bx .. "," .. by .. ";1,1;default_bookshelf_slot.png]"
1821         bx = bx + 1
1822 end
1823
1824 minetest.register_node("default:bookshelf", {
1825         description = "Bookshelf",
1826         tiles = {"default_wood.png", "default_wood.png", "default_wood.png",
1827                 "default_wood.png", "default_bookshelf.png", "default_bookshelf.png"},
1828         paramtype2 = "facedir",
1829         is_ground_content = false,
1830         groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3},
1831         sounds = default.node_sound_wood_defaults(),
1832
1833         on_construct = function(pos)
1834                 local meta = minetest.get_meta(pos)
1835                 meta:set_string("formspec", bookshelf_formspec)
1836                 local inv = meta:get_inventory()
1837                 inv:set_size("books", 8 * 2)
1838         end,
1839         can_dig = function(pos,player)
1840                 local inv = minetest.get_meta(pos):get_inventory()
1841                 return inv:is_empty("books")
1842         end,
1843         allow_metadata_inventory_put = function(pos, listname, index, stack)
1844                 if minetest.get_item_group(stack:get_name(), "book") ~= 0 then
1845                         return stack:get_count()
1846                 end
1847                 return 0
1848         end,
1849         on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
1850                 minetest.log("action", player:get_player_name() ..
1851                         " moves stuff in bookshelf at " .. minetest.pos_to_string(pos))
1852         end,
1853         on_metadata_inventory_put = function(pos, listname, index, stack, player)
1854                 minetest.log("action", player:get_player_name() ..
1855                         " moves stuff to bookshelf at " .. minetest.pos_to_string(pos))
1856         end,
1857         on_metadata_inventory_take = function(pos, listname, index, stack, player)
1858                 minetest.log("action", player:get_player_name() ..
1859                         " takes stuff from bookshelf at " .. minetest.pos_to_string(pos))
1860         end,
1861         on_blast = function(pos)
1862                 local drops = {}
1863                 default.get_inventory_drops(pos, "books", drops)
1864                 drops[#drops+1] = "default:bookshelf"
1865                 minetest.remove_node(pos)
1866                 return drops
1867         end,
1868 })
1869
1870 local function register_sign(material, desc, def)
1871         minetest.register_node("default:sign_wall_" .. material, {
1872                 description = desc .. " Sign",
1873                 drawtype = "nodebox",
1874                 tiles = {"default_sign_wall_" .. material .. ".png"},
1875                 inventory_image = "default_sign_" .. material .. ".png",
1876                 wield_image = "default_sign_" .. material .. ".png",
1877                 paramtype = "light",
1878                 paramtype2 = "wallmounted",
1879                 sunlight_propagates = true,
1880                 is_ground_content = false,
1881                 walkable = false,
1882                 node_box = {
1883                         type = "wallmounted",
1884                         wall_top    = {-0.4375, 0.4375, -0.3125, 0.4375, 0.5, 0.3125},
1885                         wall_bottom = {-0.4375, -0.5, -0.3125, 0.4375, -0.4375, 0.3125},
1886                         wall_side   = {-0.5, -0.3125, -0.4375, -0.4375, 0.3125, 0.4375},
1887                 },
1888                 groups = def.groups,
1889                 legacy_wallmounted = true,
1890                 sounds = def.sounds,
1891
1892                 on_construct = function(pos)
1893                         --local n = minetest.get_node(pos)
1894                         local meta = minetest.get_meta(pos)
1895                         meta:set_string("formspec", "field[text;;${text}]")
1896                 end,
1897                 on_receive_fields = function(pos, formname, fields, sender)
1898                         --print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields))
1899                         local player_name = sender:get_player_name()
1900                         if minetest.is_protected(pos, player_name) then
1901                                 minetest.record_protection_violation(pos, player_name)
1902                                 return
1903                         end
1904                         local meta = minetest.get_meta(pos)
1905                         if not fields.text then return end
1906                         minetest.log("action", (player_name or "") .. " wrote \"" ..
1907                                 fields.text .. "\" to sign at " .. minetest.pos_to_string(pos))
1908                         meta:set_string("text", fields.text)
1909                         meta:set_string("infotext", '"' .. fields.text .. '"')
1910                 end,
1911         })
1912 end
1913
1914 register_sign("wood", "Wooden", {
1915         sounds = default.node_sound_wood_defaults(),
1916         groups = {choppy = 2, attached_node = 1, flammable = 2, oddly_breakable_by_hand = 3}
1917 })
1918
1919 register_sign("steel", "Steel", {
1920         sounds = default.node_sound_metal_defaults(),
1921         groups = {cracky = 2, attached_node = 1}
1922 })
1923
1924 minetest.register_node("default:ladder_wood", {
1925         description = "Wooden Ladder",
1926         drawtype = "signlike",
1927         tiles = {"default_ladder_wood.png"},
1928         inventory_image = "default_ladder_wood.png",
1929         wield_image = "default_ladder_wood.png",
1930         paramtype = "light",
1931         paramtype2 = "wallmounted",
1932         sunlight_propagates = true,
1933         walkable = false,
1934         climbable = true,
1935         is_ground_content = false,
1936         selection_box = {
1937                 type = "wallmounted",
1938                 --wall_top = = <default>
1939                 --wall_bottom = = <default>
1940                 --wall_side = = <default>
1941         },
1942         groups = {choppy = 2, oddly_breakable_by_hand = 3, flammable = 2},
1943         legacy_wallmounted = true,
1944         sounds = default.node_sound_wood_defaults(),
1945 })
1946
1947 minetest.register_node("default:ladder_steel", {
1948         description = "Steel Ladder",
1949         drawtype = "signlike",
1950         tiles = {"default_ladder_steel.png"},
1951         inventory_image = "default_ladder_steel.png",
1952         wield_image = "default_ladder_steel.png",
1953         paramtype = "light",
1954         paramtype2 = "wallmounted",
1955         sunlight_propagates = true,
1956         walkable = false,
1957         climbable = true,
1958         is_ground_content = false,
1959         selection_box = {
1960                 type = "wallmounted",
1961                 --wall_top = = <default>
1962                 --wall_bottom = = <default>
1963                 --wall_side = = <default>
1964         },
1965         groups = {cracky = 2},
1966         sounds = default.node_sound_metal_defaults(),
1967 })
1968
1969 default.register_fence("default:fence_wood", {
1970         description = "Wooden Fence",
1971         texture = "default_fence_wood.png",
1972         inventory_image = "default_fence_overlay.png^default_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
1973         wield_image = "default_fence_overlay.png^default_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
1974         material = "default:wood",
1975         groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
1976         sounds = default.node_sound_wood_defaults()
1977 })
1978
1979 default.register_fence("default:fence_acacia_wood", {
1980         description = "Acacia Fence",
1981         texture = "default_fence_acacia_wood.png",
1982         inventory_image = "default_fence_overlay.png^default_acacia_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
1983         wield_image = "default_fence_overlay.png^default_acacia_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
1984         material = "default:acacia_wood",
1985         groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
1986         sounds = default.node_sound_wood_defaults()
1987 })
1988
1989 default.register_fence("default:fence_junglewood", {
1990         description = "Junglewood Fence",
1991         texture = "default_fence_junglewood.png",
1992         inventory_image = "default_fence_overlay.png^default_junglewood.png^default_fence_overlay.png^[makealpha:255,126,126",
1993         wield_image = "default_fence_overlay.png^default_junglewood.png^default_fence_overlay.png^[makealpha:255,126,126",
1994         material = "default:junglewood",
1995         groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
1996         sounds = default.node_sound_wood_defaults()
1997 })
1998
1999 default.register_fence("default:fence_pine_wood", {
2000         description = "Pine Fence",
2001         texture = "default_fence_pine_wood.png",
2002         inventory_image = "default_fence_overlay.png^default_pine_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
2003         wield_image = "default_fence_overlay.png^default_pine_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
2004         material = "default:pine_wood",
2005         groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3},
2006         sounds = default.node_sound_wood_defaults()
2007 })
2008
2009 default.register_fence("default:fence_aspen_wood", {
2010         description = "Aspen Fence",
2011         texture = "default_fence_aspen_wood.png",
2012         inventory_image = "default_fence_overlay.png^default_aspen_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
2013         wield_image = "default_fence_overlay.png^default_aspen_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
2014         material = "default:aspen_wood",
2015         groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3},
2016         sounds = default.node_sound_wood_defaults()
2017 })
2018
2019 minetest.register_node("default:glass", {
2020         description = "Glass",
2021         drawtype = "glasslike_framed_optional",
2022         tiles = {"default_glass.png", "default_glass_detail.png"},
2023         paramtype = "light",
2024         sunlight_propagates = true,
2025         is_ground_content = false,
2026         groups = {cracky = 3, oddly_breakable_by_hand = 3},
2027         sounds = default.node_sound_glass_defaults(),
2028 })
2029
2030 minetest.register_node("default:obsidian_glass", {
2031         description = "Obsidian Glass",
2032         drawtype = "glasslike_framed_optional",
2033         tiles = {"default_obsidian_glass.png", "default_obsidian_glass_detail.png"},
2034         paramtype = "light",
2035         is_ground_content = false,
2036         sunlight_propagates = true,
2037         sounds = default.node_sound_glass_defaults(),
2038         groups = {cracky = 3},
2039 })
2040
2041
2042 minetest.register_node("default:rail", {
2043         description = "Rail",
2044         drawtype = "raillike",
2045         tiles = {"default_rail.png", "default_rail_curved.png",
2046                 "default_rail_t_junction.png", "default_rail_crossing.png"},
2047         inventory_image = "default_rail.png",
2048         wield_image = "default_rail.png",
2049         paramtype = "light",
2050         sunlight_propagates = true,
2051         walkable = false,
2052         is_ground_content = false,
2053         selection_box = {
2054                 type = "fixed",
2055                 -- but how to specify the dimensions for curved and sideways rails?
2056                 fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
2057         },
2058         groups = {dig_immediate = 2, attached_node = 1,
2059                 connect_to_raillike = minetest.raillike_group("rail")},
2060 })
2061
2062
2063 minetest.register_node("default:brick", {
2064         description = "Brick Block",
2065         paramtype2 = "facedir",
2066         place_param2 = 0,
2067         tiles = {"default_brick.png"},
2068         is_ground_content = false,
2069         groups = {cracky = 3},
2070         sounds = default.node_sound_stone_defaults(),
2071 })
2072
2073
2074 minetest.register_node("default:meselamp", {
2075         description = "Mese Lamp",
2076         drawtype = "glasslike",
2077         tiles = {"default_meselamp.png"},
2078         paramtype = "light",
2079         sunlight_propagates = true,
2080         is_ground_content = false,
2081         groups = {cracky = 3, oddly_breakable_by_hand = 3},
2082         sounds = default.node_sound_glass_defaults(),
2083         light_source = default.LIGHT_MAX,
2084 })
2085
2086 --
2087 -- Misc
2088 --
2089
2090 minetest.register_node("default:cloud", {
2091         description = "Cloud",
2092         tiles = {"default_cloud.png"},
2093         is_ground_content = false,
2094         sounds = default.node_sound_defaults(),
2095         groups = {not_in_creative_inventory = 1},
2096 })