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,
505 fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
507 groups = {snappy = 2, dig_immediate = 3, flammable = 2,
508 attached_node = 1, sapling = 1},
509 sounds = default.node_sound_leaves_defaults(),
511 on_construct = function(pos)
512 minetest.get_node_timer(pos):start(math.random(2400,4800))
515 on_place = function(itemstack, placer, pointed_thing)
516 itemstack = default.sapling_on_place(itemstack, placer, pointed_thing,
518 -- minp, maxp to be checked, relative to sapling pos
519 -- minp_relative.y = 1 because sapling pos has been checked
520 {x = -2, y = 1, z = -2},
521 {x = 2, y = 6, z = 2},
522 -- maximum interval of interior volume check
529 minetest.register_node("default:leaves", {
530 description = "Leaves",
531 drawtype = "allfaces_optional",
534 tiles = {"default_leaves.png"},
535 special_tiles = {"default_leaves_simple.png"},
537 is_ground_content = false,
538 groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
543 -- player will get sapling with 1/20 chance
544 items = {'default:sapling'},
548 -- player will get leaves only if he get no saplings,
549 -- this is because max_items is 1
550 items = {'default:leaves'},
554 sounds = default.node_sound_leaves_defaults(),
556 after_place_node = default.after_place_leaves,
559 minetest.register_node("default:apple", {
560 description = "Apple",
561 drawtype = "plantlike",
563 tiles = {"default_apple.png"},
564 inventory_image = "default_apple.png",
566 sunlight_propagates = true,
568 is_ground_content = false,
571 fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2}
573 groups = {fleshy = 3, dig_immediate = 3, flammable = 2,
574 leafdecay = 3, leafdecay_drop = 1},
575 on_use = minetest.item_eat(2),
576 sounds = default.node_sound_leaves_defaults(),
578 after_place_node = function(pos, placer, itemstack)
579 if placer:is_player() then
580 minetest.set_node(pos, {name = "default:apple", param2 = 1})
586 minetest.register_node("default:jungletree", {
587 description = "Jungle Tree",
588 tiles = {"default_jungletree_top.png", "default_jungletree_top.png",
589 "default_jungletree.png"},
590 paramtype2 = "facedir",
591 is_ground_content = false,
592 groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
593 sounds = default.node_sound_wood_defaults(),
595 on_place = minetest.rotate_node
598 minetest.register_node("default:junglewood", {
599 description = "Junglewood Planks",
600 paramtype2 = "facedir",
602 tiles = {"default_junglewood.png"},
603 is_ground_content = false,
604 groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, wood = 1},
605 sounds = default.node_sound_wood_defaults(),
608 minetest.register_node("default:jungleleaves", {
609 description = "Jungle Leaves",
610 drawtype = "allfaces_optional",
613 tiles = {"default_jungleleaves.png"},
614 special_tiles = {"default_jungleleaves_simple.png"},
616 is_ground_content = false,
617 groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
621 {items = {'default:junglesapling'}, rarity = 20},
622 {items = {'default:jungleleaves'}}
625 sounds = default.node_sound_leaves_defaults(),
627 after_place_node = default.after_place_leaves,
630 minetest.register_node("default:junglesapling", {
631 description = "Jungle Sapling",
632 drawtype = "plantlike",
634 tiles = {"default_junglesapling.png"},
635 inventory_image = "default_junglesapling.png",
636 wield_image = "default_junglesapling.png",
638 sunlight_propagates = true,
640 on_timer = default.grow_sapling,
643 fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
645 groups = {snappy = 2, dig_immediate = 3, flammable = 2,
646 attached_node = 1, sapling = 1},
647 sounds = default.node_sound_leaves_defaults(),
649 on_construct = function(pos)
650 minetest.get_node_timer(pos):start(math.random(2400,4800))
653 on_place = function(itemstack, placer, pointed_thing)
654 itemstack = default.sapling_on_place(itemstack, placer, pointed_thing,
655 "default:junglesapling",
656 -- minp, maxp to be checked, relative to sapling pos
657 -- minp_relative.y = 1 because sapling pos has been checked
658 {x = -2, y = 1, z = -2},
659 {x = 2, y = 15, z = 2},
660 -- maximum interval of interior volume check
668 minetest.register_node("default:pine_tree", {
669 description = "Pine Tree",
670 tiles = {"default_pine_tree_top.png", "default_pine_tree_top.png",
671 "default_pine_tree.png"},
672 paramtype2 = "facedir",
673 is_ground_content = false,
674 groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
675 sounds = default.node_sound_wood_defaults(),
677 on_place = minetest.rotate_node
680 minetest.register_node("default:pine_wood", {
681 description = "Pine Wood Planks",
682 paramtype2 = "facedir",
684 tiles = {"default_pine_wood.png"},
685 is_ground_content = false,
686 groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, wood = 1},
687 sounds = default.node_sound_wood_defaults(),
690 minetest.register_node("default:pine_needles",{
691 description = "Pine Needles",
692 drawtype = "allfaces_optional",
694 tiles = {"default_pine_needles.png"},
697 is_ground_content = false,
698 groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
702 {items = {"default:pine_sapling"}, rarity = 20},
703 {items = {"default:pine_needles"}}
706 sounds = default.node_sound_leaves_defaults(),
708 after_place_node = default.after_place_leaves,
711 minetest.register_node("default:pine_sapling", {
712 description = "Pine Sapling",
713 drawtype = "plantlike",
715 tiles = {"default_pine_sapling.png"},
716 inventory_image = "default_pine_sapling.png",
717 wield_image = "default_pine_sapling.png",
719 sunlight_propagates = true,
721 on_timer = default.grow_sapling,
724 fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
726 groups = {snappy = 2, dig_immediate = 3, flammable = 2,
727 attached_node = 1, sapling = 1},
728 sounds = default.node_sound_leaves_defaults(),
730 on_construct = function(pos)
731 minetest.get_node_timer(pos):start(math.random(2400,4800))
734 on_place = function(itemstack, placer, pointed_thing)
735 itemstack = default.sapling_on_place(itemstack, placer, pointed_thing,
736 "default:pine_sapling",
737 -- minp, maxp to be checked, relative to sapling pos
738 -- minp_relative.y = 1 because sapling pos has been checked
739 {x = -2, y = 1, z = -2},
740 {x = 2, y = 12, z = 2},
741 -- maximum interval of interior volume check
749 minetest.register_node("default:acacia_tree", {
750 description = "Acacia Tree",
751 tiles = {"default_acacia_tree_top.png", "default_acacia_tree_top.png",
752 "default_acacia_tree.png"},
753 paramtype2 = "facedir",
754 is_ground_content = false,
755 groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
756 sounds = default.node_sound_wood_defaults(),
758 on_place = minetest.rotate_node
761 minetest.register_node("default:acacia_wood", {
762 description = "Acacia Wood Planks",
763 paramtype2 = "facedir",
765 tiles = {"default_acacia_wood.png"},
766 is_ground_content = false,
767 groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, wood = 1},
768 sounds = default.node_sound_wood_defaults(),
771 minetest.register_node("default:acacia_leaves", {
772 description = "Acacia Leaves",
773 drawtype = "allfaces_optional",
775 tiles = {"default_acacia_leaves.png"},
778 is_ground_content = false,
779 groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
783 {items = {"default:acacia_sapling"}, rarity = 20},
784 {items = {"default:acacia_leaves"}}
787 sounds = default.node_sound_leaves_defaults(),
789 after_place_node = default.after_place_leaves,
792 minetest.register_node("default:acacia_sapling", {
793 description = "Acacia Tree Sapling",
794 drawtype = "plantlike",
796 tiles = {"default_acacia_sapling.png"},
797 inventory_image = "default_acacia_sapling.png",
798 wield_image = "default_acacia_sapling.png",
800 sunlight_propagates = true,
802 on_timer = default.grow_sapling,
805 fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
807 groups = {snappy = 2, dig_immediate = 3, flammable = 2,
808 attached_node = 1, sapling = 1},
809 sounds = default.node_sound_leaves_defaults(),
811 on_construct = function(pos)
812 minetest.get_node_timer(pos):start(math.random(2400,4800))
815 on_place = function(itemstack, placer, pointed_thing)
816 itemstack = default.sapling_on_place(itemstack, placer, pointed_thing,
817 "default:acacia_sapling",
818 -- minp, maxp to be checked, relative to sapling pos
819 -- minp_relative.y = 1 because sapling pos has been checked
820 {x = -4, y = 1, z = -4},
821 {x = 4, y = 6, z = 4},
822 -- maximum interval of interior volume check
829 minetest.register_node("default:aspen_tree", {
830 description = "Aspen Tree",
831 tiles = {"default_aspen_tree_top.png", "default_aspen_tree_top.png",
832 "default_aspen_tree.png"},
833 paramtype2 = "facedir",
834 is_ground_content = false,
835 groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
836 sounds = default.node_sound_wood_defaults(),
838 on_place = minetest.rotate_node
841 minetest.register_node("default:aspen_wood", {
842 description = "Aspen Wood Planks",
843 paramtype2 = "facedir",
845 tiles = {"default_aspen_wood.png"},
846 is_ground_content = false,
847 groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, wood = 1},
848 sounds = default.node_sound_wood_defaults(),
851 minetest.register_node("default:aspen_leaves", {
852 description = "Aspen Leaves",
853 drawtype = "allfaces_optional",
855 tiles = {"default_aspen_leaves.png"},
858 is_ground_content = false,
859 groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
863 {items = {"default:aspen_sapling"}, rarity = 20},
864 {items = {"default:aspen_leaves"}}
867 sounds = default.node_sound_leaves_defaults(),
869 after_place_node = default.after_place_leaves,
872 minetest.register_node("default:aspen_sapling", {
873 description = "Aspen Tree Sapling",
874 drawtype = "plantlike",
876 tiles = {"default_aspen_sapling.png"},
877 inventory_image = "default_aspen_sapling.png",
878 wield_image = "default_aspen_sapling.png",
880 sunlight_propagates = true,
882 on_timer = default.grow_sapling,
885 fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
887 groups = {snappy = 2, dig_immediate = 3, flammable = 2,
888 attached_node = 1, sapling = 1},
889 sounds = default.node_sound_leaves_defaults(),
891 on_construct = function(pos)
892 minetest.get_node_timer(pos):start(math.random(2400,4800))
895 on_place = function(itemstack, placer, pointed_thing)
896 itemstack = default.sapling_on_place(itemstack, placer, pointed_thing,
897 "default:aspen_sapling",
898 -- minp, maxp to be checked, relative to sapling pos
899 -- minp_relative.y = 1 because sapling pos has been checked
900 {x = -2, y = 1, z = -2},
901 {x = 2, y = 12, z = 2},
902 -- maximum interval of interior volume check
913 minetest.register_node("default:stone_with_coal", {
914 description = "Coal Ore",
915 tiles = {"default_stone.png^default_mineral_coal.png"},
916 groups = {cracky = 3},
917 drop = 'default:coal_lump',
918 sounds = default.node_sound_stone_defaults(),
921 minetest.register_node("default:coalblock", {
922 description = "Coal Block",
923 tiles = {"default_coal_block.png"},
924 is_ground_content = false,
925 groups = {cracky = 3},
926 sounds = default.node_sound_stone_defaults(),
930 minetest.register_node("default:stone_with_iron", {
931 description = "Iron Ore",
932 tiles = {"default_stone.png^default_mineral_iron.png"},
933 groups = {cracky = 2},
934 drop = 'default:iron_lump',
935 sounds = default.node_sound_stone_defaults(),
938 minetest.register_node("default:steelblock", {
939 description = "Steel Block",
940 tiles = {"default_steel_block.png"},
941 is_ground_content = false,
942 groups = {cracky = 1, level = 2},
943 sounds = default.node_sound_stone_defaults(),
947 minetest.register_node("default:stone_with_copper", {
948 description = "Copper Ore",
949 tiles = {"default_stone.png^default_mineral_copper.png"},
950 groups = {cracky = 2},
951 drop = 'default:copper_lump',
952 sounds = default.node_sound_stone_defaults(),
955 minetest.register_node("default:copperblock", {
956 description = "Copper Block",
957 tiles = {"default_copper_block.png"},
958 is_ground_content = false,
959 groups = {cracky = 1, level = 2},
960 sounds = default.node_sound_stone_defaults(),
963 minetest.register_node("default:bronzeblock", {
964 description = "Bronze Block",
965 tiles = {"default_bronze_block.png"},
966 is_ground_content = false,
967 groups = {cracky = 1, level = 2},
968 sounds = default.node_sound_stone_defaults(),
972 minetest.register_node("default:stone_with_mese", {
973 description = "Mese Ore",
974 tiles = {"default_stone.png^default_mineral_mese.png"},
975 groups = {cracky = 1},
976 drop = "default:mese_crystal",
977 sounds = default.node_sound_stone_defaults(),
980 minetest.register_node("default:mese", {
981 description = "Mese Block",
982 tiles = {"default_mese_block.png"},
984 groups = {cracky = 1, level = 2},
985 sounds = default.node_sound_stone_defaults(),
990 minetest.register_node("default:stone_with_gold", {
991 description = "Gold Ore",
992 tiles = {"default_stone.png^default_mineral_gold.png"},
993 groups = {cracky = 2},
994 drop = "default:gold_lump",
995 sounds = default.node_sound_stone_defaults(),
998 minetest.register_node("default:goldblock", {
999 description = "Gold Block",
1000 tiles = {"default_gold_block.png"},
1001 is_ground_content = false,
1002 groups = {cracky = 1},
1003 sounds = default.node_sound_stone_defaults(),
1007 minetest.register_node("default:stone_with_diamond", {
1008 description = "Diamond Ore",
1009 tiles = {"default_stone.png^default_mineral_diamond.png"},
1010 groups = {cracky = 1},
1011 drop = "default:diamond",
1012 sounds = default.node_sound_stone_defaults(),
1015 minetest.register_node("default:diamondblock", {
1016 description = "Diamond Block",
1017 tiles = {"default_diamond_block.png"},
1018 is_ground_content = false,
1019 groups = {cracky = 1, level = 3},
1020 sounds = default.node_sound_stone_defaults(),
1024 -- Plantlife (non-cubic)
1027 minetest.register_node("default:cactus", {
1028 description = "Cactus",
1029 tiles = {"default_cactus_top.png", "default_cactus_top.png",
1030 "default_cactus_side.png"},
1031 paramtype2 = "facedir",
1032 groups = {snappy = 1, choppy = 3},
1033 sounds = default.node_sound_wood_defaults(),
1034 on_place = minetest.rotate_node,
1037 minetest.register_node("default:papyrus", {
1038 description = "Papyrus",
1039 drawtype = "plantlike",
1040 tiles = {"default_papyrus.png"},
1041 inventory_image = "default_papyrus.png",
1042 wield_image = "default_papyrus.png",
1043 paramtype = "light",
1044 sunlight_propagates = true,
1048 fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
1050 groups = {snappy = 3, flammable = 2},
1051 sounds = default.node_sound_leaves_defaults(),
1053 after_dig_node = function(pos, node, metadata, digger)
1054 default.dig_up(pos, node, digger)
1058 minetest.register_node("default:dry_shrub", {
1059 description = "Dry Shrub",
1060 drawtype = "plantlike",
1063 tiles = {"default_dry_shrub.png"},
1064 inventory_image = "default_dry_shrub.png",
1065 wield_image = "default_dry_shrub.png",
1066 paramtype = "light",
1067 sunlight_propagates = true,
1069 buildable_to = true,
1070 groups = {snappy = 3, flammable = 3, attached_node = 1},
1071 sounds = default.node_sound_leaves_defaults(),
1074 fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
1078 minetest.register_node("default:junglegrass", {
1079 description = "Jungle Grass",
1080 drawtype = "plantlike",
1083 tiles = {"default_junglegrass.png"},
1084 inventory_image = "default_junglegrass.png",
1085 wield_image = "default_junglegrass.png",
1086 paramtype = "light",
1087 sunlight_propagates = true,
1089 buildable_to = true,
1090 groups = {snappy = 3, flora = 1, attached_node = 1, grass = 1},
1091 sounds = default.node_sound_leaves_defaults(),
1094 fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
1099 minetest.register_node("default:grass_1", {
1100 description = "Grass",
1101 drawtype = "plantlike",
1103 tiles = {"default_grass_1.png"},
1104 -- Use texture of a taller grass stage in inventory
1105 inventory_image = "default_grass_3.png",
1106 wield_image = "default_grass_3.png",
1107 paramtype = "light",
1108 sunlight_propagates = true,
1110 buildable_to = true,
1111 groups = {snappy = 3, flora = 1, attached_node = 1, grass = 1},
1112 sounds = default.node_sound_leaves_defaults(),
1115 fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
1118 on_place = function(itemstack, placer, pointed_thing)
1119 -- place a random grass node
1120 local stack = ItemStack("default:grass_" .. math.random(1,5))
1121 local ret = minetest.item_place(stack, placer, pointed_thing)
1122 return ItemStack("default:grass_1 " ..
1123 itemstack:get_count() - (1 - ret:get_count()))
1128 minetest.register_node("default:grass_" .. i, {
1129 description = "Grass",
1130 drawtype = "plantlike",
1132 tiles = {"default_grass_" .. i .. ".png"},
1133 inventory_image = "default_grass_" .. i .. ".png",
1134 wield_image = "default_grass_" .. i .. ".png",
1135 paramtype = "light",
1136 sunlight_propagates = true,
1138 buildable_to = true,
1139 drop = "default:grass_1",
1140 groups = {snappy = 3, flora = 1, attached_node = 1,
1141 not_in_creative_inventory = 1, grass = 1},
1142 sounds = default.node_sound_leaves_defaults(),
1145 fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
1151 minetest.register_node("default:dry_grass_1", {
1152 description = "Dry Grass",
1153 drawtype = "plantlike",
1155 tiles = {"default_dry_grass_1.png"},
1156 inventory_image = "default_dry_grass_3.png",
1157 wield_image = "default_dry_grass_3.png",
1158 paramtype = "light",
1159 sunlight_propagates = true,
1161 buildable_to = true,
1162 groups = {snappy = 3, flammable = 3, flora = 1,
1163 attached_node = 1, dry_grass = 1},
1164 sounds = default.node_sound_leaves_defaults(),
1167 fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
1170 on_place = function(itemstack, placer, pointed_thing)
1171 -- place a random dry grass node
1172 local stack = ItemStack("default:dry_grass_" .. math.random(1, 5))
1173 local ret = minetest.item_place(stack, placer, pointed_thing)
1174 return ItemStack("default:dry_grass_1 " ..
1175 itemstack:get_count() - (1 - ret:get_count()))
1180 minetest.register_node("default:dry_grass_" .. i, {
1181 description = "Dry Grass",
1182 drawtype = "plantlike",
1184 tiles = {"default_dry_grass_" .. i .. ".png"},
1185 inventory_image = "default_dry_grass_" .. i .. ".png",
1186 wield_image = "default_dry_grass_" .. i .. ".png",
1187 paramtype = "light",
1188 sunlight_propagates = true,
1190 buildable_to = true,
1191 groups = {snappy = 3, flammable = 3, flora = 1, attached_node = 1,
1192 not_in_creative_inventory=1, dry_grass = 1},
1193 drop = "default:dry_grass_1",
1194 sounds = default.node_sound_leaves_defaults(),
1197 fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
1206 minetest.register_node("default:water_source", {
1207 description = "Water Source",
1208 drawtype = "liquid",
1211 name = "default_water_source_animated.png",
1213 type = "vertical_frames",
1221 -- New-style water source material (mostly unused)
1223 name = "default_water_source_animated.png",
1225 type = "vertical_frames",
1230 backface_culling = false,
1234 paramtype = "light",
1238 buildable_to = true,
1239 is_ground_content = false,
1242 liquidtype = "source",
1243 liquid_alternative_flowing = "default:water_flowing",
1244 liquid_alternative_source = "default:water_source",
1245 liquid_viscosity = 1,
1246 post_effect_color = {a = 103, r = 30, g = 60, b = 90},
1247 groups = {water = 3, liquid = 3, puts_out_fire = 1},
1250 minetest.register_node("default:water_flowing", {
1251 description = "Flowing Water",
1252 drawtype = "flowingliquid",
1253 tiles = {"default_water.png"},
1256 name = "default_water_flowing_animated.png",
1257 backface_culling = false,
1259 type = "vertical_frames",
1266 name = "default_water_flowing_animated.png",
1267 backface_culling = true,
1269 type = "vertical_frames",
1277 paramtype = "light",
1278 paramtype2 = "flowingliquid",
1282 buildable_to = true,
1283 is_ground_content = false,
1286 liquidtype = "flowing",
1287 liquid_alternative_flowing = "default:water_flowing",
1288 liquid_alternative_source = "default:water_source",
1289 liquid_viscosity = 1,
1290 post_effect_color = {a = 103, r = 30, g = 60, b = 90},
1291 groups = {water = 3, liquid = 3, puts_out_fire = 1,
1292 not_in_creative_inventory = 1},
1296 minetest.register_node("default:river_water_source", {
1297 description = "River Water Source",
1298 drawtype = "liquid",
1301 name = "default_river_water_source_animated.png",
1303 type = "vertical_frames",
1312 name = "default_river_water_source_animated.png",
1314 type = "vertical_frames",
1319 backface_culling = false,
1323 paramtype = "light",
1327 buildable_to = true,
1328 is_ground_content = false,
1331 liquidtype = "source",
1332 liquid_alternative_flowing = "default:river_water_flowing",
1333 liquid_alternative_source = "default:river_water_source",
1334 liquid_viscosity = 1,
1335 liquid_renewable = false,
1337 post_effect_color = {a = 103, r = 30, g = 76, b = 90},
1338 groups = {water = 3, liquid = 3, puts_out_fire = 1},
1341 minetest.register_node("default:river_water_flowing", {
1342 description = "Flowing River Water",
1343 drawtype = "flowingliquid",
1344 tiles = {"default_river_water.png"},
1347 name = "default_river_water_flowing_animated.png",
1348 backface_culling = false,
1350 type = "vertical_frames",
1357 name = "default_river_water_flowing_animated.png",
1358 backface_culling = true,
1360 type = "vertical_frames",
1368 paramtype = "light",
1369 paramtype2 = "flowingliquid",
1373 buildable_to = true,
1374 is_ground_content = false,
1377 liquidtype = "flowing",
1378 liquid_alternative_flowing = "default:river_water_flowing",
1379 liquid_alternative_source = "default:river_water_source",
1380 liquid_viscosity = 1,
1381 liquid_renewable = false,
1383 post_effect_color = {a = 103, r = 30, g = 76, b = 90},
1384 groups = {water = 3, liquid = 3, puts_out_fire = 1,
1385 not_in_creative_inventory = 1},
1389 minetest.register_node("default:lava_source", {
1390 description = "Lava Source",
1391 drawtype = "liquid",
1394 name = "default_lava_source_animated.png",
1396 type = "vertical_frames",
1404 -- New-style lava source material (mostly unused)
1406 name = "default_lava_source_animated.png",
1408 type = "vertical_frames",
1413 backface_culling = false,
1416 paramtype = "light",
1417 light_source = default.LIGHT_MAX - 1,
1421 buildable_to = true,
1422 is_ground_content = false,
1425 liquidtype = "source",
1426 liquid_alternative_flowing = "default:lava_flowing",
1427 liquid_alternative_source = "default:lava_source",
1428 liquid_viscosity = 7,
1429 liquid_renewable = false,
1430 damage_per_second = 4 * 2,
1431 post_effect_color = {a = 191, r = 255, g = 64, b = 0},
1432 groups = {lava = 3, liquid = 2, igniter = 1},
1435 minetest.register_node("default:lava_flowing", {
1436 description = "Flowing Lava",
1437 drawtype = "flowingliquid",
1438 tiles = {"default_lava.png"},
1441 name = "default_lava_flowing_animated.png",
1442 backface_culling = false,
1444 type = "vertical_frames",
1451 name = "default_lava_flowing_animated.png",
1452 backface_culling = true,
1454 type = "vertical_frames",
1461 paramtype = "light",
1462 paramtype2 = "flowingliquid",
1463 light_source = default.LIGHT_MAX - 1,
1467 buildable_to = true,
1468 is_ground_content = false,
1471 liquidtype = "flowing",
1472 liquid_alternative_flowing = "default:lava_flowing",
1473 liquid_alternative_source = "default:lava_source",
1474 liquid_viscosity = 7,
1475 liquid_renewable = false,
1476 damage_per_second = 4 * 2,
1477 post_effect_color = {a = 191, r = 255, g = 64, b = 0},
1478 groups = {lava = 3, liquid = 2, igniter = 1,
1479 not_in_creative_inventory = 1},
1483 -- Tools / "Advanced" crafting / Non-"natural"
1486 minetest.register_node("default:torch", {
1487 description = "Torch",
1488 drawtype = "torchlike",
1491 name = "default_torch_on_floor_animated.png",
1493 type = "vertical_frames",
1500 name="default_torch_on_ceiling_animated.png",
1502 type = "vertical_frames",
1509 name="default_torch_animated.png",
1511 type = "vertical_frames",
1518 inventory_image = "default_torch_on_floor.png",
1519 wield_image = "default_torch_on_floor.png",
1520 paramtype = "light",
1521 paramtype2 = "wallmounted",
1522 sunlight_propagates = true,
1523 is_ground_content = false,
1525 light_source = default.LIGHT_MAX - 1,
1527 type = "wallmounted",
1528 wall_top = {-0.1, 0.5 - 0.6, -0.1, 0.1, 0.5, 0.1},
1529 wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5 + 0.6, 0.1},
1530 wall_side = {-0.5, -0.3, -0.1, -0.5 + 0.3, 0.3, 0.1},
1532 groups = {choppy = 2, dig_immediate = 3, flammable = 1, attached_node = 1},
1533 legacy_wallmounted = true,
1534 sounds = default.node_sound_defaults(),
1538 local chest_formspec =
1541 default.gui_bg_img ..
1542 default.gui_slots ..
1543 "list[current_name;main;0,0.3;8,4;]" ..
1544 "list[current_player;main;0,4.85;8,1;]" ..
1545 "list[current_player;main;0,6.08;8,3;8]" ..
1546 "listring[current_name;main]" ..
1547 "listring[current_player;main]" ..
1548 default.get_hotbar_bg(0,4.85)
1550 local function get_locked_chest_formspec(pos)
1551 local spos = pos.x .. "," .. pos.y .. "," .. pos.z
1555 default.gui_bg_img ..
1556 default.gui_slots ..
1557 "list[nodemeta:" .. spos .. ";main;0,0.3;8,4;]" ..
1558 "list[current_player;main;0,4.85;8,1;]" ..
1559 "list[current_player;main;0,6.08;8,3;8]" ..
1560 "listring[nodemeta:" .. spos .. ";main]" ..
1561 "listring[current_player;main]" ..
1562 default.get_hotbar_bg(0,4.85)
1566 local function has_locked_chest_privilege(meta, player)
1569 if minetest.check_player_privs(player, "protection_bypass") then
1572 name = player:get_player_name()
1574 if name ~= meta:get_string("owner") then
1580 minetest.register_node("default:chest", {
1581 description = "Chest",
1582 tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
1583 "default_chest_side.png", "default_chest_side.png", "default_chest_front.png"},
1584 paramtype2 = "facedir",
1585 groups = {choppy = 2, oddly_breakable_by_hand = 2},
1586 legacy_facedir_simple = true,
1587 is_ground_content = false,
1588 sounds = default.node_sound_wood_defaults(),
1590 on_construct = function(pos)
1591 local meta = minetest.get_meta(pos)
1592 meta:set_string("formspec", chest_formspec)
1593 local inv = meta:get_inventory()
1594 inv:set_size("main", 8*4)
1596 can_dig = function(pos,player)
1597 local meta = minetest.get_meta(pos);
1598 local inv = meta:get_inventory()
1599 return inv:is_empty("main")
1601 on_metadata_inventory_move = function(pos, from_list, from_index,
1602 to_list, to_index, count, player)
1603 minetest.log("action", player:get_player_name() ..
1604 " moves stuff in chest at " .. minetest.pos_to_string(pos))
1606 on_metadata_inventory_put = function(pos, listname, index, stack, player)
1607 minetest.log("action", player:get_player_name() ..
1608 " moves " .. stack:get_name() ..
1609 " to chest at " .. minetest.pos_to_string(pos))
1611 on_metadata_inventory_take = function(pos, listname, index, stack, player)
1612 minetest.log("action", player:get_player_name() ..
1613 " takes " .. stack:get_name() ..
1614 " from chest at " .. minetest.pos_to_string(pos))
1616 on_blast = function(pos)
1618 default.get_inventory_drops(pos, "main", drops)
1619 drops[#drops+1] = "default:chest"
1620 minetest.remove_node(pos)
1625 minetest.register_node("default:chest_locked", {
1626 description = "Locked Chest",
1627 tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
1628 "default_chest_side.png", "default_chest_side.png", "default_chest_lock.png"},
1629 paramtype2 = "facedir",
1630 groups = {choppy = 2, oddly_breakable_by_hand = 2},
1631 legacy_facedir_simple = true,
1632 is_ground_content = false,
1633 sounds = default.node_sound_wood_defaults(),
1635 after_place_node = function(pos, placer)
1636 local meta = minetest.get_meta(pos)
1637 meta:set_string("owner", placer:get_player_name() or "")
1638 meta:set_string("infotext", "Locked Chest (owned by " ..
1639 meta:get_string("owner") .. ")")
1641 on_construct = function(pos)
1642 local meta = minetest.get_meta(pos)
1643 meta:set_string("owner", "")
1644 local inv = meta:get_inventory()
1645 inv:set_size("main", 8 * 4)
1647 can_dig = function(pos,player)
1648 local meta = minetest.get_meta(pos);
1649 local inv = meta:get_inventory()
1650 return inv:is_empty("main") and has_locked_chest_privilege(meta, player)
1652 allow_metadata_inventory_move = function(pos, from_list, from_index,
1653 to_list, to_index, count, player)
1654 local meta = minetest.get_meta(pos)
1655 if not has_locked_chest_privilege(meta, player) then
1660 allow_metadata_inventory_put = function(pos, listname, index, stack, player)
1661 local meta = minetest.get_meta(pos)
1662 if not has_locked_chest_privilege(meta, player) then
1665 return stack:get_count()
1667 allow_metadata_inventory_take = function(pos, listname, index, stack, player)
1668 local meta = minetest.get_meta(pos)
1669 if not has_locked_chest_privilege(meta, player) then
1672 return stack:get_count()
1674 on_metadata_inventory_put = function(pos, listname, index, stack, player)
1675 minetest.log("action", player:get_player_name() ..
1676 " moves " .. stack:get_name() ..
1677 " to locked chest at " .. minetest.pos_to_string(pos))
1679 on_metadata_inventory_take = function(pos, listname, index, stack, player)
1680 minetest.log("action", player:get_player_name() ..
1681 " takes " .. stack:get_name() ..
1682 " from locked chest at " .. minetest.pos_to_string(pos))
1684 on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
1685 local meta = minetest.get_meta(pos)
1686 if has_locked_chest_privilege(meta, clicker) then
1687 minetest.show_formspec(
1688 clicker:get_player_name(),
1689 "default:chest_locked",
1690 get_locked_chest_formspec(pos)
1695 on_blast = function() end,
1699 local bookshelf_formspec =
1702 default.gui_bg_img ..
1703 default.gui_slots ..
1704 "list[context;books;0,0.3;8,2;]" ..
1705 "list[current_player;main;0,2.85;8,1;]" ..
1706 "list[current_player;main;0,4.08;8,3;8]" ..
1707 "listring[context;books]" ..
1708 "listring[current_player;main]" ..
1709 default.get_hotbar_bg(0,2.85)
1711 minetest.register_node("default:bookshelf", {
1712 description = "Bookshelf",
1713 tiles = {"default_wood.png", "default_wood.png", "default_wood.png",
1714 "default_wood.png", "default_bookshelf.png", "default_bookshelf.png"},
1715 paramtype2 = "facedir",
1716 is_ground_content = false,
1717 groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3},
1718 sounds = default.node_sound_wood_defaults(),
1720 on_construct = function(pos)
1721 local meta = minetest.get_meta(pos)
1722 meta:set_string("formspec", bookshelf_formspec)
1723 local inv = meta:get_inventory()
1724 inv:set_size("books", 8 * 2)
1726 can_dig = function(pos,player)
1727 local inv = minetest.get_meta(pos):get_inventory()
1728 return inv:is_empty("books")
1730 allow_metadata_inventory_put = function(pos, listname, index, stack)
1731 if minetest.get_item_group(stack:get_name(), "book") ~= 0 then
1732 return stack:get_count()
1736 on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
1737 minetest.log("action", player:get_player_name() ..
1738 " moves stuff in bookshelf at " .. minetest.pos_to_string(pos))
1740 on_metadata_inventory_put = function(pos, listname, index, stack, player)
1741 minetest.log("action", player:get_player_name() ..
1742 " moves stuff to bookshelf at " .. minetest.pos_to_string(pos))
1744 on_metadata_inventory_take = function(pos, listname, index, stack, player)
1745 minetest.log("action", player:get_player_name() ..
1746 " takes stuff from bookshelf at " .. minetest.pos_to_string(pos))
1748 on_blast = function(pos)
1750 default.get_inventory_drops(pos, "books", drops)
1751 drops[#drops+1] = "default:bookshelf"
1752 minetest.remove_node(pos)
1757 local function register_sign(material, desc, def)
1758 minetest.register_node("default:sign_wall_" .. material, {
1759 description = desc .. " Sign",
1760 drawtype = "nodebox",
1761 tiles = {"default_sign_wall_" .. material .. ".png"},
1762 inventory_image = "default_sign_" .. material .. ".png",
1763 wield_image = "default_sign_" .. material .. ".png",
1764 paramtype = "light",
1765 paramtype2 = "wallmounted",
1766 sunlight_propagates = true,
1767 is_ground_content = false,
1770 type = "wallmounted",
1771 wall_top = {-0.4375, 0.4375, -0.3125, 0.4375, 0.5, 0.3125},
1772 wall_bottom = {-0.4375, -0.5, -0.3125, 0.4375, -0.4375, 0.3125},
1773 wall_side = {-0.5, -0.3125, -0.4375, -0.4375, 0.3125, 0.4375},
1775 groups = def.groups,
1776 legacy_wallmounted = true,
1777 sounds = def.sounds,
1779 on_construct = function(pos)
1780 --local n = minetest.get_node(pos)
1781 local meta = minetest.get_meta(pos)
1782 meta:set_string("formspec", "field[text;;${text}]")
1784 on_receive_fields = function(pos, formname, fields, sender)
1785 --print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields))
1786 local player_name = sender:get_player_name()
1787 if minetest.is_protected(pos, player_name) then
1788 minetest.record_protection_violation(pos, player_name)
1791 local meta = minetest.get_meta(pos)
1792 if not fields.text then return end
1793 minetest.log("action", (player_name or "") .. " wrote \"" ..
1794 fields.text .. "\" to sign at " .. minetest.pos_to_string(pos))
1795 meta:set_string("text", fields.text)
1796 meta:set_string("infotext", '"' .. fields.text .. '"')
1801 register_sign("wood", "Wooden", {
1802 sounds = default.node_sound_wood_defaults(),
1803 groups = {choppy = 2, attached_node = 1, flammable = 2, oddly_breakable_by_hand = 3}
1806 register_sign("steel", "Steel", {
1807 sounds = default.node_sound_defaults(),
1808 groups = {cracky = 2, attached_node = 1}
1811 minetest.register_node("default:ladder_wood", {
1812 description = "Wooden Ladder",
1813 drawtype = "signlike",
1814 tiles = {"default_ladder_wood.png"},
1815 inventory_image = "default_ladder_wood.png",
1816 wield_image = "default_ladder_wood.png",
1817 paramtype = "light",
1818 paramtype2 = "wallmounted",
1819 sunlight_propagates = true,
1822 is_ground_content = false,
1824 type = "wallmounted",
1825 --wall_top = = <default>
1826 --wall_bottom = = <default>
1827 --wall_side = = <default>
1829 groups = {choppy = 2, oddly_breakable_by_hand = 3, flammable = 2},
1830 legacy_wallmounted = true,
1831 sounds = default.node_sound_wood_defaults(),
1834 minetest.register_node("default:ladder_steel", {
1835 description = "Steel Ladder",
1836 drawtype = "signlike",
1837 tiles = {"default_ladder_steel.png"},
1838 inventory_image = "default_ladder_steel.png",
1839 wield_image = "default_ladder_steel.png",
1840 paramtype = "light",
1841 paramtype2 = "wallmounted",
1842 sunlight_propagates = true,
1845 is_ground_content = false,
1847 type = "wallmounted",
1848 --wall_top = = <default>
1849 --wall_bottom = = <default>
1850 --wall_side = = <default>
1852 groups = {cracky = 2},
1853 sounds = default.node_sound_stone_defaults(),
1856 default.register_fence("default:fence_wood", {
1857 description = "Wooden Fence",
1858 texture = "default_fence_wood.png",
1859 material = "default:wood",
1860 groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
1861 sounds = default.node_sound_wood_defaults()
1864 default.register_fence("default:fence_acacia_wood", {
1865 description = "Acacia Fence",
1866 texture = "default_fence_acacia_wood.png",
1867 material = "default:acacia_wood",
1868 groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
1869 sounds = default.node_sound_wood_defaults()
1872 default.register_fence("default:fence_junglewood", {
1873 description = "Junglewood Fence",
1874 texture = "default_fence_junglewood.png",
1875 material = "default:junglewood",
1876 groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
1877 sounds = default.node_sound_wood_defaults()
1880 default.register_fence("default:fence_pine_wood", {
1881 description = "Pine Fence",
1882 texture = "default_fence_pine_wood.png",
1883 material = "default:pine_wood",
1884 groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
1885 sounds = default.node_sound_wood_defaults()
1888 default.register_fence("default:fence_aspen_wood", {
1889 description = "Aspen Fence",
1890 texture = "default_fence_aspen_wood.png",
1891 material = "default:aspen_wood",
1892 groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
1893 sounds = default.node_sound_wood_defaults()
1896 minetest.register_node("default:glass", {
1897 description = "Glass",
1898 drawtype = "glasslike_framed_optional",
1899 tiles = {"default_glass.png", "default_glass_detail.png"},
1900 paramtype = "light",
1901 sunlight_propagates = true,
1902 is_ground_content = false,
1903 groups = {cracky = 3, oddly_breakable_by_hand = 3},
1904 sounds = default.node_sound_glass_defaults(),
1907 minetest.register_node("default:obsidian_glass", {
1908 description = "Obsidian Glass",
1909 drawtype = "glasslike_framed_optional",
1910 tiles = {"default_obsidian_glass.png", "default_obsidian_glass_detail.png"},
1911 paramtype = "light",
1912 is_ground_content = false,
1913 sunlight_propagates = true,
1914 sounds = default.node_sound_glass_defaults(),
1915 groups = {cracky = 3},
1919 minetest.register_node("default:rail", {
1920 description = "Rail",
1921 drawtype = "raillike",
1922 tiles = {"default_rail.png", "default_rail_curved.png",
1923 "default_rail_t_junction.png", "default_rail_crossing.png"},
1924 inventory_image = "default_rail.png",
1925 wield_image = "default_rail.png",
1926 paramtype = "light",
1927 sunlight_propagates = true,
1929 is_ground_content = false,
1932 -- but how to specify the dimensions for curved and sideways rails?
1933 fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
1935 groups = {dig_immediate = 2, attached_node = 1,
1936 connect_to_raillike = minetest.raillike_group("rail")},
1940 minetest.register_node("default:brick", {
1941 description = "Brick Block",
1942 paramtype2 = "facedir",
1944 tiles = {"default_brick.png"},
1945 is_ground_content = false,
1946 groups = {cracky = 3},
1947 sounds = default.node_sound_stone_defaults(),
1951 minetest.register_node("default:meselamp", {
1952 description = "Mese Lamp",
1953 drawtype = "glasslike",
1954 tiles = {"default_meselamp.png"},
1955 paramtype = "light",
1956 sunlight_propagates = true,
1957 is_ground_content = false,
1958 groups = {cracky = 3, oddly_breakable_by_hand = 3},
1959 sounds = default.node_sound_glass_defaults(),
1960 light_source = default.LIGHT_MAX,
1967 minetest.register_node("default:cloud", {
1968 description = "Cloud",
1969 tiles = {"default_cloud.png"},
1970 is_ground_content = false,
1971 sounds = default.node_sound_defaults(),
1972 groups = {not_in_creative_inventory = 1},