-- -- Sounds -- function default.node_sound_defaults(table) table = table or {} table.footstep = table.footstep or {name="", gain=1.0} table.dug = table.dug or {name="default_dug_node", gain=0.25} table.place = table.place or {name="default_place_node_hard", gain=1.0} return table end function default.node_sound_stone_defaults(table) table = table or {} table.footstep = table.footstep or {name="default_hard_footstep", gain=0.5} table.dug = table.dug or {name="default_hard_footstep", gain=1.0} default.node_sound_defaults(table) return table end function default.node_sound_metal_defaults(table) table = table or {} table.footstep = table.footstep or {name="default_metal_footstep", gain=0.5} table.dug = table.dug or {name="default_metal_footstep", gain=1.0} default.node_sound_defaults(table) return table end function default.node_sound_water_defaults(table) table = table or {} table.footstep = table.footstep or {name="default_water_footstep", gain=0.5} default.node_sound_defaults(table) return table end function default.node_sound_dirt_defaults(table) table = table or {} table.footstep = table.footstep or {name="default_dirt_footstep", gain=1.0} table.dug = table.dug or {name="default_dirt_footstep", gain=1.5} table.place = table.place or {name="default_place_node", gain=1.0} default.node_sound_defaults(table) return table end function default.node_sound_sand_defaults(table) table = table or {} table.footstep = table.footstep or {name="default_sand_footstep", gain=0.5} table.dug = table.dug or {name="default_sand_footstep", gain=1.0} table.place = table.place or {name="default_place_node", gain=1.0} default.node_sound_defaults(table) return table end function default.node_sound_wood_defaults(table) table = table or {} table.footstep = table.footstep or {name="default_wood_footstep", gain=0.5} table.dug = table.dug or {name="default_wood_footstep", gain=1.0} default.node_sound_defaults(table) return table end function default.node_sound_leaves_defaults(table) table = table or {} table.footstep = table.footstep or {name="default_grass_footstep", gain=0.35} table.dug = table.dug or {name="default_grass_footstep", gain=0.85} table.dig = table.dig or {name="default_dig_crumbly", gain=0.4} table.place = table.place or {name="default_place_node", gain=1.0} default.node_sound_defaults(table) return table end function default.node_sound_glass_defaults(table) table = table or {} table.footstep = table.footstep or {name="default_glass_footstep", gain=0.5} table.dug = table.dug or {name="default_break_glass", gain=1.0} default.node_sound_defaults(table) return table end -- -- Legacy -- function default.spawn_falling_node(p, nodename) spawn_falling_node(p, nodename) end -- -- Global callbacks -- -- Global environment step function function on_step(dtime) -- print("on_step") end minetest.register_globalstep(on_step) function on_placenode(p, node) --print("on_placenode") end minetest.register_on_placenode(on_placenode) function on_dignode(p, node) --print("on_dignode") end minetest.register_on_dignode(on_dignode) function on_punchnode(p, node) end minetest.register_on_punchnode(on_punchnode) -- -- Grow trees -- minetest.register_abm({ nodenames = {"tutorial_default:sapling"}, interval = 10, chance = 50, action = function(pos, node) local nu = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name local is_soil = minetest.get_item_group(nu, "soil") if is_soil == 0 then return end minetest.log("action", "A sapling grows into a tree at "..minetest.pos_to_string(pos)) local vm = minetest.get_voxel_manip() local minp, maxp = vm:read_from_map({x=pos.x-16, y=pos.y, z=pos.z-16}, {x=pos.x+16, y=pos.y+16, z=pos.z+16}) local a = VoxelArea:new{MinEdge=minp, MaxEdge=maxp} local data = vm:get_data() default.grow_tree(data, a, pos, math.random(1, 4) == 1, math.random(1,100000)) vm:set_data(data) vm:write_to_map(data) vm:update_map() end }) minetest.register_abm({ nodenames = {"tutorial_default:junglesapling"}, interval = 10, chance = 50, action = function(pos, node) local nu = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name local is_soil = minetest.get_item_group(nu, "soil") if is_soil == 0 then return end minetest.log("action", "A jungle sapling grows into a tree at "..minetest.pos_to_string(pos)) local vm = minetest.get_voxel_manip() local minp, maxp = vm:read_from_map({x=pos.x-16, y=pos.y-1, z=pos.z-16}, {x=pos.x+16, y=pos.y+16, z=pos.z+16}) local a = VoxelArea:new{MinEdge=minp, MaxEdge=maxp} local data = vm:get_data() default.grow_jungletree(data, a, pos, math.random(1,100000)) vm:set_data(data) vm:write_to_map(data) vm:update_map() end }) -- -- Lavacooling -- default.cool_lava_source = function(pos) minetest.set_node(pos, {name="tutorial_default:obsidian"}) minetest.sound_play("default_cool_lava", {pos = pos, gain = 0.25}) end default.cool_lava_flowing = function(pos) minetest.set_node(pos, {name="tutorial_default:stone"}) minetest.sound_play("default_cool_lava", {pos = pos, gain = 0.25}) end minetest.register_abm({ nodenames = {"tutorial_default:lava_flowing"}, neighbors = {"group:water"}, interval = 1, chance = 1, action = function(pos, node, active_object_count, active_object_count_wider) default.cool_lava_flowing(pos, node, active_object_count, active_object_count_wider) end, }) minetest.register_abm({ nodenames = {"tutorial_default:lava_source"}, neighbors = {"group:water"}, interval = 1, chance = 1, action = function(pos, node, active_object_count, active_object_count_wider) default.cool_lava_source(pos, node, active_object_count, active_object_count_wider) end, }) -- dig upwards -- function default.dig_up(pos, node, digger) if digger == nil then return end local np = {x = pos.x, y = pos.y + 1, z = pos.z} local nn = minetest.get_node(np) if nn.name == node.name then minetest.node_dig(np, nn, digger) end end