1 -- Minetest 0.4 mod: default
2 -- See README.txt for licensing and other information.
4 -- The API documentation in here was moved into doc/lua_api.txt
11 -- Definitions made by this mod that other mods can use too
15 dofile(minetest.get_modpath("default").."/player.lua")
16 dofile(minetest.get_modpath("default").."/mapgen.lua")
17 dofile(minetest.get_modpath("default").."/leafdecay.lua")
24 minetest.register_item(":", {
26 wield_image = "wieldhand.png",
27 wield_scale = {x=1,y=1,z=2.5},
29 full_punch_interval = 0.9,
32 fleshy = {times={[2]=0.75, [3]=0.6}, uses=0, maxlevel=1},
33 crumbly = {times={[2]=3.00, [3]=0.70}, uses=0, maxlevel=1},
34 snappy = {times={[3]=0.40}, uses=0, maxlevel=1},
35 oddly_breakable_by_hand = {times={[1]=7.00,[2]=4.00,[3]=1.40}, uses=0, maxlevel=3}
40 minetest.register_tool("default:pick_wood", {
41 description = "Wooden Pickaxe",
42 inventory_image = "default_tool_woodpick.png",
44 full_punch_interval = 1.2,
47 cracky = {times={[2]=2.00, [3]=1.20}, uses=10, maxlevel=1},
48 fleshy = {times={[2]=0.95, [3]=0.6}, uses=15, maxlevel=1}
52 minetest.register_tool("default:pick_stone", {
53 description = "Stone Pickaxe",
54 inventory_image = "default_tool_stonepick.png",
56 full_punch_interval = 1.3,
59 cracky = {times={[1]=3.00, [2]=1.20, [3]=0.80}, uses=20, maxlevel=1},
60 fleshy = {times={[2]=0.7, [3]=0.5}, uses=25, maxlevel=1}
64 minetest.register_tool("default:pick_steel", {
65 description = "Steel Pickaxe",
66 inventory_image = "default_tool_steelpick.png",
68 full_punch_interval = 1.0,
71 cracky = {times={[1]=4.00, [2]=1.60, [3]=1.00}, uses=30, maxlevel=2},
72 fleshy = {times={[2]=0.6, [3]=0.35}, uses=35, maxlevel=1}
76 minetest.register_tool("default:pick_mese", {
77 description = "Mese Pickaxe",
78 inventory_image = "default_tool_mesepick.png",
80 full_punch_interval = 0.65,
83 cracky = {times={[1]=2.0, [2]=1.0, [3]=0.5}, uses=20, maxlevel=3},
84 crumbly = {times={[1]=2.0, [2]=1.0, [3]=0.5}, uses=20, maxlevel=3},
85 snappy = {times={[1]=2.0, [2]=1.0, [3]=0.5}, uses=20, maxlevel=3},
86 fleshy = {times={[2]=0.6, [3]=0.5}, uses=80, maxlevel=1}
90 minetest.register_tool("default:shovel_wood", {
91 description = "Wooden Shovel",
92 inventory_image = "default_tool_woodshovel.png",
93 wield_image = "default_tool_woodshovel.png^[transformR90",
95 full_punch_interval = 1.2,
98 crumbly = {times={[1]=3.00, [2]=0.80, [3]=0.50}, uses=10, maxlevel=1},
99 fleshy = {times={[2]=1.05, [3]=0.70}, uses=25, maxlevel=1}
103 minetest.register_tool("default:shovel_stone", {
104 description = "Stone Shovel",
105 inventory_image = "default_tool_stoneshovel.png",
106 wield_image = "default_tool_stoneshovel.png^[transformR90",
107 tool_capabilities = {
108 full_punch_interval = 1.4,
111 crumbly = {times={[1]=1.50, [2]=0.50, [3]=0.30}, uses=20, maxlevel=1},
112 fleshy = {times={[2]=0.75, [3]=0.50}, uses=40, maxlevel=1}
116 minetest.register_tool("default:shovel_steel", {
117 description = "Steel Shovel",
118 inventory_image = "default_tool_steelshovel.png",
119 wield_image = "default_tool_steelshovel.png^[transformR90",
120 tool_capabilities = {
121 full_punch_interval = 1.1,
124 crumbly = {times={[1]=1.50, [2]=0.70, [3]=0.60}, uses=30, maxlevel=2},
125 fleshy = {times={[2]=0.45, [3]=0.30}, uses=50, maxlevel=1}
129 minetest.register_tool("default:axe_wood", {
130 description = "Wooden Axe",
131 inventory_image = "default_tool_woodaxe.png",
132 tool_capabilities = {
133 full_punch_interval = 1.0,
136 choppy = {times={[2]=1.60, [3]=1.20}, uses=10, maxlevel=1},
137 fleshy = {times={[2]=0.70, [3]=0.50}, uses=5, maxlevel=1}
141 minetest.register_tool("default:axe_stone", {
142 description = "Stone Axe",
143 inventory_image = "default_tool_stoneaxe.png",
144 tool_capabilities = {
145 full_punch_interval = 1.2,
148 choppy={times={[1]=3.00, [2]=1.40, [3]=1.00}, uses=20, maxlevel=1},
149 fleshy={times={[2]=0.60, [3]=0.40}, uses=15, maxlevel=1}
153 minetest.register_tool("default:axe_steel", {
154 description = "Steel Axe",
155 inventory_image = "default_tool_steelaxe.png",
156 tool_capabilities = {
157 full_punch_interval = 0.9,
160 choppy={times={[1]=2.60, [2]=1.00, [3]=0.60}, uses=30, maxlevel=2},
161 fleshy={times={[2]=0.40, [3]=0.25}, uses=25, maxlevel=1}
165 minetest.register_tool("default:sword_wood", {
166 description = "Wooden Sword",
167 inventory_image = "default_tool_woodsword.png",
168 tool_capabilities = {
169 full_punch_interval = 0.9,
172 fleshy={times={[2]=1.10, [3]=0.60}, uses=10, maxlevel=1},
173 snappy={times={[2]=0.9, [3]=0.45}, uses=10, maxlevel=1},
174 choppy={times={[3]=0.90}, uses=20, maxlevel=0}
178 minetest.register_tool("default:sword_stone", {
179 description = "Stone Sword",
180 inventory_image = "default_tool_stonesword.png",
181 tool_capabilities = {
182 full_punch_interval = 1.1,
185 fleshy={times={[2]=0.80, [3]=0.40}, uses=20, maxlevel=1},
186 snappy={times={[2]=0.75, [3]=0.35}, uses=20, maxlevel=1},
187 choppy={times={[3]=0.70}, uses=20, maxlevel=0}
191 minetest.register_tool("default:sword_steel", {
192 description = "Steel Sword",
193 inventory_image = "default_tool_steelsword.png",
194 tool_capabilities = {
195 full_punch_interval = 0.8,
198 fleshy={times={[1]=2.00, [2]=0.80, [3]=0.40}, uses=10, maxlevel=2},
199 snappy={times={[2]=0.70, [3]=0.30}, uses=40, maxlevel=1},
200 choppy={times={[3]=0.65}, uses=40, maxlevel=0}
206 -- Crafting definition
209 minetest.register_craft({
210 output = 'default:wood 4',
216 minetest.register_craft({
217 output = 'default:junglewood 4',
219 {'default:jungletree'},
223 minetest.register_craft({
224 output = 'default:stick 4',
230 minetest.register_craft({
231 output = 'default:fence_wood 2',
233 {'default:stick', 'default:stick', 'default:stick'},
234 {'default:stick', 'default:stick', 'default:stick'},
238 minetest.register_craft({
239 output = 'default:sign_wall',
241 {'group:wood', 'group:wood', 'group:wood'},
242 {'group:wood', 'group:wood', 'group:wood'},
243 {'', 'default:stick', ''},
247 minetest.register_craft({
248 output = 'default:torch 4',
250 {'default:coal_lump'},
255 minetest.register_craft({
256 output = 'default:pick_wood',
258 {'group:wood', 'group:wood', 'group:wood'},
259 {'', 'default:stick', ''},
260 {'', 'default:stick', ''},
264 minetest.register_craft({
265 output = 'default:pick_stone',
267 {'group:stone', 'group:stone', 'group:stone'},
268 {'', 'default:stick', ''},
269 {'', 'default:stick', ''},
273 minetest.register_craft({
274 output = 'default:pick_steel',
276 {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
277 {'', 'default:stick', ''},
278 {'', 'default:stick', ''},
282 minetest.register_craft({
283 output = 'default:pick_mese',
285 {'default:mese_crystal', 'default:mese_crystal', 'default:mese_crystal'},
286 {'', 'default:stick', ''},
287 {'', 'default:stick', ''},
291 minetest.register_craft({
292 output = 'default:shovel_wood',
300 minetest.register_craft({
301 output = 'default:shovel_stone',
309 minetest.register_craft({
310 output = 'default:shovel_steel',
312 {'default:steel_ingot'},
318 minetest.register_craft({
319 output = 'default:axe_wood',
321 {'group:wood', 'group:wood'},
322 {'group:wood', 'default:stick'},
323 {'', 'default:stick'},
327 minetest.register_craft({
328 output = 'default:axe_stone',
330 {'group:stone', 'group:stone'},
331 {'group:stone', 'default:stick'},
332 {'', 'default:stick'},
336 minetest.register_craft({
337 output = 'default:axe_steel',
339 {'default:steel_ingot', 'default:steel_ingot'},
340 {'default:steel_ingot', 'default:stick'},
341 {'', 'default:stick'},
345 minetest.register_craft({
346 output = 'default:sword_wood',
354 minetest.register_craft({
355 output = 'default:sword_stone',
363 minetest.register_craft({
364 output = 'default:sword_steel',
366 {'default:steel_ingot'},
367 {'default:steel_ingot'},
372 minetest.register_craft({
373 output = 'default:rail 15',
375 {'default:steel_ingot', '', 'default:steel_ingot'},
376 {'default:steel_ingot', 'default:stick', 'default:steel_ingot'},
377 {'default:steel_ingot', '', 'default:steel_ingot'},
381 minetest.register_craft({
382 output = 'default:chest',
384 {'group:wood', 'group:wood', 'group:wood'},
385 {'group:wood', '', 'group:wood'},
386 {'group:wood', 'group:wood', 'group:wood'},
390 minetest.register_craft({
391 output = 'default:chest_locked',
393 {'group:wood', 'group:wood', 'group:wood'},
394 {'group:wood', 'default:steel_ingot', 'group:wood'},
395 {'group:wood', 'group:wood', 'group:wood'},
399 minetest.register_craft({
400 output = 'default:furnace',
402 {'group:stone', 'group:stone', 'group:stone'},
403 {'group:stone', '', 'group:stone'},
404 {'group:stone', 'group:stone', 'group:stone'},
408 minetest.register_craft({
409 output = 'default:steelblock',
411 {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
412 {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
413 {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
417 minetest.register_craft({
418 output = 'default:steel_ingot 9',
420 {'default:steelblock'},
424 minetest.register_craft({
425 output = 'default:sandstone',
427 {'group:sand', 'group:sand'},
428 {'group:sand', 'group:sand'},
432 minetest.register_craft({
433 output = 'default:sand 4',
435 {'default:sandstone'},
439 minetest.register_craft({
440 output = 'default:clay',
442 {'default:clay_lump', 'default:clay_lump'},
443 {'default:clay_lump', 'default:clay_lump'},
447 minetest.register_craft({
448 output = 'default:brick',
450 {'default:clay_brick', 'default:clay_brick'},
451 {'default:clay_brick', 'default:clay_brick'},
455 minetest.register_craft({
456 output = 'default:clay_brick 4',
462 minetest.register_craft({
463 output = 'default:paper',
465 {'default:papyrus', 'default:papyrus', 'default:papyrus'},
469 minetest.register_craft({
470 output = 'default:book',
478 minetest.register_craft({
479 output = 'default:bookshelf',
481 {'group:wood', 'group:wood', 'group:wood'},
482 {'default:book', 'default:book', 'default:book'},
483 {'group:wood', 'group:wood', 'group:wood'},
487 minetest.register_craft({
488 output = 'default:ladder',
490 {'default:stick', '', 'default:stick'},
491 {'default:stick', 'default:stick', 'default:stick'},
492 {'default:stick', '', 'default:stick'},
496 minetest.register_craft({
497 output = 'default:mese',
499 {'default:mese_crystal', 'default:mese_crystal', 'default:mese_crystal'},
500 {'default:mese_crystal', 'default:mese_crystal', 'default:mese_crystal'},
501 {'default:mese_crystal', 'default:mese_crystal', 'default:mese_crystal'},
505 minetest.register_craft({
506 output = 'default:mese_crystal 9',
512 minetest.register_craft({
513 output = 'default:mese_crystal_fragment 9',
515 {'default:mese_crystal'},
520 -- Crafting (tool repair)
522 minetest.register_craft({
524 additional_wear = -0.02,
531 minetest.register_craft({
533 output = "default:glass",
534 recipe = "group:sand",
537 minetest.register_craft({
539 output = "default:stone",
540 recipe = "default:cobble",
543 minetest.register_craft({
545 output = "default:steel_ingot",
546 recipe = "default:iron_lump",
549 minetest.register_craft({
551 output = "default:clay_brick",
552 recipe = "default:clay_lump",
559 minetest.register_craft({
561 recipe = "group:tree",
565 minetest.register_craft({
567 recipe = "default:junglegrass",
571 minetest.register_craft({
573 recipe = "group:leaves",
577 minetest.register_craft({
579 recipe = "default:cactus",
583 minetest.register_craft({
585 recipe = "default:papyrus",
589 minetest.register_craft({
591 recipe = "default:bookshelf",
595 minetest.register_craft({
597 recipe = "default:fence_wood",
601 minetest.register_craft({
603 recipe = "default:ladder",
607 minetest.register_craft({
609 recipe = "group:wood",
613 minetest.register_craft({
615 recipe = "default:lava_source",
619 minetest.register_craft({
621 recipe = "default:torch",
625 minetest.register_craft({
627 recipe = "default:sign_wall",
631 minetest.register_craft({
633 recipe = "default:chest",
637 minetest.register_craft({
639 recipe = "default:chest_locked",
643 minetest.register_craft({
645 recipe = "default:nyancat",
649 minetest.register_craft({
651 recipe = "default:nyancat_rainbow",
655 minetest.register_craft({
657 recipe = "default:sapling",
661 minetest.register_craft({
663 recipe = "default:apple",
667 minetest.register_craft({
669 recipe = "default:coal_lump",
673 minetest.register_craft({
675 recipe = "default:junglesapling",
683 -- Default node sounds
685 function default.node_sound_defaults(table)
687 table.footstep = table.footstep or
689 table.dug = table.dug or
690 {name="default_dug_node", gain=1.0}
694 function default.node_sound_stone_defaults(table)
696 table.footstep = table.footstep or
697 {name="default_hard_footstep", gain=0.2}
698 default.node_sound_defaults(table)
702 function default.node_sound_dirt_defaults(table)
704 table.footstep = table.footstep or
706 --table.dug = table.dug or
707 -- {name="default_dirt_break", gain=0.5}
708 default.node_sound_defaults(table)
712 function default.node_sound_sand_defaults(table)
714 table.footstep = table.footstep or
715 {name="default_grass_footstep", gain=0.25}
716 --table.dug = table.dug or
717 -- {name="default_dirt_break", gain=0.25}
718 table.dug = table.dug or
720 default.node_sound_defaults(table)
724 function default.node_sound_wood_defaults(table)
726 table.footstep = table.footstep or
727 {name="default_hard_footstep", gain=0.3}
728 default.node_sound_defaults(table)
732 function default.node_sound_leaves_defaults(table)
734 table.footstep = table.footstep or
735 {name="default_grass_footstep", gain=0.25}
736 table.dig = table.dig or
737 {name="default_dig_crumbly", gain=0.4}
738 table.dug = table.dug or
740 default.node_sound_defaults(table)
744 function default.node_sound_glass_defaults(table)
746 table.footstep = table.footstep or
747 {name="default_hard_footstep", gain=0.25}
748 table.dug = table.dug or
749 {name="default_break_glass", gain=1.0}
750 default.node_sound_defaults(table)
756 minetest.register_node("default:stone", {
757 description = "Stone",
758 tiles = {"default_stone.png"},
759 is_ground_content = true,
760 groups = {cracky=3, stone=1},
761 drop = 'default:cobble',
762 legacy_mineral = true,
763 sounds = default.node_sound_stone_defaults(),
766 minetest.register_node("default:desert_stone", {
767 description = "Desert Stone",
768 tiles = {"default_desert_stone.png"},
769 is_ground_content = true,
770 groups = {cracky=3, stone=1},
771 drop = 'default:desert_stone',
772 legacy_mineral = true,
773 sounds = default.node_sound_stone_defaults(),
776 minetest.register_node("default:stone_with_coal", {
777 description = "Coal Ore",
778 tiles = {"default_stone.png^default_mineral_coal.png"},
779 is_ground_content = true,
781 drop = 'default:coal_lump',
782 sounds = default.node_sound_stone_defaults(),
785 minetest.register_node("default:stone_with_iron", {
786 description = "Iron Ore",
787 tiles = {"default_stone.png^default_mineral_iron.png"},
788 is_ground_content = true,
790 drop = 'default:iron_lump',
791 sounds = default.node_sound_stone_defaults(),
794 minetest.register_node("default:stone_with_mese", {
795 description = "Mese Crystals in Stone",
796 tiles = {"default_stone.png^default_mineral_mese.png"},
797 is_ground_content = true,
799 drop = "default:mese_crystal",
800 sounds = default.node_sound_stone_defaults(),
803 minetest.register_node("default:dirt_with_grass", {
804 description = "Dirt with Grass",
805 tiles = {"default_grass.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
806 is_ground_content = true,
807 groups = {crumbly=3},
808 drop = 'default:dirt',
809 sounds = default.node_sound_dirt_defaults({
810 footstep = {name="default_grass_footstep", gain=0.4},
814 minetest.register_node("default:dirt_with_grass_footsteps", {
815 description = "Dirt with Grass and Footsteps",
816 tiles = {"default_grass_footsteps.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
817 is_ground_content = true,
818 groups = {crumbly=3, not_in_creative_inventory=1},
819 drop = 'default:dirt',
820 sounds = default.node_sound_dirt_defaults({
821 footstep = {name="default_grass_footstep", gain=0.4},
825 minetest.register_node("default:dirt", {
826 description = "Dirt",
827 tiles = {"default_dirt.png"},
828 is_ground_content = true,
829 groups = {crumbly=3},
830 sounds = default.node_sound_dirt_defaults(),
833 minetest.register_node("default:sand", {
834 description = "Sand",
835 tiles = {"default_sand.png"},
836 is_ground_content = true,
837 groups = {crumbly=3, falling_node=1, sand=1},
838 sounds = default.node_sound_sand_defaults(),
841 minetest.register_node("default:desert_sand", {
842 description = "Desert Sand",
843 tiles = {"default_desert_sand.png"},
844 is_ground_content = true,
845 groups = {crumbly=3, falling_node=1, sand=1},
846 sounds = default.node_sound_sand_defaults(),
849 minetest.register_node("default:gravel", {
850 description = "Gravel",
851 tiles = {"default_gravel.png"},
852 is_ground_content = true,
853 groups = {crumbly=2, falling_node=1},
854 sounds = default.node_sound_dirt_defaults({
855 footstep = {name="default_gravel_footstep", gain=0.45},
859 minetest.register_node("default:sandstone", {
860 description = "Sandstone",
861 tiles = {"default_sandstone.png"},
862 is_ground_content = true,
863 groups = {crumbly=2,cracky=2},
864 sounds = default.node_sound_stone_defaults(),
867 minetest.register_node("default:clay", {
868 description = "Clay",
869 tiles = {"default_clay.png"},
870 is_ground_content = true,
871 groups = {crumbly=3},
872 drop = 'default:clay_lump 4',
873 sounds = default.node_sound_dirt_defaults({
878 minetest.register_node("default:brick", {
879 description = "Brick Block",
880 tiles = {"default_brick.png"},
881 is_ground_content = true,
883 sounds = default.node_sound_stone_defaults(),
886 minetest.register_node("default:tree", {
887 description = "Tree",
888 tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"},
889 is_ground_content = true,
890 groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
891 sounds = default.node_sound_wood_defaults(),
894 minetest.register_node("default:jungletree", {
895 description = "Jungle Tree",
896 tiles = {"default_jungletree_top.png", "default_jungletree_top.png", "default_jungletree.png"},
897 is_ground_content = true,
898 groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
899 sounds = default.node_sound_wood_defaults(),
902 minetest.register_node("default:junglewood", {
903 description = "Junglewood Planks",
904 tiles = {"default_junglewood.png"},
905 is_ground_content = true,
906 groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
907 sounds = default.node_sound_wood_defaults(),
910 minetest.register_node("default:jungleleaves", {
911 description = "Jungle Leaves",
912 drawtype = "allfaces_optional",
914 tiles = {"default_jungleleaves.png"},
916 groups = {snappy=3, leafdecay=3, flammable=2, leaves=1},
921 -- player will get sapling with 1/20 chance
922 items = {'default:junglesapling'},
926 -- player will get leaves only if he get no saplings,
927 -- this is because max_items is 1
928 items = {'default:jungleleaves'},
932 sounds = default.node_sound_leaves_defaults(),
935 minetest.register_node("default:junglesapling", {
936 description = "Jungle Sapling",
937 drawtype = "plantlike",
939 tiles = {"default_junglesapling.png"},
940 inventory_image = "default_junglesapling.png",
941 wield_image = "default_junglesapling.png",
946 fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
948 groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1},
949 sounds = default.node_sound_defaults(),
951 -- alias for tree growing abm in content_abm.cpp
952 minetest.register_alias("junglesapling", "default:junglesapling")
954 minetest.register_node("default:junglegrass", {
955 description = "Jungle Grass",
956 drawtype = "plantlike",
958 tiles = {"default_junglegrass.png"},
959 inventory_image = "default_junglegrass.png",
960 wield_image = "default_junglegrass.png",
963 groups = {snappy=3,flammable=2,attached_node=1},
964 sounds = default.node_sound_leaves_defaults(),
967 minetest.register_node("default:leaves", {
968 description = "Leaves",
969 drawtype = "allfaces_optional",
971 tiles = {"default_leaves.png"},
973 groups = {snappy=3, leafdecay=3, flammable=2, leaves=1},
978 -- player will get sapling with 1/20 chance
979 items = {'default:sapling'},
983 -- player will get leaves only if he get no saplings,
984 -- this is because max_items is 1
985 items = {'default:leaves'},
989 sounds = default.node_sound_leaves_defaults(),
992 minetest.register_node("default:cactus", {
993 description = "Cactus",
994 tiles = {"default_cactus_top.png", "default_cactus_top.png", "default_cactus_side.png"},
995 is_ground_content = true,
996 groups = {snappy=2,choppy=3,flammable=2},
997 sounds = default.node_sound_wood_defaults(),
1000 minetest.register_node("default:papyrus", {
1001 description = "Papyrus",
1002 drawtype = "plantlike",
1003 tiles = {"default_papyrus.png"},
1004 inventory_image = "default_papyrus.png",
1005 wield_image = "default_papyrus.png",
1006 paramtype = "light",
1007 is_ground_content = true,
1011 fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
1013 groups = {snappy=3,flammable=2},
1014 sounds = default.node_sound_leaves_defaults(),
1017 minetest.register_node("default:bookshelf", {
1018 description = "Bookshelf",
1019 tiles = {"default_wood.png", "default_wood.png", "default_bookshelf.png"},
1020 is_ground_content = true,
1021 groups = {snappy=2,choppy=3,oddly_breakable_by_hand=2,flammable=3},
1022 sounds = default.node_sound_wood_defaults(),
1025 minetest.register_node("default:glass", {
1026 description = "Glass",
1027 drawtype = "glasslike",
1028 tiles = {"default_glass.png"},
1029 inventory_image = minetest.inventorycube("default_glass.png"),
1030 paramtype = "light",
1031 sunlight_propagates = true,
1032 is_ground_content = true,
1033 groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3},
1034 sounds = default.node_sound_glass_defaults(),
1037 minetest.register_node("default:fence_wood", {
1038 description = "Wooden Fence",
1039 drawtype = "fencelike",
1040 tiles = {"default_wood.png"},
1041 inventory_image = "default_fence.png",
1042 wield_image = "default_fence.png",
1043 paramtype = "light",
1044 is_ground_content = true,
1047 fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
1049 groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=2},
1050 sounds = default.node_sound_wood_defaults(),
1053 minetest.register_node("default:rail", {
1054 description = "Rail",
1055 drawtype = "raillike",
1056 tiles = {"default_rail.png", "default_rail_curved.png", "default_rail_t_junction.png", "default_rail_crossing.png"},
1057 inventory_image = "default_rail.png",
1058 wield_image = "default_rail.png",
1059 paramtype = "light",
1060 is_ground_content = true,
1064 -- but how to specify the dimensions for curved and sideways rails?
1065 fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
1067 groups = {bendy=2,snappy=1,dig_immediate=2,attached_node=1},
1070 minetest.register_node("default:ladder", {
1071 description = "Ladder",
1072 drawtype = "signlike",
1073 tiles = {"default_ladder.png"},
1074 inventory_image = "default_ladder.png",
1075 wield_image = "default_ladder.png",
1076 paramtype = "light",
1077 paramtype2 = "wallmounted",
1078 is_ground_content = true,
1082 type = "wallmounted",
1083 --wall_top = = <default>
1084 --wall_bottom = = <default>
1085 --wall_side = = <default>
1087 groups = {snappy=1,choppy=2,oddly_breakable_by_hand=3,flammable=2},
1088 legacy_wallmounted = true,
1089 sounds = default.node_sound_wood_defaults(),
1092 minetest.register_node("default:wood", {
1093 description = "Wooden Planks",
1094 tiles = {"default_wood.png"},
1095 is_ground_content = true,
1096 groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
1097 sounds = default.node_sound_wood_defaults(),
1100 minetest.register_node("default:cloud", {
1101 description = "Cloud",
1102 tiles = {"default_cloud.png"},
1103 is_ground_content = true,
1104 sounds = default.node_sound_defaults(),
1105 groups = {not_in_creative_inventory=1},
1108 minetest.register_node("default:water_flowing", {
1109 description = "Flowing Water",
1110 inventory_image = minetest.inventorycube("default_water.png"),
1111 drawtype = "flowingliquid",
1112 tiles = {"default_water.png"},
1115 image="default_water_flowing_animated.png",
1116 backface_culling=false,
1117 animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=0.8}
1120 image="default_water_flowing_animated.png",
1121 backface_culling=true,
1122 animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=0.8}
1125 alpha = WATER_ALPHA,
1126 paramtype = "light",
1130 buildable_to = true,
1132 liquidtype = "flowing",
1133 liquid_alternative_flowing = "default:water_flowing",
1134 liquid_alternative_source = "default:water_source",
1135 liquid_viscosity = WATER_VISC,
1136 post_effect_color = {a=64, r=100, g=100, b=200},
1137 groups = {water=3, liquid=3, puts_out_fire=1, not_in_creative_inventory=1},
1140 minetest.register_node("default:water_source", {
1141 description = "Water Source",
1142 inventory_image = minetest.inventorycube("default_water.png"),
1143 drawtype = "liquid",
1145 {name="default_water_source_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.0}}
1148 -- New-style water source material (mostly unused)
1149 {name="default_water.png", backface_culling=false},
1151 alpha = WATER_ALPHA,
1152 paramtype = "light",
1156 buildable_to = true,
1158 liquidtype = "source",
1159 liquid_alternative_flowing = "default:water_flowing",
1160 liquid_alternative_source = "default:water_source",
1161 liquid_viscosity = WATER_VISC,
1162 post_effect_color = {a=64, r=100, g=100, b=200},
1163 groups = {water=3, liquid=3, puts_out_fire=1},
1166 minetest.register_node("default:lava_flowing", {
1167 description = "Flowing Lava",
1168 inventory_image = minetest.inventorycube("default_lava.png"),
1169 drawtype = "flowingliquid",
1170 tiles = {"default_lava.png"},
1173 image="default_lava_flowing_animated.png",
1174 backface_culling=false,
1175 animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.3}
1178 image="default_lava_flowing_animated.png",
1179 backface_culling=true,
1180 animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.3}
1183 paramtype = "light",
1184 light_source = LIGHT_MAX - 1,
1188 buildable_to = true,
1190 liquidtype = "flowing",
1191 liquid_alternative_flowing = "default:lava_flowing",
1192 liquid_alternative_source = "default:lava_source",
1193 liquid_viscosity = LAVA_VISC,
1194 damage_per_second = 4*2,
1195 post_effect_color = {a=192, r=255, g=64, b=0},
1196 groups = {lava=3, liquid=2, hot=3, igniter=1, not_in_creative_inventory=1},
1199 minetest.register_node("default:lava_source", {
1200 description = "Lava Source",
1201 inventory_image = minetest.inventorycube("default_lava.png"),
1202 drawtype = "liquid",
1204 {name="default_lava_source_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0}}
1207 -- New-style lava source material (mostly unused)
1208 {name="default_lava.png", backface_culling=false},
1210 paramtype = "light",
1211 light_source = LIGHT_MAX - 1,
1215 buildable_to = true,
1217 liquidtype = "source",
1218 liquid_alternative_flowing = "default:lava_flowing",
1219 liquid_alternative_source = "default:lava_source",
1220 liquid_viscosity = LAVA_VISC,
1221 damage_per_second = 4*2,
1222 post_effect_color = {a=192, r=255, g=64, b=0},
1223 groups = {lava=3, liquid=2, hot=3, igniter=1},
1226 minetest.register_node("default:torch", {
1227 description = "Torch",
1228 drawtype = "torchlike",
1229 --tiles = {"default_torch_on_floor.png", "default_torch_on_ceiling.png", "default_torch.png"},
1231 {name="default_torch_on_floor_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0}},
1232 {name="default_torch_on_ceiling_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0}},
1233 {name="default_torch_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0}}
1235 inventory_image = "default_torch_on_floor.png",
1236 wield_image = "default_torch_on_floor.png",
1237 paramtype = "light",
1238 paramtype2 = "wallmounted",
1239 sunlight_propagates = true,
1241 light_source = LIGHT_MAX-1,
1243 type = "wallmounted",
1244 wall_top = {-0.1, 0.5-0.6, -0.1, 0.1, 0.5, 0.1},
1245 wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5+0.6, 0.1},
1246 wall_side = {-0.5, -0.3, -0.1, -0.5+0.3, 0.3, 0.1},
1248 groups = {choppy=2,dig_immediate=3,flammable=1,attached_node=1},
1249 legacy_wallmounted = true,
1250 sounds = default.node_sound_defaults(),
1253 minetest.register_node("default:sign_wall", {
1254 description = "Sign",
1255 drawtype = "signlike",
1256 tiles = {"default_sign_wall.png"},
1257 inventory_image = "default_sign_wall.png",
1258 wield_image = "default_sign_wall.png",
1259 paramtype = "light",
1260 paramtype2 = "wallmounted",
1261 sunlight_propagates = true,
1264 type = "wallmounted",
1265 --wall_top = <default>
1266 --wall_bottom = <default>
1267 --wall_side = <default>
1269 groups = {choppy=2,dig_immediate=2,attached_node=1},
1270 legacy_wallmounted = true,
1271 sounds = default.node_sound_defaults(),
1272 on_construct = function(pos)
1273 --local n = minetest.env:get_node(pos)
1274 local meta = minetest.env:get_meta(pos)
1275 meta:set_string("formspec", "field[text;;${text}]")
1276 meta:set_string("infotext", "\"\"")
1278 on_receive_fields = function(pos, formname, fields, sender)
1279 --print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields))
1280 local meta = minetest.env:get_meta(pos)
1281 fields.text = fields.text or ""
1282 print((sender:get_player_name() or "").." wrote \""..fields.text..
1283 "\" to sign at "..minetest.pos_to_string(pos))
1284 meta:set_string("text", fields.text)
1285 meta:set_string("infotext", '"'..fields.text..'"')
1289 minetest.register_node("default:chest", {
1290 description = "Chest",
1291 tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
1292 "default_chest_side.png", "default_chest_side.png", "default_chest_front.png"},
1293 paramtype2 = "facedir",
1294 groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
1295 legacy_facedir_simple = true,
1296 sounds = default.node_sound_wood_defaults(),
1297 on_construct = function(pos)
1298 local meta = minetest.env:get_meta(pos)
1299 meta:set_string("formspec",
1301 "list[current_name;main;0,0;8,4;]"..
1302 "list[current_player;main;0,5;8,4;]")
1303 meta:set_string("infotext", "Chest")
1304 local inv = meta:get_inventory()
1305 inv:set_size("main", 8*4)
1307 can_dig = function(pos,player)
1308 local meta = minetest.env:get_meta(pos);
1309 local inv = meta:get_inventory()
1310 return inv:is_empty("main")
1312 on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
1313 minetest.log("action", player:get_player_name()..
1314 " moves stuff in chest at "..minetest.pos_to_string(pos))
1316 on_metadata_inventory_put = function(pos, listname, index, stack, player)
1317 minetest.log("action", player:get_player_name()..
1318 " moves stuff to chest at "..minetest.pos_to_string(pos))
1320 on_metadata_inventory_take = function(pos, listname, index, stack, player)
1321 minetest.log("action", player:get_player_name()..
1322 " takes stuff from chest at "..minetest.pos_to_string(pos))
1326 local function has_locked_chest_privilege(meta, player)
1327 if player:get_player_name() ~= meta:get_string("owner") then
1333 minetest.register_node("default:chest_locked", {
1334 description = "Locked Chest",
1335 tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
1336 "default_chest_side.png", "default_chest_side.png", "default_chest_lock.png"},
1337 paramtype2 = "facedir",
1338 groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
1339 legacy_facedir_simple = true,
1340 sounds = default.node_sound_wood_defaults(),
1341 after_place_node = function(pos, placer)
1342 local meta = minetest.env:get_meta(pos)
1343 meta:set_string("owner", placer:get_player_name() or "")
1344 meta:set_string("infotext", "Locked Chest (owned by "..
1345 meta:get_string("owner")..")")
1347 on_construct = function(pos)
1348 local meta = minetest.env:get_meta(pos)
1349 meta:set_string("infotext", "Locked Chest")
1350 meta:set_string("owner", "")
1351 local inv = meta:get_inventory()
1352 inv:set_size("main", 8*4)
1354 can_dig = function(pos,player)
1355 local meta = minetest.env:get_meta(pos);
1356 local inv = meta:get_inventory()
1357 return inv:is_empty("main")
1359 allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
1360 local meta = minetest.env:get_meta(pos)
1361 if not has_locked_chest_privilege(meta, player) then
1362 minetest.log("action", player:get_player_name()..
1363 " tried to access a locked chest belonging to "..
1364 meta:get_string("owner").." at "..
1365 minetest.pos_to_string(pos))
1370 allow_metadata_inventory_put = function(pos, listname, index, stack, player)
1371 local meta = minetest.env:get_meta(pos)
1372 if not has_locked_chest_privilege(meta, player) then
1373 minetest.log("action", player:get_player_name()..
1374 " tried to access a locked chest belonging to "..
1375 meta:get_string("owner").." at "..
1376 minetest.pos_to_string(pos))
1379 return stack:get_count()
1381 allow_metadata_inventory_take = function(pos, listname, index, stack, player)
1382 local meta = minetest.env:get_meta(pos)
1383 if not has_locked_chest_privilege(meta, player) then
1384 minetest.log("action", player:get_player_name()..
1385 " tried to access a locked chest belonging to "..
1386 meta:get_string("owner").." at "..
1387 minetest.pos_to_string(pos))
1390 return stack:get_count()
1392 on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
1393 minetest.log("action", player:get_player_name()..
1394 " moves stuff in locked chest at "..minetest.pos_to_string(pos))
1396 on_metadata_inventory_put = function(pos, listname, index, stack, player)
1397 minetest.log("action", player:get_player_name()..
1398 " moves stuff to locked chest at "..minetest.pos_to_string(pos))
1400 on_metadata_inventory_take = function(pos, listname, index, stack, player)
1401 minetest.log("action", player:get_player_name()..
1402 " takes stuff from locked chest at "..minetest.pos_to_string(pos))
1404 on_rightclick = function(pos, node, clicker)
1405 local meta = minetest.env:get_meta(pos)
1406 if has_locked_chest_privilege(meta, clicker) then
1407 local pos = pos.x .. "," .. pos.y .. "," ..pos.z
1408 minetest.show_formspec(clicker:get_player_name(), "default:chest_locked",
1410 "list[nodemeta:".. pos .. ";main;0,0;8,4;]"..
1411 "list[current_player;main;0,5;8,4;]")
1416 default.furnace_inactive_formspec =
1418 "image[2,2;1,1;default_furnace_fire_bg.png]"..
1419 "list[current_name;fuel;2,3;1,1;]"..
1420 "list[current_name;src;2,1;1,1;]"..
1421 "list[current_name;dst;5,1;2,2;]"..
1422 "list[current_player;main;0,5;8,4;]"
1424 minetest.register_node("default:furnace", {
1425 description = "Furnace",
1426 tiles = {"default_furnace_top.png", "default_furnace_bottom.png", "default_furnace_side.png",
1427 "default_furnace_side.png", "default_furnace_side.png", "default_furnace_front.png"},
1428 paramtype2 = "facedir",
1429 groups = {cracky=2},
1430 legacy_facedir_simple = true,
1431 sounds = default.node_sound_stone_defaults(),
1432 on_construct = function(pos)
1433 local meta = minetest.env:get_meta(pos)
1434 meta:set_string("formspec", default.furnace_inactive_formspec)
1435 meta:set_string("infotext", "Furnace")
1436 local inv = meta:get_inventory()
1437 inv:set_size("fuel", 1)
1438 inv:set_size("src", 1)
1439 inv:set_size("dst", 4)
1441 can_dig = function(pos,player)
1442 local meta = minetest.env:get_meta(pos);
1443 local inv = meta:get_inventory()
1444 if not inv:is_empty("fuel") then
1446 elseif not inv:is_empty("dst") then
1448 elseif not inv:is_empty("src") then
1455 minetest.register_node("default:furnace_active", {
1456 description = "Furnace",
1457 tiles = {"default_furnace_top.png", "default_furnace_bottom.png", "default_furnace_side.png",
1458 "default_furnace_side.png", "default_furnace_side.png", "default_furnace_front_active.png"},
1459 paramtype2 = "facedir",
1461 drop = "default:furnace",
1462 groups = {cracky=2, not_in_creative_inventory=1},
1463 legacy_facedir_simple = true,
1464 sounds = default.node_sound_stone_defaults(),
1465 on_construct = function(pos)
1466 local meta = minetest.env:get_meta(pos)
1467 meta:set_string("formspec", default.furnace_inactive_formspec)
1468 meta:set_string("infotext", "Furnace");
1469 local inv = meta:get_inventory()
1470 inv:set_size("fuel", 1)
1471 inv:set_size("src", 1)
1472 inv:set_size("dst", 4)
1474 can_dig = function(pos,player)
1475 local meta = minetest.env:get_meta(pos);
1476 local inv = meta:get_inventory()
1477 if not inv:is_empty("fuel") then
1479 elseif not inv:is_empty("dst") then
1481 elseif not inv:is_empty("src") then
1488 function hacky_swap_node(pos,name)
1489 local node = minetest.env:get_node(pos)
1490 local meta = minetest.env:get_meta(pos)
1491 local meta0 = meta:to_table()
1492 if node.name == name then
1496 local meta0 = meta:to_table()
1497 minetest.env:set_node(pos,node)
1498 meta = minetest.env:get_meta(pos)
1499 meta:from_table(meta0)
1502 minetest.register_abm({
1503 nodenames = {"default:furnace","default:furnace_active"},
1506 action = function(pos, node, active_object_count, active_object_count_wider)
1507 local meta = minetest.env:get_meta(pos)
1508 for i, name in ipairs({
1514 if meta:get_string(name) == "" then
1515 meta:set_float(name, 0.0)
1519 local inv = meta:get_inventory()
1521 local srclist = inv:get_list("src")
1525 cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
1528 local was_active = false
1530 if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then
1532 meta:set_float("fuel_time", meta:get_float("fuel_time") + 1)
1533 meta:set_float("src_time", meta:get_float("src_time") + 1)
1534 if cooked and cooked.item and meta:get_float("src_time") >= cooked.time then
1535 -- check if there's room for output in "dst" list
1536 if inv:room_for_item("dst",cooked.item) then
1537 -- Put result in "dst" list
1538 inv:add_item("dst", cooked.item)
1539 -- take stuff from "src" list
1540 srcstack = inv:get_stack("src", 1)
1541 srcstack:take_item()
1542 inv:set_stack("src", 1, srcstack)
1544 print("Could not insert '"..cooked.item:to_string().."'")
1546 meta:set_string("src_time", 0)
1550 if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then
1551 local percent = math.floor(meta:get_float("fuel_time") /
1552 meta:get_float("fuel_totaltime") * 100)
1553 meta:set_string("infotext","Furnace active: "..percent.."%")
1554 hacky_swap_node(pos,"default:furnace_active")
1555 meta:set_string("formspec",
1557 "image[2,2;1,1;default_furnace_fire_bg.png^[lowpart:"..
1558 (100-percent)..":default_furnace_fire_fg.png]"..
1559 "list[current_name;fuel;2,3;1,1;]"..
1560 "list[current_name;src;2,1;1,1;]"..
1561 "list[current_name;dst;5,1;2,2;]"..
1562 "list[current_player;main;0,5;8,4;]")
1568 local fuellist = inv:get_list("fuel")
1569 local srclist = inv:get_list("src")
1572 cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
1575 fuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist})
1578 if fuel.time <= 0 then
1579 meta:set_string("infotext","Furnace out of fuel")
1580 hacky_swap_node(pos,"default:furnace")
1581 meta:set_string("formspec", default.furnace_inactive_formspec)
1585 if cooked.item:is_empty() then
1587 meta:set_string("infotext","Furnace is empty")
1588 hacky_swap_node(pos,"default:furnace")
1589 meta:set_string("formspec", default.furnace_inactive_formspec)
1594 meta:set_string("fuel_totaltime", fuel.time)
1595 meta:set_string("fuel_time", 0)
1597 local stack = inv:get_stack("fuel", 1)
1599 inv:set_stack("fuel", 1, stack)
1603 minetest.register_node("default:cobble", {
1604 description = "Cobblestone",
1605 tiles = {"default_cobble.png"},
1606 is_ground_content = true,
1607 groups = {cracky=3, stone=2},
1608 sounds = default.node_sound_stone_defaults(),
1611 minetest.register_node("default:mossycobble", {
1612 description = "Mossy Cobblestone",
1613 tiles = {"default_mossycobble.png"},
1614 is_ground_content = true,
1615 groups = {cracky=3},
1616 sounds = default.node_sound_stone_defaults(),
1619 minetest.register_node("default:steelblock", {
1620 description = "Steel Block",
1621 tiles = {"default_steel_block.png"},
1622 is_ground_content = true,
1623 groups = {snappy=1,bendy=2,cracky=1,melty=2,level=2},
1624 sounds = default.node_sound_stone_defaults(),
1627 minetest.register_node("default:mese", {
1628 description = "Mese Block",
1629 tiles = {"default_mese_block.png"},
1630 is_ground_content = true,
1631 groups = {cracky=1},
1632 sounds = default.node_sound_stone_defaults(),
1634 minetest.register_alias("default:mese_block", "default:mese")
1636 minetest.register_node("default:nyancat", {
1637 description = "Nyan Cat",
1638 tiles = {"default_nc_side.png", "default_nc_side.png", "default_nc_side.png",
1639 "default_nc_side.png", "default_nc_back.png", "default_nc_front.png"},
1640 paramtype2 = "facedir",
1641 groups = {cracky=2},
1642 legacy_facedir_simple = true,
1643 sounds = default.node_sound_defaults(),
1646 minetest.register_node("default:nyancat_rainbow", {
1647 description = "Nyan Cat Rainbow",
1648 tiles = {"default_nc_rb.png"},
1649 groups = {cracky=2},
1650 sounds = default.node_sound_defaults(),
1653 minetest.register_node("default:sapling", {
1654 description = "Sapling",
1655 drawtype = "plantlike",
1657 tiles = {"default_sapling.png"},
1658 inventory_image = "default_sapling.png",
1659 wield_image = "default_sapling.png",
1660 paramtype = "light",
1664 fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
1666 groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1},
1667 sounds = default.node_sound_defaults(),
1670 minetest.register_node("default:apple", {
1671 description = "Apple",
1672 drawtype = "plantlike",
1674 tiles = {"default_apple.png"},
1675 inventory_image = "default_apple.png",
1676 paramtype = "light",
1677 sunlight_propagates = true,
1681 fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2}
1683 groups = {fleshy=3,dig_immediate=3,flammable=2},
1684 on_use = minetest.item_eat(4),
1685 sounds = default.node_sound_defaults(),
1688 minetest.register_node("default:dry_shrub", {
1689 description = "Dry Shrub",
1690 drawtype = "plantlike",
1692 tiles = {"default_dry_shrub.png"},
1693 inventory_image = "default_dry_shrub.png",
1694 wield_image = "default_dry_shrub.png",
1695 paramtype = "light",
1697 groups = {snappy=3,flammable=3,attached_node=1},
1698 sounds = default.node_sound_leaves_defaults(),
1701 fixed = {-1/3, -1/2, -1/3, 1/3, 1/6, 1/3},
1709 minetest.register_craftitem("default:stick", {
1710 description = "Stick",
1711 inventory_image = "default_stick.png",
1714 minetest.register_craftitem("default:paper", {
1715 description = "Paper",
1716 inventory_image = "default_paper.png",
1719 minetest.register_craftitem("default:book", {
1720 description = "Book",
1721 inventory_image = "default_book.png",
1724 minetest.register_craftitem("default:coal_lump", {
1725 description = "Coal Lump",
1726 inventory_image = "default_coal_lump.png",
1729 minetest.register_craftitem("default:iron_lump", {
1730 description = "Iron Lump",
1731 inventory_image = "default_iron_lump.png",
1734 minetest.register_craftitem("default:mese_crystal", {
1735 description = "Mese Crystal",
1736 inventory_image = "default_mese_crystal.png",
1739 minetest.register_craftitem("default:clay_lump", {
1740 description = "Clay Lump",
1741 inventory_image = "default_clay_lump.png",
1744 minetest.register_craftitem("default:steel_ingot", {
1745 description = "Steel Ingot",
1746 inventory_image = "default_steel_ingot.png",
1749 minetest.register_craftitem("default:mese_crystal_fragment", {
1750 description = "Mese Crystal Fragment",
1751 inventory_image = "default_mese_crystal_fragment.png",
1754 minetest.register_craftitem("default:clay_brick", {
1755 description = "Clay Brick",
1756 inventory_image = "default_clay_brick.png",
1759 minetest.register_craftitem("default:scorched_stuff", {
1760 description = "Scorched Stuff",
1761 inventory_image = "default_scorched_stuff.png",
1765 function default.spawn_falling_node(p, nodename)
1766 spawn_falling_node(p, nodename)
1769 -- Horrible crap to support old code
1770 -- Don't use this and never do what this does, it's completely wrong!
1771 -- (More specifically, the client and the C++ code doesn't get the group)
1772 function default.register_falling_node(nodename, texture)
1773 minetest.log("error", debug.traceback())
1774 minetest.log('error', "WARNING: default.register_falling_node is deprecated")
1775 if minetest.registered_nodes[nodename] then
1776 minetest.registered_nodes[nodename].groups.falling_node = 1
1784 -- Global environment step function
1785 function on_step(dtime)
1788 minetest.register_globalstep(on_step)
1790 function on_placenode(p, node)
1791 --print("on_placenode")
1793 minetest.register_on_placenode(on_placenode)
1795 function on_dignode(p, node)
1796 --print("on_dignode")
1798 minetest.register_on_dignode(on_dignode)
1800 function on_punchnode(p, node)
1802 minetest.register_on_punchnode(on_punchnode)
1808 default.cool_lava_source = function(pos)
1809 minetest.env:set_node(pos, {name="default:stone"})
1812 default.cool_lava_flowing = function(pos)
1813 minetest.env:set_node(pos, {name="default:cobble"})
1816 minetest.register_abm({
1817 nodenames = {"default:lava_flowing"},
1818 neighbors = {"group:water"},
1821 action = default.cool_lava_flowing,
1824 minetest.register_abm({
1825 nodenames = {"default:lava_source"},
1826 neighbors = {"group:water"},
1829 action = default.cool_lava_source,