2022-12-05 18:38:20 +00:00

113 lines
3.3 KiB
Lua

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?'
})