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
110 Tools / "Advanced" crafting / Non-"natural"
111 -------------------------------------------
124 default:obsidian_glass
136 default:nyancat_rainbow
144 minetest.register_node("default:stone", {
145 description = "Stone",
146 tiles = {"default_stone.png"},
147 is_ground_content = true,
148 groups = {cracky=3, stone=1},
149 drop = 'default:cobble',
150 legacy_mineral = true,
151 sounds = default.node_sound_stone_defaults(),
154 minetest.register_node("default:cobble", {
155 description = "Cobblestone",
156 tiles = {"default_cobble.png"},
157 is_ground_content = true,
158 groups = {cracky=3, stone=2},
159 sounds = default.node_sound_stone_defaults(),
162 minetest.register_node("default:stonebrick", {
163 description = "Stone Brick",
164 tiles = {"default_stone_brick.png"},
165 groups = {cracky=2, stone=1},
166 sounds = default.node_sound_stone_defaults(),
169 minetest.register_node("default:mossycobble", {
170 description = "Mossy Cobblestone",
171 tiles = {"default_mossycobble.png"},
172 is_ground_content = true,
173 groups = {cracky=3, stone=1},
174 sounds = default.node_sound_stone_defaults(),
179 minetest.register_node("default:desert_stone", {
180 description = "Desert Stone",
181 tiles = {"default_desert_stone.png"},
182 is_ground_content = true,
183 groups = {cracky=3, stone=1},
184 drop = 'default:desert_cobble',
185 legacy_mineral = true,
186 sounds = default.node_sound_stone_defaults(),
189 minetest.register_node("default:desert_cobble", {
190 description = "Desert Cobblestone",
191 tiles = {"default_desert_cobble.png"},
192 is_ground_content = true,
193 groups = {cracky=3, stone=2},
194 sounds = default.node_sound_stone_defaults(),
197 minetest.register_node("default:desert_stonebrick", {
198 description = "Desert Stone Brick",
199 tiles = {"default_desert_stone_brick.png"},
200 groups = {cracky=2, stone=1},
201 sounds = default.node_sound_stone_defaults(),
206 minetest.register_node("default:sandstone", {
207 description = "Sandstone",
208 tiles = {"default_sandstone.png"},
209 is_ground_content = true,
210 groups = {crumbly=2,cracky=3},
211 sounds = default.node_sound_stone_defaults(),
214 minetest.register_node("default:sandstonebrick", {
215 description = "Sandstone Brick",
216 tiles = {"default_sandstone_brick.png"},
217 is_ground_content = true,
219 sounds = default.node_sound_stone_defaults(),
224 minetest.register_node("default:obsidian", {
225 description = "Obsidian",
226 tiles = {"default_obsidian.png"},
227 is_ground_content = true,
228 sounds = default.node_sound_stone_defaults(),
229 groups = {cracky=1,level=2},
232 minetest.register_node("default:obsidianbrick", {
233 description = "Obsidian Brick",
234 tiles = {"default_obsidian_brick.png"},
235 sounds = default.node_sound_stone_defaults(),
236 groups = {cracky=1,level=2},
243 minetest.register_node("default:dirt", {
244 description = "Dirt",
245 tiles = {"default_dirt.png"},
246 is_ground_content = true,
247 groups = {crumbly=3,soil=1},
248 sounds = default.node_sound_dirt_defaults(),
251 minetest.register_node("default:dirt_with_grass", {
252 description = "Dirt with Grass",
253 tiles = {"default_grass.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
254 is_ground_content = true,
255 groups = {crumbly=3,soil=1},
256 drop = 'default:dirt',
257 sounds = default.node_sound_dirt_defaults({
258 footstep = {name="default_grass_footstep", gain=0.25},
262 minetest.register_node("default:dirt_with_grass_footsteps", {
263 description = "Dirt with Grass and Footsteps",
264 tiles = {"default_grass_footsteps.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
265 is_ground_content = true,
266 groups = {crumbly=3,soil=1,not_in_creative_inventory=1},
267 drop = 'default:dirt',
268 sounds = default.node_sound_dirt_defaults({
269 footstep = {name="default_grass_footstep", gain=0.25},
273 minetest.register_node("default:dirt_with_snow", {
274 description = "Dirt with Snow",
275 tiles = {"default_snow.png", "default_dirt.png", "default_dirt.png^default_snow_side.png"},
276 is_ground_content = true,
277 groups = {crumbly=3,soil=1},
278 drop = 'default:dirt',
279 sounds = default.node_sound_dirt_defaults({
280 footstep = {name="default_snow_footstep", gain=0.25},
286 minetest.register_node("default:sand", {
287 description = "Sand",
288 tiles = {"default_sand.png"},
289 is_ground_content = true,
290 groups = {crumbly=3, falling_node=1, sand=1},
291 sounds = default.node_sound_sand_defaults(),
294 minetest.register_node("default:desert_sand", {
295 description = "Desert Sand",
296 tiles = {"default_desert_sand.png"},
297 is_ground_content = true,
298 groups = {crumbly=3, falling_node=1, sand=1},
299 sounds = default.node_sound_sand_defaults(),
304 minetest.register_node("default:gravel", {
305 description = "Gravel",
306 tiles = {"default_gravel.png"},
307 is_ground_content = true,
308 groups = {crumbly=2, falling_node=1},
309 sounds = default.node_sound_dirt_defaults({
310 footstep = {name="default_gravel_footstep", gain=0.5},
311 dug = {name="default_gravel_footstep", gain=1.0},
317 minetest.register_node("default:clay", {
318 description = "Clay",
319 tiles = {"default_clay.png"},
320 is_ground_content = true,
321 groups = {crumbly=3},
322 drop = 'default:clay_lump 4',
323 sounds = default.node_sound_dirt_defaults(),
328 minetest.register_node("default:snow", {
329 description = "Snow",
330 tiles = {"default_snow.png"},
331 inventory_image = "default_snowball.png",
332 wield_image = "default_snowball.png",
333 is_ground_content = true,
336 drawtype = "nodebox",
340 {-0.5, -0.5, -0.5, 0.5, -0.5+2/16, 0.5},
343 groups = {crumbly=3,falling_node=1},
344 sounds = default.node_sound_dirt_defaults({
345 footstep = {name="default_snow_footstep", gain=0.25},
346 dug = {name="default_snow_footstep", gain=0.75},
349 on_construct = function(pos)
351 if minetest.get_node(pos).name == "default:dirt_with_grass" then
352 minetest.set_node(pos, {name="default:dirt_with_snow"})
358 minetest.register_node("default:snowblock", {
359 description = "Snow Block",
360 tiles = {"default_snow.png"},
361 is_ground_content = true,
362 groups = {crumbly=3},
363 sounds = default.node_sound_dirt_defaults({
364 footstep = {name="default_snow_footstep", gain=0.25},
365 dug = {name="default_snow_footstep", gain=0.75},
371 minetest.register_node("default:ice", {
373 tiles = {"default_ice.png"},
374 is_ground_content = false,
377 sounds = default.node_sound_glass_defaults(),
384 minetest.register_node("default:tree", {
385 description = "Tree",
386 tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"},
387 paramtype2 = "facedir",
388 is_ground_content = false,
389 groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
390 sounds = default.node_sound_wood_defaults(),
392 on_place = minetest.rotate_node
395 minetest.register_node("default:wood", {
396 description = "Wooden Planks",
397 tiles = {"default_wood.png"},
398 groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
399 sounds = default.node_sound_wood_defaults(),
402 minetest.register_node("default:sapling", {
403 description = "Sapling",
404 drawtype = "plantlike",
406 tiles = {"default_sapling.png"},
407 inventory_image = "default_sapling.png",
408 wield_image = "default_sapling.png",
411 is_ground_content = true,
414 fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
416 groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1,sapling=1},
417 sounds = default.node_sound_leaves_defaults(),
420 minetest.register_node("default:leaves", {
421 description = "Leaves",
422 drawtype = "allfaces_optional",
425 tiles = {"default_leaves.png"},
427 is_ground_content = false,
428 groups = {snappy=3, leafdecay=3, flammable=2, leaves=1},
433 -- player will get sapling with 1/20 chance
434 items = {'default:sapling'},
438 -- player will get leaves only if he get no saplings,
439 -- this is because max_items is 1
440 items = {'default:leaves'},
444 sounds = default.node_sound_leaves_defaults(),
446 after_place_node = default.after_place_leaves,
449 minetest.register_node("default:apple", {
450 description = "Apple",
451 drawtype = "plantlike",
453 tiles = {"default_apple.png"},
454 inventory_image = "default_apple.png",
456 sunlight_propagates = true,
458 is_ground_content = true,
461 fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2}
463 groups = {fleshy=3,dig_immediate=3,flammable=2,leafdecay=3,leafdecay_drop=1},
464 on_use = minetest.item_eat(1),
465 sounds = default.node_sound_leaves_defaults(),
467 after_place_node = function(pos, placer, itemstack)
468 if placer:is_player() then
469 minetest.set_node(pos, {name="default:apple", param2=1})
476 minetest.register_node("default:jungletree", {
477 description = "Jungle Tree",
478 tiles = {"default_jungletree_top.png", "default_jungletree_top.png", "default_jungletree.png"},
479 paramtype2 = "facedir",
480 is_ground_content = false,
481 groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
482 sounds = default.node_sound_wood_defaults(),
484 on_place = minetest.rotate_node
487 minetest.register_node("default:junglewood", {
488 description = "Junglewood Planks",
489 tiles = {"default_junglewood.png"},
490 groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
491 sounds = default.node_sound_wood_defaults(),
494 minetest.register_node("default:jungleleaves", {
495 description = "Jungle Leaves",
496 drawtype = "allfaces_optional",
499 tiles = {"default_jungleleaves.png"},
501 is_ground_content = false,
502 groups = {snappy=3, leafdecay=3, flammable=2, leaves=1},
507 -- player will get sapling with 1/20 chance
508 items = {'default:junglesapling'},
512 -- player will get leaves only if he get no saplings,
513 -- this is because max_items is 1
514 items = {'default:jungleleaves'},
518 sounds = default.node_sound_leaves_defaults(),
520 after_place_node = default.after_place_leaves,
523 minetest.register_node("default:junglesapling", {
524 description = "Jungle Sapling",
525 drawtype = "plantlike",
527 tiles = {"default_junglesapling.png"},
528 inventory_image = "default_junglesapling.png",
529 wield_image = "default_junglesapling.png",
534 fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
536 groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1,sapling=1},
537 sounds = default.node_sound_leaves_defaults(),
542 minetest.register_node("default:pinetree", {
543 description = "Pine Tree",
544 tiles = {"default_pinetree_top.png", "default_pinetree_top.png", "default_pinetree.png"},
545 paramtype2 = "facedir",
546 is_ground_content = false,
547 groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
548 sounds = default.node_sound_wood_defaults(),
550 on_place = minetest.rotate_node
553 minetest.register_node("default:pinewood", {
554 description = "Pinewood Planks",
555 tiles = {"default_pinewood.png"},
556 groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
557 sounds = default.node_sound_wood_defaults(),
560 minetest.register_node("default:pine_needles",{
561 description = "Pine Needles",
562 drawtype = "allfaces_optional",
564 tiles = {"default_pine_needles.png"},
567 is_ground_content = false,
568 groups = {snappy=3, leafdecay=3, flammable=2, leaves=1},
573 -- player will get sapling with 1/20 chance
574 items = {"default:pine_sapling"},
578 -- player will get leaves only if he get no saplings,
579 -- this is because max_items is 1
580 items = {"default:pine_needles"},
584 sounds = default.node_sound_leaves_defaults(),
586 after_place_node = default.after_place_leaves,
589 minetest.register_node("default:pine_sapling", {
590 description = "Pine Sapling",
591 drawtype = "plantlike",
593 tiles = {"default_pine_sapling.png"},
594 inventory_image = "default_pine_sapling.png",
595 wield_image = "default_pine_sapling.png",
598 is_ground_content = true,
601 fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
603 groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1,sapling=1},
604 sounds = default.node_sound_leaves_defaults(),
611 minetest.register_node("default:stone_with_coal", {
612 description = "Coal Ore",
613 tiles = {"default_stone.png^default_mineral_coal.png"},
614 is_ground_content = true,
616 drop = 'default:coal_lump',
617 sounds = default.node_sound_stone_defaults(),
620 minetest.register_node("default:coalblock", {
621 description = "Coal Block",
622 tiles = {"default_coal_block.png"},
623 is_ground_content = true,
625 sounds = default.node_sound_stone_defaults(),
630 minetest.register_node("default:stone_with_iron", {
631 description = "Iron Ore",
632 tiles = {"default_stone.png^default_mineral_iron.png"},
633 is_ground_content = true,
635 drop = 'default:iron_lump',
636 sounds = default.node_sound_stone_defaults(),
639 minetest.register_node("default:steelblock", {
640 description = "Steel Block",
641 tiles = {"default_steel_block.png"},
642 is_ground_content = true,
643 groups = {cracky=1,level=2},
644 sounds = default.node_sound_stone_defaults(),
649 minetest.register_node("default:stone_with_copper", {
650 description = "Copper Ore",
651 tiles = {"default_stone.png^default_mineral_copper.png"},
652 is_ground_content = true,
654 drop = 'default:copper_lump',
655 sounds = default.node_sound_stone_defaults(),
658 minetest.register_node("default:copperblock", {
659 description = "Copper Block",
660 tiles = {"default_copper_block.png"},
661 is_ground_content = true,
662 groups = {cracky=1,level=2},
663 sounds = default.node_sound_stone_defaults(),
666 minetest.register_node("default:bronzeblock", {
667 description = "Bronze Block",
668 tiles = {"default_bronze_block.png"},
669 is_ground_content = true,
670 groups = {cracky=1,level=2},
671 sounds = default.node_sound_stone_defaults(),
676 minetest.register_node("default:stone_with_mese", {
677 description = "Mese Ore",
678 tiles = {"default_stone.png^default_mineral_mese.png"},
680 is_ground_content = true,
681 groups = {cracky = 1},
682 drop = "default:mese_crystal",
683 sounds = default.node_sound_stone_defaults(),
687 minetest.register_node("default:mese", {
688 description = "Mese Block",
689 tiles = {"default_mese_block.png"},
691 is_ground_content = true,
692 groups = {cracky = 1, level = 2},
693 sounds = default.node_sound_stone_defaults(),
700 minetest.register_node("default:stone_with_gold", {
701 description = "Gold Ore",
702 tiles = {"default_stone.png^default_mineral_gold.png"},
703 is_ground_content = true,
705 drop = "default:gold_lump",
706 sounds = default.node_sound_stone_defaults(),
709 minetest.register_node("default:goldblock", {
710 description = "Gold Block",
711 tiles = {"default_gold_block.png"},
712 is_ground_content = true,
714 sounds = default.node_sound_stone_defaults(),
719 minetest.register_node("default:stone_with_diamond", {
720 description = "Diamond Ore",
721 tiles = {"default_stone.png^default_mineral_diamond.png"},
722 is_ground_content = true,
724 drop = "default:diamond",
725 sounds = default.node_sound_stone_defaults(),
728 minetest.register_node("default:diamondblock", {
729 description = "Diamond Block",
730 tiles = {"default_diamond_block.png"},
731 is_ground_content = true,
732 groups = {cracky=1,level=3},
733 sounds = default.node_sound_stone_defaults(),
737 -- Plantlife (non-cubic)
740 minetest.register_node("default:cactus", {
741 description = "Cactus",
742 tiles = {"default_cactus_top.png", "default_cactus_top.png", "default_cactus_side.png"},
743 paramtype2 = "facedir",
744 is_ground_content = true,
745 groups = {snappy=1,choppy=3,flammable=2},
746 sounds = default.node_sound_wood_defaults(),
747 on_place = minetest.rotate_node,
749 after_dig_node = function(pos, node, metadata, digger)
750 default.dig_up(pos, node, digger)
754 minetest.register_node("default:papyrus", {
755 description = "Papyrus",
756 drawtype = "plantlike",
757 tiles = {"default_papyrus.png"},
758 inventory_image = "default_papyrus.png",
759 wield_image = "default_papyrus.png",
762 is_ground_content = true,
765 fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
767 groups = {snappy=3,flammable=2},
768 sounds = default.node_sound_leaves_defaults(),
770 after_dig_node = function(pos, node, metadata, digger)
771 default.dig_up(pos, node, digger)
775 minetest.register_node("default:dry_shrub", {
776 description = "Dry Shrub",
777 drawtype = "plantlike",
780 tiles = {"default_dry_shrub.png"},
781 inventory_image = "default_dry_shrub.png",
782 wield_image = "default_dry_shrub.png",
785 is_ground_content = true,
787 groups = {snappy=3,flammable=3,attached_node=1},
788 sounds = default.node_sound_leaves_defaults(),
791 fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
795 minetest.register_node("default:junglegrass", {
796 description = "Jungle Grass",
797 drawtype = "plantlike",
800 tiles = {"default_junglegrass.png"},
801 inventory_image = "default_junglegrass.png",
802 wield_image = "default_junglegrass.png",
806 is_ground_content = true,
807 groups = {snappy=3,flammable=2,flora=1,attached_node=1},
808 sounds = default.node_sound_leaves_defaults(),
811 fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
815 minetest.register_node("default:grass_1", {
816 description = "Grass",
817 drawtype = "plantlike",
819 tiles = {"default_grass_1.png"},
820 -- Use texture of a taller grass stage in inventory
821 inventory_image = "default_grass_3.png",
822 wield_image = "default_grass_3.png",
825 is_ground_content = true,
827 groups = {snappy=3,flammable=3,flora=1,attached_node=1},
828 sounds = default.node_sound_leaves_defaults(),
831 fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
834 on_place = function(itemstack, placer, pointed_thing)
835 -- place a random grass node
836 local stack = ItemStack("default:grass_"..math.random(1,5))
837 local ret = minetest.item_place(stack, placer, pointed_thing)
838 return ItemStack("default:grass_1 "..itemstack:get_count()-(1-ret:get_count()))
843 minetest.register_node("default:grass_"..i, {
844 description = "Grass",
845 drawtype = "plantlike",
847 tiles = {"default_grass_"..i..".png"},
848 inventory_image = "default_grass_"..i..".png",
849 wield_image = "default_grass_"..i..".png",
853 is_ground_content = true,
854 drop = "default:grass_1",
855 groups = {snappy=3,flammable=3,flora=1,attached_node=1,not_in_creative_inventory=1},
856 sounds = default.node_sound_leaves_defaults(),
859 fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
868 minetest.register_node("default:water_source", {
869 description = "Water Source",
870 inventory_image = minetest.inventorycube("default_water.png"),
874 name = "default_water_source_animated.png",
876 type = "vertical_frames",
884 -- New-style water source material (mostly unused)
886 name = "default_water_source_animated.png",
888 type = "vertical_frames",
893 backface_culling = false,
902 is_ground_content = false,
905 liquidtype = "source",
906 liquid_alternative_flowing = "default:water_flowing",
907 liquid_alternative_source = "default:water_source",
908 liquid_viscosity = 1,
909 post_effect_color = {a=64, r=100, g=100, b=200},
910 groups = {water=3, liquid=3, puts_out_fire=1},
913 minetest.register_node("default:water_flowing", {
914 description = "Flowing Water",
915 inventory_image = minetest.inventorycube("default_water.png"),
916 drawtype = "flowingliquid",
917 tiles = {"default_water.png"},
920 name = "default_water_flowing_animated.png",
921 backface_culling = false,
923 type = "vertical_frames",
930 name = "default_water_flowing_animated.png",
931 backface_culling = true,
933 type = "vertical_frames",
942 paramtype2 = "flowingliquid",
947 is_ground_content = false,
950 liquidtype = "flowing",
951 liquid_alternative_flowing = "default:water_flowing",
952 liquid_alternative_source = "default:water_source",
953 liquid_viscosity = 1,
954 post_effect_color = {a=64, r=100, g=100, b=200},
955 groups = {water=3, liquid=3, puts_out_fire=1, not_in_creative_inventory=1},
960 minetest.register_node("default:lava_source", {
961 description = "Lava Source",
962 inventory_image = minetest.inventorycube("default_lava.png"),
966 name = "default_lava_source_animated.png",
968 type = "vertical_frames",
976 -- New-style lava source material (mostly unused)
978 name = "default_lava_source_animated.png",
980 type = "vertical_frames",
985 backface_culling = false,
989 light_source = default.LIGHT_MAX - 1,
994 is_ground_content = false,
997 liquidtype = "source",
998 liquid_alternative_flowing = "default:lava_flowing",
999 liquid_alternative_source = "default:lava_source",
1000 liquid_viscosity = 7,
1001 liquid_renewable = false,
1002 damage_per_second = 4 * 2,
1003 post_effect_color = {a=192, r=255, g=64, b=0},
1004 groups = {lava=3, liquid=2, hot=3, igniter=1},
1007 minetest.register_node("default:lava_flowing", {
1008 description = "Flowing Lava",
1009 inventory_image = minetest.inventorycube("default_lava.png"),
1010 drawtype = "flowingliquid",
1011 tiles = {"default_lava.png"},
1014 name = "default_lava_flowing_animated.png",
1015 backface_culling = false,
1017 type = "vertical_frames",
1024 name = "default_lava_flowing_animated.png",
1025 backface_culling = true,
1027 type = "vertical_frames",
1034 paramtype = "light",
1035 paramtype2 = "flowingliquid",
1036 light_source = default.LIGHT_MAX - 1,
1040 buildable_to = true,
1041 is_ground_content = false,
1044 liquidtype = "flowing",
1045 liquid_alternative_flowing = "default:lava_flowing",
1046 liquid_alternative_source = "default:lava_source",
1047 liquid_viscosity = 7,
1048 liquid_renewable = false,
1049 damage_per_second = 4 * 2,
1050 post_effect_color = {a=192, r=255, g=64, b=0},
1051 groups = {lava=3, liquid=2, hot=3, igniter=1, not_in_creative_inventory=1},
1055 -- Tools / "Advanced" crafting / Non-"natural"
1058 minetest.register_node("default:torch", {
1059 description = "Torch",
1060 drawtype = "torchlike",
1063 name = "default_torch_on_floor_animated.png",
1065 type = "vertical_frames",
1072 name="default_torch_on_ceiling_animated.png",
1074 type = "vertical_frames",
1081 name="default_torch_animated.png",
1083 type = "vertical_frames",
1090 inventory_image = "default_torch_on_floor.png",
1091 wield_image = "default_torch_on_floor.png",
1092 paramtype = "light",
1093 paramtype2 = "wallmounted",
1094 sunlight_propagates = true,
1095 is_ground_content = false,
1097 light_source = default.LIGHT_MAX - 1,
1099 type = "wallmounted",
1100 wall_top = {-0.1, 0.5-0.6, -0.1, 0.1, 0.5, 0.1},
1101 wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5+0.6, 0.1},
1102 wall_side = {-0.5, -0.3, -0.1, -0.5+0.3, 0.3, 0.1},
1104 groups = {choppy=2,dig_immediate=3,flammable=1,attached_node=1},
1105 legacy_wallmounted = true,
1106 sounds = default.node_sound_defaults(),
1111 local chest_formspec =
1114 default.gui_bg_img..
1116 "list[current_name;main;0,0.3;8,4;]"..
1117 "list[current_player;main;0,4.85;8,1;]"..
1118 "list[current_player;main;0,6.08;8,3;8]"..
1119 default.get_hotbar_bg(0,4.85)
1121 local function get_locked_chest_formspec(pos)
1122 local spos = pos.x .. "," .. pos.y .. "," ..pos.z
1126 default.gui_bg_img..
1128 "list[nodemeta:".. spos .. ";main;0,0.3;8,4;]"..
1129 "list[current_player;main;0,4.85;8,1;]"..
1130 "list[current_player;main;0,6.08;8,3;8]"..
1131 default.get_hotbar_bg(0,4.85)
1135 local function has_locked_chest_privilege(meta, player)
1136 if player:get_player_name() ~= meta:get_string("owner") then
1142 minetest.register_node("default:chest", {
1143 description = "Chest",
1144 tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
1145 "default_chest_side.png", "default_chest_side.png", "default_chest_front.png"},
1146 paramtype2 = "facedir",
1147 groups = {choppy=2,oddly_breakable_by_hand=2},
1148 legacy_facedir_simple = true,
1149 is_ground_content = false,
1150 sounds = default.node_sound_wood_defaults(),
1152 on_construct = function(pos)
1153 local meta = minetest.get_meta(pos)
1154 meta:set_string("formspec", chest_formspec)
1155 meta:set_string("infotext", "Chest")
1156 local inv = meta:get_inventory()
1157 inv:set_size("main", 8*4)
1159 can_dig = function(pos,player)
1160 local meta = minetest.get_meta(pos);
1161 local inv = meta:get_inventory()
1162 return inv:is_empty("main")
1164 on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
1165 minetest.log("action", player:get_player_name()..
1166 " moves stuff in chest at "..minetest.pos_to_string(pos))
1168 on_metadata_inventory_put = function(pos, listname, index, stack, player)
1169 minetest.log("action", player:get_player_name()..
1170 " moves stuff to chest at "..minetest.pos_to_string(pos))
1172 on_metadata_inventory_take = function(pos, listname, index, stack, player)
1173 minetest.log("action", player:get_player_name()..
1174 " takes stuff from chest at "..minetest.pos_to_string(pos))
1180 minetest.register_node("default:chest_locked", {
1181 description = "Locked Chest",
1182 tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
1183 "default_chest_side.png", "default_chest_side.png", "default_chest_lock.png"},
1184 paramtype2 = "facedir",
1185 groups = {choppy=2,oddly_breakable_by_hand=2},
1186 legacy_facedir_simple = true,
1187 is_ground_content = false,
1188 sounds = default.node_sound_wood_defaults(),
1190 after_place_node = function(pos, placer)
1191 local meta = minetest.get_meta(pos)
1192 meta:set_string("owner", placer:get_player_name() or "")
1193 meta:set_string("infotext", "Locked Chest (owned by "..
1194 meta:get_string("owner")..")")
1196 on_construct = function(pos)
1197 local meta = minetest.get_meta(pos)
1198 meta:set_string("infotext", "Locked Chest")
1199 meta:set_string("owner", "")
1200 local inv = meta:get_inventory()
1201 inv:set_size("main", 8*4)
1203 can_dig = function(pos,player)
1204 local meta = minetest.get_meta(pos);
1205 local inv = meta:get_inventory()
1206 return inv:is_empty("main") and has_locked_chest_privilege(meta, player)
1208 allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
1209 local meta = minetest.get_meta(pos)
1210 if not has_locked_chest_privilege(meta, player) then
1215 allow_metadata_inventory_put = function(pos, listname, index, stack, player)
1216 local meta = minetest.get_meta(pos)
1217 if not has_locked_chest_privilege(meta, player) then
1220 return stack:get_count()
1222 allow_metadata_inventory_take = function(pos, listname, index, stack, player)
1223 local meta = minetest.get_meta(pos)
1224 if not has_locked_chest_privilege(meta, player) then
1227 return stack:get_count()
1229 on_metadata_inventory_put = function(pos, listname, index, stack, player)
1230 minetest.log("action", player:get_player_name()..
1231 " moves stuff to locked chest at "..minetest.pos_to_string(pos))
1233 on_metadata_inventory_take = function(pos, listname, index, stack, player)
1234 minetest.log("action", player:get_player_name()..
1235 " takes stuff from locked chest at "..minetest.pos_to_string(pos))
1237 on_rightclick = function(pos, node, clicker)
1238 local meta = minetest.get_meta(pos)
1239 if has_locked_chest_privilege(meta, clicker) then
1240 minetest.show_formspec(
1241 clicker:get_player_name(),
1242 "default:chest_locked",
1243 get_locked_chest_formspec(pos)
1251 local bookshelf_formspec =
1254 default.gui_bg_img..
1256 "list[context;books;0,0.3;8,2;]"..
1257 "list[current_player;main;0,2.85;8,1;]"..
1258 "list[current_player;main;0,4.08;8,3;8]"..
1259 default.get_hotbar_bg(0,2.85)
1261 minetest.register_node("default:bookshelf", {
1262 description = "Bookshelf",
1263 tiles = {"default_wood.png", "default_wood.png", "default_bookshelf.png"},
1264 is_ground_content = false,
1265 groups = {choppy=3,oddly_breakable_by_hand=2,flammable=3},
1266 sounds = default.node_sound_wood_defaults(),
1268 on_construct = function(pos)
1269 local meta = minetest.get_meta(pos)
1270 meta:set_string("formspec", bookshelf_formspec)
1271 local inv = meta:get_inventory()
1272 inv:set_size("books", 8*2)
1274 can_dig = function(pos,player)
1275 local meta = minetest.get_meta(pos);
1276 local inv = meta:get_inventory()
1277 return inv:is_empty("books")
1280 allow_metadata_inventory_put = function(pos, listname, index, stack, player)
1281 local meta = minetest.get_meta(pos)
1282 local inv = meta:get_inventory()
1283 local to_stack = inv:get_stack(listname, index)
1284 if listname == "books" then
1285 if minetest.get_item_group(stack:get_name(), "book") ~= 0
1286 and to_stack:is_empty() then
1294 allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
1295 local meta = minetest.get_meta(pos)
1296 local inv = meta:get_inventory()
1297 local stack = inv:get_stack(from_list, from_index)
1298 local to_stack = inv:get_stack(to_list, to_index)
1299 if to_list == "books" then
1300 if stack:get_name() == "default:book" and to_stack:is_empty() then
1308 on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
1309 minetest.log("action", player:get_player_name()..
1310 " moves stuff in bookshelf at "..minetest.pos_to_string(pos))
1312 on_metadata_inventory_put = function(pos, listname, index, stack, player)
1313 minetest.log("action", player:get_player_name()..
1314 " moves stuff to bookshelf at "..minetest.pos_to_string(pos))
1316 on_metadata_inventory_take = function(pos, listname, index, stack, player)
1317 minetest.log("action", player:get_player_name()..
1318 " takes stuff from bookshelf at "..minetest.pos_to_string(pos))
1324 minetest.register_node("default:sign_wall", {
1325 description = "Sign",
1326 drawtype = "nodebox",
1327 tiles = {"default_sign.png"},
1328 inventory_image = "default_sign_wall.png",
1329 wield_image = "default_sign_wall.png",
1330 paramtype = "light",
1331 paramtype2 = "wallmounted",
1332 sunlight_propagates = true,
1333 is_ground_content = false,
1336 type = "wallmounted",
1337 wall_top = {-0.4375, 0.4375, -0.3125, 0.4375, 0.5, 0.3125},
1338 wall_bottom = {-0.4375, -0.5, -0.3125, 0.4375, -0.4375, 0.3125},
1339 wall_side = {-0.5, -0.3125, -0.4375, -0.4375, 0.3125, 0.4375},
1341 groups = {choppy=2,dig_immediate=2,attached_node=1},
1342 legacy_wallmounted = true,
1343 sounds = default.node_sound_defaults(),
1345 on_construct = function(pos)
1346 --local n = minetest.get_node(pos)
1347 local meta = minetest.get_meta(pos)
1348 meta:set_string("formspec", "field[text;;${text}]")
1349 meta:set_string("infotext", "\"\"")
1351 on_receive_fields = function(pos, formname, fields, sender)
1352 --print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields))
1353 if minetest.is_protected(pos, sender:get_player_name()) then
1354 minetest.record_protection_violation(pos, sender:get_player_name())
1357 local meta = minetest.get_meta(pos)
1358 if not fields.text then return end
1359 minetest.log("action", (sender:get_player_name() or "").." wrote \""..fields.text..
1360 "\" to sign at "..minetest.pos_to_string(pos))
1361 meta:set_string("text", fields.text)
1362 meta:set_string("infotext", '"'..fields.text..'"')
1366 minetest.register_node("default:ladder", {
1367 description = "Ladder",
1368 drawtype = "signlike",
1369 tiles = {"default_ladder.png"},
1370 inventory_image = "default_ladder.png",
1371 wield_image = "default_ladder.png",
1372 paramtype = "light",
1373 paramtype2 = "wallmounted",
1376 is_ground_content = false,
1378 type = "wallmounted",
1379 --wall_top = = <default>
1380 --wall_bottom = = <default>
1381 --wall_side = = <default>
1383 groups = {choppy=2,oddly_breakable_by_hand=3,flammable=2},
1384 legacy_wallmounted = true,
1385 sounds = default.node_sound_wood_defaults(),
1388 local fence_texture = "default_fence_overlay.png^default_wood.png^default_fence_overlay.png^[makealpha:255,126,126"
1389 minetest.register_node("default:fence_wood", {
1390 description = "Wooden Fence",
1391 drawtype = "fencelike",
1392 tiles = {"default_wood.png"},
1393 inventory_image = fence_texture,
1394 wield_image = fence_texture,
1395 paramtype = "light",
1396 is_ground_content = false,
1399 fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
1401 groups = {choppy=2,oddly_breakable_by_hand=2,flammable=2},
1402 sounds = default.node_sound_wood_defaults(),
1407 minetest.register_node("default:glass", {
1408 description = "Glass",
1409 drawtype = "glasslike_framed_optional",
1410 tiles = {"default_glass.png", "default_glass_detail.png"},
1411 inventory_image = minetest.inventorycube("default_glass.png"),
1412 paramtype = "light",
1413 sunlight_propagates = true,
1414 is_ground_content = false,
1415 groups = {cracky=3,oddly_breakable_by_hand=3},
1416 sounds = default.node_sound_glass_defaults(),
1419 minetest.register_node("default:obsidian_glass", {
1420 description = "Obsidian Glass",
1421 drawtype = "glasslike",
1422 tiles = {"default_obsidian_glass.png"},
1423 paramtype = "light",
1424 is_ground_content = false,
1425 sunlight_propagates = true,
1426 sounds = default.node_sound_glass_defaults(),
1427 groups = {cracky=3,oddly_breakable_by_hand=3},
1432 minetest.register_node("default:rail", {
1433 description = "Rail",
1434 drawtype = "raillike",
1435 tiles = {"default_rail.png", "default_rail_curved.png", "default_rail_t_junction.png", "default_rail_crossing.png"},
1436 inventory_image = "default_rail.png",
1437 wield_image = "default_rail.png",
1438 paramtype = "light",
1440 is_ground_content = false,
1443 -- but how to specify the dimensions for curved and sideways rails?
1444 fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
1446 groups = {bendy=2,dig_immediate=2,attached_node=1},
1451 minetest.register_node("default:brick", {
1452 description = "Brick Block",
1453 tiles = {"default_brick.png"},
1454 is_ground_content = false,
1455 groups = {cracky=3},
1456 sounds = default.node_sound_stone_defaults(),
1460 minetest.register_node("default:meselamp", {
1461 description = "Mese Lamp",
1462 drawtype = "glasslike",
1463 tiles = {"default_meselamp.png"},
1464 paramtype = "light",
1465 sunlight_propagates = true,
1466 is_ground_content = false,
1467 groups = {cracky = 3, oddly_breakable_by_hand = 3},
1468 sounds = default.node_sound_glass_defaults(),
1476 minetest.register_node("default:cloud", {
1477 description = "Cloud",
1478 tiles = {"default_cloud.png"},
1479 sounds = default.node_sound_defaults(),
1480 groups = {not_in_creative_inventory=1},
1483 minetest.register_node("default:nyancat", {
1484 description = "Nyan Cat",
1485 tiles = {"default_nc_side.png", "default_nc_side.png", "default_nc_side.png",
1486 "default_nc_side.png", "default_nc_back.png", "default_nc_front.png"},
1487 paramtype2 = "facedir",
1488 groups = {cracky=2},
1489 is_ground_content = false,
1490 legacy_facedir_simple = true,
1491 sounds = default.node_sound_defaults(),
1494 minetest.register_node("default:nyancat_rainbow", {
1495 description = "Nyan Cat Rainbow",
1497 "default_nc_rb.png^[transformR90", "default_nc_rb.png^[transformR90",
1498 "default_nc_rb.png", "default_nc_rb.png"
1500 paramtype2 = "facedir",
1501 groups = {cracky=2},
1502 is_ground_content = false,
1503 sounds = default.node_sound_defaults(),