From e8fc56ab3345439064ba059463c2f862d95c21a5 Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 28 Jul 2022 21:11:21 +0200 Subject: [PATCH] Fix water- and mudlogged roots, add w. logging abm --- mods/ITEMS/mcl_mangrove/init.lua | 36 +++++++++++++---- mods/MAPGEN/mcl_biomes/init.lua | 69 +++++++++++++++++++++++++++++++- 2 files changed, 95 insertions(+), 10 deletions(-) diff --git a/mods/ITEMS/mcl_mangrove/init.lua b/mods/ITEMS/mcl_mangrove/init.lua index 035dd5748..697abef64 100644 --- a/mods/ITEMS/mcl_mangrove/init.lua +++ b/mods/ITEMS/mcl_mangrove/init.lua @@ -1,5 +1,6 @@ +local S = minetest.get_translator("mcl_mangrove") -local S = minetest.get_translator("mcl_core") +local leafdecay_distance = 4 local register_tree_trunk = function(subname, description_trunk, description_bark, longdesc, tile_inner, tile_bark) minetest.register_node("mcl_mangrove:"..subname, { @@ -309,10 +310,8 @@ minetest.register_node("mcl_mangrove:mangrove_roots", { drawtype = "mesh", mesh = "node.obj", groups = { - handy = 1, hoey = 1, shearsy = 1, axey = 1, swordy = 1, dig_by_piston = 0, - leaves = 1, leafdecay = leafdecay_distance, deco_block = 1, - flammable = 10, fire_encouragement = 30, fire_flammability = 60, - compostability = 30 + 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, @@ -609,9 +608,7 @@ minetest.register_node("mcl_mangrove:water_logged_roots", { drop = "mcl_mangrove:mangrove_roots", stack_max = 64, groups = { - handy = 1, hoey = 1, shearsy = 1, swordy = 1, water=3, liquid=3, puts_out_fire=1, dig_by_piston = 1, - leaves = 1, leafdecay = leafdecay_distance, deco_block = 1, not_in_creative_inventory=1, fire_encouragement = 0, fire_flammability = 0, - }, + 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, -- Hardness intentionally set to infinite instead of 100 (Minecraft value) to avoid problems in creative mode _mcl_hardness = -1, @@ -683,6 +680,29 @@ minetest.register_node("mcl_mangrove:hanging_propagule_1", { wield_image = "mcl_mangrove_propagule.png", }) +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 = {"mcl_core:water_source"}, + interval = 5, + chance = 5, + action = function(pos,value) + for _,v in pairs(adjacents) do + if minetest.get_node(vector.add(pos,v)).name == "mcl_core:water_source" then + minetest.swap_node(pos,{name="mcl_mangrove:water_logged_roots"}) + return + end + end + end +}) + ------------tree_growth_abm------------ local propagule_nodes = { diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua index 4ad2e523d..0c0376cbf 100644 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ b/mods/MAPGEN/mcl_biomes/init.lua @@ -2562,6 +2562,7 @@ local warm_oceans = { "Jungle_ocean", "Desert_ocean", "JungleM_ocean", + "MangroveSwamp_ocean" } local corals = { "brain", @@ -3026,6 +3027,7 @@ local function register_decorations() }) minetest.register_decoration({ + name = "mcl_biomes:mangrove_tree_1", deco_type = "schematic", place_on = {"mcl_mud:mud"}, sidelen = 80, @@ -3038,6 +3040,7 @@ local function register_decorations() rotation = "random", }) minetest.register_decoration({ + name = "mcl_biomes:mangrove_tree_2", deco_type = "schematic", place_on = {"mcl_mud:mud"}, sidelen = 80, @@ -3050,6 +3053,7 @@ local function register_decorations() rotation = "random", }) minetest.register_decoration({ + name = "mcl_biomes:mangrove_tree_3", deco_type = "schematic", place_on = {"mcl_mud:mud"}, sidelen = 80, @@ -3062,6 +3066,43 @@ local function register_decorations() rotation = "random", }) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_mud:mud"}, + sidelen = 80, + fill_ratio = 0.045, + biomes = {"MangroveSwamp","MangroveSwamp_shore"}, + y_min = 0, + y_max = 0, + decoration = "mcl_mangrove:water_logged_roots", + flags = "place_center_x, place_center_z, force_placement", + }) + + minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_mangrove:mangrove_roots"}, + spawn_by = {"mcl_core:water_source"}, + num_spawn_by = 2, + sidelen = 80, + fill_ratio = 10, + biomes = {"MangroveSwamp","MangroveSwamp_shore"}, + y_min = 0, + y_max = 0, + decoration = "mcl_mangrove:water_logged_roots", + flags = "place_center_x, place_center_z, force_placement, all_ceilings", + }) + + minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_mud:mud"}, + sidelen = 80, + fill_ratio = 0.045, + biomes = {"MangroveSwamp","MangroveSwamp_shore"}, + place_offset_y = -1, + decoration = "mcl_mangrove:mangrove_mud_roots", + flags = "place_center_x, place_center_z, force_placement", + }) + -- Jungle tree -- Huge jungle tree (2 variants) @@ -4810,14 +4851,38 @@ if mg_name ~= "singlenode" then minetest.get_decoration_id("mcl_biomes:warped_tree2"), minetest.get_decoration_id("mcl_biomes:warped_tree3") } + local deco_ids_trees = { + minetest.get_decoration_id("mcl_biomes:mangrove_tree_1"), + minetest.get_decoration_id("mcl_biomes:mangrove_tree_2"), + minetest.get_decoration_id("mcl_biomes:mangrove_tree_3"), + } for _,f in pairs(deco_ids_fungus) do minetest.set_gen_notify({decoration=true}, { f }) end - if deco_id_chorus_plant or deco_id_crimson_tree or deco_id_warped_tree then + for _,f in pairs(deco_ids_trees) do + minetest.set_gen_notify({decoration=true}, { f }) + end + if deco_id_chorus_plant or deco_ids_fungus or deco_ids_trees then mcl_mapgen_core.register_generator("chorus_grow", nil, function(minp, maxp, blockseed) - if minp.y > -26900 then return end local gennotify = minetest.get_mapgen_object("gennotify") local pr = PseudoRandom(blockseed + 14) + for _,f in pairs(deco_ids_trees) do + for _, pos in ipairs(gennotify["decoration#"..f] or {}) do + local nn=minetest.find_nodes_in_area(vector.offset(pos,-8,-1,-8),vector.offset(pos,8,2,8),{"mcl_mangrove:mangrove_roots"}) + for _,v in pairs(nn) do + if minetest.get_node(vector.offset(v,0,-1,0)).name == "mcl_core:water_source" then + minetest.bulk_set_node(minetest.find_nodes_in_area(vector.offset(v,0,0,0),vector.offset(v,0,-10,0),{"mcl_core:water_source"}),{name="mcl_mangrove:water_logged_roots"}) + end + if minetest.get_node(vector.offset(v,0,-1,0)).name == "mcl_mud:mud" then + minetest.bulk_set_node(minetest.find_nodes_in_area(vector.offset(v,0,0,0),vector.offset(v,0,-10,0),{"mcl_mud:mud"}),{name="mcl_mangrove:mud_roots"}) + end + if minetest.get_node(vector.offset(v,0,-1,0)).name == "air" then + minetest.bulk_set_node(minetest.find_nodes_in_area(vector.offset(v,0,0,0),vector.offset(v,0,-10,0),{"air"}),{name="mcl_mangrove:mangrove_roots"}) + end + end + end + end + if minp.y > -26900 then return end for _, pos in ipairs(gennotify["decoration#"..deco_id_chorus_plant] or {}) do local x, y, z = pos.x, pos.y, pos.z if x < -2 or x > 2 or z < -2 or z > 2 then