1 -- mods/default/nodes.lua
7 (1. Material 2. Cobble variant 3. Brick variant [4. Modified forms])
16 default:desert_stonebrick
19 default:sandstonebrick
26 (1. Material [2. Modified forms])
29 default:dirt_with_grass
30 default:dirt_with_grass_footsteps
31 default:dirt_with_snow
47 (1. Trunk 2. Fabricated trunk 3. Leaves 4. Sapling [5. Fruits])
67 (1. In stone 2. Block)
69 default:stone_with_coal
72 default:stone_with_iron
75 default:stone_with_copper
79 default:stone_with_gold
82 default:stone_with_mese
85 default:stone_with_diamond
102 (1. Source 2. Flowing)
105 default:water_flowing
107 default:river_water_source
108 default:river_water_flowing
113 Tools / "Advanced" crafting / Non-"natural"
114 -------------------------------------------
127 default:obsidian_glass
139 default:nyancat_rainbow
147 minetest.register_node("default:stone", {
148 description = "Stone",
149 tiles = {"default_stone.png"},
150 is_ground_content = true,
151 groups = {cracky=3, stone=1},
152 drop = 'default:cobble',
153 legacy_mineral = true,
154 sounds = default.node_sound_stone_defaults(),
157 minetest.register_node("default:cobble", {
158 description = "Cobblestone",
159 tiles = {"default_cobble.png"},
160 is_ground_content = true,
161 groups = {cracky=3, stone=2},
162 sounds = default.node_sound_stone_defaults(),
165 minetest.register_node("default:stonebrick", {
166 description = "Stone Brick",
167 tiles = {"default_stone_brick.png"},
168 groups = {cracky=2, stone=1},
169 sounds = default.node_sound_stone_defaults(),
172 minetest.register_node("default:mossycobble", {
173 description = "Mossy Cobblestone",
174 tiles = {"default_mossycobble.png"},
175 is_ground_content = true,
176 groups = {cracky=3, stone=1},
177 sounds = default.node_sound_stone_defaults(),
182 minetest.register_node("default:desert_stone", {
183 description = "Desert Stone",
184 tiles = {"default_desert_stone.png"},
185 is_ground_content = true,
186 groups = {cracky=3, stone=1},
187 drop = 'default:desert_cobble',
188 legacy_mineral = true,
189 sounds = default.node_sound_stone_defaults(),
192 minetest.register_node("default:desert_cobble", {
193 description = "Desert Cobblestone",
194 tiles = {"default_desert_cobble.png"},
195 is_ground_content = true,
196 groups = {cracky=3, stone=2},
197 sounds = default.node_sound_stone_defaults(),
200 minetest.register_node("default:desert_stonebrick", {
201 description = "Desert Stone Brick",
202 tiles = {"default_desert_stone_brick.png"},
203 groups = {cracky=2, stone=1},
204 sounds = default.node_sound_stone_defaults(),
209 minetest.register_node("default:sandstone", {
210 description = "Sandstone",
211 tiles = {"default_sandstone.png"},
212 is_ground_content = true,
213 groups = {crumbly=2,cracky=3},
214 sounds = default.node_sound_stone_defaults(),
217 minetest.register_node("default:sandstonebrick", {
218 description = "Sandstone Brick",
219 tiles = {"default_sandstone_brick.png"},
220 is_ground_content = true,
222 sounds = default.node_sound_stone_defaults(),
227 minetest.register_node("default:obsidian", {
228 description = "Obsidian",
229 tiles = {"default_obsidian.png"},
230 is_ground_content = true,
231 sounds = default.node_sound_stone_defaults(),
232 groups = {cracky=1,level=2},
235 minetest.register_node("default:obsidianbrick", {
236 description = "Obsidian Brick",
237 tiles = {"default_obsidian_brick.png"},
238 sounds = default.node_sound_stone_defaults(),
239 groups = {cracky=1,level=2},
246 minetest.register_node("default:dirt", {
247 description = "Dirt",
248 tiles = {"default_dirt.png"},
249 is_ground_content = true,
250 groups = {crumbly=3,soil=1},
251 sounds = default.node_sound_dirt_defaults(),
254 minetest.register_node("default:dirt_with_grass", {
255 description = "Dirt with Grass",
256 tiles = {"default_grass.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
257 is_ground_content = true,
258 groups = {crumbly=3,soil=1},
259 drop = 'default:dirt',
260 sounds = default.node_sound_dirt_defaults({
261 footstep = {name="default_grass_footstep", gain=0.25},
265 minetest.register_node("default:dirt_with_grass_footsteps", {
266 description = "Dirt with Grass and Footsteps",
267 tiles = {"default_grass_footsteps.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
268 is_ground_content = true,
269 groups = {crumbly=3,soil=1,not_in_creative_inventory=1},
270 drop = 'default:dirt',
271 sounds = default.node_sound_dirt_defaults({
272 footstep = {name="default_grass_footstep", gain=0.25},
276 minetest.register_node("default:dirt_with_snow", {
277 description = "Dirt with Snow",
278 tiles = {"default_snow.png", "default_dirt.png", "default_dirt.png^default_snow_side.png"},
279 is_ground_content = true,
280 groups = {crumbly=3,soil=1},
281 drop = 'default:dirt',
282 sounds = default.node_sound_dirt_defaults({
283 footstep = {name="default_snow_footstep", gain=0.25},
289 minetest.register_node("default:sand", {
290 description = "Sand",
291 tiles = {"default_sand.png"},
292 is_ground_content = true,
293 groups = {crumbly=3, falling_node=1, sand=1},
294 sounds = default.node_sound_sand_defaults(),
297 minetest.register_node("default:desert_sand", {
298 description = "Desert Sand",
299 tiles = {"default_desert_sand.png"},
300 is_ground_content = true,
301 groups = {crumbly=3, falling_node=1, sand=1},
302 sounds = default.node_sound_sand_defaults(),
307 minetest.register_node("default:gravel", {
308 description = "Gravel",
309 tiles = {"default_gravel.png"},
310 is_ground_content = true,
311 groups = {crumbly=2, falling_node=1},
312 sounds = default.node_sound_dirt_defaults({
313 footstep = {name="default_gravel_footstep", gain=0.5},
314 dug = {name="default_gravel_footstep", gain=1.0},
320 minetest.register_node("default:clay", {
321 description = "Clay",
322 tiles = {"default_clay.png"},
323 is_ground_content = true,
324 groups = {crumbly=3},
325 drop = 'default:clay_lump 4',
326 sounds = default.node_sound_dirt_defaults(),
331 minetest.register_node("default:snow", {
332 description = "Snow",
333 tiles = {"default_snow.png"},
334 inventory_image = "default_snowball.png",
335 wield_image = "default_snowball.png",
336 is_ground_content = true,
339 drawtype = "nodebox",
343 {-0.5, -0.5, -0.5, 0.5, -0.5+2/16, 0.5},
346 groups = {crumbly=3,falling_node=1},
347 sounds = default.node_sound_dirt_defaults({
348 footstep = {name="default_snow_footstep", gain=0.25},
349 dug = {name="default_snow_footstep", gain=0.75},
352 on_construct = function(pos)
354 if minetest.get_node(pos).name == "default:dirt_with_grass" then
355 minetest.set_node(pos, {name="default:dirt_with_snow"})
361 minetest.register_node("default:snowblock", {
362 description = "Snow Block",
363 tiles = {"default_snow.png"},
364 is_ground_content = true,
365 groups = {crumbly=3},
366 sounds = default.node_sound_dirt_defaults({
367 footstep = {name="default_snow_footstep", gain=0.25},
368 dug = {name="default_snow_footstep", gain=0.75},
374 minetest.register_node("default:ice", {
376 tiles = {"default_ice.png"},
377 is_ground_content = false,
380 sounds = default.node_sound_glass_defaults(),
387 minetest.register_node("default:tree", {
388 description = "Tree",
389 tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"},
390 paramtype2 = "facedir",
391 is_ground_content = false,
392 groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
393 sounds = default.node_sound_wood_defaults(),
395 on_place = minetest.rotate_node
398 minetest.register_node("default:wood", {
399 description = "Wooden Planks",
400 tiles = {"default_wood.png"},
401 groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
402 sounds = default.node_sound_wood_defaults(),
405 minetest.register_node("default:sapling", {
406 description = "Sapling",
407 drawtype = "plantlike",
409 tiles = {"default_sapling.png"},
410 inventory_image = "default_sapling.png",
411 wield_image = "default_sapling.png",
414 is_ground_content = true,
417 fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
419 groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1,sapling=1},
420 sounds = default.node_sound_leaves_defaults(),
423 minetest.register_node("default:leaves", {
424 description = "Leaves",
425 drawtype = "allfaces_optional",
428 tiles = {"default_leaves.png"},
430 is_ground_content = false,
431 groups = {snappy=3, leafdecay=3, flammable=2, leaves=1},
436 -- player will get sapling with 1/20 chance
437 items = {'default:sapling'},
441 -- player will get leaves only if he get no saplings,
442 -- this is because max_items is 1
443 items = {'default:leaves'},
447 sounds = default.node_sound_leaves_defaults(),
449 after_place_node = default.after_place_leaves,
452 minetest.register_node("default:apple", {
453 description = "Apple",
454 drawtype = "plantlike",
456 tiles = {"default_apple.png"},
457 inventory_image = "default_apple.png",
459 sunlight_propagates = true,
461 is_ground_content = true,
464 fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2}
466 groups = {fleshy=3,dig_immediate=3,flammable=2,leafdecay=3,leafdecay_drop=1},
467 on_use = minetest.item_eat(1),
468 sounds = default.node_sound_leaves_defaults(),
470 after_place_node = function(pos, placer, itemstack)
471 if placer:is_player() then
472 minetest.set_node(pos, {name="default:apple", param2=1})
479 minetest.register_node("default:jungletree", {
480 description = "Jungle Tree",
481 tiles = {"default_jungletree_top.png", "default_jungletree_top.png", "default_jungletree.png"},
482 paramtype2 = "facedir",
483 is_ground_content = false,
484 groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
485 sounds = default.node_sound_wood_defaults(),
487 on_place = minetest.rotate_node
490 minetest.register_node("default:junglewood", {
491 description = "Junglewood Planks",
492 tiles = {"default_junglewood.png"},
493 groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
494 sounds = default.node_sound_wood_defaults(),
497 minetest.register_node("default:jungleleaves", {
498 description = "Jungle Leaves",
499 drawtype = "allfaces_optional",
502 tiles = {"default_jungleleaves.png"},
504 is_ground_content = false,
505 groups = {snappy=3, leafdecay=3, flammable=2, leaves=1},
510 -- player will get sapling with 1/20 chance
511 items = {'default:junglesapling'},
515 -- player will get leaves only if he get no saplings,
516 -- this is because max_items is 1
517 items = {'default:jungleleaves'},
521 sounds = default.node_sound_leaves_defaults(),
523 after_place_node = default.after_place_leaves,
526 minetest.register_node("default:junglesapling", {
527 description = "Jungle Sapling",
528 drawtype = "plantlike",
530 tiles = {"default_junglesapling.png"},
531 inventory_image = "default_junglesapling.png",
532 wield_image = "default_junglesapling.png",
537 fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
539 groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1,sapling=1},
540 sounds = default.node_sound_leaves_defaults(),
545 minetest.register_node("default:pinetree", {
546 description = "Pine Tree",
547 tiles = {"default_pinetree_top.png", "default_pinetree_top.png", "default_pinetree.png"},
548 paramtype2 = "facedir",
549 is_ground_content = false,
550 groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
551 sounds = default.node_sound_wood_defaults(),
553 on_place = minetest.rotate_node
556 minetest.register_node("default:pinewood", {
557 description = "Pinewood Planks",
558 tiles = {"default_pinewood.png"},
559 groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
560 sounds = default.node_sound_wood_defaults(),
563 minetest.register_node("default:pine_needles",{
564 description = "Pine Needles",
565 drawtype = "allfaces_optional",
567 tiles = {"default_pine_needles.png"},
570 is_ground_content = false,
571 groups = {snappy=3, leafdecay=3, flammable=2, leaves=1},
576 -- player will get sapling with 1/20 chance
577 items = {"default:pine_sapling"},
581 -- player will get leaves only if he get no saplings,
582 -- this is because max_items is 1
583 items = {"default:pine_needles"},
587 sounds = default.node_sound_leaves_defaults(),
589 after_place_node = default.after_place_leaves,
592 minetest.register_node("default:pine_sapling", {
593 description = "Pine Sapling",
594 drawtype = "plantlike",
596 tiles = {"default_pine_sapling.png"},
597 inventory_image = "default_pine_sapling.png",
598 wield_image = "default_pine_sapling.png",
601 is_ground_content = true,
604 fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
606 groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1,sapling=1},
607 sounds = default.node_sound_leaves_defaults(),
614 minetest.register_node("default:stone_with_coal", {
615 description = "Coal Ore",
616 tiles = {"default_stone.png^default_mineral_coal.png"},
617 is_ground_content = true,
619 drop = 'default:coal_lump',
620 sounds = default.node_sound_stone_defaults(),
623 minetest.register_node("default:coalblock", {
624 description = "Coal Block",
625 tiles = {"default_coal_block.png"},
626 is_ground_content = true,
628 sounds = default.node_sound_stone_defaults(),
633 minetest.register_node("default:stone_with_iron", {
634 description = "Iron Ore",
635 tiles = {"default_stone.png^default_mineral_iron.png"},
636 is_ground_content = true,
638 drop = 'default:iron_lump',
639 sounds = default.node_sound_stone_defaults(),
642 minetest.register_node("default:steelblock", {
643 description = "Steel Block",
644 tiles = {"default_steel_block.png"},
645 is_ground_content = true,
646 groups = {cracky=1,level=2},
647 sounds = default.node_sound_stone_defaults(),
652 minetest.register_node("default:stone_with_copper", {
653 description = "Copper Ore",
654 tiles = {"default_stone.png^default_mineral_copper.png"},
655 is_ground_content = true,
657 drop = 'default:copper_lump',
658 sounds = default.node_sound_stone_defaults(),
661 minetest.register_node("default:copperblock", {
662 description = "Copper Block",
663 tiles = {"default_copper_block.png"},
664 is_ground_content = true,
665 groups = {cracky=1,level=2},
666 sounds = default.node_sound_stone_defaults(),
669 minetest.register_node("default:bronzeblock", {
670 description = "Bronze Block",
671 tiles = {"default_bronze_block.png"},
672 is_ground_content = true,
673 groups = {cracky=1,level=2},
674 sounds = default.node_sound_stone_defaults(),
679 minetest.register_node("default:stone_with_mese", {
680 description = "Mese Ore",
681 tiles = {"default_stone.png^default_mineral_mese.png"},
683 is_ground_content = true,
684 groups = {cracky = 1},
685 drop = "default:mese_crystal",
686 sounds = default.node_sound_stone_defaults(),
690 minetest.register_node("default:mese", {
691 description = "Mese Block",
692 tiles = {"default_mese_block.png"},
694 is_ground_content = true,
695 groups = {cracky = 1, level = 2},
696 sounds = default.node_sound_stone_defaults(),
703 minetest.register_node("default:stone_with_gold", {
704 description = "Gold Ore",
705 tiles = {"default_stone.png^default_mineral_gold.png"},
706 is_ground_content = true,
708 drop = "default:gold_lump",
709 sounds = default.node_sound_stone_defaults(),
712 minetest.register_node("default:goldblock", {
713 description = "Gold Block",
714 tiles = {"default_gold_block.png"},
715 is_ground_content = true,
717 sounds = default.node_sound_stone_defaults(),
722 minetest.register_node("default:stone_with_diamond", {
723 description = "Diamond Ore",
724 tiles = {"default_stone.png^default_mineral_diamond.png"},
725 is_ground_content = true,
727 drop = "default:diamond",
728 sounds = default.node_sound_stone_defaults(),
731 minetest.register_node("default:diamondblock", {
732 description = "Diamond Block",
733 tiles = {"default_diamond_block.png"},
734 is_ground_content = true,
735 groups = {cracky=1,level=3},
736 sounds = default.node_sound_stone_defaults(),
740 -- Plantlife (non-cubic)
743 minetest.register_node("default:cactus", {
744 description = "Cactus",
745 tiles = {"default_cactus_top.png", "default_cactus_top.png", "default_cactus_side.png"},
746 paramtype2 = "facedir",
747 is_ground_content = true,
748 groups = {snappy=1,choppy=3,flammable=2},
749 sounds = default.node_sound_wood_defaults(),
750 on_place = minetest.rotate_node,
752 after_dig_node = function(pos, node, metadata, digger)
753 default.dig_up(pos, node, digger)
757 minetest.register_node("default:papyrus", {
758 description = "Papyrus",
759 drawtype = "plantlike",
760 tiles = {"default_papyrus.png"},
761 inventory_image = "default_papyrus.png",
762 wield_image = "default_papyrus.png",
765 is_ground_content = true,
768 fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
770 groups = {snappy=3,flammable=2},
771 sounds = default.node_sound_leaves_defaults(),
773 after_dig_node = function(pos, node, metadata, digger)
774 default.dig_up(pos, node, digger)
778 minetest.register_node("default:dry_shrub", {
779 description = "Dry Shrub",
780 drawtype = "plantlike",
783 tiles = {"default_dry_shrub.png"},
784 inventory_image = "default_dry_shrub.png",
785 wield_image = "default_dry_shrub.png",
788 is_ground_content = true,
790 groups = {snappy=3,flammable=3,attached_node=1},
791 sounds = default.node_sound_leaves_defaults(),
794 fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
798 minetest.register_node("default:junglegrass", {
799 description = "Jungle Grass",
800 drawtype = "plantlike",
803 tiles = {"default_junglegrass.png"},
804 inventory_image = "default_junglegrass.png",
805 wield_image = "default_junglegrass.png",
809 is_ground_content = true,
810 groups = {snappy=3,flammable=2,flora=1,attached_node=1},
811 sounds = default.node_sound_leaves_defaults(),
814 fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
818 minetest.register_node("default:grass_1", {
819 description = "Grass",
820 drawtype = "plantlike",
822 tiles = {"default_grass_1.png"},
823 -- Use texture of a taller grass stage in inventory
824 inventory_image = "default_grass_3.png",
825 wield_image = "default_grass_3.png",
828 is_ground_content = true,
830 groups = {snappy=3,flammable=3,flora=1,attached_node=1},
831 sounds = default.node_sound_leaves_defaults(),
834 fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
837 on_place = function(itemstack, placer, pointed_thing)
838 -- place a random grass node
839 local stack = ItemStack("default:grass_"..math.random(1,5))
840 local ret = minetest.item_place(stack, placer, pointed_thing)
841 return ItemStack("default:grass_1 "..itemstack:get_count()-(1-ret:get_count()))
846 minetest.register_node("default:grass_"..i, {
847 description = "Grass",
848 drawtype = "plantlike",
850 tiles = {"default_grass_"..i..".png"},
851 inventory_image = "default_grass_"..i..".png",
852 wield_image = "default_grass_"..i..".png",
856 is_ground_content = true,
857 drop = "default:grass_1",
858 groups = {snappy=3,flammable=3,flora=1,attached_node=1,not_in_creative_inventory=1},
859 sounds = default.node_sound_leaves_defaults(),
862 fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
871 minetest.register_node("default:water_source", {
872 description = "Water Source",
873 inventory_image = minetest.inventorycube("default_water.png"),
877 name = "default_water_source_animated.png",
879 type = "vertical_frames",
887 -- New-style water source material (mostly unused)
889 name = "default_water_source_animated.png",
891 type = "vertical_frames",
896 backface_culling = false,
905 is_ground_content = false,
908 liquidtype = "source",
909 liquid_alternative_flowing = "default:water_flowing",
910 liquid_alternative_source = "default:water_source",
911 liquid_viscosity = 1,
912 post_effect_color = {a=64, r=100, g=100, b=200},
913 groups = {water=3, liquid=3, puts_out_fire=1},
916 minetest.register_node("default:water_flowing", {
917 description = "Flowing Water",
918 inventory_image = minetest.inventorycube("default_water.png"),
919 drawtype = "flowingliquid",
920 tiles = {"default_water.png"},
923 name = "default_water_flowing_animated.png",
924 backface_culling = false,
926 type = "vertical_frames",
933 name = "default_water_flowing_animated.png",
934 backface_culling = true,
936 type = "vertical_frames",
945 paramtype2 = "flowingliquid",
950 is_ground_content = false,
953 liquidtype = "flowing",
954 liquid_alternative_flowing = "default:water_flowing",
955 liquid_alternative_source = "default:water_source",
956 liquid_viscosity = 1,
957 post_effect_color = {a=64, r=100, g=100, b=200},
958 groups = {water=3, liquid=3, puts_out_fire=1, not_in_creative_inventory=1},
962 minetest.register_node("default:river_water_source", {
963 description = "River Water Source",
964 inventory_image = minetest.inventorycube("default_water.png"),
968 name = "default_water_source_animated.png",
970 type = "vertical_frames",
979 name = "default_water_source_animated.png",
981 type = "vertical_frames",
986 backface_culling = false,
995 is_ground_content = false,
998 liquidtype = "source",
999 liquid_alternative_flowing = "default:river_water_flowing",
1000 liquid_alternative_source = "default:river_water_source",
1001 liquid_viscosity = 1,
1002 liquid_renewable = false,
1004 post_effect_color = {a=64, r=100, g=100, b=200},
1005 groups = {water=3, liquid=3, puts_out_fire=1},
1008 minetest.register_node("default:river_water_flowing", {
1009 description = "Flowing River Water",
1010 inventory_image = minetest.inventorycube("default_water.png"),
1011 drawtype = "flowingliquid",
1012 tiles = {"default_water.png"},
1015 name = "default_water_flowing_animated.png",
1016 backface_culling = false,
1018 type = "vertical_frames",
1025 name = "default_water_flowing_animated.png",
1026 backface_culling = true,
1028 type = "vertical_frames",
1036 paramtype = "light",
1037 paramtype2 = "flowingliquid",
1041 buildable_to = true,
1042 is_ground_content = false,
1045 liquidtype = "flowing",
1046 liquid_alternative_flowing = "default:river_water_flowing",
1047 liquid_alternative_source = "default:river_water_source",
1048 liquid_viscosity = 1,
1049 liquid_renewable = false,
1051 post_effect_color = {a=64, r=100, g=100, b=200},
1052 groups = {water=3, liquid=3, puts_out_fire=1, not_in_creative_inventory=1},
1057 minetest.register_node("default:lava_source", {
1058 description = "Lava Source",
1059 inventory_image = minetest.inventorycube("default_lava.png"),
1060 drawtype = "liquid",
1063 name = "default_lava_source_animated.png",
1065 type = "vertical_frames",
1073 -- New-style lava source material (mostly unused)
1075 name = "default_lava_source_animated.png",
1077 type = "vertical_frames",
1082 backface_culling = false,
1085 paramtype = "light",
1086 light_source = default.LIGHT_MAX - 1,
1090 buildable_to = true,
1091 is_ground_content = false,
1094 liquidtype = "source",
1095 liquid_alternative_flowing = "default:lava_flowing",
1096 liquid_alternative_source = "default:lava_source",
1097 liquid_viscosity = 7,
1098 liquid_renewable = false,
1099 damage_per_second = 4 * 2,
1100 post_effect_color = {a=192, r=255, g=64, b=0},
1101 groups = {lava=3, liquid=2, hot=3, igniter=1},
1104 minetest.register_node("default:lava_flowing", {
1105 description = "Flowing Lava",
1106 inventory_image = minetest.inventorycube("default_lava.png"),
1107 drawtype = "flowingliquid",
1108 tiles = {"default_lava.png"},
1111 name = "default_lava_flowing_animated.png",
1112 backface_culling = false,
1114 type = "vertical_frames",
1121 name = "default_lava_flowing_animated.png",
1122 backface_culling = true,
1124 type = "vertical_frames",
1131 paramtype = "light",
1132 paramtype2 = "flowingliquid",
1133 light_source = default.LIGHT_MAX - 1,
1137 buildable_to = true,
1138 is_ground_content = false,
1141 liquidtype = "flowing",
1142 liquid_alternative_flowing = "default:lava_flowing",
1143 liquid_alternative_source = "default:lava_source",
1144 liquid_viscosity = 7,
1145 liquid_renewable = false,
1146 damage_per_second = 4 * 2,
1147 post_effect_color = {a=192, r=255, g=64, b=0},
1148 groups = {lava=3, liquid=2, hot=3, igniter=1, not_in_creative_inventory=1},
1152 -- Tools / "Advanced" crafting / Non-"natural"
1155 minetest.register_node("default:torch", {
1156 description = "Torch",
1157 drawtype = "torchlike",
1160 name = "default_torch_on_floor_animated.png",
1162 type = "vertical_frames",
1169 name="default_torch_on_ceiling_animated.png",
1171 type = "vertical_frames",
1178 name="default_torch_animated.png",
1180 type = "vertical_frames",
1187 inventory_image = "default_torch_on_floor.png",
1188 wield_image = "default_torch_on_floor.png",
1189 paramtype = "light",
1190 paramtype2 = "wallmounted",
1191 sunlight_propagates = true,
1192 is_ground_content = false,
1194 light_source = default.LIGHT_MAX - 1,
1196 type = "wallmounted",
1197 wall_top = {-0.1, 0.5-0.6, -0.1, 0.1, 0.5, 0.1},
1198 wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5+0.6, 0.1},
1199 wall_side = {-0.5, -0.3, -0.1, -0.5+0.3, 0.3, 0.1},
1201 groups = {choppy=2,dig_immediate=3,flammable=1,attached_node=1},
1202 legacy_wallmounted = true,
1203 sounds = default.node_sound_defaults(),
1208 local chest_formspec =
1211 default.gui_bg_img..
1213 "list[current_name;main;0,0.3;8,4;]"..
1214 "list[current_player;main;0,4.85;8,1;]"..
1215 "list[current_player;main;0,6.08;8,3;8]"..
1216 default.get_hotbar_bg(0,4.85)
1218 local function get_locked_chest_formspec(pos)
1219 local spos = pos.x .. "," .. pos.y .. "," ..pos.z
1223 default.gui_bg_img..
1225 "list[nodemeta:".. spos .. ";main;0,0.3;8,4;]"..
1226 "list[current_player;main;0,4.85;8,1;]"..
1227 "list[current_player;main;0,6.08;8,3;8]"..
1228 default.get_hotbar_bg(0,4.85)
1232 local function has_locked_chest_privilege(meta, player)
1233 if player:get_player_name() ~= meta:get_string("owner") then
1239 minetest.register_node("default:chest", {
1240 description = "Chest",
1241 tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
1242 "default_chest_side.png", "default_chest_side.png", "default_chest_front.png"},
1243 paramtype2 = "facedir",
1244 groups = {choppy=2,oddly_breakable_by_hand=2},
1245 legacy_facedir_simple = true,
1246 is_ground_content = false,
1247 sounds = default.node_sound_wood_defaults(),
1249 on_construct = function(pos)
1250 local meta = minetest.get_meta(pos)
1251 meta:set_string("formspec", chest_formspec)
1252 meta:set_string("infotext", "Chest")
1253 local inv = meta:get_inventory()
1254 inv:set_size("main", 8*4)
1256 can_dig = function(pos,player)
1257 local meta = minetest.get_meta(pos);
1258 local inv = meta:get_inventory()
1259 return inv:is_empty("main")
1261 on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
1262 minetest.log("action", player:get_player_name()..
1263 " moves stuff in chest at "..minetest.pos_to_string(pos))
1265 on_metadata_inventory_put = function(pos, listname, index, stack, player)
1266 minetest.log("action", player:get_player_name()..
1267 " moves stuff to chest at "..minetest.pos_to_string(pos))
1269 on_metadata_inventory_take = function(pos, listname, index, stack, player)
1270 minetest.log("action", player:get_player_name()..
1271 " takes stuff from chest at "..minetest.pos_to_string(pos))
1277 minetest.register_node("default:chest_locked", {
1278 description = "Locked Chest",
1279 tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
1280 "default_chest_side.png", "default_chest_side.png", "default_chest_lock.png"},
1281 paramtype2 = "facedir",
1282 groups = {choppy=2,oddly_breakable_by_hand=2},
1283 legacy_facedir_simple = true,
1284 is_ground_content = false,
1285 sounds = default.node_sound_wood_defaults(),
1287 after_place_node = function(pos, placer)
1288 local meta = minetest.get_meta(pos)
1289 meta:set_string("owner", placer:get_player_name() or "")
1290 meta:set_string("infotext", "Locked Chest (owned by "..
1291 meta:get_string("owner")..")")
1293 on_construct = function(pos)
1294 local meta = minetest.get_meta(pos)
1295 meta:set_string("infotext", "Locked Chest")
1296 meta:set_string("owner", "")
1297 local inv = meta:get_inventory()
1298 inv:set_size("main", 8*4)
1300 can_dig = function(pos,player)
1301 local meta = minetest.get_meta(pos);
1302 local inv = meta:get_inventory()
1303 return inv:is_empty("main") and has_locked_chest_privilege(meta, player)
1305 allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
1306 local meta = minetest.get_meta(pos)
1307 if not has_locked_chest_privilege(meta, player) then
1312 allow_metadata_inventory_put = function(pos, listname, index, stack, player)
1313 local meta = minetest.get_meta(pos)
1314 if not has_locked_chest_privilege(meta, player) then
1317 return stack:get_count()
1319 allow_metadata_inventory_take = function(pos, listname, index, stack, player)
1320 local meta = minetest.get_meta(pos)
1321 if not has_locked_chest_privilege(meta, player) then
1324 return stack:get_count()
1326 on_metadata_inventory_put = function(pos, listname, index, stack, player)
1327 minetest.log("action", player:get_player_name()..
1328 " moves stuff to locked chest at "..minetest.pos_to_string(pos))
1330 on_metadata_inventory_take = function(pos, listname, index, stack, player)
1331 minetest.log("action", player:get_player_name()..
1332 " takes stuff from locked chest at "..minetest.pos_to_string(pos))
1334 on_rightclick = function(pos, node, clicker)
1335 local meta = minetest.get_meta(pos)
1336 if has_locked_chest_privilege(meta, clicker) then
1337 minetest.show_formspec(
1338 clicker:get_player_name(),
1339 "default:chest_locked",
1340 get_locked_chest_formspec(pos)
1344 on_blast = function() end,
1349 local bookshelf_formspec =
1352 default.gui_bg_img..
1354 "list[context;books;0,0.3;8,2;]"..
1355 "list[current_player;main;0,2.85;8,1;]"..
1356 "list[current_player;main;0,4.08;8,3;8]"..
1357 default.get_hotbar_bg(0,2.85)
1359 minetest.register_node("default:bookshelf", {
1360 description = "Bookshelf",
1361 tiles = {"default_wood.png", "default_wood.png", "default_bookshelf.png"},
1362 is_ground_content = false,
1363 groups = {choppy=3,oddly_breakable_by_hand=2,flammable=3},
1364 sounds = default.node_sound_wood_defaults(),
1366 on_construct = function(pos)
1367 local meta = minetest.get_meta(pos)
1368 meta:set_string("formspec", bookshelf_formspec)
1369 local inv = meta:get_inventory()
1370 inv:set_size("books", 8*2)
1372 can_dig = function(pos,player)
1373 local meta = minetest.get_meta(pos);
1374 local inv = meta:get_inventory()
1375 return inv:is_empty("books")
1378 allow_metadata_inventory_put = function(pos, listname, index, stack, player)
1379 local meta = minetest.get_meta(pos)
1380 local inv = meta:get_inventory()
1381 local to_stack = inv:get_stack(listname, index)
1382 if listname == "books" then
1383 if minetest.get_item_group(stack:get_name(), "book") ~= 0
1384 and to_stack:is_empty() then
1392 allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
1393 local meta = minetest.get_meta(pos)
1394 local inv = meta:get_inventory()
1395 local stack = inv:get_stack(from_list, from_index)
1396 local to_stack = inv:get_stack(to_list, to_index)
1397 if to_list == "books" then
1398 if stack:get_name() == "default:book" and to_stack:is_empty() then
1406 on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
1407 minetest.log("action", player:get_player_name()..
1408 " moves stuff in bookshelf at "..minetest.pos_to_string(pos))
1410 on_metadata_inventory_put = function(pos, listname, index, stack, player)
1411 minetest.log("action", player:get_player_name()..
1412 " moves stuff to bookshelf at "..minetest.pos_to_string(pos))
1414 on_metadata_inventory_take = function(pos, listname, index, stack, player)
1415 minetest.log("action", player:get_player_name()..
1416 " takes stuff from bookshelf at "..minetest.pos_to_string(pos))
1422 minetest.register_node("default:sign_wall", {
1423 description = "Sign",
1424 drawtype = "nodebox",
1425 tiles = {"default_sign.png"},
1426 inventory_image = "default_sign_wall.png",
1427 wield_image = "default_sign_wall.png",
1428 paramtype = "light",
1429 paramtype2 = "wallmounted",
1430 sunlight_propagates = true,
1431 is_ground_content = false,
1434 type = "wallmounted",
1435 wall_top = {-0.4375, 0.4375, -0.3125, 0.4375, 0.5, 0.3125},
1436 wall_bottom = {-0.4375, -0.5, -0.3125, 0.4375, -0.4375, 0.3125},
1437 wall_side = {-0.5, -0.3125, -0.4375, -0.4375, 0.3125, 0.4375},
1439 groups = {choppy=2,dig_immediate=2,attached_node=1},
1440 legacy_wallmounted = true,
1441 sounds = default.node_sound_defaults(),
1443 on_construct = function(pos)
1444 --local n = minetest.get_node(pos)
1445 local meta = minetest.get_meta(pos)
1446 meta:set_string("formspec", "field[text;;${text}]")
1447 meta:set_string("infotext", "\"\"")
1449 on_receive_fields = function(pos, formname, fields, sender)
1450 --print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields))
1451 if minetest.is_protected(pos, sender:get_player_name()) then
1452 minetest.record_protection_violation(pos, sender:get_player_name())
1455 local meta = minetest.get_meta(pos)
1456 if not fields.text then return end
1457 minetest.log("action", (sender:get_player_name() or "").." wrote \""..fields.text..
1458 "\" to sign at "..minetest.pos_to_string(pos))
1459 meta:set_string("text", fields.text)
1460 meta:set_string("infotext", '"'..fields.text..'"')
1464 minetest.register_node("default:ladder", {
1465 description = "Ladder",
1466 drawtype = "signlike",
1467 tiles = {"default_ladder.png"},
1468 inventory_image = "default_ladder.png",
1469 wield_image = "default_ladder.png",
1470 paramtype = "light",
1471 paramtype2 = "wallmounted",
1474 is_ground_content = false,
1476 type = "wallmounted",
1477 --wall_top = = <default>
1478 --wall_bottom = = <default>
1479 --wall_side = = <default>
1481 groups = {choppy=2,oddly_breakable_by_hand=3,flammable=2},
1482 legacy_wallmounted = true,
1483 sounds = default.node_sound_wood_defaults(),
1486 local fence_texture = "default_fence_overlay.png^default_wood.png^default_fence_overlay.png^[makealpha:255,126,126"
1487 minetest.register_node("default:fence_wood", {
1488 description = "Wooden Fence",
1489 drawtype = "fencelike",
1490 tiles = {"default_wood.png"},
1491 inventory_image = fence_texture,
1492 wield_image = fence_texture,
1493 paramtype = "light",
1494 is_ground_content = false,
1497 fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
1499 groups = {choppy=2,oddly_breakable_by_hand=2,flammable=2},
1500 sounds = default.node_sound_wood_defaults(),
1505 minetest.register_node("default:glass", {
1506 description = "Glass",
1507 drawtype = "glasslike_framed_optional",
1508 tiles = {"default_glass.png", "default_glass_detail.png"},
1509 inventory_image = minetest.inventorycube("default_glass.png"),
1510 paramtype = "light",
1511 sunlight_propagates = true,
1512 is_ground_content = false,
1513 groups = {cracky=3,oddly_breakable_by_hand=3},
1514 sounds = default.node_sound_glass_defaults(),
1517 minetest.register_node("default:obsidian_glass", {
1518 description = "Obsidian Glass",
1519 drawtype = "glasslike",
1520 tiles = {"default_obsidian_glass.png"},
1521 paramtype = "light",
1522 is_ground_content = false,
1523 sunlight_propagates = true,
1524 sounds = default.node_sound_glass_defaults(),
1525 groups = {cracky=3,oddly_breakable_by_hand=3},
1530 minetest.register_node("default:rail", {
1531 description = "Rail",
1532 drawtype = "raillike",
1533 tiles = {"default_rail.png", "default_rail_curved.png", "default_rail_t_junction.png", "default_rail_crossing.png"},
1534 inventory_image = "default_rail.png",
1535 wield_image = "default_rail.png",
1536 paramtype = "light",
1538 is_ground_content = false,
1541 -- but how to specify the dimensions for curved and sideways rails?
1542 fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
1544 groups = {bendy=2,dig_immediate=2,attached_node=1,connect_to_raillike=minetest.raillike_group("rail")},
1549 minetest.register_node("default:brick", {
1550 description = "Brick Block",
1551 tiles = {"default_brick.png"},
1552 is_ground_content = false,
1553 groups = {cracky=3},
1554 sounds = default.node_sound_stone_defaults(),
1558 minetest.register_node("default:meselamp", {
1559 description = "Mese Lamp",
1560 drawtype = "glasslike",
1561 tiles = {"default_meselamp.png"},
1562 paramtype = "light",
1563 sunlight_propagates = true,
1564 is_ground_content = false,
1565 groups = {cracky = 3, oddly_breakable_by_hand = 3},
1566 sounds = default.node_sound_glass_defaults(),
1567 light_source = default.LIGHT_MAX,
1574 minetest.register_node("default:cloud", {
1575 description = "Cloud",
1576 tiles = {"default_cloud.png"},
1577 sounds = default.node_sound_defaults(),
1578 groups = {not_in_creative_inventory=1},
1581 minetest.register_node("default:nyancat", {
1582 description = "Nyan Cat",
1583 tiles = {"default_nc_side.png", "default_nc_side.png", "default_nc_side.png",
1584 "default_nc_side.png", "default_nc_back.png", "default_nc_front.png"},
1585 paramtype2 = "facedir",
1586 groups = {cracky=2},
1587 is_ground_content = false,
1588 legacy_facedir_simple = true,
1589 sounds = default.node_sound_defaults(),
1592 minetest.register_node("default:nyancat_rainbow", {
1593 description = "Nyan Cat Rainbow",
1595 "default_nc_rb.png^[transformR90", "default_nc_rb.png^[transformR90",
1596 "default_nc_rb.png", "default_nc_rb.png"
1598 paramtype2 = "facedir",
1599 groups = {cracky=2},
1600 is_ground_content = false,
1601 sounds = default.node_sound_defaults(),