754b650499b2717eb922b1523406468d4c2b982f
[oweals/minetest_game.git] / mods / default / nodes.lua
1 -- mods/default/nodes.lua
2
3 --[[ Index:
4
5 Stone
6 -----
7 (1. Material 2. Cobble variant 3. Brick variant [4. Modified forms])
8
9 default:stone
10 default:cobble
11 default:stonebrick
12 default:mossycobble
13
14 default:desert_stone
15 default:desert_cobble
16 default:desert_stonebrick
17
18 default:sandstone
19 default:sandstonebrick
20
21 default:obsidian
22 default:obsidianbrick
23
24 Soft / Non-Stone
25 ----------------
26 (1. Material [2. Modified forms])
27
28 default:dirt
29 default:dirt_with_grass
30 default:dirt_with_grass_footsteps
31 default:dirt_with_snow
32
33 default:sand
34 default:desert_sand
35
36 default:gravel
37
38 default:clay
39
40 default:snow
41 default:snowblock
42
43 default:ice
44
45 Trees
46 -----
47 (1. Trunk 2. Fabricated trunk 3. Leaves 4. Sapling [5. Fruits])
48
49 default:tree
50 default:wood
51 default:leaves
52 default:sapling
53 default:apple
54
55 default:jungletree
56 default:junglewood
57 default:jungleleaves
58 default:junglesapling
59
60 default:pinetree
61 default:pinewood
62 default:pine_needles
63 default:pine_sapling
64
65 Ores
66 ----
67 (1. In stone 2. Block)
68
69 default:stone_with_coal
70 default:coalblock
71
72 default:stone_with_iron
73 default:steelblock
74
75 default:stone_with_copper
76 default:copperblock
77 default:bronzeblock
78
79 default:stone_with_gold
80 default:goldblock
81
82 default:stone_with_mese
83 default:mese
84
85 default:stone_with_diamond
86 default:diamondblock
87
88 Plantlife (non-cubic)
89 ---------------------
90 default:cactus
91 default:papyrus
92 default:dry_shrub
93 default:junglegrass
94 default:grass_1
95 default:grass_2
96 default:grass_3
97 default:grass_4
98 default:grass_5
99
100 Liquids
101 -------
102 (1. Source 2. Flowing)
103
104 default:water_source
105 default:water_flowing
106
107 default:lava_source
108 default:lava_flowing
109
110 Tools / "Advanced" crafting / Non-"natural"
111 -------------------------------------------
112 default:torch
113
114 default:chest
115 default:chest_locked
116
117 default:bookshelf
118
119 default:sign_wall
120 default:ladder
121 default:fence_wood
122
123 default:glass
124 default:obsidian_glass
125
126 default:rail
127
128 default:brick
129
130 default:meselamp
131
132 Misc
133 ----
134 default:cloud
135 default:nyancat
136 default:nyancat_rainbow
137
138 --]]
139
140 --
141 -- Stone
142 --
143
144 minetest.register_node("default:stone", {
145         description = "Stone",
146         tiles = {"default_stone.png"},
147         is_ground_content = true,
148         groups = {cracky=3, stone=1},
149         drop = 'default:cobble',
150         legacy_mineral = true,
151         sounds = default.node_sound_stone_defaults(),
152 })
153
154 minetest.register_node("default:cobble", {
155         description = "Cobblestone",
156         tiles = {"default_cobble.png"},
157         is_ground_content = true,
158         groups = {cracky=3, stone=2},
159         sounds = default.node_sound_stone_defaults(),
160 })
161
162 minetest.register_node("default:stonebrick", {
163         description = "Stone Brick",
164         tiles = {"default_stone_brick.png"},
165         groups = {cracky=2, stone=1},
166         sounds = default.node_sound_stone_defaults(),
167 })
168
169 minetest.register_node("default:mossycobble", {
170         description = "Mossy Cobblestone",
171         tiles = {"default_mossycobble.png"},
172         is_ground_content = true,
173         groups = {cracky=3, stone=1},
174         sounds = default.node_sound_stone_defaults(),
175 })
176
177
178
179 minetest.register_node("default:desert_stone", {
180         description = "Desert Stone",
181         tiles = {"default_desert_stone.png"},
182         is_ground_content = true,
183         groups = {cracky=3, stone=1},
184         drop = 'default:desert_cobble',
185         legacy_mineral = true,
186         sounds = default.node_sound_stone_defaults(),
187 })
188
189 minetest.register_node("default:desert_cobble", {
190         description = "Desert Cobblestone",
191         tiles = {"default_desert_cobble.png"},
192         is_ground_content = true,
193         groups = {cracky=3, stone=2},
194         sounds = default.node_sound_stone_defaults(),
195 })
196
197 minetest.register_node("default:desert_stonebrick", {
198         description = "Desert Stone Brick",
199         tiles = {"default_desert_stone_brick.png"},
200         groups = {cracky=2, stone=1},
201         sounds = default.node_sound_stone_defaults(),
202 })
203
204
205
206 minetest.register_node("default:sandstone", {
207         description = "Sandstone",
208         tiles = {"default_sandstone.png"},
209         is_ground_content = true,
210         groups = {crumbly=2,cracky=3},
211         sounds = default.node_sound_stone_defaults(),
212 })
213
214 minetest.register_node("default:sandstonebrick", {
215         description = "Sandstone Brick",
216         tiles = {"default_sandstone_brick.png"},
217         is_ground_content = true,
218         groups = {cracky=2},
219         sounds = default.node_sound_stone_defaults(),
220 })
221
222
223
224 minetest.register_node("default:obsidian", {
225         description = "Obsidian",
226         tiles = {"default_obsidian.png"},
227         is_ground_content = true,
228         sounds = default.node_sound_stone_defaults(),
229         groups = {cracky=1,level=2},
230 })
231
232 minetest.register_node("default:obsidianbrick", {
233         description = "Obsidian Brick",
234         tiles = {"default_obsidian_brick.png"},
235         sounds = default.node_sound_stone_defaults(),
236         groups = {cracky=1,level=2},
237 })
238
239 --
240 -- Soft / Non-Stone
241 --
242
243 minetest.register_node("default:dirt", {
244         description = "Dirt",
245         tiles = {"default_dirt.png"},
246         is_ground_content = true,
247         groups = {crumbly=3,soil=1},
248         sounds = default.node_sound_dirt_defaults(),
249 })
250
251 minetest.register_node("default:dirt_with_grass", {
252         description = "Dirt with Grass",
253         tiles = {"default_grass.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
254         is_ground_content = true,
255         groups = {crumbly=3,soil=1},
256         drop = 'default:dirt',
257         sounds = default.node_sound_dirt_defaults({
258                 footstep = {name="default_grass_footstep", gain=0.25},
259         }),
260 })
261
262 minetest.register_node("default:dirt_with_grass_footsteps", {
263         description = "Dirt with Grass and Footsteps",
264         tiles = {"default_grass_footsteps.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
265         is_ground_content = true,
266         groups = {crumbly=3,soil=1,not_in_creative_inventory=1},
267         drop = 'default:dirt',
268         sounds = default.node_sound_dirt_defaults({
269                 footstep = {name="default_grass_footstep", gain=0.25},
270         }),
271 })
272
273 minetest.register_node("default:dirt_with_snow", {
274         description = "Dirt with Snow",
275         tiles = {"default_snow.png", "default_dirt.png", "default_dirt.png^default_snow_side.png"},
276         is_ground_content = true,
277         groups = {crumbly=3,soil=1},
278         drop = 'default:dirt',
279         sounds = default.node_sound_dirt_defaults({
280                 footstep = {name="default_snow_footstep", gain=0.25},
281         }),
282 })
283
284
285
286 minetest.register_node("default:sand", {
287         description = "Sand",
288         tiles = {"default_sand.png"},
289         is_ground_content = true,
290         groups = {crumbly=3, falling_node=1, sand=1},
291         sounds = default.node_sound_sand_defaults(),
292 })
293
294 minetest.register_node("default:desert_sand", {
295         description = "Desert Sand",
296         tiles = {"default_desert_sand.png"},
297         is_ground_content = true,
298         groups = {crumbly=3, falling_node=1, sand=1},
299         sounds = default.node_sound_sand_defaults(),
300 })
301
302
303
304 minetest.register_node("default:gravel", {
305         description = "Gravel",
306         tiles = {"default_gravel.png"},
307         is_ground_content = true,
308         groups = {crumbly=2, falling_node=1},
309         sounds = default.node_sound_dirt_defaults({
310                 footstep = {name="default_gravel_footstep", gain=0.5},
311                 dug = {name="default_gravel_footstep", gain=1.0},
312         }),
313 })
314
315
316
317 minetest.register_node("default:clay", {
318         description = "Clay",
319         tiles = {"default_clay.png"},
320         is_ground_content = true,
321         groups = {crumbly=3},
322         drop = 'default:clay_lump 4',
323         sounds = default.node_sound_dirt_defaults(),
324 })
325
326
327
328 minetest.register_node("default:snow", {
329         description = "Snow",
330         tiles = {"default_snow.png"},
331         inventory_image = "default_snowball.png",
332         wield_image = "default_snowball.png",
333         is_ground_content = true,
334         paramtype = "light",
335         buildable_to = true,
336         drawtype = "nodebox",
337         node_box = {
338                 type = "fixed",
339                 fixed = {
340                         {-0.5, -0.5, -0.5,  0.5, -0.5+2/16, 0.5},
341                 },
342         },
343         groups = {crumbly=3,falling_node=1},
344         sounds = default.node_sound_dirt_defaults({
345                 footstep = {name="default_snow_footstep", gain=0.25},
346                 dug = {name="default_snow_footstep", gain=0.75},
347         }),
348
349         on_construct = function(pos)
350                 pos.y = pos.y - 1
351                 if minetest.get_node(pos).name == "default:dirt_with_grass" then
352                         minetest.set_node(pos, {name="default:dirt_with_snow"})
353                 end
354         end,
355 })
356
357
358 minetest.register_node("default:snowblock", {
359         description = "Snow Block",
360         tiles = {"default_snow.png"},
361         is_ground_content = true,
362         groups = {crumbly=3},
363         sounds = default.node_sound_dirt_defaults({
364                 footstep = {name="default_snow_footstep", gain=0.25},
365                 dug = {name="default_snow_footstep", gain=0.75},
366         }),
367 })
368
369
370
371 minetest.register_node("default:ice", {
372         description = "Ice",
373         tiles = {"default_ice.png"},
374         is_ground_content = false,
375         paramtype = "light",
376         groups = {cracky=3},
377         sounds = default.node_sound_glass_defaults(),
378 })
379
380 --
381 -- Trees
382 --
383
384 minetest.register_node("default:tree", {
385         description = "Tree",
386         tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"},
387         paramtype2 = "facedir",
388         is_ground_content = false,
389         groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
390         sounds = default.node_sound_wood_defaults(),
391
392         on_place = minetest.rotate_node
393 })
394
395 minetest.register_node("default:wood", {
396         description = "Wooden Planks",
397         tiles = {"default_wood.png"},
398         groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
399         sounds = default.node_sound_wood_defaults(),
400 })
401
402 minetest.register_node("default:sapling", {
403         description = "Sapling",
404         drawtype = "plantlike",
405         visual_scale = 1.0,
406         tiles = {"default_sapling.png"},
407         inventory_image = "default_sapling.png",
408         wield_image = "default_sapling.png",
409         paramtype = "light",
410         walkable = false,
411         is_ground_content = true,
412         selection_box = {
413                 type = "fixed",
414                 fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
415         },
416         groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1,sapling=1},
417         sounds = default.node_sound_leaves_defaults(),
418 })
419
420 minetest.register_node("default:leaves", {
421         description = "Leaves",
422         drawtype = "allfaces_optional",
423         waving = 1,
424         visual_scale = 1.3,
425         tiles = {"default_leaves.png"},
426         paramtype = "light",
427         is_ground_content = false,
428         groups = {snappy=3, leafdecay=3, flammable=2, leaves=1},
429         drop = {
430                 max_items = 1,
431                 items = {
432                         {
433                                 -- player will get sapling with 1/20 chance
434                                 items = {'default:sapling'},
435                                 rarity = 20,
436                         },
437                         {
438                                 -- player will get leaves only if he get no saplings,
439                                 -- this is because max_items is 1
440                                 items = {'default:leaves'},
441                         }
442                 }
443         },
444         sounds = default.node_sound_leaves_defaults(),
445
446         after_place_node = default.after_place_leaves,
447 })
448
449 minetest.register_node("default:apple", {
450         description = "Apple",
451         drawtype = "plantlike",
452         visual_scale = 1.0,
453         tiles = {"default_apple.png"},
454         inventory_image = "default_apple.png",
455         paramtype = "light",
456         sunlight_propagates = true,
457         walkable = false,
458         is_ground_content = true,
459         selection_box = {
460                 type = "fixed",
461                 fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2}
462         },
463         groups = {fleshy=3,dig_immediate=3,flammable=2,leafdecay=3,leafdecay_drop=1},
464         on_use = minetest.item_eat(1),
465         sounds = default.node_sound_leaves_defaults(),
466
467         after_place_node = function(pos, placer, itemstack)
468                 if placer:is_player() then
469                         minetest.set_node(pos, {name="default:apple", param2=1})
470                 end
471         end,
472 })
473
474
475
476 minetest.register_node("default:jungletree", {
477         description = "Jungle Tree",
478         tiles = {"default_jungletree_top.png", "default_jungletree_top.png", "default_jungletree.png"},
479         paramtype2 = "facedir",
480         is_ground_content = false,
481         groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
482         sounds = default.node_sound_wood_defaults(),
483
484         on_place = minetest.rotate_node
485 })
486
487 minetest.register_node("default:junglewood", {
488         description = "Junglewood Planks",
489         tiles = {"default_junglewood.png"},
490         groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
491         sounds = default.node_sound_wood_defaults(),
492 })
493
494 minetest.register_node("default:jungleleaves", {
495         description = "Jungle Leaves",
496         drawtype = "allfaces_optional",
497         waving = 1,
498         visual_scale = 1.3,
499         tiles = {"default_jungleleaves.png"},
500         paramtype = "light",
501         is_ground_content = false,
502         groups = {snappy=3, leafdecay=3, flammable=2, leaves=1},
503         drop = {
504                 max_items = 1,
505                 items = {
506                         {
507                                 -- player will get sapling with 1/20 chance
508                                 items = {'default:junglesapling'},
509                                 rarity = 20,
510                         },
511                         {
512                                 -- player will get leaves only if he get no saplings,
513                                 -- this is because max_items is 1
514                                 items = {'default:jungleleaves'},
515                         }
516                 }
517         },
518         sounds = default.node_sound_leaves_defaults(),
519
520         after_place_node = default.after_place_leaves,
521 })
522
523 minetest.register_node("default:junglesapling", {
524         description = "Jungle Sapling",
525         drawtype = "plantlike",
526         visual_scale = 1.0,
527         tiles = {"default_junglesapling.png"},
528         inventory_image = "default_junglesapling.png",
529         wield_image = "default_junglesapling.png",
530         paramtype = "light",
531         walkable = false,
532         selection_box = {
533                 type = "fixed",
534                 fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
535         },
536         groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1,sapling=1},
537         sounds = default.node_sound_leaves_defaults(),
538 })
539
540
541
542 minetest.register_node("default:pinetree", {
543         description = "Pine Tree",
544         tiles = {"default_pinetree_top.png", "default_pinetree_top.png", "default_pinetree.png"},
545         paramtype2 = "facedir",
546         is_ground_content = false,
547         groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
548         sounds = default.node_sound_wood_defaults(),
549
550         on_place = minetest.rotate_node
551 })
552
553 minetest.register_node("default:pinewood", {
554         description = "Pinewood Planks",
555         tiles = {"default_pinewood.png"},
556         groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
557         sounds = default.node_sound_wood_defaults(),
558 })
559
560 minetest.register_node("default:pine_needles",{
561         description = "Pine Needles",
562         drawtype = "allfaces_optional",
563         visual_scale = 1.3,
564         tiles = {"default_pine_needles.png"},
565         waving = 1,
566         paramtype = "light",
567         is_ground_content = false,
568         groups = {snappy=3, leafdecay=3, flammable=2, leaves=1},
569         drop = {
570                 max_items = 1,
571                 items = {
572                         {
573                                 -- player will get sapling with 1/20 chance
574                                 items = {"default:pine_sapling"},
575                                 rarity = 20,
576                         },
577                         {
578                                 -- player will get leaves only if he get no saplings,
579                                 -- this is because max_items is 1
580                                 items = {"default:pine_needles"},
581                         }
582                 }
583         },
584         sounds = default.node_sound_leaves_defaults(),
585
586         after_place_node = default.after_place_leaves,
587 })
588
589 minetest.register_node("default:pine_sapling", {
590         description = "Pine Sapling",
591         drawtype = "plantlike",
592         visual_scale = 1.0,
593         tiles = {"default_pine_sapling.png"},
594         inventory_image = "default_pine_sapling.png",
595         wield_image = "default_pine_sapling.png",
596         paramtype = "light",
597         walkable = false,
598         is_ground_content = true,
599         selection_box = {
600                 type = "fixed",
601                 fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
602         },
603         groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1,sapling=1},
604         sounds = default.node_sound_leaves_defaults(),
605 })
606
607 --
608 -- Ores
609 --
610
611 minetest.register_node("default:stone_with_coal", {
612         description = "Coal Ore",
613         tiles = {"default_stone.png^default_mineral_coal.png"},
614         is_ground_content = true,
615         groups = {cracky=3},
616         drop = 'default:coal_lump',
617         sounds = default.node_sound_stone_defaults(),
618 })
619
620 minetest.register_node("default:coalblock", {
621         description = "Coal Block",
622         tiles = {"default_coal_block.png"},
623         is_ground_content = true,
624         groups = {cracky=3},
625         sounds = default.node_sound_stone_defaults(),
626 })
627
628
629
630 minetest.register_node("default:stone_with_iron", {
631         description = "Iron Ore",
632         tiles = {"default_stone.png^default_mineral_iron.png"},
633         is_ground_content = true,
634         groups = {cracky=2},
635         drop = 'default:iron_lump',
636         sounds = default.node_sound_stone_defaults(),
637 })
638
639 minetest.register_node("default:steelblock", {
640         description = "Steel Block",
641         tiles = {"default_steel_block.png"},
642         is_ground_content = true,
643         groups = {cracky=1,level=2},
644         sounds = default.node_sound_stone_defaults(),
645 })
646
647
648
649 minetest.register_node("default:stone_with_copper", {
650         description = "Copper Ore",
651         tiles = {"default_stone.png^default_mineral_copper.png"},
652         is_ground_content = true,
653         groups = {cracky=2},
654         drop = 'default:copper_lump',
655         sounds = default.node_sound_stone_defaults(),
656 })
657
658 minetest.register_node("default:copperblock", {
659         description = "Copper Block",
660         tiles = {"default_copper_block.png"},
661         is_ground_content = true,
662         groups = {cracky=1,level=2},
663         sounds = default.node_sound_stone_defaults(),
664 })
665
666 minetest.register_node("default:bronzeblock", {
667         description = "Bronze Block",
668         tiles = {"default_bronze_block.png"},
669         is_ground_content = true,
670         groups = {cracky=1,level=2},
671         sounds = default.node_sound_stone_defaults(),
672 })
673
674
675
676 minetest.register_node("default:stone_with_mese", {
677         description = "Mese Ore",
678         tiles = {"default_stone.png^default_mineral_mese.png"},
679         paramtype = "light",
680         is_ground_content = true,
681         groups = {cracky = 1},
682         drop = "default:mese_crystal",
683         sounds = default.node_sound_stone_defaults(),
684         light_source = 1,
685 })
686
687 minetest.register_node("default:mese", {
688         description = "Mese Block",
689         tiles = {"default_mese_block.png"},
690         paramtype = "light",
691         is_ground_content = true,
692         groups = {cracky = 1, level = 2},
693         sounds = default.node_sound_stone_defaults(),
694         light_source = 3,
695 })
696
697
698
699
700 minetest.register_node("default:stone_with_gold", {
701         description = "Gold Ore",
702         tiles = {"default_stone.png^default_mineral_gold.png"},
703         is_ground_content = true,
704         groups = {cracky=2},
705         drop = "default:gold_lump",
706         sounds = default.node_sound_stone_defaults(),
707 })
708
709 minetest.register_node("default:goldblock", {
710         description = "Gold Block",
711         tiles = {"default_gold_block.png"},
712         is_ground_content = true,
713         groups = {cracky=1},
714         sounds = default.node_sound_stone_defaults(),
715 })
716
717
718
719 minetest.register_node("default:stone_with_diamond", {
720         description = "Diamond Ore",
721         tiles = {"default_stone.png^default_mineral_diamond.png"},
722         is_ground_content = true,
723         groups = {cracky=1},
724         drop = "default:diamond",
725         sounds = default.node_sound_stone_defaults(),
726 })
727
728 minetest.register_node("default:diamondblock", {
729         description = "Diamond Block",
730         tiles = {"default_diamond_block.png"},
731         is_ground_content = true,
732         groups = {cracky=1,level=3},
733         sounds = default.node_sound_stone_defaults(),
734 })
735
736 --
737 -- Plantlife (non-cubic)
738 --
739
740 minetest.register_node("default:cactus", {
741         description = "Cactus",
742         tiles = {"default_cactus_top.png", "default_cactus_top.png", "default_cactus_side.png"},
743         paramtype2 = "facedir",
744         is_ground_content = true,
745         groups = {snappy=1,choppy=3,flammable=2},
746         sounds = default.node_sound_wood_defaults(),
747         on_place = minetest.rotate_node,
748
749         after_dig_node = function(pos, node, metadata, digger)
750                 default.dig_up(pos, node, digger)
751         end,
752 })
753
754 minetest.register_node("default:papyrus", {
755         description = "Papyrus",
756         drawtype = "plantlike",
757         tiles = {"default_papyrus.png"},
758         inventory_image = "default_papyrus.png",
759         wield_image = "default_papyrus.png",
760         paramtype = "light",
761         walkable = false,
762         is_ground_content = true,
763         selection_box = {
764                 type = "fixed",
765                 fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
766         },
767         groups = {snappy=3,flammable=2},
768         sounds = default.node_sound_leaves_defaults(),
769
770         after_dig_node = function(pos, node, metadata, digger)
771                 default.dig_up(pos, node, digger)
772         end,
773 })
774
775 minetest.register_node("default:dry_shrub", {
776         description = "Dry Shrub",
777         drawtype = "plantlike",
778         waving = 1,
779         visual_scale = 1.0,
780         tiles = {"default_dry_shrub.png"},
781         inventory_image = "default_dry_shrub.png",
782         wield_image = "default_dry_shrub.png",
783         paramtype = "light",
784         walkable = false,
785         is_ground_content = true,
786         buildable_to = true,
787         groups = {snappy=3,flammable=3,attached_node=1},
788         sounds = default.node_sound_leaves_defaults(),
789         selection_box = {
790                 type = "fixed",
791                 fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
792         },
793 })
794
795 minetest.register_node("default:junglegrass", {
796         description = "Jungle Grass",
797         drawtype = "plantlike",
798         waving = 1,
799         visual_scale = 1.3,
800         tiles = {"default_junglegrass.png"},
801         inventory_image = "default_junglegrass.png",
802         wield_image = "default_junglegrass.png",
803         paramtype = "light",
804         walkable = false,
805         buildable_to = true,
806         is_ground_content = true,
807         groups = {snappy=3,flammable=2,flora=1,attached_node=1},
808         sounds = default.node_sound_leaves_defaults(),
809         selection_box = {
810                 type = "fixed",
811                 fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
812         },
813 })
814
815 minetest.register_node("default:grass_1", {
816         description = "Grass",
817         drawtype = "plantlike",
818         waving = 1,
819         tiles = {"default_grass_1.png"},
820         -- Use texture of a taller grass stage in inventory
821         inventory_image = "default_grass_3.png",
822         wield_image = "default_grass_3.png",
823         paramtype = "light",
824         walkable = false,
825         is_ground_content = true,
826         buildable_to = true,
827         groups = {snappy=3,flammable=3,flora=1,attached_node=1},
828         sounds = default.node_sound_leaves_defaults(),
829         selection_box = {
830                 type = "fixed",
831                 fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
832         },
833
834         on_place = function(itemstack, placer, pointed_thing)
835                 -- place a random grass node
836                 local stack = ItemStack("default:grass_"..math.random(1,5))
837                 local ret = minetest.item_place(stack, placer, pointed_thing)
838                 return ItemStack("default:grass_1 "..itemstack:get_count()-(1-ret:get_count()))
839         end,
840 })
841
842 for i=2,5 do
843         minetest.register_node("default:grass_"..i, {
844                 description = "Grass",
845                 drawtype = "plantlike",
846                 waving = 1,
847                 tiles = {"default_grass_"..i..".png"},
848                 inventory_image = "default_grass_"..i..".png",
849                 wield_image = "default_grass_"..i..".png",
850                 paramtype = "light",
851                 walkable = false,
852                 buildable_to = true,
853                 is_ground_content = true,
854                 drop = "default:grass_1",
855                 groups = {snappy=3,flammable=3,flora=1,attached_node=1,not_in_creative_inventory=1},
856                 sounds = default.node_sound_leaves_defaults(),
857                 selection_box = {
858                         type = "fixed",
859                         fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
860                 },
861         })
862 end
863
864 --
865 -- Liquids
866 --
867
868 minetest.register_node("default:water_source", {
869         description = "Water Source",
870         inventory_image = minetest.inventorycube("default_water.png"),
871         drawtype = "liquid",
872         tiles = {
873                 {
874                         name = "default_water_source_animated.png",
875                         animation = {
876                                 type = "vertical_frames",
877                                 aspect_w = 16,
878                                 aspect_h = 16,
879                                 length = 2.0,
880                         },
881                 },
882         },
883         special_tiles = {
884                 -- New-style water source material (mostly unused)
885                 {
886                         name = "default_water_source_animated.png",
887                         animation = {
888                                 type = "vertical_frames",
889                                 aspect_w = 16,
890                                 aspect_h = 16,
891                                 length = 2.0,
892                         },
893                         backface_culling = false,
894                 },
895         },
896         alpha = 160,
897         paramtype = "light",
898         walkable = false,
899         pointable = false,
900         diggable = false,
901         buildable_to = true,
902         is_ground_content = false,
903         drop = "",
904         drowning = 1,
905         liquidtype = "source",
906         liquid_alternative_flowing = "default:water_flowing",
907         liquid_alternative_source = "default:water_source",
908         liquid_viscosity = 1,
909         post_effect_color = {a=64, r=100, g=100, b=200},
910         groups = {water=3, liquid=3, puts_out_fire=1},
911 })
912
913 minetest.register_node("default:water_flowing", {
914         description = "Flowing Water",
915         inventory_image = minetest.inventorycube("default_water.png"),
916         drawtype = "flowingliquid",
917         tiles = {"default_water.png"},
918         special_tiles = {
919                 {
920                         name = "default_water_flowing_animated.png",
921                         backface_culling = false,
922                         animation = {
923                                 type = "vertical_frames",
924                                 aspect_w = 16,
925                                 aspect_h = 16,
926                                 length = 0.8,
927                         },
928                 },
929                 {
930                         name = "default_water_flowing_animated.png",
931                         backface_culling = true,
932                         animation = {
933                                 type = "vertical_frames",
934                                 aspect_w = 16,
935                                 aspect_h = 16,
936                                 length = 0.8,
937                         },
938                 },
939         },
940         alpha = 160,
941         paramtype = "light",
942         paramtype2 = "flowingliquid",
943         walkable = false,
944         pointable = false,
945         diggable = false,
946         buildable_to = true,
947         is_ground_content = false,
948         drop = "",
949         drowning = 1,
950         liquidtype = "flowing",
951         liquid_alternative_flowing = "default:water_flowing",
952         liquid_alternative_source = "default:water_source",
953         liquid_viscosity = 1,
954         post_effect_color = {a=64, r=100, g=100, b=200},
955         groups = {water=3, liquid=3, puts_out_fire=1, not_in_creative_inventory=1},
956 })
957
958
959
960 minetest.register_node("default:lava_source", {
961         description = "Lava Source",
962         inventory_image = minetest.inventorycube("default_lava.png"),
963         drawtype = "liquid",
964         tiles = {
965                 {
966                         name = "default_lava_source_animated.png",
967                         animation = {
968                                 type = "vertical_frames",
969                                 aspect_w = 16,
970                                 aspect_h = 16,
971                                 length = 3.0,
972                         },
973                 },
974         },
975         special_tiles = {
976                 -- New-style lava source material (mostly unused)
977                 {
978                         name = "default_lava_source_animated.png",
979                         animation = {
980                                 type = "vertical_frames",
981                                 aspect_w = 16,
982                                 aspect_h = 16,
983                                 length = 3.0,
984                         },
985                         backface_culling = false,
986                 },
987         },
988         paramtype = "light",
989         light_source = default.LIGHT_MAX - 1,
990         walkable = false,
991         pointable = false,
992         diggable = false,
993         buildable_to = true,
994         is_ground_content = false,
995         drop = "",
996         drowning = 1,
997         liquidtype = "source",
998         liquid_alternative_flowing = "default:lava_flowing",
999         liquid_alternative_source = "default:lava_source",
1000         liquid_viscosity = 7,
1001         liquid_renewable = false,
1002         damage_per_second = 4 * 2,
1003         post_effect_color = {a=192, r=255, g=64, b=0},
1004         groups = {lava=3, liquid=2, hot=3, igniter=1},
1005 })
1006
1007 minetest.register_node("default:lava_flowing", {
1008         description = "Flowing Lava",
1009         inventory_image = minetest.inventorycube("default_lava.png"),
1010         drawtype = "flowingliquid",
1011         tiles = {"default_lava.png"},
1012         special_tiles = {
1013                 {
1014                         name = "default_lava_flowing_animated.png",
1015                         backface_culling = false,
1016                         animation = {
1017                                 type = "vertical_frames",
1018                                 aspect_w = 16,
1019                                 aspect_h = 16,
1020                                 length = 3.3,
1021                         },
1022                 },
1023                 {
1024                         name = "default_lava_flowing_animated.png",
1025                         backface_culling = true,
1026                         animation = {
1027                                 type = "vertical_frames",
1028                                 aspect_w = 16,
1029                                 aspect_h = 16,
1030                                 length = 3.3,
1031                         },
1032                 },
1033         },
1034         paramtype = "light",
1035         paramtype2 = "flowingliquid",
1036         light_source = default.LIGHT_MAX - 1,
1037         walkable = false,
1038         pointable = false,
1039         diggable = false,
1040         buildable_to = true,
1041         is_ground_content = false,
1042         drop = "",
1043         drowning = 1,
1044         liquidtype = "flowing",
1045         liquid_alternative_flowing = "default:lava_flowing",
1046         liquid_alternative_source = "default:lava_source",
1047         liquid_viscosity = 7,
1048         liquid_renewable = false,
1049         damage_per_second = 4 * 2,
1050         post_effect_color = {a=192, r=255, g=64, b=0},
1051         groups = {lava=3, liquid=2, hot=3, igniter=1, not_in_creative_inventory=1},
1052 })
1053
1054 --
1055 -- Tools / "Advanced" crafting / Non-"natural"
1056 --
1057
1058 minetest.register_node("default:torch", {
1059         description = "Torch",
1060         drawtype = "torchlike",
1061         tiles = {
1062                 {
1063                         name = "default_torch_on_floor_animated.png",
1064                         animation = {
1065                                 type = "vertical_frames",
1066                                 aspect_w = 16,
1067                                 aspect_h = 16,
1068                                 length = 3.0
1069                         },
1070                 },
1071                 {
1072                         name="default_torch_on_ceiling_animated.png",
1073                         animation = {
1074                                 type = "vertical_frames",
1075                                 aspect_w = 16,
1076                                 aspect_h = 16,
1077                                 length = 3.0
1078                         },
1079                 },
1080                 {
1081                         name="default_torch_animated.png",
1082                         animation = {
1083                                 type = "vertical_frames",
1084                                 aspect_w = 16,
1085                                 aspect_h = 16,
1086                                 length = 3.0
1087                         },
1088                 },
1089         },
1090         inventory_image = "default_torch_on_floor.png",
1091         wield_image = "default_torch_on_floor.png",
1092         paramtype = "light",
1093         paramtype2 = "wallmounted",
1094         sunlight_propagates = true,
1095         is_ground_content = false,
1096         walkable = false,
1097         light_source = default.LIGHT_MAX - 1,
1098         selection_box = {
1099                 type = "wallmounted",
1100                 wall_top = {-0.1, 0.5-0.6, -0.1, 0.1, 0.5, 0.1},
1101                 wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5+0.6, 0.1},
1102                 wall_side = {-0.5, -0.3, -0.1, -0.5+0.3, 0.3, 0.1},
1103         },
1104         groups = {choppy=2,dig_immediate=3,flammable=1,attached_node=1},
1105         legacy_wallmounted = true,
1106         sounds = default.node_sound_defaults(),
1107 })
1108
1109
1110
1111 local chest_formspec =
1112         "size[8,9]"..
1113         default.gui_bg..
1114         default.gui_bg_img..
1115         default.gui_slots..
1116         "list[current_name;main;0,0.3;8,4;]"..
1117         "list[current_player;main;0,4.85;8,1;]"..
1118         "list[current_player;main;0,6.08;8,3;8]"..
1119         default.get_hotbar_bg(0,4.85)
1120
1121 local function get_locked_chest_formspec(pos)
1122         local spos = pos.x .. "," .. pos.y .. "," ..pos.z
1123         local formspec =
1124                 "size[8,9]"..
1125                 default.gui_bg..
1126                 default.gui_bg_img..
1127                 default.gui_slots..
1128                 "list[nodemeta:".. spos .. ";main;0,0.3;8,4;]"..
1129                 "list[current_player;main;0,4.85;8,1;]"..
1130                 "list[current_player;main;0,6.08;8,3;8]"..
1131                 default.get_hotbar_bg(0,4.85)
1132  return formspec
1133 end
1134
1135 local function has_locked_chest_privilege(meta, player)
1136         if player:get_player_name() ~= meta:get_string("owner") then
1137                 return false
1138         end
1139         return true
1140 end
1141
1142 minetest.register_node("default:chest", {
1143         description = "Chest",
1144         tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
1145                 "default_chest_side.png", "default_chest_side.png", "default_chest_front.png"},
1146         paramtype2 = "facedir",
1147         groups = {choppy=2,oddly_breakable_by_hand=2},
1148         legacy_facedir_simple = true,
1149         is_ground_content = false,
1150         sounds = default.node_sound_wood_defaults(),
1151
1152         on_construct = function(pos)
1153                 local meta = minetest.get_meta(pos)
1154                 meta:set_string("formspec", chest_formspec)
1155                 meta:set_string("infotext", "Chest")
1156                 local inv = meta:get_inventory()
1157                 inv:set_size("main", 8*4)
1158         end,
1159         can_dig = function(pos,player)
1160                 local meta = minetest.get_meta(pos);
1161                 local inv = meta:get_inventory()
1162                 return inv:is_empty("main")
1163         end,
1164         on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
1165                 minetest.log("action", player:get_player_name()..
1166                                 " moves stuff in chest at "..minetest.pos_to_string(pos))
1167         end,
1168     on_metadata_inventory_put = function(pos, listname, index, stack, player)
1169                 minetest.log("action", player:get_player_name()..
1170                                 " moves stuff to chest at "..minetest.pos_to_string(pos))
1171         end,
1172     on_metadata_inventory_take = function(pos, listname, index, stack, player)
1173                 minetest.log("action", player:get_player_name()..
1174                                 " takes stuff from chest at "..minetest.pos_to_string(pos))
1175         end,
1176 })
1177
1178
1179
1180 minetest.register_node("default:chest_locked", {
1181         description = "Locked Chest",
1182         tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
1183                 "default_chest_side.png", "default_chest_side.png", "default_chest_lock.png"},
1184         paramtype2 = "facedir",
1185         groups = {choppy=2,oddly_breakable_by_hand=2},
1186         legacy_facedir_simple = true,
1187         is_ground_content = false,
1188         sounds = default.node_sound_wood_defaults(),
1189
1190         after_place_node = function(pos, placer)
1191                 local meta = minetest.get_meta(pos)
1192                 meta:set_string("owner", placer:get_player_name() or "")
1193                 meta:set_string("infotext", "Locked Chest (owned by "..
1194                                 meta:get_string("owner")..")")
1195         end,
1196         on_construct = function(pos)
1197                 local meta = minetest.get_meta(pos)
1198                 meta:set_string("infotext", "Locked Chest")
1199                 meta:set_string("owner", "")
1200                 local inv = meta:get_inventory()
1201                 inv:set_size("main", 8*4)
1202         end,
1203         can_dig = function(pos,player)
1204                 local meta = minetest.get_meta(pos);
1205                 local inv = meta:get_inventory()
1206                 return inv:is_empty("main") and has_locked_chest_privilege(meta, player)
1207         end,
1208         allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
1209                 local meta = minetest.get_meta(pos)
1210                 if not has_locked_chest_privilege(meta, player) then
1211                         return 0
1212                 end
1213                 return count
1214         end,
1215     allow_metadata_inventory_put = function(pos, listname, index, stack, player)
1216                 local meta = minetest.get_meta(pos)
1217                 if not has_locked_chest_privilege(meta, player) then
1218                         return 0
1219                 end
1220                 return stack:get_count()
1221         end,
1222     allow_metadata_inventory_take = function(pos, listname, index, stack, player)
1223                 local meta = minetest.get_meta(pos)
1224                 if not has_locked_chest_privilege(meta, player) then
1225                         return 0
1226                 end
1227                 return stack:get_count()
1228         end,
1229     on_metadata_inventory_put = function(pos, listname, index, stack, player)
1230                 minetest.log("action", player:get_player_name()..
1231                                 " moves stuff to locked chest at "..minetest.pos_to_string(pos))
1232         end,
1233     on_metadata_inventory_take = function(pos, listname, index, stack, player)
1234                 minetest.log("action", player:get_player_name()..
1235                                 " takes stuff from locked chest at "..minetest.pos_to_string(pos))
1236         end,
1237         on_rightclick = function(pos, node, clicker)
1238                 local meta = minetest.get_meta(pos)
1239                 if has_locked_chest_privilege(meta, clicker) then
1240                         minetest.show_formspec(
1241                                 clicker:get_player_name(),
1242                                 "default:chest_locked",
1243                                 get_locked_chest_formspec(pos)
1244                         )
1245                 end
1246         end,
1247 })
1248
1249
1250
1251 local bookshelf_formspec =
1252         "size[8,7;]"..
1253         default.gui_bg..
1254         default.gui_bg_img..
1255         default.gui_slots..
1256         "list[context;books;0,0.3;8,2;]"..
1257         "list[current_player;main;0,2.85;8,1;]"..
1258         "list[current_player;main;0,4.08;8,3;8]"..
1259         default.get_hotbar_bg(0,2.85)
1260
1261 minetest.register_node("default:bookshelf", {
1262         description = "Bookshelf",
1263         tiles = {"default_wood.png", "default_wood.png", "default_bookshelf.png"},
1264         is_ground_content = false,
1265         groups = {choppy=3,oddly_breakable_by_hand=2,flammable=3},
1266         sounds = default.node_sound_wood_defaults(),
1267
1268         on_construct = function(pos)
1269                 local meta = minetest.get_meta(pos)
1270                 meta:set_string("formspec", bookshelf_formspec)
1271                 local inv = meta:get_inventory()
1272                 inv:set_size("books", 8*2)
1273         end,
1274         can_dig = function(pos,player)
1275                 local meta = minetest.get_meta(pos);
1276                 local inv = meta:get_inventory()
1277                 return inv:is_empty("books")
1278         end,
1279
1280         allow_metadata_inventory_put = function(pos, listname, index, stack, player)
1281                 local meta = minetest.get_meta(pos)
1282                 local inv = meta:get_inventory()
1283                 local to_stack = inv:get_stack(listname, index)
1284                 if listname == "books" then
1285                         if minetest.get_item_group(stack:get_name(), "book") ~= 0
1286                                         and to_stack:is_empty() then
1287                                 return 1
1288                         else
1289                                 return 0
1290                         end
1291                 end
1292         end,
1293
1294         allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
1295                 local meta = minetest.get_meta(pos)
1296                 local inv = meta:get_inventory()
1297                 local stack = inv:get_stack(from_list, from_index)
1298                 local to_stack = inv:get_stack(to_list, to_index)
1299                 if to_list == "books" then
1300                         if stack:get_name() == "default:book" and to_stack:is_empty() then
1301                                 return 1
1302                         else
1303                                 return 0
1304                         end
1305                 end
1306         end,
1307
1308         on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
1309                 minetest.log("action", player:get_player_name()..
1310                            " moves stuff in bookshelf at "..minetest.pos_to_string(pos))
1311         end,
1312         on_metadata_inventory_put = function(pos, listname, index, stack, player)
1313                 minetest.log("action", player:get_player_name()..
1314                            " moves stuff to bookshelf at "..minetest.pos_to_string(pos))
1315         end,
1316         on_metadata_inventory_take = function(pos, listname, index, stack, player)
1317                 minetest.log("action", player:get_player_name()..
1318                            " takes stuff from bookshelf at "..minetest.pos_to_string(pos))
1319         end,
1320 })
1321
1322
1323
1324 minetest.register_node("default:sign_wall", {
1325         description = "Sign",
1326         drawtype = "nodebox",
1327         tiles = {"default_sign.png"},
1328         inventory_image = "default_sign_wall.png",
1329         wield_image = "default_sign_wall.png",
1330         paramtype = "light",
1331         paramtype2 = "wallmounted",
1332         sunlight_propagates = true,
1333         is_ground_content = false,
1334         walkable = false,
1335         node_box = {
1336                 type = "wallmounted",
1337                 wall_top    = {-0.4375, 0.4375, -0.3125, 0.4375, 0.5, 0.3125},
1338                 wall_bottom = {-0.4375, -0.5, -0.3125, 0.4375, -0.4375, 0.3125},
1339                 wall_side   = {-0.5, -0.3125, -0.4375, -0.4375, 0.3125, 0.4375},
1340         },
1341         groups = {choppy=2,dig_immediate=2,attached_node=1},
1342         legacy_wallmounted = true,
1343         sounds = default.node_sound_defaults(),
1344
1345         on_construct = function(pos)
1346                 --local n = minetest.get_node(pos)
1347                 local meta = minetest.get_meta(pos)
1348                 meta:set_string("formspec", "field[text;;${text}]")
1349                 meta:set_string("infotext", "\"\"")
1350         end,
1351         on_receive_fields = function(pos, formname, fields, sender)
1352                 --print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields))
1353                 if minetest.is_protected(pos, sender:get_player_name()) then
1354                         minetest.record_protection_violation(pos, sender:get_player_name())
1355                         return
1356                 end
1357                 local meta = minetest.get_meta(pos)
1358                 if not fields.text then return end
1359                 minetest.log("action", (sender:get_player_name() or "").." wrote \""..fields.text..
1360                                 "\" to sign at "..minetest.pos_to_string(pos))
1361                 meta:set_string("text", fields.text)
1362                 meta:set_string("infotext", '"'..fields.text..'"')
1363         end,
1364 })
1365
1366 minetest.register_node("default:ladder", {
1367         description = "Ladder",
1368         drawtype = "signlike",
1369         tiles = {"default_ladder.png"},
1370         inventory_image = "default_ladder.png",
1371         wield_image = "default_ladder.png",
1372         paramtype = "light",
1373         paramtype2 = "wallmounted",
1374         walkable = false,
1375         climbable = true,
1376         is_ground_content = false,
1377         selection_box = {
1378                 type = "wallmounted",
1379                 --wall_top = = <default>
1380                 --wall_bottom = = <default>
1381                 --wall_side = = <default>
1382         },
1383         groups = {choppy=2,oddly_breakable_by_hand=3,flammable=2},
1384         legacy_wallmounted = true,
1385         sounds = default.node_sound_wood_defaults(),
1386 })
1387
1388 local fence_texture = "default_fence_overlay.png^default_wood.png^default_fence_overlay.png^[makealpha:255,126,126"
1389 minetest.register_node("default:fence_wood", {
1390         description = "Wooden Fence",
1391         drawtype = "fencelike",
1392         tiles = {"default_wood.png"},
1393         inventory_image = fence_texture,
1394         wield_image = fence_texture,
1395         paramtype = "light",
1396         is_ground_content = false,
1397         selection_box = {
1398                 type = "fixed",
1399                 fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
1400         },
1401         groups = {choppy=2,oddly_breakable_by_hand=2,flammable=2},
1402         sounds = default.node_sound_wood_defaults(),
1403 })
1404
1405
1406
1407 minetest.register_node("default:glass", {
1408         description = "Glass",
1409         drawtype = "glasslike_framed_optional",
1410         tiles = {"default_glass.png", "default_glass_detail.png"},
1411         inventory_image = minetest.inventorycube("default_glass.png"),
1412         paramtype = "light",
1413         sunlight_propagates = true,
1414         is_ground_content = false,
1415         groups = {cracky=3,oddly_breakable_by_hand=3},
1416         sounds = default.node_sound_glass_defaults(),
1417 })
1418
1419 minetest.register_node("default:obsidian_glass", {
1420         description = "Obsidian Glass",
1421         drawtype = "glasslike",
1422         tiles = {"default_obsidian_glass.png"},
1423         paramtype = "light",
1424         is_ground_content = false,
1425         sunlight_propagates = true,
1426         sounds = default.node_sound_glass_defaults(),
1427         groups = {cracky=3,oddly_breakable_by_hand=3},
1428 })
1429
1430
1431
1432 minetest.register_node("default:rail", {
1433         description = "Rail",
1434         drawtype = "raillike",
1435         tiles = {"default_rail.png", "default_rail_curved.png", "default_rail_t_junction.png", "default_rail_crossing.png"},
1436         inventory_image = "default_rail.png",
1437         wield_image = "default_rail.png",
1438         paramtype = "light",
1439         walkable = false,
1440         is_ground_content = false,
1441         selection_box = {
1442                 type = "fixed",
1443                 -- but how to specify the dimensions for curved and sideways rails?
1444                 fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
1445         },
1446         groups = {bendy=2,dig_immediate=2,attached_node=1},
1447 })
1448
1449
1450
1451 minetest.register_node("default:brick", {
1452         description = "Brick Block",
1453         tiles = {"default_brick.png"},
1454         is_ground_content = false,
1455         groups = {cracky=3},
1456         sounds = default.node_sound_stone_defaults(),
1457 })
1458
1459
1460 minetest.register_node("default:meselamp", {
1461         description = "Mese Lamp",
1462         drawtype = "glasslike",
1463         tiles = {"default_meselamp.png"},
1464         paramtype = "light",
1465         sunlight_propagates = true,
1466         is_ground_content = false,
1467         groups = {cracky = 3, oddly_breakable_by_hand = 3},
1468         sounds = default.node_sound_glass_defaults(),
1469         light_source = 12,
1470 })
1471
1472 --
1473 -- Misc
1474 --
1475
1476 minetest.register_node("default:cloud", {
1477         description = "Cloud",
1478         tiles = {"default_cloud.png"},
1479         sounds = default.node_sound_defaults(),
1480         groups = {not_in_creative_inventory=1},
1481 })
1482
1483 minetest.register_node("default:nyancat", {
1484         description = "Nyan Cat",
1485         tiles = {"default_nc_side.png", "default_nc_side.png", "default_nc_side.png",
1486                 "default_nc_side.png", "default_nc_back.png", "default_nc_front.png"},
1487         paramtype2 = "facedir",
1488         groups = {cracky=2},
1489         is_ground_content = false,
1490         legacy_facedir_simple = true,
1491         sounds = default.node_sound_defaults(),
1492 })
1493
1494 minetest.register_node("default:nyancat_rainbow", {
1495         description = "Nyan Cat Rainbow",
1496         tiles = {
1497                 "default_nc_rb.png^[transformR90", "default_nc_rb.png^[transformR90",
1498                 "default_nc_rb.png", "default_nc_rb.png"
1499         },
1500         paramtype2 = "facedir",
1501         groups = {cracky=2},
1502         is_ground_content = false,
1503         sounds = default.node_sound_defaults(),
1504 })