mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-09-12 08:42:10 +02:00
* Add "orphaned" leaves nodes, these are copies of the regular leaves nodes whose sole purpose is to replace leaves nodes when no more tree trunks are present nearby. The orphaned nodes are swapped in by a callback on destruction of tree trunk nodes and will be decayed by a dedicated abm that processes all nodes in `group:leaves_orphan`. * Add `mcl_core.update_leaves()` function, a `after_destruct` callback handler for tree trunk nodes. The function finds leaves nodes nearby destroyed tree trunk nodes and swaps these for orphaned leaves nodes if no other tree trunk nodes remain near them. * Add `after_destruct` callbacks to tree trunk node registrations in mcl_core/nodes_trees.lua and mcl_mangrove/init.lua to update orphaned leaves. * Add entry for group `leaves_orphan` to GROUPS.md * Also add entry for group `leaves` to GROUPS.md (it was missing).
556 lines
19 KiB
Lua
556 lines
19 KiB
Lua
local S = minetest.get_translator("mcl_mangrove")
|
|
local modname = minetest.get_current_modname()
|
|
local modpath = minetest.get_modpath(modname)
|
|
|
|
local propagule_allowed_nodes = {
|
|
"mcl_core:dirt",
|
|
"mcl_core:coarse_dirt",
|
|
"mcl_core:dirt_with_grass",
|
|
"mcl_core:podzol",
|
|
"mcl_core:mycelium",
|
|
"mcl_lush_caves:rooted_dirt",
|
|
"mcl_lush_caves:moss",
|
|
"mcl_farming:soil",
|
|
"mcl_farming:soil_wet",
|
|
"mcl_core:clay",
|
|
"mcl_mud:mud",
|
|
}
|
|
local propagule_water_nodes = {"mcl_mud:mud","mcl_core:dirt","mcl_core:coarse_dirt","mcl_core:clay"}
|
|
--"mcl_lush_caves:moss","mcl_lush_caves:rooted_dirt
|
|
|
|
local function get_drops(fortune_level)
|
|
local apple_chances = {200, 180, 160, 120, 40}
|
|
local stick_chances = {50, 45, 30, 35, 10}
|
|
local sapling_chances = {20, 16, 12, 10}
|
|
return {
|
|
max_items = 1,
|
|
items = {
|
|
{
|
|
items = {"mcl_mangrove:propagule"},
|
|
rarity = sapling_chances[fortune_level + 1] or sapling_chances[fortune_level]
|
|
},
|
|
{
|
|
items = {"mcl_core:stick 1"},
|
|
rarity = stick_chances[fortune_level + 1]
|
|
},
|
|
{
|
|
items = {"mcl_core:stick 2"},
|
|
rarity = stick_chances[fortune_level + 1]
|
|
},
|
|
{
|
|
items = {"mcl_core:apple"},
|
|
rarity = apple_chances[fortune_level + 1]
|
|
}
|
|
}
|
|
}
|
|
end
|
|
|
|
minetest.register_node("mcl_mangrove:mangrove_tree", {
|
|
description = S("Mangrove Wood"),
|
|
_doc_items_longdesc = S("The trunk of a Mangrove tree."),
|
|
_doc_items_hidden = false,
|
|
tiles = {"mcl_mangrove_log_top.png", "mcl_mangrove_log_top.png", "mcl_mangrove_log.png"},
|
|
paramtype2 = "facedir",
|
|
on_place = mcl_util.rotate_axis,
|
|
after_destruct = mcl_core.update_leaves,
|
|
groups = {handy=1,axey=1, tree=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5},
|
|
sounds = mcl_sounds.node_sound_wood_defaults(),
|
|
on_place = mcl_util.rotate_axis,
|
|
_mcl_blast_resistance = 2,
|
|
_mcl_hardness = 2,
|
|
_mcl_stripped_variant = "mcl_mangrove:mangrove_stripped_trunk",
|
|
})
|
|
minetest.register_node("mcl_mangrove:mangrove_tree_bark", {
|
|
description = S("Mangrove Bark"),
|
|
_doc_items_longdesc = S("The bark of a Mangrove tree."),
|
|
_doc_items_hidden = false,
|
|
tiles = {"mcl_mangrove_log.png", "mcl_mangrove_log.png", "mcl_mangrove_log.png"},
|
|
paramtype2 = "facedir",
|
|
groups = {handy=1,axey=1, tree=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5},
|
|
sounds = mcl_sounds.node_sound_wood_defaults(),
|
|
on_place = mcl_util.rotate_axis,
|
|
_mcl_blast_resistance = 2,
|
|
_mcl_hardness = 2,
|
|
_mcl_stripped_variant = "mcl_mangrove:mangrove_stripped_bark",
|
|
})
|
|
|
|
minetest.register_node("mcl_mangrove:mangrove_wood", {
|
|
description = S("Mangrove Wood Planks"),
|
|
_doc_items_longdesc = doc.sub.items.temp.build,
|
|
_doc_items_hidden = false,
|
|
tiles = {"mcl_mangrove_planks.png"},
|
|
|
|
is_ground_content = false,
|
|
groups = {handy=1,axey=1, flammable=3,wood=1,building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=20},
|
|
sounds = mcl_sounds.node_sound_wood_defaults(),
|
|
_mcl_blast_resistance = 3,
|
|
_mcl_hardness = 2,
|
|
})
|
|
|
|
local l_def = {
|
|
description = S("Mangrove Leaves"),
|
|
_doc_items_longdesc = S("mangrove leaves are grown from mangrove trees."),
|
|
_doc_items_hidden = false,
|
|
drawtype = "allfaces_optional",
|
|
waving = 2,
|
|
place_param2 = 1, -- Prevent leafdecay for placed nodes
|
|
tiles = {"mcl_mangrove_leaves.png"},
|
|
paramtype = "light",
|
|
groups = {handy=1,shearsy=1,swordy=1, leafdecay=10, flammable=2, leaves=1, deco_block=1, dig_by_piston=1, fire_encouragement=30, fire_flammability=60},
|
|
drop = get_drops(0),
|
|
_mcl_shears_drop = true,
|
|
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
|
_mcl_blast_resistance = 0.2,
|
|
_mcl_hardness = 0.2,
|
|
_mcl_silk_touch_drop = true,
|
|
_mcl_fortune_drop = { get_drops(1), get_drops(2), get_drops(3), get_drops(4) },
|
|
}
|
|
|
|
minetest.register_node("mcl_mangrove:mangroveleaves", l_def)
|
|
|
|
local o_def = table.copy(l_def)
|
|
o_def._doc_items_create_entry = false
|
|
o_def.place_param2 = nil
|
|
o_def.groups.not_in_creative_inventory = 1
|
|
o_def.groups.orphan_leaves = 1
|
|
o_def._mcl_shears_drop = {"mcl_mangrove:mangroveleaves"}
|
|
o_def._mcl_silk_touch_drop = {"mcl_mangrove:mangroveleaves"}
|
|
|
|
minetest.register_node("mcl_mangrove:mangroveleaves_orphan", o_def)
|
|
|
|
minetest.register_node("mcl_mangrove:mangrove_stripped_trunk", {
|
|
description = S("Stripped Mangrove Wood"),
|
|
_doc_items_longdesc = S("The stripped wood of a Mangrove tree"),
|
|
_doc_items_hidden = false,
|
|
tiles ={"mcl_stripped_mangrove_log_top.png","mcl_stripped_mangrove_log_side.png",},
|
|
paramtype2 = "facedir",
|
|
on_place = mcl_util.rotate_axis,
|
|
groups = {handy=1, axey=1, tree=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5},
|
|
sounds = mcl_sounds.node_sound_wood_defaults(),
|
|
on_rotate = mcl_util.rotate_axis_and_place,
|
|
_mcl_blast_resistance = 2,
|
|
_mcl_hardness = 2,
|
|
})
|
|
minetest.register_node("mcl_mangrove:mangrove_stripped_bark", {
|
|
description = S("Stripped Mangrove Bark"),
|
|
_doc_items_longdesc = S("The stripped bark of a Mangrove tree"),
|
|
_doc_items_hidden = false,
|
|
tiles ={"mcl_stripped_mangrove_log_side.png","mcl_stripped_mangrove_log_side.png",},
|
|
paramtype2 = "facedir",
|
|
on_place = mcl_util.rotate_axis,
|
|
groups = {handy=1, axey=1, tree=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5},
|
|
sounds = mcl_sounds.node_sound_wood_defaults(),
|
|
on_rotate = mcl_util.rotate_axis_and_place,
|
|
_mcl_blast_resistance = 2,
|
|
_mcl_hardness = 2,
|
|
})
|
|
|
|
minetest.register_node("mcl_mangrove:mangrove_roots", {
|
|
description = S("Mangrove Roots"),
|
|
_doc_items_longdesc = S("Mangrove roots are decorative blocks that form as part of mangrove trees."),
|
|
_doc_items_hidden = false,
|
|
waving = 0,
|
|
place_param2 = 1, -- Prevent leafdecay for placed nodes
|
|
tiles = {
|
|
"mcl_mangrove_roots_top.png",
|
|
"mcl_mangrove_roots_side.png",
|
|
"mcl_mangrove_roots_side.png",
|
|
},
|
|
paramtype = "light",
|
|
drawtype = "allfaces_optional",
|
|
groups = {
|
|
handy = 1, hoey = 1, shearsy = 1, axey = 1, swordy = 1, dig_by_piston = 0,
|
|
leaves = 1, deco_block = 1,flammable = 10, fire_encouragement = 30, fire_flammability = 60, compostability = 30
|
|
},
|
|
drop = "mcl_mangrove:mangrove_roots",
|
|
_mcl_shears_drop = true,
|
|
sounds = mcl_sounds.node_sound_leaves_defaults(), _mcl_blast_resistance = 0.7,
|
|
_mcl_hardness = 0.7,
|
|
_mcl_silk_touch_drop = true,
|
|
_mcl_fortune_drop = { "mcl_mangrove:mangrove_roots 1", "mcl_mangrove:mangrove_roots 2", "mcl_mangrove:mangrove_roots 3", "mcl_mangrove:mangrove_roots 4" },
|
|
})
|
|
|
|
minetest.register_node("mcl_mangrove:propagule", {
|
|
description = S("Mangrove Propagule"),
|
|
_tt_help = S("Needs soil and light to grow"),
|
|
_doc_items_longdesc = S("When placed on soil (such as dirt) and exposed to light, an propagule will grow into an mangrove after some time."),
|
|
_doc_items_hidden = false,
|
|
drawtype = "plantlike",
|
|
waving = 1,
|
|
visual_scale = 1.0,
|
|
tiles = {"mcl_mangrove_propagule_item.png"},
|
|
inventory_image = "mcl_mangrove_propagule_item.png",
|
|
wield_image = "mcl_mangrove_propagule_item.png",
|
|
paramtype = "light",
|
|
sunlight_propagates = true,
|
|
walkable = false,
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {-5/16, -0.5, -5/16, 5/16, 0.5, 5/16}
|
|
},
|
|
groups = {
|
|
plant = 1, sapling = 1, non_mycelium_plant = 1, attached_node = 1,
|
|
deco_block = 1, dig_immediate = 3, dig_by_water = 0, dig_by_piston = 1,
|
|
destroy_by_lava_flow = 1, compostability = 30
|
|
},
|
|
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
|
on_construct = function(pos)
|
|
local meta = minetest.get_meta(pos)
|
|
meta:set_int("stage", 0)
|
|
end,
|
|
node_placement_prediction = "",
|
|
_mcl_blast_resistance = 0,
|
|
_mcl_hardness = 0,
|
|
on_place = mcl_util.generate_on_place_plant_function(function(place_pos, place_node,stack)
|
|
local under = vector.offset(place_pos,0,-1,0)
|
|
local snn = minetest.get_node_or_nil(under).name
|
|
if not snn then return false end
|
|
if table.indexof(propagule_allowed_nodes,snn) ~= -1 then
|
|
local n = minetest.get_node(place_pos)
|
|
if minetest.get_item_group(n.name,"water") > 0 and table.indexof(propagule_water_nodes,snn) ~= -1 then
|
|
minetest.set_node(under,{name="mcl_mangrove:propagule_"..snn:split(":")[2]})
|
|
stack:take_item()
|
|
return stack
|
|
end
|
|
return true
|
|
end
|
|
end)
|
|
})
|
|
|
|
minetest.register_node("mcl_mangrove:hanging_propagule_1", {
|
|
description = S("Hanging Propagule"),
|
|
_tt_help = S("Grows on Mangrove leaves"),
|
|
_doc_items_longdesc = "",
|
|
_doc_items_usagehelp = "",
|
|
groups = {
|
|
plant = 1, not_in_creative_inventory=1, non_mycelium_plant = 1,
|
|
deco_block = 1, dig_immediate = 3, dig_by_water = 0, dig_by_piston = 1,
|
|
destroy_by_lava_flow = 1, compostability = 30
|
|
},
|
|
paramtype = "light",
|
|
paramtype2 = "",
|
|
on_rotate = false,
|
|
walkable = false,
|
|
drop = "mcl_mangrove:propagule",
|
|
use_texture_alpha = "clip",
|
|
drawtype = 'mesh',
|
|
mesh = 'propagule_hanging.obj',
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.125, -0.5, -0.125, 0.125, 0.5, 0.125}, -- Base
|
|
},
|
|
},
|
|
tiles = {"mcl_mangrove_propagule_hanging.png"},
|
|
inventory_image = "mcl_mangrove_propagule.png",
|
|
wield_image = "mcl_mangrove_propagule.png",
|
|
})
|
|
local propagule_rooted_nodes = {}
|
|
for _,root in pairs(propagule_water_nodes) do
|
|
local r = root:split(":")[2]
|
|
local def = minetest.registered_nodes[root]
|
|
local tx = def.tiles
|
|
local n = "mcl_mangrove:propagule_"..r
|
|
table.insert(propagule_rooted_nodes,n)
|
|
minetest.register_node(n, {
|
|
drawtype = "plantlike_rooted",
|
|
paramtype = "light",
|
|
place_param2 = 1,
|
|
tiles = tx,
|
|
special_tiles = { { name = "mcl_mangrove_propagule_item.png" } },
|
|
inventory_image = "mcl_mangrove_propagule_item.png",
|
|
wield_image = "mcl_mangrove_propagule.png",
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{ -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 },
|
|
{ -0.5, 0.5, -0.5, 0.5, 1.0, 0.5 },
|
|
}
|
|
},
|
|
groups = {
|
|
plant = 1, sapling = 1, non_mycelium_plant = 1, attached_node = 1,not_in_creative_inventory=1,
|
|
deco_block = 1, dig_immediate = 3, dig_by_piston = 1,
|
|
destroy_by_lava_flow = 1, compostability = 30
|
|
},
|
|
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
|
drop = "mcl_mangrove:propagule",
|
|
node_placement_prediction = "",
|
|
node_dig_prediction = "",
|
|
after_dig_node = function(pos)
|
|
minetest.set_node(pos, {name=root})
|
|
end,
|
|
_mcl_hardness = 0,
|
|
_mcl_blast_resistance = 0,
|
|
_mcl_silk_touch_drop = true,
|
|
})
|
|
|
|
end
|
|
|
|
|
|
mcl_flowerpots.register_potted_flower("mcl_mangrove:propagule", {
|
|
name = "propagule",
|
|
desc = S("Mangrove Propagule"),
|
|
image = "mcl_mangrove_propagule.png",
|
|
})
|
|
|
|
local water_tex = "default_water_source_animated.png^[verticalframe:16:0"
|
|
|
|
local wlroots = {
|
|
description = S("water logged mangrove roots"),
|
|
_doc_items_entry_name = S("water logged mangrove roots"),
|
|
_doc_items_longdesc =
|
|
S("Mangrove roots are decorative blocks that form as part of mangrove trees.").."\n\n"..
|
|
S("Mangrove roots, despite being a full block, can be waterlogged and do not flow water out").."\n\n"..
|
|
S("These cannot be crafted yet only occure when get in contact of water."),
|
|
_doc_items_hidden = false,
|
|
tiles = {
|
|
{name="default_water_source_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=5.0}}
|
|
},
|
|
special_tiles = {
|
|
-- New-style water source material (mostly unused)
|
|
{
|
|
name="default_water_source_animated.png",
|
|
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=5.0},
|
|
backface_culling = false,
|
|
}
|
|
},
|
|
overlay_tiles = {
|
|
"mcl_mangrove_roots_top.png",
|
|
"mcl_mangrove_roots_side.png",
|
|
"mcl_mangrove_roots_side.png",
|
|
},
|
|
sounds = mcl_sounds.node_sound_water_defaults(),
|
|
drawtype = "allfaces_optional",
|
|
use_texture_alpha = "blend",
|
|
is_ground_content = false,
|
|
paramtype = "light",
|
|
walkable = true,
|
|
pointable = true,
|
|
diggable = true,
|
|
buildable_to = false,
|
|
liquids_pointable = true,
|
|
drop = "mcl_mangrove:mangrove_roots",
|
|
groups = {
|
|
handy = 1, hoey = 1, water=3, liquid=3, puts_out_fire=1, dig_by_piston = 1, deco_block = 1, not_in_creative_inventory=1 },
|
|
_mcl_blast_resistance = 100,
|
|
_mcl_hardness = -1, -- Hardness intentionally set to infinite instead of 100 (Minecraft value) to avoid problems in creative mode
|
|
after_dig_node = function(pos)
|
|
local node = minetest.get_node(pos)
|
|
if minetest.get_item_group(node.name, "water") == 0 then
|
|
minetest.set_node(pos, {name="mcl_core:water_source"})
|
|
end
|
|
end,
|
|
}
|
|
local rwlroots = table.copy(wlroots)
|
|
water_tex = "default_river_water_source_animated.png^[verticalframe:16:0"
|
|
rwlroots.tiles = {
|
|
"("..water_tex..")^mcl_mangrove_roots_top.png",
|
|
"("..water_tex..")^mcl_mangrove_roots_side.png",
|
|
"("..water_tex..")^mcl_mangrove_roots_side.png",
|
|
}
|
|
|
|
minetest.register_node("mcl_mangrove:water_logged_roots", wlroots)
|
|
minetest.register_node("mcl_mangrove:river_water_logged_roots",rwlroots)
|
|
|
|
minetest.register_node("mcl_mangrove:mangrove_mud_roots", {
|
|
description = S("Muddy Mangrove Roots"),
|
|
_tt_help = S("crafted with Mud and Mangrove roots"),
|
|
_doc_items_longdesc = S("Muddy Mangrove Roots is a block from mangrove swamp.It drowns player a bit inside it."),
|
|
tiles = {
|
|
"mcl_mud.png^mcl_mangrove_roots_top.png",
|
|
"mcl_mud.png^mcl_mangrove_roots_side.png",
|
|
"mcl_mud.png^mcl_mangrove_roots_side.png",
|
|
},
|
|
is_ground_content = true,
|
|
groups = {handy = 1, shovely = 1, axey = 1, building_block = 1},
|
|
sounds = mcl_sounds.node_sound_sand_defaults(),
|
|
_mcl_blast_resistance = 0.7,
|
|
_mcl_hardness = 0.7,
|
|
})
|
|
|
|
mcl_doors:register_door("mcl_mangrove:mangrove_door", {
|
|
description = S("Mangrove Door"),
|
|
_doc_items_longdesc = S("Wooden doors are 2-block high barriers which can be opened or closed by hand and by a redstone signal."),
|
|
_doc_items_usagehelp = S("To open or close a wooden door, rightclick it or supply its lower half with a redstone signal."),
|
|
inventory_image = "mcl_mangrove_doors.png",
|
|
groups = {handy=1,axey=1, material_wood=1, flammable=-1},
|
|
_mcl_hardness = 3,
|
|
_mcl_blast_resistance = 3,
|
|
tiles_bottom = {"mcl_mangrove_door_bottom.png", "mcl_mangrove_planks.png"},
|
|
tiles_top = {"mcl_mangrove_door_top.png", "mcl_mangrove_planks.png"},
|
|
sounds = mcl_sounds.node_sound_wood_defaults(),
|
|
})
|
|
|
|
mcl_doors:register_trapdoor("mcl_mangrove:mangrove_trapdoor", {
|
|
description = S("Mangrove Trapdoor"),
|
|
_doc_items_longdesc = S("Wooden trapdoors are horizontal barriers which can be opened and closed by hand or a redstone signal. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder."),
|
|
_doc_items_usagehelp = S("To open or close the trapdoor, rightclick it or send a redstone signal to it."),
|
|
tile_front = "mcl_mangrove_trapdoor.png",
|
|
tile_side = "mcl_mangrove_planks.png",
|
|
wield_image = "mcl_mangrove_trapdoor.png",
|
|
groups = {handy=1,axey=1, mesecon_effector_on=1, material_wood=1, flammable=-1},
|
|
_mcl_hardness = 3,
|
|
_mcl_blast_resistance = 3,
|
|
sounds = mcl_sounds.node_sound_wood_defaults(),
|
|
})
|
|
|
|
mcl_fences.register_fence_and_fence_gate(
|
|
"mangrove_wood_fence",
|
|
S("Mangrove Wood Fence"),
|
|
S("Mangrove Wood Fence Gate"),
|
|
"mcl_mangrove_fence.png",
|
|
{handy=1,axey=1, flammable=2,fence_wood=1, fire_encouragement=5, fire_flammability=20},
|
|
minetest.registered_nodes["mcl_core:wood"]._mcl_hardness,
|
|
minetest.registered_nodes["mcl_core:wood"]._mcl_blast_resistance,
|
|
{"group:fence_wood"},
|
|
mcl_sounds.node_sound_wood_defaults(), "mcl_mangrove_mangrove_wood_fence_gate_open", "mcl_mangrove_mangrove_wood_fence_gate_close", 1, 1,
|
|
"mcl_mangrove_fence_gate.png")
|
|
|
|
mcl_stairs.register_stair("mangrove_wood", "mcl_mangrove:mangrove_wood",
|
|
{handy=1,axey=1, flammable=3,wood_stairs=1, material_wood=1, fire_encouragement=5, fire_flammability=20},
|
|
{"mcl_mangrove_planks.png"},
|
|
S("Mangrove Wood Stairs"),
|
|
mcl_sounds.node_sound_wood_defaults(), 3, 2,
|
|
"woodlike")
|
|
|
|
mcl_stairs.register_slab("mangrove_wood", "mcl_mangrove:mangrove_wood",
|
|
{handy=1,axey=1, flammable=3,wood_slab=1, material_wood=1, fire_encouragement=5, fire_flammability=20},
|
|
{"mcl_mangrove_planks.png"},
|
|
S("Mangrove Wood Slab"),
|
|
mcl_sounds.node_sound_wood_defaults(), 3, 2,
|
|
S("Double Mangrove Wood Slab"))
|
|
|
|
minetest.register_craft({
|
|
output = "mcl_mangrove:mangrove_tree_bark 3",
|
|
recipe = {
|
|
{ "mcl_mangrove:mangrove_tree", "mcl_mangrove:mangrove_tree" },
|
|
{ "mcl_mangrove:mangrove_tree", "mcl_mangrove:mangrove_tree" },
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "mcl_mangrove:mangrove_mud_roots",
|
|
recipe = {
|
|
{"mcl_mangrove:mangrove_roots", "mcl_mud:mud",},
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
type = "fuel",
|
|
recipe = "mcl_mangrove:mangrove_door",
|
|
burntime = 15,
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "mcl_mangrove:mangrove_door 3",
|
|
recipe = {
|
|
{"mcl_mangrove:mangrove_wood", "mcl_mangrove:mangrove_wood"},
|
|
{"mcl_mangrove:mangrove_wood", "mcl_mangrove:mangrove_wood"},
|
|
{"mcl_mangrove:mangrove_wood", "mcl_mangrove:mangrove_wood"},
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "mcl_mangrove:mangrove_trapdoor 2",
|
|
recipe = {
|
|
{"mcl_mangrove:mangrove_wood","mcl_mangrove:mangrove_wood","mcl_mangrove:mangrove_wood"},
|
|
{"mcl_mangrove:mangrove_wood","mcl_mangrove:mangrove_wood","mcl_mangrove:mangrove_wood"},
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
type = "fuel",
|
|
recipe = "mcl_mangrove:mangrove_trapdoor",
|
|
burntime = 15,
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "mcl_mangrove:mangrove_wood_fence_gate",
|
|
recipe = {
|
|
{"mcl_core:stick", "mcl_mangrove:mangrove_wood", "mcl_core:stick"},
|
|
{"mcl_core:stick", "mcl_mangrove:mangrove_wood", "mcl_core:stick"},
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "mcl_mangrove:mangrove_wood_fence 3",
|
|
recipe = {
|
|
{"mcl_mangrove:mangrove_wood", "mcl_core:stick", "mcl_mangrove:mangrove_wood"},
|
|
{"mcl_mangrove:mangrove_wood", "mcl_core:stick", "mcl_mangrove:mangrove_wood"},
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "mcl_mangrove:mangrove_wood 4",
|
|
recipe = {
|
|
{"mcl_mangrove:mangrove_tree"},
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
type = "fuel",
|
|
recipe = "group:fence_wood",
|
|
burntime = 15,
|
|
})
|
|
|
|
local adjacents = {
|
|
vector.new(1,0,0),
|
|
vector.new(-1,0,0),
|
|
vector.new(0,0,1),
|
|
vector.new(0,0,-1),
|
|
}
|
|
|
|
minetest.register_abm({
|
|
label = "Waterlog mangrove roots",
|
|
nodenames = {"mcl_mangrove:mangrove_roots"},
|
|
neighbors = {"group:water"},
|
|
interval = 5,
|
|
chance = 5,
|
|
action = function(pos,value)
|
|
for _,v in pairs(adjacents) do
|
|
local n = minetest.get_node(vector.add(pos,v)).name
|
|
if minetest.get_item_group(n,"water") > 0 then
|
|
if n:find("river") then
|
|
minetest.swap_node(pos,{name="mcl_mangrove:river_water_logged_roots"})
|
|
return
|
|
else
|
|
minetest.swap_node(pos,{name="mcl_mangrove:water_logged_roots"})
|
|
return
|
|
end
|
|
end
|
|
end
|
|
end
|
|
})
|
|
|
|
local abm_nodes = table.copy(propagule_rooted_nodes)
|
|
table.insert(abm_nodes,"mcl_mangrove:propagule")
|
|
minetest.register_abm({
|
|
label = "Mangrove_tree_growth",
|
|
nodenames = abm_nodes,
|
|
interval = 30,
|
|
chance = 5,
|
|
action = function(pos,node)
|
|
local pr = PseudoRandom(pos.x+pos.y+pos.z)
|
|
local r = pr:next(1,5)
|
|
local path = modpath .."/schematics/mcl_mangrove_tree_"..tostring(r)..".mts"
|
|
local w = 5
|
|
local h = 10
|
|
local fp = true
|
|
pos.y = pos.y - 1
|
|
if table.indexof(propagule_rooted_nodes,node.name) ~= -1 then
|
|
local nn = minetest.find_nodes_in_area(vector.offset(pos,0,-1,0),vector.offset(pos,0,h,0),{"group:water","air"})
|
|
if #nn >= h then
|
|
minetest.place_schematic(pos, path, "random", function()
|
|
local nnv = minetest.find_nodes_in_area(vector.offset(pos,-5,-1,-5),vector.offset(pos,5,h/2,5),{"mcl_core:vine"})
|
|
minetest.bulk_set_node(nnv,{"air"})
|
|
end, true, "place_center_x, place_center_z")
|
|
end
|
|
return
|
|
end
|
|
if r > 3 then h = 18 end
|
|
if mcl_core.check_growth_width(pos,w,h) then
|
|
minetest.place_schematic(pos, path, "random", nil, true, "place_center_x, place_center_z")
|
|
end
|
|
end
|
|
})
|