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)
27 default:desert_stonebrick
28 default:desert_stone_block
31 default:sandstonebrick
32 default:sandstone_block
36 default:obsidian_block
40 (1. Material 2. Modified forms)
43 default:dirt_with_grass
44 default:dirt_with_grass_footsteps
45 default:dirt_with_dry_grass
46 default:dirt_with_snow
62 (1. Trunk 2. Fabricated trunk 3. Leaves 4. Sapling 5. Fruits)
83 default:acacia_sapling
92 (1. In stone 2. Blocks)
94 default:stone_with_coal
97 default:stone_with_iron
100 default:stone_with_copper
104 default:stone_with_gold
107 default:stone_with_mese
110 default:stone_with_diamond
113 Plantlife (non-cubic)
114 ---------------------
135 (1. Source 2. Flowing)
138 default:water_flowing
140 default:river_water_source
141 default:river_water_flowing
146 Tools / "Advanced" crafting / Non-"natural"
147 -------------------------------------------
156 default:sign_wall_wood
157 default:sign_wall_steel
163 default:fence_acacia_wood
164 default:fence_junglewood
165 default:fence_pine_wood
166 default:fence_aspen_wood
169 default:obsidian_glass
188 minetest.register_node("default:stone", {
189 description = "Stone",
190 tiles = {"default_stone.png"},
191 groups = {cracky = 3, stone = 1},
192 drop = 'default:cobble',
193 legacy_mineral = true,
194 sounds = default.node_sound_stone_defaults(),
197 minetest.register_node("default:cobble", {
198 description = "Cobblestone",
199 tiles = {"default_cobble.png"},
200 is_ground_content = false,
201 groups = {cracky = 3, stone = 2},
202 sounds = default.node_sound_stone_defaults(),
205 minetest.register_node("default:stonebrick", {
206 description = "Stone Brick",
207 paramtype2 = "facedir",
209 tiles = {"default_stone_brick.png"},
210 is_ground_content = false,
211 groups = {cracky = 2, stone = 1},
212 sounds = default.node_sound_stone_defaults(),
215 minetest.register_node("default:stone_block", {
216 description = "Stone Block",
217 tiles = {"default_stone_block.png"},
218 is_ground_content = false,
219 groups = {cracky = 2, stone = 1},
220 sounds = default.node_sound_stone_defaults(),
223 minetest.register_node("default:mossycobble", {
224 description = "Mossy Cobblestone",
225 tiles = {"default_mossycobble.png"},
226 is_ground_content = false,
227 groups = {cracky = 3, stone = 1},
228 sounds = default.node_sound_stone_defaults(),
232 minetest.register_node("default:desert_stone", {
233 description = "Desert Stone",
234 tiles = {"default_desert_stone.png"},
235 groups = {cracky = 3, stone = 1},
236 drop = 'default:desert_cobble',
237 legacy_mineral = true,
238 sounds = default.node_sound_stone_defaults(),
241 minetest.register_node("default:desert_cobble", {
242 description = "Desert Cobblestone",
243 tiles = {"default_desert_cobble.png"},
244 is_ground_content = false,
245 groups = {cracky = 3, stone = 2},
246 sounds = default.node_sound_stone_defaults(),
249 minetest.register_node("default:desert_stonebrick", {
250 description = "Desert Stone Brick",
251 paramtype2 = "facedir",
253 tiles = {"default_desert_stone_brick.png"},
254 is_ground_content = false,
255 groups = {cracky = 2, stone = 1},
256 sounds = default.node_sound_stone_defaults(),
259 minetest.register_node("default:desert_stone_block", {
260 description = "Desert Stone Block",
261 tiles = {"default_desert_stone_block.png"},
262 is_ground_content = false,
263 groups = {cracky = 2, stone = 1},
264 sounds = default.node_sound_stone_defaults(),
268 minetest.register_node("default:sandstone", {
269 description = "Sandstone",
270 tiles = {"default_sandstone.png"},
271 groups = {crumbly = 1, cracky = 3},
272 sounds = default.node_sound_stone_defaults(),
275 minetest.register_node("default:sandstonebrick", {
276 description = "Sandstone Brick",
277 paramtype2 = "facedir",
279 tiles = {"default_sandstone_brick.png"},
280 is_ground_content = false,
281 groups = {cracky = 2},
282 sounds = default.node_sound_stone_defaults(),
285 minetest.register_node("default:sandstone_block", {
286 description = "Sandstone Block",
287 tiles = {"default_sandstone_block.png"},
288 is_ground_content = false,
289 groups = {cracky = 2},
290 sounds = default.node_sound_stone_defaults(),
294 minetest.register_node("default:obsidian", {
295 description = "Obsidian",
296 tiles = {"default_obsidian.png"},
297 sounds = default.node_sound_stone_defaults(),
298 groups = {cracky = 1, level = 2},
301 minetest.register_node("default:obsidianbrick", {
302 description = "Obsidian Brick",
303 paramtype2 = "facedir",
305 tiles = {"default_obsidian_brick.png"},
306 is_ground_content = false,
307 sounds = default.node_sound_stone_defaults(),
308 groups = {cracky = 1, level = 2},
311 minetest.register_node("default:obsidian_block", {
312 description = "Obsidian Block",
313 tiles = {"default_obsidian_block.png"},
314 is_ground_content = false,
315 sounds = default.node_sound_stone_defaults(),
316 groups = {cracky = 1, level = 2},
323 minetest.register_node("default:dirt", {
324 description = "Dirt",
325 tiles = {"default_dirt.png"},
326 groups = {crumbly = 3, soil = 1},
327 sounds = default.node_sound_dirt_defaults(),
330 minetest.register_node("default:dirt_with_grass", {
331 description = "Dirt with Grass",
332 tiles = {"default_grass.png", "default_dirt.png",
333 {name = "default_dirt.png^default_grass_side.png",
334 tileable_vertical = false}},
335 groups = {crumbly = 3, soil = 1},
336 drop = 'default:dirt',
337 sounds = default.node_sound_dirt_defaults({
338 footstep = {name = "default_grass_footstep", gain = 0.25},
342 minetest.register_node("default:dirt_with_grass_footsteps", {
343 description = "Dirt with Grass and Footsteps",
344 tiles = {"default_grass.png^default_footprint.png", "default_dirt.png",
345 {name = "default_dirt.png^default_grass_side.png",
346 tileable_vertical = false}},
347 groups = {crumbly = 3, soil = 1, not_in_creative_inventory = 1},
348 drop = 'default:dirt',
349 sounds = default.node_sound_dirt_defaults({
350 footstep = {name = "default_grass_footstep", gain = 0.25},
354 minetest.register_node("default:dirt_with_dry_grass", {
355 description = "Dirt with Dry Grass",
356 tiles = {"default_dry_grass.png",
358 {name = "default_dirt.png^default_dry_grass_side.png",
359 tileable_vertical = false}},
360 groups = {crumbly = 3, soil = 1},
361 drop = 'default:dirt',
362 sounds = default.node_sound_dirt_defaults({
363 footstep = {name = "default_grass_footstep", gain = 0.4},
367 minetest.register_node("default:dirt_with_snow", {
368 description = "Dirt with Snow",
369 tiles = {"default_snow.png", "default_dirt.png",
370 {name = "default_dirt.png^default_snow_side.png",
371 tileable_vertical = false}},
372 groups = {crumbly = 3, soil = 1},
373 drop = 'default:dirt',
374 sounds = default.node_sound_dirt_defaults({
375 footstep = {name = "default_snow_footstep", gain = 0.15},
379 minetest.register_node("default:sand", {
380 description = "Sand",
381 tiles = {"default_sand.png"},
382 groups = {crumbly = 3, falling_node = 1, sand = 1},
383 sounds = default.node_sound_sand_defaults(),
386 minetest.register_node("default:desert_sand", {
387 description = "Desert Sand",
388 tiles = {"default_desert_sand.png"},
389 groups = {crumbly = 3, falling_node = 1, sand = 1},
390 sounds = default.node_sound_sand_defaults(),
394 minetest.register_node("default:gravel", {
395 description = "Gravel",
396 tiles = {"default_gravel.png"},
397 groups = {crumbly = 2, falling_node = 1},
398 sounds = default.node_sound_gravel_defaults(),
402 {items = {'default:flint'}, rarity = 16},
403 {items = {'default:gravel'}}
408 minetest.register_node("default:clay", {
409 description = "Clay",
410 tiles = {"default_clay.png"},
411 groups = {crumbly = 3},
412 drop = 'default:clay_lump 4',
413 sounds = default.node_sound_dirt_defaults(),
417 minetest.register_node("default:snow", {
418 description = "Snow",
419 tiles = {"default_snow.png"},
420 inventory_image = "default_snowball.png",
421 wield_image = "default_snowball.png",
425 drawtype = "nodebox",
429 {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5},
432 groups = {crumbly = 3, falling_node = 1, puts_out_fire = 1},
433 sounds = default.node_sound_dirt_defaults({
434 footstep = {name = "default_snow_footstep", gain = 0.15},
435 dug = {name = "default_snow_footstep", gain = 0.2},
436 dig = {name = "default_snow_footstep", gain = 0.2}
439 on_construct = function(pos)
441 if minetest.get_node(pos).name == "default:dirt_with_grass" then
442 minetest.set_node(pos, {name = "default:dirt_with_snow"})
447 minetest.register_node("default:snowblock", {
448 description = "Snow Block",
449 tiles = {"default_snow.png"},
450 groups = {crumbly = 3, puts_out_fire = 1},
451 sounds = default.node_sound_dirt_defaults({
452 footstep = {name = "default_snow_footstep", gain = 0.15},
453 dug = {name = "default_snow_footstep", gain = 0.2},
454 dig = {name = "default_snow_footstep", gain = 0.2}
458 minetest.register_node("default:ice", {
460 tiles = {"default_ice.png"},
461 is_ground_content = false,
463 groups = {cracky = 3, puts_out_fire = 1},
464 sounds = default.node_sound_glass_defaults(),
471 minetest.register_node("default:tree", {
472 description = "Tree",
473 tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"},
474 paramtype2 = "facedir",
475 is_ground_content = false,
476 groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
477 sounds = default.node_sound_wood_defaults(),
479 on_place = minetest.rotate_node
482 minetest.register_node("default:wood", {
483 description = "Wooden Planks",
484 paramtype2 = "facedir",
486 tiles = {"default_wood.png"},
487 is_ground_content = false,
488 groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, wood = 1},
489 sounds = default.node_sound_wood_defaults(),
492 minetest.register_node("default:sapling", {
493 description = "Sapling",
494 drawtype = "plantlike",
496 tiles = {"default_sapling.png"},
497 inventory_image = "default_sapling.png",
498 wield_image = "default_sapling.png",
500 sunlight_propagates = true,
502 on_timer = default.grow_sapling,
503 on_construct = function(pos)
504 minetest.get_node_timer(pos):start(math.random(2400,4800))
508 fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
510 groups = {snappy = 2, dig_immediate = 3, flammable = 2,
511 attached_node = 1, sapling = 1},
512 sounds = default.node_sound_leaves_defaults(),
515 minetest.register_node("default:leaves", {
516 description = "Leaves",
517 drawtype = "allfaces_optional",
520 tiles = {"default_leaves.png"},
521 special_tiles = {"default_leaves_simple.png"},
523 is_ground_content = false,
524 groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
529 -- player will get sapling with 1/20 chance
530 items = {'default:sapling'},
534 -- player will get leaves only if he get no saplings,
535 -- this is because max_items is 1
536 items = {'default:leaves'},
540 sounds = default.node_sound_leaves_defaults(),
542 after_place_node = default.after_place_leaves,
545 minetest.register_node("default:apple", {
546 description = "Apple",
547 drawtype = "plantlike",
549 tiles = {"default_apple.png"},
550 inventory_image = "default_apple.png",
552 sunlight_propagates = true,
554 is_ground_content = false,
557 fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2}
559 groups = {fleshy = 3, dig_immediate = 3, flammable = 2,
560 leafdecay = 3, leafdecay_drop = 1},
561 on_use = minetest.item_eat(2),
562 sounds = default.node_sound_leaves_defaults(),
564 after_place_node = function(pos, placer, itemstack)
565 if placer:is_player() then
566 minetest.set_node(pos, {name = "default:apple", param2 = 1})
572 minetest.register_node("default:jungletree", {
573 description = "Jungle Tree",
574 tiles = {"default_jungletree_top.png", "default_jungletree_top.png",
575 "default_jungletree.png"},
576 paramtype2 = "facedir",
577 is_ground_content = false,
578 groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
579 sounds = default.node_sound_wood_defaults(),
581 on_place = minetest.rotate_node
584 minetest.register_node("default:junglewood", {
585 description = "Junglewood Planks",
586 paramtype2 = "facedir",
588 tiles = {"default_junglewood.png"},
589 is_ground_content = false,
590 groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, wood = 1},
591 sounds = default.node_sound_wood_defaults(),
594 minetest.register_node("default:jungleleaves", {
595 description = "Jungle Leaves",
596 drawtype = "allfaces_optional",
599 tiles = {"default_jungleleaves.png"},
600 special_tiles = {"default_jungleleaves_simple.png"},
602 is_ground_content = false,
603 groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
607 {items = {'default:junglesapling'}, rarity = 20},
608 {items = {'default:jungleleaves'}}
611 sounds = default.node_sound_leaves_defaults(),
613 after_place_node = default.after_place_leaves,
616 minetest.register_node("default:junglesapling", {
617 description = "Jungle Sapling",
618 drawtype = "plantlike",
620 tiles = {"default_junglesapling.png"},
621 inventory_image = "default_junglesapling.png",
622 wield_image = "default_junglesapling.png",
624 sunlight_propagates = true,
626 on_timer = default.grow_sapling,
627 on_construct = function(pos)
628 minetest.get_node_timer(pos):start(math.random(2400,4800))
632 fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
634 groups = {snappy = 2, dig_immediate = 3, flammable = 2,
635 attached_node = 1, sapling = 1},
636 sounds = default.node_sound_leaves_defaults(),
640 minetest.register_node("default:pine_tree", {
641 description = "Pine Tree",
642 tiles = {"default_pine_tree_top.png", "default_pine_tree_top.png",
643 "default_pine_tree.png"},
644 paramtype2 = "facedir",
645 is_ground_content = false,
646 groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
647 sounds = default.node_sound_wood_defaults(),
649 on_place = minetest.rotate_node
652 minetest.register_node("default:pine_wood", {
653 description = "Pine Wood Planks",
654 paramtype2 = "facedir",
656 tiles = {"default_pine_wood.png"},
657 is_ground_content = false,
658 groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, wood = 1},
659 sounds = default.node_sound_wood_defaults(),
662 minetest.register_node("default:pine_needles",{
663 description = "Pine Needles",
664 drawtype = "allfaces_optional",
666 tiles = {"default_pine_needles.png"},
669 is_ground_content = false,
670 groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
674 {items = {"default:pine_sapling"}, rarity = 20},
675 {items = {"default:pine_needles"}}
678 sounds = default.node_sound_leaves_defaults(),
680 after_place_node = default.after_place_leaves,
683 minetest.register_node("default:pine_sapling", {
684 description = "Pine Sapling",
685 drawtype = "plantlike",
687 tiles = {"default_pine_sapling.png"},
688 inventory_image = "default_pine_sapling.png",
689 wield_image = "default_pine_sapling.png",
691 sunlight_propagates = true,
693 on_timer = default.grow_sapling,
694 on_construct = function(pos)
695 minetest.get_node_timer(pos):start(math.random(2400,4800))
699 fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
701 groups = {snappy = 2, dig_immediate = 3, flammable = 2,
702 attached_node = 1, sapling = 1},
703 sounds = default.node_sound_leaves_defaults(),
707 minetest.register_node("default:acacia_tree", {
708 description = "Acacia Tree",
709 tiles = {"default_acacia_tree_top.png", "default_acacia_tree_top.png",
710 "default_acacia_tree.png"},
711 paramtype2 = "facedir",
712 is_ground_content = false,
713 groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
714 sounds = default.node_sound_wood_defaults(),
716 on_place = minetest.rotate_node
719 minetest.register_node("default:acacia_wood", {
720 description = "Acacia Wood Planks",
721 paramtype2 = "facedir",
723 tiles = {"default_acacia_wood.png"},
724 is_ground_content = false,
725 groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, wood = 1},
726 sounds = default.node_sound_wood_defaults(),
729 minetest.register_node("default:acacia_leaves", {
730 description = "Acacia Leaves",
731 drawtype = "allfaces_optional",
733 tiles = {"default_acacia_leaves.png"},
736 is_ground_content = false,
737 groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
741 {items = {"default:acacia_sapling"}, rarity = 20},
742 {items = {"default:acacia_leaves"}}
745 sounds = default.node_sound_leaves_defaults(),
747 after_place_node = default.after_place_leaves,
750 minetest.register_node("default:acacia_sapling", {
751 description = "Acacia Tree Sapling",
752 drawtype = "plantlike",
754 tiles = {"default_acacia_sapling.png"},
755 inventory_image = "default_acacia_sapling.png",
756 wield_image = "default_acacia_sapling.png",
758 sunlight_propagates = true,
760 on_timer = default.grow_sapling,
761 on_construct = function(pos)
762 minetest.get_node_timer(pos):start(math.random(2400,4800))
766 fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
768 groups = {snappy = 2, dig_immediate = 3, flammable = 2,
769 attached_node = 1, sapling = 1},
770 sounds = default.node_sound_leaves_defaults(),
773 minetest.register_node("default:aspen_tree", {
774 description = "Aspen Tree",
775 tiles = {"default_aspen_tree_top.png", "default_aspen_tree_top.png",
776 "default_aspen_tree.png"},
777 paramtype2 = "facedir",
778 is_ground_content = false,
779 groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
780 sounds = default.node_sound_wood_defaults(),
782 on_place = minetest.rotate_node
785 minetest.register_node("default:aspen_wood", {
786 description = "Aspen Wood Planks",
787 paramtype2 = "facedir",
789 tiles = {"default_aspen_wood.png"},
790 is_ground_content = false,
791 groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, wood = 1},
792 sounds = default.node_sound_wood_defaults(),
795 minetest.register_node("default:aspen_leaves", {
796 description = "Aspen Leaves",
797 drawtype = "allfaces_optional",
799 tiles = {"default_aspen_leaves.png"},
802 is_ground_content = false,
803 groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
807 {items = {"default:aspen_sapling"}, rarity = 20},
808 {items = {"default:aspen_leaves"}}
811 sounds = default.node_sound_leaves_defaults(),
813 after_place_node = default.after_place_leaves,
816 minetest.register_node("default:aspen_sapling", {
817 description = "Aspen Tree Sapling",
818 drawtype = "plantlike",
820 tiles = {"default_aspen_sapling.png"},
821 inventory_image = "default_aspen_sapling.png",
822 wield_image = "default_aspen_sapling.png",
824 sunlight_propagates = true,
826 on_timer = default.grow_sapling,
827 on_construct = function(pos)
828 minetest.get_node_timer(pos):start(math.random(2400,4800))
832 fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
834 groups = {snappy = 2, dig_immediate = 3, flammable = 2,
835 attached_node = 1, sapling = 1},
836 sounds = default.node_sound_leaves_defaults(),
842 minetest.register_node("default:stone_with_coal", {
843 description = "Coal Ore",
844 tiles = {"default_stone.png^default_mineral_coal.png"},
845 groups = {cracky = 3},
846 drop = 'default:coal_lump',
847 sounds = default.node_sound_stone_defaults(),
850 minetest.register_node("default:coalblock", {
851 description = "Coal Block",
852 tiles = {"default_coal_block.png"},
853 is_ground_content = false,
854 groups = {cracky = 3},
855 sounds = default.node_sound_stone_defaults(),
859 minetest.register_node("default:stone_with_iron", {
860 description = "Iron Ore",
861 tiles = {"default_stone.png^default_mineral_iron.png"},
862 groups = {cracky = 2},
863 drop = 'default:iron_lump',
864 sounds = default.node_sound_stone_defaults(),
867 minetest.register_node("default:steelblock", {
868 description = "Steel Block",
869 tiles = {"default_steel_block.png"},
870 is_ground_content = false,
871 groups = {cracky = 1, level = 2},
872 sounds = default.node_sound_stone_defaults(),
876 minetest.register_node("default:stone_with_copper", {
877 description = "Copper Ore",
878 tiles = {"default_stone.png^default_mineral_copper.png"},
879 groups = {cracky = 2},
880 drop = 'default:copper_lump',
881 sounds = default.node_sound_stone_defaults(),
884 minetest.register_node("default:copperblock", {
885 description = "Copper Block",
886 tiles = {"default_copper_block.png"},
887 is_ground_content = false,
888 groups = {cracky = 1, level = 2},
889 sounds = default.node_sound_stone_defaults(),
892 minetest.register_node("default:bronzeblock", {
893 description = "Bronze Block",
894 tiles = {"default_bronze_block.png"},
895 is_ground_content = false,
896 groups = {cracky = 1, level = 2},
897 sounds = default.node_sound_stone_defaults(),
901 minetest.register_node("default:stone_with_mese", {
902 description = "Mese Ore",
903 tiles = {"default_stone.png^default_mineral_mese.png"},
904 groups = {cracky = 1},
905 drop = "default:mese_crystal",
906 sounds = default.node_sound_stone_defaults(),
909 minetest.register_node("default:mese", {
910 description = "Mese Block",
911 tiles = {"default_mese_block.png"},
913 groups = {cracky = 1, level = 2},
914 sounds = default.node_sound_stone_defaults(),
919 minetest.register_node("default:stone_with_gold", {
920 description = "Gold Ore",
921 tiles = {"default_stone.png^default_mineral_gold.png"},
922 groups = {cracky = 2},
923 drop = "default:gold_lump",
924 sounds = default.node_sound_stone_defaults(),
927 minetest.register_node("default:goldblock", {
928 description = "Gold Block",
929 tiles = {"default_gold_block.png"},
930 is_ground_content = false,
931 groups = {cracky = 1},
932 sounds = default.node_sound_stone_defaults(),
936 minetest.register_node("default:stone_with_diamond", {
937 description = "Diamond Ore",
938 tiles = {"default_stone.png^default_mineral_diamond.png"},
939 groups = {cracky = 1},
940 drop = "default:diamond",
941 sounds = default.node_sound_stone_defaults(),
944 minetest.register_node("default:diamondblock", {
945 description = "Diamond Block",
946 tiles = {"default_diamond_block.png"},
947 is_ground_content = false,
948 groups = {cracky = 1, level = 3},
949 sounds = default.node_sound_stone_defaults(),
953 -- Plantlife (non-cubic)
956 minetest.register_node("default:cactus", {
957 description = "Cactus",
958 tiles = {"default_cactus_top.png", "default_cactus_top.png",
959 "default_cactus_side.png"},
960 paramtype2 = "facedir",
961 groups = {snappy = 1, choppy = 3},
962 sounds = default.node_sound_wood_defaults(),
963 on_place = minetest.rotate_node,
966 minetest.register_node("default:papyrus", {
967 description = "Papyrus",
968 drawtype = "plantlike",
969 tiles = {"default_papyrus.png"},
970 inventory_image = "default_papyrus.png",
971 wield_image = "default_papyrus.png",
973 sunlight_propagates = true,
977 fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
979 groups = {snappy = 3, flammable = 2},
980 sounds = default.node_sound_leaves_defaults(),
982 after_dig_node = function(pos, node, metadata, digger)
983 default.dig_up(pos, node, digger)
987 minetest.register_node("default:dry_shrub", {
988 description = "Dry Shrub",
989 drawtype = "plantlike",
992 tiles = {"default_dry_shrub.png"},
993 inventory_image = "default_dry_shrub.png",
994 wield_image = "default_dry_shrub.png",
996 sunlight_propagates = true,
999 groups = {snappy = 3, flammable = 3, attached_node = 1},
1000 sounds = default.node_sound_leaves_defaults(),
1003 fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
1007 minetest.register_node("default:junglegrass", {
1008 description = "Jungle Grass",
1009 drawtype = "plantlike",
1012 tiles = {"default_junglegrass.png"},
1013 inventory_image = "default_junglegrass.png",
1014 wield_image = "default_junglegrass.png",
1015 paramtype = "light",
1016 sunlight_propagates = true,
1018 buildable_to = true,
1019 groups = {snappy = 3, flora = 1, attached_node = 1, grass = 1},
1020 sounds = default.node_sound_leaves_defaults(),
1023 fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
1028 minetest.register_node("default:grass_1", {
1029 description = "Grass",
1030 drawtype = "plantlike",
1032 tiles = {"default_grass_1.png"},
1033 -- Use texture of a taller grass stage in inventory
1034 inventory_image = "default_grass_3.png",
1035 wield_image = "default_grass_3.png",
1036 paramtype = "light",
1037 sunlight_propagates = true,
1039 buildable_to = true,
1040 groups = {snappy = 3, flora = 1, attached_node = 1, grass = 1},
1041 sounds = default.node_sound_leaves_defaults(),
1044 fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
1047 on_place = function(itemstack, placer, pointed_thing)
1048 -- place a random grass node
1049 local stack = ItemStack("default:grass_" .. math.random(1,5))
1050 local ret = minetest.item_place(stack, placer, pointed_thing)
1051 return ItemStack("default:grass_1 " ..
1052 itemstack:get_count() - (1 - ret:get_count()))
1057 minetest.register_node("default:grass_" .. i, {
1058 description = "Grass",
1059 drawtype = "plantlike",
1061 tiles = {"default_grass_" .. i .. ".png"},
1062 inventory_image = "default_grass_" .. i .. ".png",
1063 wield_image = "default_grass_" .. i .. ".png",
1064 paramtype = "light",
1065 sunlight_propagates = true,
1067 buildable_to = true,
1068 drop = "default:grass_1",
1069 groups = {snappy = 3, flora = 1, attached_node = 1,
1070 not_in_creative_inventory = 1, grass = 1},
1071 sounds = default.node_sound_leaves_defaults(),
1074 fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
1080 minetest.register_node("default:dry_grass_1", {
1081 description = "Dry Grass",
1082 drawtype = "plantlike",
1084 tiles = {"default_dry_grass_1.png"},
1085 inventory_image = "default_dry_grass_3.png",
1086 wield_image = "default_dry_grass_3.png",
1087 paramtype = "light",
1088 sunlight_propagates = true,
1090 buildable_to = true,
1091 groups = {snappy = 3, flammable = 3, flora = 1,
1092 attached_node = 1, dry_grass = 1},
1093 sounds = default.node_sound_leaves_defaults(),
1096 fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
1099 on_place = function(itemstack, placer, pointed_thing)
1100 -- place a random dry grass node
1101 local stack = ItemStack("default:dry_grass_" .. math.random(1, 5))
1102 local ret = minetest.item_place(stack, placer, pointed_thing)
1103 return ItemStack("default:dry_grass_1 " ..
1104 itemstack:get_count() - (1 - ret:get_count()))
1109 minetest.register_node("default:dry_grass_" .. i, {
1110 description = "Dry Grass",
1111 drawtype = "plantlike",
1113 tiles = {"default_dry_grass_" .. i .. ".png"},
1114 inventory_image = "default_dry_grass_" .. i .. ".png",
1115 wield_image = "default_dry_grass_" .. i .. ".png",
1116 paramtype = "light",
1117 sunlight_propagates = true,
1119 buildable_to = true,
1120 groups = {snappy = 3, flammable = 3, flora = 1, attached_node = 1,
1121 not_in_creative_inventory=1, dry_grass = 1},
1122 drop = "default:dry_grass_1",
1123 sounds = default.node_sound_leaves_defaults(),
1126 fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
1135 minetest.register_node("default:water_source", {
1136 description = "Water Source",
1137 drawtype = "liquid",
1140 name = "default_water_source_animated.png",
1142 type = "vertical_frames",
1150 -- New-style water source material (mostly unused)
1152 name = "default_water_source_animated.png",
1154 type = "vertical_frames",
1159 backface_culling = false,
1163 paramtype = "light",
1167 buildable_to = true,
1168 is_ground_content = false,
1171 liquidtype = "source",
1172 liquid_alternative_flowing = "default:water_flowing",
1173 liquid_alternative_source = "default:water_source",
1174 liquid_viscosity = 1,
1175 post_effect_color = {a = 103, r = 30, g = 60, b = 90},
1176 groups = {water = 3, liquid = 3, puts_out_fire = 1},
1179 minetest.register_node("default:water_flowing", {
1180 description = "Flowing Water",
1181 drawtype = "flowingliquid",
1182 tiles = {"default_water.png"},
1185 name = "default_water_flowing_animated.png",
1186 backface_culling = false,
1188 type = "vertical_frames",
1195 name = "default_water_flowing_animated.png",
1196 backface_culling = true,
1198 type = "vertical_frames",
1206 paramtype = "light",
1207 paramtype2 = "flowingliquid",
1211 buildable_to = true,
1212 is_ground_content = false,
1215 liquidtype = "flowing",
1216 liquid_alternative_flowing = "default:water_flowing",
1217 liquid_alternative_source = "default:water_source",
1218 liquid_viscosity = 1,
1219 post_effect_color = {a = 103, r = 30, g = 60, b = 90},
1220 groups = {water = 3, liquid = 3, puts_out_fire = 1,
1221 not_in_creative_inventory = 1},
1225 minetest.register_node("default:river_water_source", {
1226 description = "River Water Source",
1227 drawtype = "liquid",
1230 name = "default_river_water_source_animated.png",
1232 type = "vertical_frames",
1241 name = "default_river_water_source_animated.png",
1243 type = "vertical_frames",
1248 backface_culling = false,
1252 paramtype = "light",
1256 buildable_to = true,
1257 is_ground_content = false,
1260 liquidtype = "source",
1261 liquid_alternative_flowing = "default:river_water_flowing",
1262 liquid_alternative_source = "default:river_water_source",
1263 liquid_viscosity = 1,
1264 liquid_renewable = false,
1266 post_effect_color = {a = 103, r = 30, g = 76, b = 90},
1267 groups = {water = 3, liquid = 3, puts_out_fire = 1},
1270 minetest.register_node("default:river_water_flowing", {
1271 description = "Flowing River Water",
1272 drawtype = "flowingliquid",
1273 tiles = {"default_river_water.png"},
1276 name = "default_river_water_flowing_animated.png",
1277 backface_culling = false,
1279 type = "vertical_frames",
1286 name = "default_river_water_flowing_animated.png",
1287 backface_culling = true,
1289 type = "vertical_frames",
1297 paramtype = "light",
1298 paramtype2 = "flowingliquid",
1302 buildable_to = true,
1303 is_ground_content = false,
1306 liquidtype = "flowing",
1307 liquid_alternative_flowing = "default:river_water_flowing",
1308 liquid_alternative_source = "default:river_water_source",
1309 liquid_viscosity = 1,
1310 liquid_renewable = false,
1312 post_effect_color = {a = 103, r = 30, g = 76, b = 90},
1313 groups = {water = 3, liquid = 3, puts_out_fire = 1,
1314 not_in_creative_inventory = 1},
1318 minetest.register_node("default:lava_source", {
1319 description = "Lava Source",
1320 drawtype = "liquid",
1323 name = "default_lava_source_animated.png",
1325 type = "vertical_frames",
1333 -- New-style lava source material (mostly unused)
1335 name = "default_lava_source_animated.png",
1337 type = "vertical_frames",
1342 backface_culling = false,
1345 paramtype = "light",
1346 light_source = default.LIGHT_MAX - 1,
1350 buildable_to = true,
1351 is_ground_content = false,
1354 liquidtype = "source",
1355 liquid_alternative_flowing = "default:lava_flowing",
1356 liquid_alternative_source = "default:lava_source",
1357 liquid_viscosity = 7,
1358 liquid_renewable = false,
1359 damage_per_second = 4 * 2,
1360 post_effect_color = {a = 191, r = 255, g = 64, b = 0},
1361 groups = {lava = 3, liquid = 2, igniter = 1},
1364 minetest.register_node("default:lava_flowing", {
1365 description = "Flowing Lava",
1366 drawtype = "flowingliquid",
1367 tiles = {"default_lava.png"},
1370 name = "default_lava_flowing_animated.png",
1371 backface_culling = false,
1373 type = "vertical_frames",
1380 name = "default_lava_flowing_animated.png",
1381 backface_culling = true,
1383 type = "vertical_frames",
1390 paramtype = "light",
1391 paramtype2 = "flowingliquid",
1392 light_source = default.LIGHT_MAX - 1,
1396 buildable_to = true,
1397 is_ground_content = false,
1400 liquidtype = "flowing",
1401 liquid_alternative_flowing = "default:lava_flowing",
1402 liquid_alternative_source = "default:lava_source",
1403 liquid_viscosity = 7,
1404 liquid_renewable = false,
1405 damage_per_second = 4 * 2,
1406 post_effect_color = {a = 191, r = 255, g = 64, b = 0},
1407 groups = {lava = 3, liquid = 2, igniter = 1,
1408 not_in_creative_inventory = 1},
1412 -- Tools / "Advanced" crafting / Non-"natural"
1415 minetest.register_node("default:torch", {
1416 description = "Torch",
1417 drawtype = "torchlike",
1420 name = "default_torch_on_floor_animated.png",
1422 type = "vertical_frames",
1429 name="default_torch_on_ceiling_animated.png",
1431 type = "vertical_frames",
1438 name="default_torch_animated.png",
1440 type = "vertical_frames",
1447 inventory_image = "default_torch_on_floor.png",
1448 wield_image = "default_torch_on_floor.png",
1449 paramtype = "light",
1450 paramtype2 = "wallmounted",
1451 sunlight_propagates = true,
1452 is_ground_content = false,
1454 light_source = default.LIGHT_MAX - 1,
1456 type = "wallmounted",
1457 wall_top = {-0.1, 0.5 - 0.6, -0.1, 0.1, 0.5, 0.1},
1458 wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5 + 0.6, 0.1},
1459 wall_side = {-0.5, -0.3, -0.1, -0.5 + 0.3, 0.3, 0.1},
1461 groups = {choppy = 2, dig_immediate = 3, flammable = 1, attached_node = 1},
1462 legacy_wallmounted = true,
1463 sounds = default.node_sound_defaults(),
1467 local chest_formspec =
1470 default.gui_bg_img ..
1471 default.gui_slots ..
1472 "list[current_name;main;0,0.3;8,4;]" ..
1473 "list[current_player;main;0,4.85;8,1;]" ..
1474 "list[current_player;main;0,6.08;8,3;8]" ..
1475 "listring[current_name;main]" ..
1476 "listring[current_player;main]" ..
1477 default.get_hotbar_bg(0,4.85)
1479 local function get_locked_chest_formspec(pos)
1480 local spos = pos.x .. "," .. pos.y .. "," .. pos.z
1484 default.gui_bg_img ..
1485 default.gui_slots ..
1486 "list[nodemeta:" .. spos .. ";main;0,0.3;8,4;]" ..
1487 "list[current_player;main;0,4.85;8,1;]" ..
1488 "list[current_player;main;0,6.08;8,3;8]" ..
1489 "listring[nodemeta:" .. spos .. ";main]" ..
1490 "listring[current_player;main]" ..
1491 default.get_hotbar_bg(0,4.85)
1495 local function has_locked_chest_privilege(meta, player)
1498 if minetest.check_player_privs(player, "protection_bypass") then
1501 name = player:get_player_name()
1503 if name ~= meta:get_string("owner") then
1509 minetest.register_node("default:chest", {
1510 description = "Chest",
1511 tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
1512 "default_chest_side.png", "default_chest_side.png", "default_chest_front.png"},
1513 paramtype2 = "facedir",
1514 groups = {choppy = 2, oddly_breakable_by_hand = 2},
1515 legacy_facedir_simple = true,
1516 is_ground_content = false,
1517 sounds = default.node_sound_wood_defaults(),
1519 on_construct = function(pos)
1520 local meta = minetest.get_meta(pos)
1521 meta:set_string("formspec", chest_formspec)
1522 local inv = meta:get_inventory()
1523 inv:set_size("main", 8*4)
1525 can_dig = function(pos,player)
1526 local meta = minetest.get_meta(pos);
1527 local inv = meta:get_inventory()
1528 return inv:is_empty("main")
1530 on_metadata_inventory_move = function(pos, from_list, from_index,
1531 to_list, to_index, count, player)
1532 minetest.log("action", player:get_player_name() ..
1533 " moves stuff in chest at " .. minetest.pos_to_string(pos))
1535 on_metadata_inventory_put = function(pos, listname, index, stack, player)
1536 minetest.log("action", player:get_player_name() ..
1537 " moves " .. stack:get_name() ..
1538 " to chest at " .. minetest.pos_to_string(pos))
1540 on_metadata_inventory_take = function(pos, listname, index, stack, player)
1541 minetest.log("action", player:get_player_name() ..
1542 " takes " .. stack:get_name() ..
1543 " from chest at " .. minetest.pos_to_string(pos))
1545 on_blast = function(pos)
1547 default.get_inventory_drops(pos, "main", drops)
1548 drops[#drops+1] = "default:chest"
1549 minetest.remove_node(pos)
1554 minetest.register_node("default:chest_locked", {
1555 description = "Locked Chest",
1556 tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
1557 "default_chest_side.png", "default_chest_side.png", "default_chest_lock.png"},
1558 paramtype2 = "facedir",
1559 groups = {choppy = 2, oddly_breakable_by_hand = 2},
1560 legacy_facedir_simple = true,
1561 is_ground_content = false,
1562 sounds = default.node_sound_wood_defaults(),
1564 after_place_node = function(pos, placer)
1565 local meta = minetest.get_meta(pos)
1566 meta:set_string("owner", placer:get_player_name() or "")
1567 meta:set_string("infotext", "Locked Chest (owned by " ..
1568 meta:get_string("owner") .. ")")
1570 on_construct = function(pos)
1571 local meta = minetest.get_meta(pos)
1572 meta:set_string("owner", "")
1573 local inv = meta:get_inventory()
1574 inv:set_size("main", 8 * 4)
1576 can_dig = function(pos,player)
1577 local meta = minetest.get_meta(pos);
1578 local inv = meta:get_inventory()
1579 return inv:is_empty("main") and has_locked_chest_privilege(meta, player)
1581 allow_metadata_inventory_move = function(pos, from_list, from_index,
1582 to_list, to_index, count, player)
1583 local meta = minetest.get_meta(pos)
1584 if not has_locked_chest_privilege(meta, player) then
1589 allow_metadata_inventory_put = function(pos, listname, index, stack, player)
1590 local meta = minetest.get_meta(pos)
1591 if not has_locked_chest_privilege(meta, player) then
1594 return stack:get_count()
1596 allow_metadata_inventory_take = function(pos, listname, index, stack, player)
1597 local meta = minetest.get_meta(pos)
1598 if not has_locked_chest_privilege(meta, player) then
1601 return stack:get_count()
1603 on_metadata_inventory_put = function(pos, listname, index, stack, player)
1604 minetest.log("action", player:get_player_name() ..
1605 " moves " .. stack:get_name() ..
1606 " to locked chest at " .. minetest.pos_to_string(pos))
1608 on_metadata_inventory_take = function(pos, listname, index, stack, player)
1609 minetest.log("action", player:get_player_name() ..
1610 " takes " .. stack:get_name() ..
1611 " from locked chest at " .. minetest.pos_to_string(pos))
1613 on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
1614 local meta = minetest.get_meta(pos)
1615 if has_locked_chest_privilege(meta, clicker) then
1616 minetest.show_formspec(
1617 clicker:get_player_name(),
1618 "default:chest_locked",
1619 get_locked_chest_formspec(pos)
1624 on_blast = function() end,
1628 local bookshelf_formspec =
1631 default.gui_bg_img ..
1632 default.gui_slots ..
1633 "list[context;books;0,0.3;8,2;]" ..
1634 "list[current_player;main;0,2.85;8,1;]" ..
1635 "list[current_player;main;0,4.08;8,3;8]" ..
1636 "listring[context;books]" ..
1637 "listring[current_player;main]" ..
1638 default.get_hotbar_bg(0,2.85)
1640 minetest.register_node("default:bookshelf", {
1641 description = "Bookshelf",
1642 tiles = {"default_wood.png", "default_wood.png", "default_wood.png",
1643 "default_wood.png", "default_bookshelf.png", "default_bookshelf.png"},
1644 paramtype2 = "facedir",
1645 is_ground_content = false,
1646 groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3},
1647 sounds = default.node_sound_wood_defaults(),
1649 on_construct = function(pos)
1650 local meta = minetest.get_meta(pos)
1651 meta:set_string("formspec", bookshelf_formspec)
1652 local inv = meta:get_inventory()
1653 inv:set_size("books", 8 * 2)
1655 can_dig = function(pos,player)
1656 local inv = minetest.get_meta(pos):get_inventory()
1657 return inv:is_empty("books")
1659 allow_metadata_inventory_put = function(pos, listname, index, stack)
1660 if minetest.get_item_group(stack:get_name(), "book") ~= 0 then
1661 return stack:get_count()
1665 on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
1666 minetest.log("action", player:get_player_name() ..
1667 " moves stuff in bookshelf at " .. minetest.pos_to_string(pos))
1669 on_metadata_inventory_put = function(pos, listname, index, stack, player)
1670 minetest.log("action", player:get_player_name() ..
1671 " moves stuff to bookshelf at " .. minetest.pos_to_string(pos))
1673 on_metadata_inventory_take = function(pos, listname, index, stack, player)
1674 minetest.log("action", player:get_player_name() ..
1675 " takes stuff from bookshelf at " .. minetest.pos_to_string(pos))
1677 on_blast = function(pos)
1679 default.get_inventory_drops(pos, "books", drops)
1680 drops[#drops+1] = "default:bookshelf"
1681 minetest.remove_node(pos)
1686 local function register_sign(material, desc, def)
1687 minetest.register_node("default:sign_wall_" .. material, {
1688 description = desc .. " Sign",
1689 drawtype = "nodebox",
1690 tiles = {"default_sign_wall_" .. material .. ".png"},
1691 inventory_image = "default_sign_" .. material .. ".png",
1692 wield_image = "default_sign_" .. material .. ".png",
1693 paramtype = "light",
1694 paramtype2 = "wallmounted",
1695 sunlight_propagates = true,
1696 is_ground_content = false,
1699 type = "wallmounted",
1700 wall_top = {-0.4375, 0.4375, -0.3125, 0.4375, 0.5, 0.3125},
1701 wall_bottom = {-0.4375, -0.5, -0.3125, 0.4375, -0.4375, 0.3125},
1702 wall_side = {-0.5, -0.3125, -0.4375, -0.4375, 0.3125, 0.4375},
1704 groups = def.groups,
1705 legacy_wallmounted = true,
1706 sounds = def.sounds,
1708 on_construct = function(pos)
1709 --local n = minetest.get_node(pos)
1710 local meta = minetest.get_meta(pos)
1711 meta:set_string("formspec", "field[text;;${text}]")
1713 on_receive_fields = function(pos, formname, fields, sender)
1714 --print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields))
1715 local player_name = sender:get_player_name()
1716 if minetest.is_protected(pos, player_name) then
1717 minetest.record_protection_violation(pos, player_name)
1720 local meta = minetest.get_meta(pos)
1721 if not fields.text then return end
1722 minetest.log("action", (player_name or "") .. " wrote \"" ..
1723 fields.text .. "\" to sign at " .. minetest.pos_to_string(pos))
1724 meta:set_string("text", fields.text)
1725 meta:set_string("infotext", '"' .. fields.text .. '"')
1730 register_sign("wood", "Wooden", {
1731 sounds = default.node_sound_wood_defaults(),
1732 groups = {choppy = 2, attached_node = 1, flammable = 2, oddly_breakable_by_hand = 3}
1735 register_sign("steel", "Steel", {
1736 sounds = default.node_sound_defaults(),
1737 groups = {cracky = 2, attached_node = 1}
1740 minetest.register_node("default:ladder_wood", {
1741 description = "Wooden Ladder",
1742 drawtype = "signlike",
1743 tiles = {"default_ladder_wood.png"},
1744 inventory_image = "default_ladder_wood.png",
1745 wield_image = "default_ladder_wood.png",
1746 paramtype = "light",
1747 paramtype2 = "wallmounted",
1748 sunlight_propagates = true,
1751 is_ground_content = false,
1753 type = "wallmounted",
1754 --wall_top = = <default>
1755 --wall_bottom = = <default>
1756 --wall_side = = <default>
1758 groups = {choppy = 2, oddly_breakable_by_hand = 3, flammable = 2},
1759 legacy_wallmounted = true,
1760 sounds = default.node_sound_wood_defaults(),
1763 minetest.register_node("default:ladder_steel", {
1764 description = "Steel Ladder",
1765 drawtype = "signlike",
1766 tiles = {"default_ladder_steel.png"},
1767 inventory_image = "default_ladder_steel.png",
1768 wield_image = "default_ladder_steel.png",
1769 paramtype = "light",
1770 paramtype2 = "wallmounted",
1771 sunlight_propagates = true,
1774 is_ground_content = false,
1776 type = "wallmounted",
1777 --wall_top = = <default>
1778 --wall_bottom = = <default>
1779 --wall_side = = <default>
1781 groups = {cracky = 2},
1782 sounds = default.node_sound_stone_defaults(),
1785 default.register_fence("default:fence_wood", {
1786 description = "Wooden Fence",
1787 texture = "default_fence_wood.png",
1788 material = "default:wood",
1789 groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
1790 sounds = default.node_sound_wood_defaults()
1793 default.register_fence("default:fence_acacia_wood", {
1794 description = "Acacia Fence",
1795 texture = "default_fence_acacia_wood.png",
1796 material = "default:acacia_wood",
1797 groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
1798 sounds = default.node_sound_wood_defaults()
1801 default.register_fence("default:fence_junglewood", {
1802 description = "Junglewood Fence",
1803 texture = "default_fence_junglewood.png",
1804 material = "default:junglewood",
1805 groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
1806 sounds = default.node_sound_wood_defaults()
1809 default.register_fence("default:fence_pine_wood", {
1810 description = "Pine Fence",
1811 texture = "default_fence_pine_wood.png",
1812 material = "default:pine_wood",
1813 groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
1814 sounds = default.node_sound_wood_defaults()
1817 default.register_fence("default:fence_aspen_wood", {
1818 description = "Aspen Fence",
1819 texture = "default_fence_aspen_wood.png",
1820 material = "default:aspen_wood",
1821 groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
1822 sounds = default.node_sound_wood_defaults()
1825 minetest.register_node("default:glass", {
1826 description = "Glass",
1827 drawtype = "glasslike_framed_optional",
1828 tiles = {"default_glass.png", "default_glass_detail.png"},
1829 paramtype = "light",
1830 sunlight_propagates = true,
1831 is_ground_content = false,
1832 groups = {cracky = 3, oddly_breakable_by_hand = 3},
1833 sounds = default.node_sound_glass_defaults(),
1836 minetest.register_node("default:obsidian_glass", {
1837 description = "Obsidian Glass",
1838 drawtype = "glasslike_framed_optional",
1839 tiles = {"default_obsidian_glass.png", "default_obsidian_glass_detail.png"},
1840 paramtype = "light",
1841 is_ground_content = false,
1842 sunlight_propagates = true,
1843 sounds = default.node_sound_glass_defaults(),
1844 groups = {cracky = 3},
1848 minetest.register_node("default:rail", {
1849 description = "Rail",
1850 drawtype = "raillike",
1851 tiles = {"default_rail.png", "default_rail_curved.png",
1852 "default_rail_t_junction.png", "default_rail_crossing.png"},
1853 inventory_image = "default_rail.png",
1854 wield_image = "default_rail.png",
1855 paramtype = "light",
1856 sunlight_propagates = true,
1858 is_ground_content = false,
1861 -- but how to specify the dimensions for curved and sideways rails?
1862 fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
1864 groups = {dig_immediate = 2, attached_node = 1,
1865 connect_to_raillike = minetest.raillike_group("rail")},
1869 minetest.register_node("default:brick", {
1870 description = "Brick Block",
1871 paramtype2 = "facedir",
1873 tiles = {"default_brick.png"},
1874 is_ground_content = false,
1875 groups = {cracky = 3},
1876 sounds = default.node_sound_stone_defaults(),
1880 minetest.register_node("default:meselamp", {
1881 description = "Mese Lamp",
1882 drawtype = "glasslike",
1883 tiles = {"default_meselamp.png"},
1884 paramtype = "light",
1885 sunlight_propagates = true,
1886 is_ground_content = false,
1887 groups = {cracky = 3, oddly_breakable_by_hand = 3},
1888 sounds = default.node_sound_glass_defaults(),
1889 light_source = default.LIGHT_MAX,
1896 minetest.register_node("default:cloud", {
1897 description = "Cloud",
1898 tiles = {"default_cloud.png"},
1899 is_ground_content = false,
1900 sounds = default.node_sound_defaults(),
1901 groups = {not_in_creative_inventory = 1},