1 -- mods/default/nodes.lua
4 --[[ Node name convention:
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.
17 (1. Material 2. Cobble variant 3. Brick variant 4. Modified forms)
26 default:desert_stonebrick
29 default:sandstonebrick
36 (1. Material 2. Modified forms)
39 default:dirt_with_grass
40 default:dirt_with_grass_footsteps
41 default:dirt_with_dry_grass
42 default:dirt_with_snow
58 (1. Trunk 2. Fabricated trunk 3. Leaves 4. Sapling 5. Fruits)
79 default:acacia_sapling
88 (1. In stone 2. Blocks)
90 default:stone_with_coal
93 default:stone_with_iron
96 default:stone_with_copper
100 default:stone_with_gold
103 default:stone_with_mese
106 default:stone_with_diamond
109 Plantlife (non-cubic)
110 ---------------------
131 (1. Source 2. Flowing)
134 default:water_flowing
136 default:river_water_source
137 default:river_water_flowing
142 Tools / "Advanced" crafting / Non-"natural"
143 -------------------------------------------
152 default:sign_wall_wood
153 default:sign_wall_steel
159 default:fence_acacia_wood
160 default:fence_junglewood
161 default:fence_pine_wood
162 default:fence_aspen_wood
165 default:obsidian_glass
178 default:nyancat_rainbow
186 minetest.register_node("default:stone", {
187 description = "Stone",
188 tiles = {"default_stone.png"},
189 groups = {cracky = 3, stone = 1},
190 drop = 'default:cobble',
191 legacy_mineral = true,
192 sounds = default.node_sound_stone_defaults(),
195 minetest.register_node("default:cobble", {
196 description = "Cobblestone",
197 tiles = {"default_cobble.png"},
198 is_ground_content = false,
199 groups = {cracky = 3, stone = 2},
200 sounds = default.node_sound_stone_defaults(),
203 minetest.register_node("default:stonebrick", {
204 description = "Stone Brick",
205 paramtype2 = "facedir",
207 tiles = {"default_stone_brick.png"},
208 is_ground_content = false,
209 groups = {cracky = 2, stone = 1},
210 sounds = default.node_sound_stone_defaults(),
213 minetest.register_node("default:mossycobble", {
214 description = "Mossy Cobblestone",
215 tiles = {"default_mossycobble.png"},
216 is_ground_content = false,
217 groups = {cracky = 3, stone = 1},
218 sounds = default.node_sound_stone_defaults(),
222 minetest.register_node("default:desert_stone", {
223 description = "Desert Stone",
224 tiles = {"default_desert_stone.png"},
225 groups = {cracky = 3, stone = 1},
226 drop = 'default:desert_cobble',
227 legacy_mineral = true,
228 sounds = default.node_sound_stone_defaults(),
231 minetest.register_node("default:desert_cobble", {
232 description = "Desert Cobblestone",
233 tiles = {"default_desert_cobble.png"},
234 is_ground_content = false,
235 groups = {cracky = 3, stone = 2},
236 sounds = default.node_sound_stone_defaults(),
239 minetest.register_node("default:desert_stonebrick", {
240 description = "Desert Stone Brick",
241 paramtype2 = "facedir",
243 tiles = {"default_desert_stone_brick.png"},
244 is_ground_content = false,
245 groups = {cracky = 2, stone = 1},
246 sounds = default.node_sound_stone_defaults(),
250 minetest.register_node("default:sandstone", {
251 description = "Sandstone",
252 tiles = {"default_sandstone.png"},
253 groups = {crumbly = 1, cracky = 3},
254 sounds = default.node_sound_stone_defaults(),
257 minetest.register_node("default:sandstonebrick", {
258 description = "Sandstone Brick",
259 paramtype2 = "facedir",
261 tiles = {"default_sandstone_brick.png"},
262 is_ground_content = false,
263 groups = {cracky = 2},
264 sounds = default.node_sound_stone_defaults(),
268 minetest.register_node("default:obsidian", {
269 description = "Obsidian",
270 tiles = {"default_obsidian.png"},
271 sounds = default.node_sound_stone_defaults(),
272 groups = {cracky = 1, level = 2},
275 minetest.register_node("default:obsidianbrick", {
276 description = "Obsidian Brick",
277 paramtype2 = "facedir",
279 tiles = {"default_obsidian_brick.png"},
280 is_ground_content = false,
281 sounds = default.node_sound_stone_defaults(),
282 groups = {cracky = 1, level = 2},
289 minetest.register_node("default:dirt", {
290 description = "Dirt",
291 tiles = {"default_dirt.png"},
292 groups = {crumbly = 3, soil = 1},
293 sounds = default.node_sound_dirt_defaults(),
296 minetest.register_node("default:dirt_with_grass", {
297 description = "Dirt with Grass",
298 tiles = {"default_grass.png", "default_dirt.png",
299 {name = "default_dirt.png^default_grass_side.png",
300 tileable_vertical = false}},
301 groups = {crumbly = 3, soil = 1},
302 drop = 'default:dirt',
303 sounds = default.node_sound_dirt_defaults({
304 footstep = {name = "default_grass_footstep", gain = 0.25},
308 minetest.register_node("default:dirt_with_grass_footsteps", {
309 description = "Dirt with Grass and Footsteps",
310 tiles = {"default_grass.png^default_footprint.png", "default_dirt.png",
311 {name = "default_dirt.png^default_grass_side.png",
312 tileable_vertical = false}},
313 groups = {crumbly = 3, soil = 1, not_in_creative_inventory = 1},
314 drop = 'default:dirt',
315 sounds = default.node_sound_dirt_defaults({
316 footstep = {name = "default_grass_footstep", gain = 0.25},
320 minetest.register_node("default:dirt_with_dry_grass", {
321 description = "Dirt with Dry Grass",
322 tiles = {"default_dry_grass.png",
324 {name = "default_dirt.png^default_dry_grass_side.png",
325 tileable_vertical = false}},
326 groups = {crumbly = 3, soil = 1},
327 drop = 'default:dirt',
328 sounds = default.node_sound_dirt_defaults({
329 footstep = {name = "default_grass_footstep", gain = 0.4},
333 minetest.register_node("default:dirt_with_snow", {
334 description = "Dirt with Snow",
335 tiles = {"default_snow.png", "default_dirt.png",
336 {name = "default_dirt.png^default_snow_side.png",
337 tileable_vertical = false}},
338 groups = {crumbly = 3, soil = 1},
339 drop = 'default:dirt',
340 sounds = default.node_sound_dirt_defaults({
341 footstep = {name = "default_snow_footstep", gain = 0.15},
345 minetest.register_node("default:sand", {
346 description = "Sand",
347 tiles = {"default_sand.png"},
348 groups = {crumbly = 3, falling_node = 1, sand = 1},
349 sounds = default.node_sound_sand_defaults(),
352 minetest.register_node("default:desert_sand", {
353 description = "Desert Sand",
354 tiles = {"default_desert_sand.png"},
355 groups = {crumbly = 3, falling_node = 1, sand = 1},
356 sounds = default.node_sound_sand_defaults(),
360 minetest.register_node("default:gravel", {
361 description = "Gravel",
362 tiles = {"default_gravel.png"},
363 groups = {crumbly = 2, falling_node = 1},
364 sounds = default.node_sound_gravel_defaults(),
368 {items = {'default:flint'}, rarity = 16},
369 {items = {'default:gravel'}}
374 minetest.register_node("default:clay", {
375 description = "Clay",
376 tiles = {"default_clay.png"},
377 groups = {crumbly = 3},
378 drop = 'default:clay_lump 4',
379 sounds = default.node_sound_dirt_defaults(),
383 minetest.register_node("default:snow", {
384 description = "Snow",
385 tiles = {"default_snow.png"},
386 inventory_image = "default_snowball.png",
387 wield_image = "default_snowball.png",
391 drawtype = "nodebox",
395 {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5},
398 groups = {crumbly = 3, falling_node = 1, puts_out_fire = 1},
399 sounds = default.node_sound_dirt_defaults({
400 footstep = {name = "default_snow_footstep", gain = 0.15},
401 dug = {name = "default_snow_footstep", gain = 0.2},
402 dig = {name = "default_snow_footstep", gain = 0.2}
405 on_construct = function(pos)
407 if minetest.get_node(pos).name == "default:dirt_with_grass" then
408 minetest.set_node(pos, {name = "default:dirt_with_snow"})
413 minetest.register_node("default:snowblock", {
414 description = "Snow Block",
415 tiles = {"default_snow.png"},
416 groups = {crumbly = 3, puts_out_fire = 1},
417 sounds = default.node_sound_dirt_defaults({
418 footstep = {name = "default_snow_footstep", gain = 0.15},
419 dug = {name = "default_snow_footstep", gain = 0.2},
420 dig = {name = "default_snow_footstep", gain = 0.2}
424 minetest.register_node("default:ice", {
426 tiles = {"default_ice.png"},
427 is_ground_content = false,
429 groups = {cracky = 3, puts_out_fire = 1},
430 sounds = default.node_sound_glass_defaults(),
437 minetest.register_node("default:tree", {
438 description = "Tree",
439 tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"},
440 paramtype2 = "facedir",
441 is_ground_content = false,
442 groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
443 sounds = default.node_sound_wood_defaults(),
445 on_place = minetest.rotate_node
448 minetest.register_node("default:wood", {
449 description = "Wooden Planks",
450 paramtype2 = "facedir",
452 tiles = {"default_wood.png"},
453 is_ground_content = false,
454 groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, wood = 1},
455 sounds = default.node_sound_wood_defaults(),
458 minetest.register_node("default:sapling", {
459 description = "Sapling",
460 drawtype = "plantlike",
462 tiles = {"default_sapling.png"},
463 inventory_image = "default_sapling.png",
464 wield_image = "default_sapling.png",
466 sunlight_propagates = true,
468 on_timer = default.grow_sapling,
469 on_construct = function(pos)
470 minetest.get_node_timer(pos):start(math.random(2400,4800))
474 fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
476 groups = {snappy = 2, dig_immediate = 3, flammable = 2,
477 attached_node = 1, sapling = 1},
478 sounds = default.node_sound_leaves_defaults(),
481 minetest.register_node("default:leaves", {
482 description = "Leaves",
483 drawtype = "allfaces_optional",
486 tiles = {"default_leaves.png"},
487 special_tiles = {"default_leaves_simple.png"},
489 is_ground_content = false,
490 groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
495 -- player will get sapling with 1/20 chance
496 items = {'default:sapling'},
500 -- player will get leaves only if he get no saplings,
501 -- this is because max_items is 1
502 items = {'default:leaves'},
506 sounds = default.node_sound_leaves_defaults(),
508 after_place_node = default.after_place_leaves,
511 minetest.register_node("default:apple", {
512 description = "Apple",
513 drawtype = "plantlike",
515 tiles = {"default_apple.png"},
516 inventory_image = "default_apple.png",
518 sunlight_propagates = true,
520 is_ground_content = false,
523 fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2}
525 groups = {fleshy = 3, dig_immediate = 3, flammable = 2,
526 leafdecay = 3, leafdecay_drop = 1},
527 on_use = minetest.item_eat(2),
528 sounds = default.node_sound_leaves_defaults(),
530 after_place_node = function(pos, placer, itemstack)
531 if placer:is_player() then
532 minetest.set_node(pos, {name = "default:apple", param2 = 1})
538 minetest.register_node("default:jungletree", {
539 description = "Jungle Tree",
540 tiles = {"default_jungletree_top.png", "default_jungletree_top.png",
541 "default_jungletree.png"},
542 paramtype2 = "facedir",
543 is_ground_content = false,
544 groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
545 sounds = default.node_sound_wood_defaults(),
547 on_place = minetest.rotate_node
550 minetest.register_node("default:junglewood", {
551 description = "Junglewood Planks",
552 paramtype2 = "facedir",
554 tiles = {"default_junglewood.png"},
555 is_ground_content = false,
556 groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, wood = 1},
557 sounds = default.node_sound_wood_defaults(),
560 minetest.register_node("default:jungleleaves", {
561 description = "Jungle Leaves",
562 drawtype = "allfaces_optional",
565 tiles = {"default_jungleleaves.png"},
566 special_tiles = {"default_jungleleaves_simple.png"},
568 is_ground_content = false,
569 groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
573 {items = {'default:junglesapling'}, rarity = 20},
574 {items = {'default:jungleleaves'}}
577 sounds = default.node_sound_leaves_defaults(),
579 after_place_node = default.after_place_leaves,
582 minetest.register_node("default:junglesapling", {
583 description = "Jungle Sapling",
584 drawtype = "plantlike",
586 tiles = {"default_junglesapling.png"},
587 inventory_image = "default_junglesapling.png",
588 wield_image = "default_junglesapling.png",
590 sunlight_propagates = true,
592 on_timer = default.grow_sapling,
593 on_construct = function(pos)
594 minetest.get_node_timer(pos):start(math.random(2400,4800))
598 fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
600 groups = {snappy = 2, dig_immediate = 3, flammable = 2,
601 attached_node = 1, sapling = 1},
602 sounds = default.node_sound_leaves_defaults(),
606 minetest.register_node("default:pine_tree", {
607 description = "Pine Tree",
608 tiles = {"default_pine_tree_top.png", "default_pine_tree_top.png",
609 "default_pine_tree.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(),
615 on_place = minetest.rotate_node
618 minetest.register_node("default:pine_wood", {
619 description = "Pine Wood Planks",
620 paramtype2 = "facedir",
622 tiles = {"default_pine_wood.png"},
623 is_ground_content = false,
624 groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, wood = 1},
625 sounds = default.node_sound_wood_defaults(),
628 minetest.register_node("default:pine_needles",{
629 description = "Pine Needles",
630 drawtype = "allfaces_optional",
632 tiles = {"default_pine_needles.png"},
635 is_ground_content = false,
636 groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
640 {items = {"default:pine_sapling"}, rarity = 20},
641 {items = {"default:pine_needles"}}
644 sounds = default.node_sound_leaves_defaults(),
646 after_place_node = default.after_place_leaves,
649 minetest.register_node("default:pine_sapling", {
650 description = "Pine Sapling",
651 drawtype = "plantlike",
653 tiles = {"default_pine_sapling.png"},
654 inventory_image = "default_pine_sapling.png",
655 wield_image = "default_pine_sapling.png",
657 sunlight_propagates = true,
659 on_timer = default.grow_sapling,
660 on_construct = function(pos)
661 minetest.get_node_timer(pos):start(math.random(2400,4800))
665 fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
667 groups = {snappy = 2, dig_immediate = 3, flammable = 2,
668 attached_node = 1, sapling = 1},
669 sounds = default.node_sound_leaves_defaults(),
673 minetest.register_node("default:acacia_tree", {
674 description = "Acacia Tree",
675 tiles = {"default_acacia_tree_top.png", "default_acacia_tree_top.png",
676 "default_acacia_tree.png"},
677 paramtype2 = "facedir",
678 is_ground_content = false,
679 groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
680 sounds = default.node_sound_wood_defaults(),
682 on_place = minetest.rotate_node
685 minetest.register_node("default:acacia_wood", {
686 description = "Acacia Wood Planks",
687 paramtype2 = "facedir",
689 tiles = {"default_acacia_wood.png"},
690 is_ground_content = false,
691 groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, wood = 1},
692 sounds = default.node_sound_wood_defaults(),
695 minetest.register_node("default:acacia_leaves", {
696 description = "Acacia Leaves",
697 drawtype = "allfaces_optional",
699 tiles = {"default_acacia_leaves.png"},
702 is_ground_content = false,
703 groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
707 {items = {"default:acacia_sapling"}, rarity = 20},
708 {items = {"default:acacia_leaves"}}
711 sounds = default.node_sound_leaves_defaults(),
713 after_place_node = default.after_place_leaves,
716 minetest.register_node("default:acacia_sapling", {
717 description = "Acacia Tree Sapling",
718 drawtype = "plantlike",
720 tiles = {"default_acacia_sapling.png"},
721 inventory_image = "default_acacia_sapling.png",
722 wield_image = "default_acacia_sapling.png",
724 sunlight_propagates = true,
726 on_timer = default.grow_sapling,
727 on_construct = function(pos)
728 minetest.get_node_timer(pos):start(math.random(2400,4800))
732 fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
734 groups = {snappy = 2, dig_immediate = 3, flammable = 2,
735 attached_node = 1, sapling = 1},
736 sounds = default.node_sound_leaves_defaults(),
739 minetest.register_node("default:aspen_tree", {
740 description = "Aspen Tree",
741 tiles = {"default_aspen_tree_top.png", "default_aspen_tree_top.png",
742 "default_aspen_tree.png"},
743 paramtype2 = "facedir",
744 is_ground_content = false,
745 groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
746 sounds = default.node_sound_wood_defaults(),
748 on_place = minetest.rotate_node
751 minetest.register_node("default:aspen_wood", {
752 description = "Aspen Wood Planks",
753 paramtype2 = "facedir",
755 tiles = {"default_aspen_wood.png"},
756 is_ground_content = false,
757 groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, wood = 1},
758 sounds = default.node_sound_wood_defaults(),
761 minetest.register_node("default:aspen_leaves", {
762 description = "Aspen Leaves",
763 drawtype = "allfaces_optional",
765 tiles = {"default_aspen_leaves.png"},
768 is_ground_content = false,
769 groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
773 {items = {"default:aspen_sapling"}, rarity = 20},
774 {items = {"default:aspen_leaves"}}
777 sounds = default.node_sound_leaves_defaults(),
779 after_place_node = default.after_place_leaves,
782 minetest.register_node("default:aspen_sapling", {
783 description = "Aspen Tree Sapling",
784 drawtype = "plantlike",
786 tiles = {"default_aspen_sapling.png"},
787 inventory_image = "default_aspen_sapling.png",
788 wield_image = "default_aspen_sapling.png",
790 sunlight_propagates = true,
792 on_timer = default.grow_sapling,
793 on_construct = function(pos)
794 minetest.get_node_timer(pos):start(math.random(2400,4800))
798 fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
800 groups = {snappy = 2, dig_immediate = 3, flammable = 2,
801 attached_node = 1, sapling = 1},
802 sounds = default.node_sound_leaves_defaults(),
808 minetest.register_node("default:stone_with_coal", {
809 description = "Coal Ore",
810 tiles = {"default_stone.png^default_mineral_coal.png"},
811 groups = {cracky = 3},
812 drop = 'default:coal_lump',
813 sounds = default.node_sound_stone_defaults(),
816 minetest.register_node("default:coalblock", {
817 description = "Coal Block",
818 tiles = {"default_coal_block.png"},
819 is_ground_content = false,
820 groups = {cracky = 3},
821 sounds = default.node_sound_stone_defaults(),
825 minetest.register_node("default:stone_with_iron", {
826 description = "Iron Ore",
827 tiles = {"default_stone.png^default_mineral_iron.png"},
828 groups = {cracky = 2},
829 drop = 'default:iron_lump',
830 sounds = default.node_sound_stone_defaults(),
833 minetest.register_node("default:steelblock", {
834 description = "Steel Block",
835 tiles = {"default_steel_block.png"},
836 is_ground_content = false,
837 groups = {cracky = 1, level = 2},
838 sounds = default.node_sound_stone_defaults(),
842 minetest.register_node("default:stone_with_copper", {
843 description = "Copper Ore",
844 tiles = {"default_stone.png^default_mineral_copper.png"},
845 groups = {cracky = 2},
846 drop = 'default:copper_lump',
847 sounds = default.node_sound_stone_defaults(),
850 minetest.register_node("default:copperblock", {
851 description = "Copper Block",
852 tiles = {"default_copper_block.png"},
853 is_ground_content = false,
854 groups = {cracky = 1, level = 2},
855 sounds = default.node_sound_stone_defaults(),
858 minetest.register_node("default:bronzeblock", {
859 description = "Bronze Block",
860 tiles = {"default_bronze_block.png"},
861 is_ground_content = false,
862 groups = {cracky = 1, level = 2},
863 sounds = default.node_sound_stone_defaults(),
867 minetest.register_node("default:stone_with_mese", {
868 description = "Mese Ore",
869 tiles = {"default_stone.png^default_mineral_mese.png"},
870 groups = {cracky = 1},
871 drop = "default:mese_crystal",
872 sounds = default.node_sound_stone_defaults(),
875 minetest.register_node("default:mese", {
876 description = "Mese Block",
877 tiles = {"default_mese_block.png"},
879 groups = {cracky = 1, level = 2},
880 sounds = default.node_sound_stone_defaults(),
885 minetest.register_node("default:stone_with_gold", {
886 description = "Gold Ore",
887 tiles = {"default_stone.png^default_mineral_gold.png"},
888 groups = {cracky = 2},
889 drop = "default:gold_lump",
890 sounds = default.node_sound_stone_defaults(),
893 minetest.register_node("default:goldblock", {
894 description = "Gold Block",
895 tiles = {"default_gold_block.png"},
896 is_ground_content = false,
897 groups = {cracky = 1},
898 sounds = default.node_sound_stone_defaults(),
902 minetest.register_node("default:stone_with_diamond", {
903 description = "Diamond Ore",
904 tiles = {"default_stone.png^default_mineral_diamond.png"},
905 groups = {cracky = 1},
906 drop = "default:diamond",
907 sounds = default.node_sound_stone_defaults(),
910 minetest.register_node("default:diamondblock", {
911 description = "Diamond Block",
912 tiles = {"default_diamond_block.png"},
913 is_ground_content = false,
914 groups = {cracky = 1, level = 3},
915 sounds = default.node_sound_stone_defaults(),
919 -- Plantlife (non-cubic)
922 minetest.register_node("default:cactus", {
923 description = "Cactus",
924 tiles = {"default_cactus_top.png", "default_cactus_top.png",
925 "default_cactus_side.png"},
926 paramtype2 = "facedir",
927 groups = {snappy = 1, choppy = 3},
928 sounds = default.node_sound_wood_defaults(),
929 on_place = minetest.rotate_node,
932 minetest.register_node("default:papyrus", {
933 description = "Papyrus",
934 drawtype = "plantlike",
935 tiles = {"default_papyrus.png"},
936 inventory_image = "default_papyrus.png",
937 wield_image = "default_papyrus.png",
939 sunlight_propagates = true,
943 fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
945 groups = {snappy = 3, flammable = 2},
946 sounds = default.node_sound_leaves_defaults(),
948 after_dig_node = function(pos, node, metadata, digger)
949 default.dig_up(pos, node, digger)
953 minetest.register_node("default:dry_shrub", {
954 description = "Dry Shrub",
955 drawtype = "plantlike",
958 tiles = {"default_dry_shrub.png"},
959 inventory_image = "default_dry_shrub.png",
960 wield_image = "default_dry_shrub.png",
962 sunlight_propagates = true,
965 groups = {snappy = 3, flammable = 3, attached_node = 1},
966 sounds = default.node_sound_leaves_defaults(),
969 fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
973 minetest.register_node("default:junglegrass", {
974 description = "Jungle Grass",
975 drawtype = "plantlike",
978 tiles = {"default_junglegrass.png"},
979 inventory_image = "default_junglegrass.png",
980 wield_image = "default_junglegrass.png",
982 sunlight_propagates = true,
985 groups = {snappy = 3, flora = 1, attached_node = 1, grass = 1},
986 sounds = default.node_sound_leaves_defaults(),
989 fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
994 minetest.register_node("default:grass_1", {
995 description = "Grass",
996 drawtype = "plantlike",
998 tiles = {"default_grass_1.png"},
999 -- Use texture of a taller grass stage in inventory
1000 inventory_image = "default_grass_3.png",
1001 wield_image = "default_grass_3.png",
1002 paramtype = "light",
1003 sunlight_propagates = true,
1005 buildable_to = true,
1006 groups = {snappy = 3, flora = 1, attached_node = 1, grass = 1},
1007 sounds = default.node_sound_leaves_defaults(),
1010 fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
1013 on_place = function(itemstack, placer, pointed_thing)
1014 -- place a random grass node
1015 local stack = ItemStack("default:grass_" .. math.random(1,5))
1016 local ret = minetest.item_place(stack, placer, pointed_thing)
1017 return ItemStack("default:grass_1 " ..
1018 itemstack:get_count() - (1 - ret:get_count()))
1023 minetest.register_node("default:grass_" .. i, {
1024 description = "Grass",
1025 drawtype = "plantlike",
1027 tiles = {"default_grass_" .. i .. ".png"},
1028 inventory_image = "default_grass_" .. i .. ".png",
1029 wield_image = "default_grass_" .. i .. ".png",
1030 paramtype = "light",
1031 sunlight_propagates = true,
1033 buildable_to = true,
1034 drop = "default:grass_1",
1035 groups = {snappy = 3, flora = 1, attached_node = 1,
1036 not_in_creative_inventory = 1, grass = 1},
1037 sounds = default.node_sound_leaves_defaults(),
1040 fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
1046 minetest.register_node("default:dry_grass_1", {
1047 description = "Dry Grass",
1048 drawtype = "plantlike",
1050 tiles = {"default_dry_grass_1.png"},
1051 inventory_image = "default_dry_grass_3.png",
1052 wield_image = "default_dry_grass_3.png",
1053 paramtype = "light",
1054 sunlight_propagates = true,
1056 buildable_to = true,
1057 groups = {snappy = 3, flammable = 3, flora = 1,
1058 attached_node = 1, dry_grass = 1},
1059 sounds = default.node_sound_leaves_defaults(),
1062 fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
1065 on_place = function(itemstack, placer, pointed_thing)
1066 -- place a random dry grass node
1067 local stack = ItemStack("default:dry_grass_" .. math.random(1, 5))
1068 local ret = minetest.item_place(stack, placer, pointed_thing)
1069 return ItemStack("default:dry_grass_1 " ..
1070 itemstack:get_count() - (1 - ret:get_count()))
1075 minetest.register_node("default:dry_grass_" .. i, {
1076 description = "Dry Grass",
1077 drawtype = "plantlike",
1079 tiles = {"default_dry_grass_" .. i .. ".png"},
1080 inventory_image = "default_dry_grass_" .. i .. ".png",
1081 wield_image = "default_dry_grass_" .. i .. ".png",
1082 paramtype = "light",
1083 sunlight_propagates = true,
1085 buildable_to = true,
1086 groups = {snappy = 3, flammable = 3, flora = 1, attached_node = 1,
1087 not_in_creative_inventory=1, dry_grass = 1},
1088 drop = "default:dry_grass_1",
1089 sounds = default.node_sound_leaves_defaults(),
1092 fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
1101 minetest.register_node("default:water_source", {
1102 description = "Water Source",
1103 drawtype = "liquid",
1106 name = "default_water_source_animated.png",
1108 type = "vertical_frames",
1116 -- New-style water source material (mostly unused)
1118 name = "default_water_source_animated.png",
1120 type = "vertical_frames",
1125 backface_culling = false,
1129 paramtype = "light",
1133 buildable_to = true,
1134 is_ground_content = false,
1137 liquidtype = "source",
1138 liquid_alternative_flowing = "default:water_flowing",
1139 liquid_alternative_source = "default:water_source",
1140 liquid_viscosity = 1,
1141 post_effect_color = {a = 103, r = 30, g = 60, b = 90},
1142 groups = {water = 3, liquid = 3, puts_out_fire = 1},
1145 minetest.register_node("default:water_flowing", {
1146 description = "Flowing Water",
1147 drawtype = "flowingliquid",
1148 tiles = {"default_water.png"},
1151 name = "default_water_flowing_animated.png",
1152 backface_culling = false,
1154 type = "vertical_frames",
1161 name = "default_water_flowing_animated.png",
1162 backface_culling = true,
1164 type = "vertical_frames",
1172 paramtype = "light",
1173 paramtype2 = "flowingliquid",
1177 buildable_to = true,
1178 is_ground_content = false,
1181 liquidtype = "flowing",
1182 liquid_alternative_flowing = "default:water_flowing",
1183 liquid_alternative_source = "default:water_source",
1184 liquid_viscosity = 1,
1185 post_effect_color = {a = 103, r = 30, g = 60, b = 90},
1186 groups = {water = 3, liquid = 3, puts_out_fire = 1,
1187 not_in_creative_inventory = 1},
1191 minetest.register_node("default:river_water_source", {
1192 description = "River Water Source",
1193 drawtype = "liquid",
1196 name = "default_river_water_source_animated.png",
1198 type = "vertical_frames",
1207 name = "default_river_water_source_animated.png",
1209 type = "vertical_frames",
1214 backface_culling = false,
1218 paramtype = "light",
1222 buildable_to = true,
1223 is_ground_content = false,
1226 liquidtype = "source",
1227 liquid_alternative_flowing = "default:river_water_flowing",
1228 liquid_alternative_source = "default:river_water_source",
1229 liquid_viscosity = 1,
1230 liquid_renewable = false,
1232 post_effect_color = {a = 103, r = 30, g = 76, b = 90},
1233 groups = {water = 3, liquid = 3, puts_out_fire = 1},
1236 minetest.register_node("default:river_water_flowing", {
1237 description = "Flowing River Water",
1238 drawtype = "flowingliquid",
1239 tiles = {"default_river_water.png"},
1242 name = "default_river_water_flowing_animated.png",
1243 backface_culling = false,
1245 type = "vertical_frames",
1252 name = "default_river_water_flowing_animated.png",
1253 backface_culling = true,
1255 type = "vertical_frames",
1263 paramtype = "light",
1264 paramtype2 = "flowingliquid",
1268 buildable_to = true,
1269 is_ground_content = false,
1272 liquidtype = "flowing",
1273 liquid_alternative_flowing = "default:river_water_flowing",
1274 liquid_alternative_source = "default:river_water_source",
1275 liquid_viscosity = 1,
1276 liquid_renewable = false,
1278 post_effect_color = {a = 103, r = 30, g = 76, b = 90},
1279 groups = {water = 3, liquid = 3, puts_out_fire = 1,
1280 not_in_creative_inventory = 1},
1284 minetest.register_node("default:lava_source", {
1285 description = "Lava Source",
1286 drawtype = "liquid",
1289 name = "default_lava_source_animated.png",
1291 type = "vertical_frames",
1299 -- New-style lava source material (mostly unused)
1301 name = "default_lava_source_animated.png",
1303 type = "vertical_frames",
1308 backface_culling = false,
1311 paramtype = "light",
1312 light_source = default.LIGHT_MAX - 1,
1316 buildable_to = true,
1317 is_ground_content = false,
1320 liquidtype = "source",
1321 liquid_alternative_flowing = "default:lava_flowing",
1322 liquid_alternative_source = "default:lava_source",
1323 liquid_viscosity = 7,
1324 liquid_renewable = false,
1325 damage_per_second = 4 * 2,
1326 post_effect_color = {a = 191, r = 255, g = 64, b = 0},
1327 groups = {lava = 3, liquid = 2, hot = 3, igniter = 1},
1330 minetest.register_node("default:lava_flowing", {
1331 description = "Flowing Lava",
1332 drawtype = "flowingliquid",
1333 tiles = {"default_lava.png"},
1336 name = "default_lava_flowing_animated.png",
1337 backface_culling = false,
1339 type = "vertical_frames",
1346 name = "default_lava_flowing_animated.png",
1347 backface_culling = true,
1349 type = "vertical_frames",
1356 paramtype = "light",
1357 paramtype2 = "flowingliquid",
1358 light_source = default.LIGHT_MAX - 1,
1362 buildable_to = true,
1363 is_ground_content = false,
1366 liquidtype = "flowing",
1367 liquid_alternative_flowing = "default:lava_flowing",
1368 liquid_alternative_source = "default:lava_source",
1369 liquid_viscosity = 7,
1370 liquid_renewable = false,
1371 damage_per_second = 4 * 2,
1372 post_effect_color = {a = 191, r = 255, g = 64, b = 0},
1373 groups = {lava = 3, liquid = 2, hot = 3, igniter = 1,
1374 not_in_creative_inventory = 1},
1378 -- Tools / "Advanced" crafting / Non-"natural"
1381 minetest.register_node("default:torch", {
1382 description = "Torch",
1383 drawtype = "torchlike",
1386 name = "default_torch_on_floor_animated.png",
1388 type = "vertical_frames",
1395 name="default_torch_on_ceiling_animated.png",
1397 type = "vertical_frames",
1404 name="default_torch_animated.png",
1406 type = "vertical_frames",
1413 inventory_image = "default_torch_on_floor.png",
1414 wield_image = "default_torch_on_floor.png",
1415 paramtype = "light",
1416 paramtype2 = "wallmounted",
1417 sunlight_propagates = true,
1418 is_ground_content = false,
1420 light_source = default.LIGHT_MAX - 1,
1422 type = "wallmounted",
1423 wall_top = {-0.1, 0.5 - 0.6, -0.1, 0.1, 0.5, 0.1},
1424 wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5 + 0.6, 0.1},
1425 wall_side = {-0.5, -0.3, -0.1, -0.5 + 0.3, 0.3, 0.1},
1427 groups = {choppy = 2, dig_immediate = 3, flammable = 1, attached_node = 1},
1428 legacy_wallmounted = true,
1429 sounds = default.node_sound_defaults(),
1433 local chest_formspec =
1436 default.gui_bg_img ..
1437 default.gui_slots ..
1438 "list[current_name;main;0,0.3;8,4;]" ..
1439 "list[current_player;main;0,4.85;8,1;]" ..
1440 "list[current_player;main;0,6.08;8,3;8]" ..
1441 "listring[current_name;main]" ..
1442 "listring[current_player;main]" ..
1443 default.get_hotbar_bg(0,4.85)
1445 local function get_locked_chest_formspec(pos)
1446 local spos = pos.x .. "," .. pos.y .. "," .. pos.z
1450 default.gui_bg_img ..
1451 default.gui_slots ..
1452 "list[nodemeta:" .. spos .. ";main;0,0.3;8,4;]" ..
1453 "list[current_player;main;0,4.85;8,1;]" ..
1454 "list[current_player;main;0,6.08;8,3;8]" ..
1455 "listring[nodemeta:" .. spos .. ";main]" ..
1456 "listring[current_player;main]" ..
1457 default.get_hotbar_bg(0,4.85)
1461 local function has_locked_chest_privilege(meta, player)
1464 if minetest.check_player_privs(player, "protection_bypass") then
1467 name = player:get_player_name()
1469 if name ~= meta:get_string("owner") then
1475 minetest.register_node("default:chest", {
1476 description = "Chest",
1477 tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
1478 "default_chest_side.png", "default_chest_side.png", "default_chest_front.png"},
1479 paramtype2 = "facedir",
1480 groups = {choppy = 2, oddly_breakable_by_hand = 2},
1481 legacy_facedir_simple = true,
1482 is_ground_content = false,
1483 sounds = default.node_sound_wood_defaults(),
1485 on_construct = function(pos)
1486 local meta = minetest.get_meta(pos)
1487 meta:set_string("formspec", chest_formspec)
1488 local inv = meta:get_inventory()
1489 inv:set_size("main", 8*4)
1491 can_dig = function(pos,player)
1492 local meta = minetest.get_meta(pos);
1493 local inv = meta:get_inventory()
1494 return inv:is_empty("main")
1496 on_metadata_inventory_move = function(pos, from_list, from_index,
1497 to_list, to_index, count, player)
1498 minetest.log("action", player:get_player_name() ..
1499 " moves stuff in chest at " .. minetest.pos_to_string(pos))
1501 on_metadata_inventory_put = function(pos, listname, index, stack, player)
1502 minetest.log("action", player:get_player_name() ..
1503 " moves " .. stack:get_name() ..
1504 " to chest at " .. minetest.pos_to_string(pos))
1506 on_metadata_inventory_take = function(pos, listname, index, stack, player)
1507 minetest.log("action", player:get_player_name() ..
1508 " takes " .. stack:get_name() ..
1509 " from chest at " .. minetest.pos_to_string(pos))
1511 on_blast = function(pos)
1513 default.get_inventory_drops(pos, "main", drops)
1514 drops[#drops+1] = "default:chest"
1515 minetest.remove_node(pos)
1520 minetest.register_node("default:chest_locked", {
1521 description = "Locked Chest",
1522 tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
1523 "default_chest_side.png", "default_chest_side.png", "default_chest_lock.png"},
1524 paramtype2 = "facedir",
1525 groups = {choppy = 2, oddly_breakable_by_hand = 2},
1526 legacy_facedir_simple = true,
1527 is_ground_content = false,
1528 sounds = default.node_sound_wood_defaults(),
1530 after_place_node = function(pos, placer)
1531 local meta = minetest.get_meta(pos)
1532 meta:set_string("owner", placer:get_player_name() or "")
1533 meta:set_string("infotext", "Locked Chest (owned by " ..
1534 meta:get_string("owner") .. ")")
1536 on_construct = function(pos)
1537 local meta = minetest.get_meta(pos)
1538 meta:set_string("owner", "")
1539 local inv = meta:get_inventory()
1540 inv:set_size("main", 8 * 4)
1542 can_dig = function(pos,player)
1543 local meta = minetest.get_meta(pos);
1544 local inv = meta:get_inventory()
1545 return inv:is_empty("main") and has_locked_chest_privilege(meta, player)
1547 allow_metadata_inventory_move = function(pos, from_list, from_index,
1548 to_list, to_index, count, player)
1549 local meta = minetest.get_meta(pos)
1550 if not has_locked_chest_privilege(meta, player) then
1555 allow_metadata_inventory_put = function(pos, listname, index, stack, player)
1556 local meta = minetest.get_meta(pos)
1557 if not has_locked_chest_privilege(meta, player) then
1560 return stack:get_count()
1562 allow_metadata_inventory_take = function(pos, listname, index, stack, player)
1563 local meta = minetest.get_meta(pos)
1564 if not has_locked_chest_privilege(meta, player) then
1567 return stack:get_count()
1569 on_metadata_inventory_put = function(pos, listname, index, stack, player)
1570 minetest.log("action", player:get_player_name() ..
1571 " moves " .. stack:get_name() ..
1572 " to locked chest at " .. minetest.pos_to_string(pos))
1574 on_metadata_inventory_take = function(pos, listname, index, stack, player)
1575 minetest.log("action", player:get_player_name() ..
1576 " takes " .. stack:get_name() ..
1577 " from locked chest at " .. minetest.pos_to_string(pos))
1579 on_rightclick = function(pos, node, clicker)
1580 local meta = minetest.get_meta(pos)
1581 if has_locked_chest_privilege(meta, clicker) then
1582 minetest.show_formspec(
1583 clicker:get_player_name(),
1584 "default:chest_locked",
1585 get_locked_chest_formspec(pos)
1589 on_blast = function() end,
1593 local bookshelf_formspec =
1596 default.gui_bg_img ..
1597 default.gui_slots ..
1598 "list[context;books;0,0.3;8,2;]" ..
1599 "list[current_player;main;0,2.85;8,1;]" ..
1600 "list[current_player;main;0,4.08;8,3;8]" ..
1601 "listring[context;books]" ..
1602 "listring[current_player;main]" ..
1603 default.get_hotbar_bg(0,2.85)
1605 minetest.register_node("default:bookshelf", {
1606 description = "Bookshelf",
1607 tiles = {"default_wood.png", "default_wood.png", "default_wood.png",
1608 "default_wood.png", "default_bookshelf.png", "default_bookshelf.png"},
1609 paramtype2 = "facedir",
1610 is_ground_content = false,
1611 groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3},
1612 sounds = default.node_sound_wood_defaults(),
1614 on_construct = function(pos)
1615 local meta = minetest.get_meta(pos)
1616 meta:set_string("formspec", bookshelf_formspec)
1617 local inv = meta:get_inventory()
1618 inv:set_size("books", 8 * 2)
1620 can_dig = function(pos,player)
1621 local inv = minetest.get_meta(pos):get_inventory()
1622 return inv:is_empty("books")
1624 allow_metadata_inventory_put = function(pos, listname, index, stack)
1625 if minetest.get_item_group(stack:get_name(), "book") ~= 0 then
1626 return stack:get_count()
1630 on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
1631 minetest.log("action", player:get_player_name() ..
1632 " moves stuff in bookshelf at " .. minetest.pos_to_string(pos))
1634 on_metadata_inventory_put = function(pos, listname, index, stack, player)
1635 minetest.log("action", player:get_player_name() ..
1636 " moves stuff to bookshelf at " .. minetest.pos_to_string(pos))
1638 on_metadata_inventory_take = function(pos, listname, index, stack, player)
1639 minetest.log("action", player:get_player_name() ..
1640 " takes stuff from bookshelf at " .. minetest.pos_to_string(pos))
1642 on_blast = function(pos)
1644 default.get_inventory_drops(pos, "books", drops)
1645 drops[#drops+1] = "default:bookshelf"
1646 minetest.remove_node(pos)
1651 local function register_sign(material, desc, def)
1652 minetest.register_node("default:sign_wall_" .. material, {
1653 description = desc .. " Sign",
1654 drawtype = "nodebox",
1655 tiles = {"default_sign_wall_" .. material .. ".png"},
1656 inventory_image = "default_sign_" .. material .. ".png",
1657 wield_image = "default_sign_" .. material .. ".png",
1658 paramtype = "light",
1659 paramtype2 = "wallmounted",
1660 sunlight_propagates = true,
1661 is_ground_content = false,
1664 type = "wallmounted",
1665 wall_top = {-0.4375, 0.4375, -0.3125, 0.4375, 0.5, 0.3125},
1666 wall_bottom = {-0.4375, -0.5, -0.3125, 0.4375, -0.4375, 0.3125},
1667 wall_side = {-0.5, -0.3125, -0.4375, -0.4375, 0.3125, 0.4375},
1669 groups = def.groups,
1670 legacy_wallmounted = true,
1671 sounds = def.sounds,
1673 on_construct = function(pos)
1674 --local n = minetest.get_node(pos)
1675 local meta = minetest.get_meta(pos)
1676 meta:set_string("formspec", "field[text;;${text}]")
1678 on_receive_fields = function(pos, formname, fields, sender)
1679 --print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields))
1680 local player_name = sender:get_player_name()
1681 if minetest.is_protected(pos, player_name) then
1682 minetest.record_protection_violation(pos, player_name)
1685 local meta = minetest.get_meta(pos)
1686 if not fields.text then return end
1687 minetest.log("action", (player_name or "") .. " wrote \"" ..
1688 fields.text .. "\" to sign at " .. minetest.pos_to_string(pos))
1689 meta:set_string("text", fields.text)
1690 meta:set_string("infotext", '"' .. fields.text .. '"')
1695 register_sign("wood", "Wooden", {
1696 sounds = default.node_sound_wood_defaults(),
1697 groups = {choppy = 2, attached_node = 1, flammable = 2, oddly_breakable_by_hand = 3}
1700 register_sign("steel", "Steel", {
1701 sounds = default.node_sound_defaults(),
1702 groups = {cracky = 2, attached_node = 1}
1705 minetest.register_node("default:ladder_wood", {
1706 description = "Wooden Ladder",
1707 drawtype = "signlike",
1708 tiles = {"default_ladder_wood.png"},
1709 inventory_image = "default_ladder_wood.png",
1710 wield_image = "default_ladder_wood.png",
1711 paramtype = "light",
1712 paramtype2 = "wallmounted",
1713 sunlight_propagates = true,
1716 is_ground_content = false,
1718 type = "wallmounted",
1719 --wall_top = = <default>
1720 --wall_bottom = = <default>
1721 --wall_side = = <default>
1723 groups = {choppy = 2, oddly_breakable_by_hand = 3, flammable = 2},
1724 legacy_wallmounted = true,
1725 sounds = default.node_sound_wood_defaults(),
1728 minetest.register_node("default:ladder_steel", {
1729 description = "Steel Ladder",
1730 drawtype = "signlike",
1731 tiles = {"default_ladder_steel.png"},
1732 inventory_image = "default_ladder_steel.png",
1733 wield_image = "default_ladder_steel.png",
1734 paramtype = "light",
1735 paramtype2 = "wallmounted",
1736 sunlight_propagates = true,
1739 is_ground_content = false,
1741 type = "wallmounted",
1742 --wall_top = = <default>
1743 --wall_bottom = = <default>
1744 --wall_side = = <default>
1746 groups = {cracky = 2},
1747 sounds = default.node_sound_stone_defaults(),
1750 default.register_fence("default:fence_wood", {
1751 description = "Wooden Fence",
1752 texture = "default_fence_wood.png",
1753 material = "default:wood",
1754 groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
1755 sounds = default.node_sound_wood_defaults()
1758 default.register_fence("default:fence_acacia_wood", {
1759 description = "Acacia Fence",
1760 texture = "default_fence_acacia_wood.png",
1761 material = "default:acacia_wood",
1762 groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
1763 sounds = default.node_sound_wood_defaults()
1766 default.register_fence("default:fence_junglewood", {
1767 description = "Junglewood Fence",
1768 texture = "default_fence_junglewood.png",
1769 material = "default:junglewood",
1770 groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
1771 sounds = default.node_sound_wood_defaults()
1774 default.register_fence("default:fence_pine_wood", {
1775 description = "Pine Fence",
1776 texture = "default_fence_pine_wood.png",
1777 material = "default:pine_wood",
1778 groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
1779 sounds = default.node_sound_wood_defaults()
1782 default.register_fence("default:fence_aspen_wood", {
1783 description = "Aspen Fence",
1784 texture = "default_fence_aspen_wood.png",
1785 material = "default:aspen_wood",
1786 groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
1787 sounds = default.node_sound_wood_defaults()
1790 minetest.register_node("default:glass", {
1791 description = "Glass",
1792 drawtype = "glasslike_framed_optional",
1793 tiles = {"default_glass.png", "default_glass_detail.png"},
1794 paramtype = "light",
1795 sunlight_propagates = true,
1796 is_ground_content = false,
1797 groups = {cracky = 3, oddly_breakable_by_hand = 3},
1798 sounds = default.node_sound_glass_defaults(),
1801 minetest.register_node("default:obsidian_glass", {
1802 description = "Obsidian Glass",
1803 drawtype = "glasslike_framed_optional",
1804 tiles = {"default_obsidian_glass.png", "default_obsidian_glass_detail.png"},
1805 paramtype = "light",
1806 is_ground_content = false,
1807 sunlight_propagates = true,
1808 sounds = default.node_sound_glass_defaults(),
1809 groups = {cracky = 3},
1813 minetest.register_node("default:rail", {
1814 description = "Rail",
1815 drawtype = "raillike",
1816 tiles = {"default_rail.png", "default_rail_curved.png",
1817 "default_rail_t_junction.png", "default_rail_crossing.png"},
1818 inventory_image = "default_rail.png",
1819 wield_image = "default_rail.png",
1820 paramtype = "light",
1821 sunlight_propagates = true,
1823 is_ground_content = false,
1826 -- but how to specify the dimensions for curved and sideways rails?
1827 fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
1829 groups = {bendy = 2, dig_immediate = 2, attached_node = 1,
1830 connect_to_raillike = minetest.raillike_group("rail")},
1834 minetest.register_node("default:brick", {
1835 description = "Brick Block",
1836 paramtype2 = "facedir",
1838 tiles = {"default_brick.png"},
1839 is_ground_content = false,
1840 groups = {cracky = 3},
1841 sounds = default.node_sound_stone_defaults(),
1845 minetest.register_node("default:meselamp", {
1846 description = "Mese Lamp",
1847 drawtype = "glasslike",
1848 tiles = {"default_meselamp.png"},
1849 paramtype = "light",
1850 sunlight_propagates = true,
1851 is_ground_content = false,
1852 groups = {cracky = 3, oddly_breakable_by_hand = 3},
1853 sounds = default.node_sound_glass_defaults(),
1854 light_source = default.LIGHT_MAX,
1861 minetest.register_node("default:cloud", {
1862 description = "Cloud",
1863 tiles = {"default_cloud.png"},
1864 is_ground_content = false,
1865 sounds = default.node_sound_defaults(),
1866 groups = {not_in_creative_inventory = 1},
1869 minetest.register_node("default:nyancat", {
1870 description = "Nyan Cat",
1871 tiles = {"default_nc_side.png", "default_nc_side.png", "default_nc_side.png",
1872 "default_nc_side.png", "default_nc_back.png", "default_nc_front.png"},
1873 paramtype2 = "facedir",
1874 groups = {cracky = 2},
1875 is_ground_content = false,
1876 legacy_facedir_simple = true,
1877 sounds = default.node_sound_defaults(),
1880 minetest.register_node("default:nyancat_rainbow", {
1881 description = "Nyan Cat Rainbow",
1883 "default_nc_rb.png^[transformR90", "default_nc_rb.png^[transformR90",
1884 "default_nc_rb.png", "default_nc_rb.png"
1886 paramtype2 = "facedir",
1887 groups = {cracky = 2},
1888 is_ground_content = false,
1889 sounds = default.node_sound_defaults(),