minetest.register_on_mods_loaded(function() for node_name, def in pairs(minetest.registered_nodes) do -- if minetest.get_item_group(node_name, 'group:leaves') then if def.groups and def.groups.leaves then -- local groups = table.copy(def.groups) -- groups.bouncy = 1 -- groups.fall_damage_add_percent = -20 minetest.override_item(node_name, { -- groups = groups, walkable = false, climbable = true, -- Climbing through leaves should slow players down move_resistance = 3, waving = 2, -- Make leaves fall when placed after_place_node = function(pos, oldnode, oldmeta, drops) minetest.spawn_falling_node(pos) end, -- Adapted from Tenplus1's regrow mod, licensed under MIT after_dig_node = function(pos, oldnode, oldmetadata, digger) -- if node has been placed by player then do not regrow if oldnode.param2 > 0 then return end -- replace leaf with regrowth node, set leaf name minetest.set_node(pos, {name = "regrow:hidden"}) local meta = minetest.get_meta(pos) -- meta:set_string("fruit", nodename) meta:set_string("leaf", node_name) end, on_construct = function(pos) local time = math.random(60 * 20, 60 * 30) minetest.get_node_timer(pos):start(time) end, -- when timer reached check which leaf to remove on_timer = function(pos, elapsed) if math.random(100) == 1 then local pos2 = table.copy(pos) pos2.y = pos2.y - 1 local check_node = minetest.get_node(pos2) if check_node.name == 'air' then minetest.dig_node(pos) return false end end return true end }) end end end) -- Regrow leaves, adapted from Tenplus1's regrow mod, licensed under MIT minetest.register_node('real_leaves:hidden', { drawtype = "airlike", paramtype = "light", sunlight_propagates = true, walkable = false, pointable = false, diggable = false, buildable_to = true, drop = "", groups = {not_in_creative_inventory = 1}, -- once placed start random timer between 20 and 30 minutes on_construct = function(pos) local time = math.random(60 * 20, 60 * 30) minetest.get_node_timer(pos):start(time) end, -- when timer reached check which leaf to place if tree still exists on_timer = function(pos, elapsed) local meta = minetest.get_meta(pos) if not meta then return end -- local fruit = meta:get_string("fruit") or "" local leaf = meta:get_string("leaf") or "" if leaf == "" or not minetest.find_node_near(pos, 1, leaf) then leaf = "air" end minetest.set_node(pos, {name = leaf}) end }) -- chance of limbs breaking while player is in leaves minetest.register_globalstep(function(dtime) -- minetest.spawn_falling_node(pos) -- minetest.dig_node(pos) local players = minetest.get_connected_players() for player in players do if minetest.is_player(player) then local pos = player:get_pos() local pos2 = table.copy(pos) pos2.y = pos2.y + 1 local nodes = minetest.find_nodes_in_area(pos, pos2, 'group:leaves', true) for node_name, node_poss in pairs(nodes) do for node_pos in node_poss do if math.random(20) == 1 then minetest.dig_node(node_pos) end end end end end end) -- Basically strip leaves off branches minetest.register_craft({ type = 'shapeless', output = 'default:stick', recipe = 'group:leaves', -- replacements = 'leaves without stick?' })