From 09889ca92796502647cda1b4fb44039548fb69cf Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 28 Jul 2022 18:22:54 +0200 Subject: [PATCH 01/17] Add MangroveSwamp biome defs --- mods/MAPGEN/mcl_biomes/init.lua | 56 ++++++++++++++++++++++++++++++--- 1 file changed, 52 insertions(+), 4 deletions(-) diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua index f766b0692..3602818ca 100644 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ b/mods/MAPGEN/mcl_biomes/init.lua @@ -1342,6 +1342,54 @@ local function register_biomes() _mcl_palette_index = 27, }) + -- Mangrove swamp + minetest.register_biome({ + name = "MangroveSwamp", + node_top = "mcl_mud:mud", + depth_top = 1, + node_filler = "mcl_mud:mud", + depth_filler = 3, + node_riverbed = "mcl_mud:mud", + depth_riverbed = 2, + y_min = 1, + -- Note: Limited in height! + y_max = 23, + humidity_point = 95, + heat_point = 54, + _mcl_biome_type = "medium", + _mcl_palette_index = 28, + }) + minetest.register_biome({ + name = "MangroveSwamp_shore", + node_top = "mcl_mud:mud", + depth_top = 1, + node_filler = "mcl_mud:mud", + depth_filler = 3, + node_riverbed = "mcl_mud:mud", + depth_riverbed = 2, + y_min = -5, + y_max = 0, + humidity_point = 95, + heat_point = 54, + _mcl_biome_type = "medium", + _mcl_palette_index = 28, + }) + minetest.register_biome({ + name = "MangroveSwamp_ocean", + node_top = "mcl_mud:mud", + depth_top = 1, + node_filler = "mcl_mud:mud", + depth_filler = 3, + node_riverbed = "mcl_mud:mud", + depth_riverbed = 2, + y_min = OCEAN_MIN, + y_max = -6, + vertical_blend = 1, + humidity_point = 95, + heat_point = 54, + _mcl_biome_type = "medium", + _mcl_palette_index = 28, + }) -- Swampland minetest.register_biome({ name = "Swampland", @@ -2422,11 +2470,11 @@ local function register_grass_decoration(grasstype, offset, scale, biomes) local place_on, seed, node if grasstype == "fern" then node = "mcl_flowers:fern" - place_on = {"group:grass_block_no_snow", "mcl_core:podzol"} + place_on = {"group:grass_block_no_snow", "mcl_core:podzol","mcl_mud:mud"} seed = 333 elseif grasstype == "tallgrass" then node = "mcl_flowers:tallgrass" - place_on = {"group:grass_block_no_snow"} + place_on = {"group:grass_block_no_snow","mcl_mud:mud"} seed = 420 end local noise = { @@ -3975,7 +4023,7 @@ local function register_decorations() -- Grasses and ferns local grass_forest = {"Plains", "Taiga", "Forest", "FlowerForest", "BirchForest", "BirchForestM", "RoofedForest", "Swampland", } local grass_mpf = {"MesaPlateauF_grasstop"} - local grass_plains = {"Plains", "SunflowerPlains", "JungleEdge", "JungleEdgeM" } + local grass_plains = {"Plains", "SunflowerPlains", "JungleEdge", "JungleEdgeM", "MangroveSwamp" } local grass_savanna = {"Savanna", "SavannaM"} local grass_sparse = {"ExtremeHills", "ExtremeHills+", "ExtremeHills+_snowtop", "ExtremeHillsM", "Jungle" } local grass_mpfm = {"MesaPlateauFM_grasstop" } @@ -3998,7 +4046,7 @@ local function register_decorations() register_grass_decoration("tallgrass", 0.05, -0.03, grass_sparse) register_grass_decoration("tallgrass", 0.05, 0.05, grass_mpfm) - local fern_minimal = { "Jungle", "JungleM", "JungleEdge", "JungleEdgeM", "Taiga", "MegaTaiga", "MegaSpruceTaiga", "ColdTaiga" } + local fern_minimal = { "Jungle", "JungleM", "JungleEdge", "JungleEdgeM", "Taiga", "MegaTaiga", "MegaSpruceTaiga", "ColdTaiga", "MangroveSwamp" } local fern_low = { "Jungle", "JungleM", "JungleEdge", "JungleEdgeM", "Taiga", "MegaTaiga", "MegaSpruceTaiga" } local fern_Jungle = { "Jungle", "JungleM", "JungleEdge", "JungleEdgeM" } --local fern_JungleM = { "JungleM" }, From d284ddf150ad1dc31323a3da85d251a428a8bd92 Mon Sep 17 00:00:00 2001 From: Thunder1035 <96511025+thunder1035@users.noreply.github.com> Date: Thu, 28 Jul 2022 18:28:09 +0200 Subject: [PATCH 02/17] Add mangrove trees --- mods/ITEMS/mcl_mangrove/init.lua | 706 +++++++++++++ mods/ITEMS/mcl_mangrove/mod.conf | 3 + mods/ITEMS/mcl_mangrove/models/node.obj | 46 + mods/ITEMS/mcl_mangrove/models/propagule.obj | 73 ++ .../mcl_mangrove/models/propagule_hanging.obj | 975 ++++++++++++++++++ .../schematics/mcl_mangrove_tree_1.mts | Bin 0 -> 414 bytes .../schematics/mcl_mangrove_tree_2.mts | Bin 0 -> 297 bytes .../schematics/mcl_mangrove_tree_3.mts | Bin 0 -> 505 bytes .../textures/mcl_mangrove_door_bottom.png | Bin 0 -> 6338 bytes .../textures/mcl_mangrove_door_top.png | Bin 0 -> 6378 bytes .../textures/mcl_mangrove_doors.png | Bin 0 -> 6432 bytes .../textures/mcl_mangrove_fence.png | Bin 0 -> 6682 bytes .../textures/mcl_mangrove_fence_gate.png | Bin 0 -> 6682 bytes .../textures/mcl_mangrove_leaves.png | Bin 0 -> 421 bytes .../textures/mcl_mangrove_log.png | Bin 0 -> 6301 bytes .../textures/mcl_mangrove_log_top.png | Bin 0 -> 6472 bytes .../textures/mcl_mangrove_planks.png | Bin 0 -> 6458 bytes .../textures/mcl_mangrove_propagule.png | Bin 0 -> 5756 bytes .../mcl_mangrove_propagule_hanging.png | Bin 0 -> 5965 bytes .../textures/mcl_mangrove_propagule_item.png | Bin 0 -> 5705 bytes .../textures/mcl_mangrove_roots_side.png | Bin 0 -> 396 bytes .../textures/mcl_mangrove_roots_top.png | Bin 0 -> 6404 bytes .../textures/mcl_mangrove_trapdoor.png | Bin 0 -> 6851 bytes .../mcl_stripped_mangrove_log_side.png | Bin 0 -> 6575 bytes .../mcl_stripped_mangrove_log_top.png | Bin 0 -> 6139 bytes mods/MAPGEN/mcl_biomes/init.lua | 38 + mods/MAPGEN/mcl_biomes/mod.conf | 2 +- 27 files changed, 1842 insertions(+), 1 deletion(-) create mode 100644 mods/ITEMS/mcl_mangrove/init.lua create mode 100644 mods/ITEMS/mcl_mangrove/mod.conf create mode 100644 mods/ITEMS/mcl_mangrove/models/node.obj create mode 100644 mods/ITEMS/mcl_mangrove/models/propagule.obj create mode 100644 mods/ITEMS/mcl_mangrove/models/propagule_hanging.obj create mode 100644 mods/ITEMS/mcl_mangrove/schematics/mcl_mangrove_tree_1.mts create mode 100644 mods/ITEMS/mcl_mangrove/schematics/mcl_mangrove_tree_2.mts create mode 100644 mods/ITEMS/mcl_mangrove/schematics/mcl_mangrove_tree_3.mts create mode 100644 mods/ITEMS/mcl_mangrove/textures/mcl_mangrove_door_bottom.png create mode 100644 mods/ITEMS/mcl_mangrove/textures/mcl_mangrove_door_top.png create mode 100644 mods/ITEMS/mcl_mangrove/textures/mcl_mangrove_doors.png create mode 100644 mods/ITEMS/mcl_mangrove/textures/mcl_mangrove_fence.png create mode 100644 mods/ITEMS/mcl_mangrove/textures/mcl_mangrove_fence_gate.png create mode 100644 mods/ITEMS/mcl_mangrove/textures/mcl_mangrove_leaves.png create mode 100644 mods/ITEMS/mcl_mangrove/textures/mcl_mangrove_log.png create mode 100644 mods/ITEMS/mcl_mangrove/textures/mcl_mangrove_log_top.png create mode 100644 mods/ITEMS/mcl_mangrove/textures/mcl_mangrove_planks.png create mode 100644 mods/ITEMS/mcl_mangrove/textures/mcl_mangrove_propagule.png create mode 100644 mods/ITEMS/mcl_mangrove/textures/mcl_mangrove_propagule_hanging.png create mode 100644 mods/ITEMS/mcl_mangrove/textures/mcl_mangrove_propagule_item.png create mode 100644 mods/ITEMS/mcl_mangrove/textures/mcl_mangrove_roots_side.png create mode 100644 mods/ITEMS/mcl_mangrove/textures/mcl_mangrove_roots_top.png create mode 100644 mods/ITEMS/mcl_mangrove/textures/mcl_mangrove_trapdoor.png create mode 100644 mods/ITEMS/mcl_mangrove/textures/mcl_stripped_mangrove_log_side.png create mode 100644 mods/ITEMS/mcl_mangrove/textures/mcl_stripped_mangrove_log_top.png diff --git a/mods/ITEMS/mcl_mangrove/init.lua b/mods/ITEMS/mcl_mangrove/init.lua new file mode 100644 index 000000000..035dd5748 --- /dev/null +++ b/mods/ITEMS/mcl_mangrove/init.lua @@ -0,0 +1,706 @@ + +local S = minetest.get_translator("mcl_core") + +local register_tree_trunk = function(subname, description_trunk, description_bark, longdesc, tile_inner, tile_bark) +minetest.register_node("mcl_mangrove:"..subname, { + description = description_trunk, + _doc_items_longdesc = longdesc, + _doc_items_hidden = false, + tiles = {tile_inner, tile_inner, tile_bark}, + paramtype2 = "facedir", + on_place = mcl_util.rotate_axis, + stack_max = 64, + 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 = on_rotate, + _mcl_blast_resistance = 2, + _mcl_hardness = 2, + }) + + minetest.register_craft({ + output = "mcl_mangrove:"..subname.."_bark 3", + recipe = { + { "mcl_mangrove:"..subname, "mcl_mangrove:"..subname }, + { "mcl_mangrove:"..subname, "mcl_mangrove:"..subname }, + } + }) +end + +local register_wooden_planks = function(subname, description, tiles) +minetest.register_node("mcl_mangrove:"..subname, { + description = description, + _doc_items_longdesc = doc.sub.items.temp.build, + _doc_items_hidden = false, + tiles = tiles, + stack_max = 64, + 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, + }) +end + +local register_leaves = function(subname, description, longdesc, tiles, sapling, drop_apples, sapling_chances, leafdecay_distance) + local drop + if leafdecay_distance == nil then + leafdecay_distance = 4 + end + local apple_chances = {200, 180, 160, 120, 40} + local stick_chances = {50, 45, 30, 35, 10} + + local function get_drops(fortune_level) + local drop = { + max_items = 1, + items = { + { + items = {sapling}, + 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] + }, + } + } + if drop_apples then + table.insert(drop.items, { + items = {"mcl_core:apple"}, + rarity = apple_chances[fortune_level + 1] + }) + end + return drop + end +minetest.register_node("mcl_mangrove:"..subname, { + description = description, + _doc_items_longdesc = longdesc, + _doc_items_hidden = false, + drawtype = "allfaces_optional", + waving = 2, + place_param2 = 1, -- Prevent leafdecay for placed nodes + tiles = tiles, + paramtype = "light", + stack_max = 64, + groups = {handy=1,shearsy=1,swordy=1, leafdecay=leafdecay_distance, flammable=2, leaves=1, deco_block=1, dig_by_piston=1, fire_encouragement=30, fire_flammability=60}, + _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) }, + }) +end + +local function register_sapling(subname, description, longdesc, tt_help, texture, selbox) + minetest.register_node("mcl_mangrove:"..subname, { + description = description, + _tt_help = tt_help, + _doc_items_longdesc = longdesc, + _doc_items_hidden = false, + drawtype = "plantlike", + waving = 1, + visual_scale = 1.0, + tiles = {texture}, + inventory_image = texture, + wield_image = texture, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "fixed", + fixed = selbox + }, + stack_max = 64, + 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, + on_place = mcl_util.generate_on_place_plant_function(function(pos, node) + local node_under = minetest.get_node_or_nil({x=pos.x,y=pos.y-1,z=pos.z}) + if not node_under then return false end + local nn = node_under.name + return ((minetest.get_item_group(nn, "grass_block") == 1) or + nn=="mcl_core:podzol" or nn=="mcl_core:podzol_snow" or + nn=="mcl_core:dirt") + end), + node_placement_prediction = "", + _mcl_blast_resistance = 0, + _mcl_hardness = 0, + }) +end + + +------------------------------------------ + +---plank,tree,leaves and sampling-- + +register_tree_trunk("mangrove_tree", S("Mangrove Wood"), S("Mangrove Bark"), S("The trunk of an Mangrove tree."), "mcl_mangrove_log_top.png", "mcl_mangrove_log.png") +register_wooden_planks("mangrove_wood", S("Mangrove Wood Planks"), {"mcl_mangrove_planks.png"}) +register_sapling("propagule", S("mangrove_propagule"), + S("When placed on soil (such as dirt) and exposed to light, an propagule will grow into an mangrove after some time."), + S("Needs soil and light to grow"), + "mcl_mangrove_propagule_item.png", {-5/16, -0.5, -5/16, 5/16, 0.5, 5/16}) +register_leaves("mangroveleaves", S("Mangrove Leaves"), S("mangrove leaves are grown from mangrove trees."), {"mcl_mangrove_leaves.png"}, "", true, {20, 16, 12, 10}) + + +--other--- + +--stripped mangrove wood-- +minetest.register_node("mcl_mangrove:mangrove_stripped_trunk", { + description = "The stripped wood of an Mangove tree", + _doc_items_longdesc = "The stripped wood of an Mangove 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, + stack_max = 64, + 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 = on_rotate, + _mcl_blast_resistance = 2, + _mcl_hardness = 2, +}) + +--doors and trapdoors-- + +mcl_doors:register_door("mcl_mangrove:mangrove_door", { + description = ("Mangrove Door"), + _doc_items_longdesc = wood_longdesc, + _doc_items_usagehelp = wood_usagehelp, + 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(), +}) + +minetest.register_craft({ + output = "mcl_doors: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"}, + } +}) + +local woods = { + -- id, desc, texture, craftitem + { "trapdoor", S("Mangrove Trapdoor"), "mcl_mangrove_trapdoor.png", "mcl_mangrove_planks.png", "mcl_mangrove:mangrove_wood" },} + +for w=1, #woods do + mcl_doors:register_trapdoor("mcl_mangrove:"..woods[w][1], { + description = woods[w][2], + _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 = woods[w][3], + tile_side = woods[w][4], + wield_image = woods[w][3], + 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(), + }) + +minetest.register_craft({ + output = "mcl_doors:"..woods[w][1].." 2", + recipe = { + {woods[w][5], woods[w][5], woods[w][5]}, + {woods[w][5], woods[w][5], woods[w][5]}, + } + }) + + minetest.register_craft({ + type = "fuel", + recipe = "mcl_doors:"..woods[w][1], + burntime = 15, + }) +end + +------------------------------- + +--fence and fence gates-- + +mcl_fences.register_fence_and_fence_gate( + "mangrove_wood_fence", + S("Mangrove Wood Fence"), S("Mangrove Wood Plank Fence"), + "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") + +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, +}) + +---stairs and slabs--- + +local woods = { + { "mangrove_wood", "mcl_mangrove_planks.png", S("Mangrove Wood Stairs"), S("Mangrove Wood Slab"), S("Double Mangrove Wood Slab") },} + +for w=1, #woods do + local wood = woods[w] + mcl_stairs.register_stair(wood[1], "mcl_core:"..wood[1], + {handy=1,axey=1, flammable=3,wood_stairs=1, material_wood=1, fire_encouragement=5, fire_flammability=20}, + {wood[2]}, + wood[3], + mcl_sounds.node_sound_wood_defaults(), 3, 2, + "woodlike") + mcl_stairs.register_slab(wood[1], "mcl_core:"..wood[1], + {handy=1,axey=1, flammable=3,wood_slab=1, material_wood=1, fire_encouragement=5, fire_flammability=20}, + {wood[2]}, + wood[4], + mcl_sounds.node_sound_wood_defaults(), 3, 2, + wood[5]) +end + +minetest.register_node("mcl_mangrove:mangrove_roots", { + description = "Mangrove_Roots", + _doc_items_longdesc = "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_top.png", + "mcl_mangrove_roots_side.png", "mcl_mangrove_roots_side.png", + "mcl_mangrove_roots_side.png", "mcl_mangrove_roots_side.png" + }, + paramtype = "light", + stack_max = 64, + 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 + }, + 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" }, +}) + +--water can be placed in mangrove roots-- +minetest.override_item("mcl_buckets:bucket_water",{ + on_place = function(itemstack, user, pointed_thing) + -- Use pointed node's on_rightclick function first, if present + local node = minetest.get_node(pointed_thing.under) + if user and not user:get_player_control().sneak then + if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then + return minetest.registered_nodes[node.name].on_rightclick (pointed_thing.under, node, user, itemstack) or itemstack + end + end + + -- Place on roots + if pointed_thing.under and node.name == "mcl_mangrove:mangrove_roots" then + local protname = user:get_player_name() + if minetest.is_protected(pointed_thing.under, protname) then + minetest.record_protection_violation(pointed_thing.under, protname) + return itemstack + end + minetest.set_node(pointed_thing.under, { name = "mcl_mangrove:water_logged_roots", param2 = node.param2 }) + minetest.sound_play("mcl_potions_bottle_pour", {pos=pointed_thing.under, gain=0.9, max_hear_range=16}, true) + if minetest.is_creative_enabled(user:get_player_name()) then + return itemstack + else + return "mcl_buckets:bucket_empty" + end + end +end +}) + +----flower_potted---------------- +mcl_flowerpots.register_potted_flower("mcl_mangrove:propagule", { + name = "propagule", + desc = S("Mangrove Propagule"), + image = "mcl_mangrove_propagule.png", +}) + +-------------------------------------- +--------------------propagule------------------------------ + +--nodes to be changed into-- + + minetest.register_node("mcl_mangrove:propagule_dirt", { + description = "propagule_dirt", + _doc_items_longdesc = "", + _tt_help = "", + drawtype = "plantlike_rooted", + paramtype = "light", + paramtype2 = "meshoptions", + place_param2 = 1, + tiles = { "default_dirt.png" }, + 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_water = 0, 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 = "mcl_core:dirt", + after_dig_node = function(pos) + local node = minetest.get_node(pos) + if minetest.get_item_group(node.name, "dirt") == 0 then + minetest.set_node(pos, {name="mcl_core:dirt"}) + end + end, + _mcl_hardness = 0, + _mcl_blast_resistance = 0, + _mcl_silk_touch_drop = true, + }) + + minetest.register_node("mcl_mangrove:propagule_mud", { + description = "propagule_mud", + _doc_items_longdesc = "", + _tt_help = "", + drawtype = "plantlike_rooted", + paramtype = "light", + paramtype2 = "meshoptions", + place_param2 = 1, + tiles = {"mcl_mud.png"}, + special_tiles = { { name = "mcl_mangrove_propagule_item.png" } }, + inventory_image = "mcl_mangrove_propagule_item.png", + wield_image = "mcl_mangrove_propagule.png", + collision_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, 0.5 - 2/16, 0.5 }, + }, + 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_water = 0, 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 = "mcl_mud:mud", + after_dig_node = function(pos) + local node = minetest.get_node(pos) + if minetest.get_item_group(node.name, "dirt") == 0 then + minetest.set_node(pos, {name="mcl_mud:mud"}) + end + end, + _mcl_hardness = 0, + _mcl_blast_resistance = 0, + _mcl_silk_touch_drop = true, + }) + +minetest.register_node("mcl_mangrove:propagule_dirt_with_grass", { + description = "propagule_dirt_with_grass_", + _doc_items_longdesc = "", + _tt_help = "", + drawtype = "plantlike_rooted", + paramtype = "meshoption", + paramtype2 = "color", + tiles = {"mcl_core_grass_block_top.png", { name="default_dirt.png", color="white" }}, + overlay_tiles = {"mcl_core_grass_block_top.png", "", {name="mcl_core_grass_block_side_overlay.png", tileable_vertical=false}}, + palette = "mcl_core_palette_grass.png", + palette_index = 0, + color = "#8EB971", + special_tiles = { { name = "mcl_mangrove_propagule_item.png" } }, + inventory_image = "mcl_mangrove_propagule_item.png", + wield_image = "mcl_mangrove_propagule.png", + collision_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, 0.5 - 2/16, 0.5 }, + }, + 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_water = 0, 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 = "mcl_core:dirt_with_grass", + after_dig_node = function(pos) + local node = minetest.get_node(pos) + if minetest.get_item_group(node.name, "dirt") == 0 then + minetest.set_node(pos, {name="mcl_core:dirt_with_grass"}) + end + end, + _mcl_hardness = 0, + _mcl_blast_resistance = 0, + _mcl_silk_touch_drop = true, + }) + + +------------------------ +-- node changer-- +minetest.override_item("mcl_mangrove:propagule",{ + on_place = function(itemstack, user, pointed_thing) + -- Use pointed node's on_rightclick function first, if present + local node = minetest.get_node(pointed_thing.under) + if user and not user:get_player_control().sneak then + if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then + return minetest.registered_nodes[node.name].on_rightclick (pointed_thing.under, node, user, itemstack) or itemstack + end + end + + -- Place on dirt + if pointed_thing.under and node.name == "mcl_core:dirt" then + local protname = user:get_player_name() + if minetest.is_protected(pointed_thing.under, protname) then + minetest.record_protection_violation(pointed_thing.under, protname) + return itemstack + end + minetest.set_node(pointed_thing.under, { name = "mcl_mangrove:propagule_dirt", param2 = node.param2 }) + minetest.sound_play(mcl_sounds.node_sound_leaves_defaults{pos=pointed_thing.under, gain=0.5, max_hear_range=16}, true) + if not minetest.is_creative_enabled(user:get_player_name()) then + itemstack:take_item(1) -- 1 use + return itemstack + end + end + +-- Place on dirt _with_grass + if pointed_thing.under and node.name == "mcl_core:dirt_with_grass" then + local protname = user:get_player_name() + if minetest.is_protected(pointed_thing.under, protname) then + minetest.record_protection_violation(pointed_thing.under, protname) + return itemstack + end + minetest.set_node(pointed_thing.under, { name = "mcl_mangrove:propagule_dirt_with_grass", param2 = node.param2 }) + minetest.sound_play(mcl_sounds.node_sound_leaves_defaults{pos=pointed_thing.under, gain=0.5, max_hear_range=16}, true) + if not minetest.is_creative_enabled(user:get_player_name()) then + itemstack:take_item(1) -- 1 use + return itemstack + end + end + +-- Place on mud + if pointed_thing.under and node.name == "mcl_mud:mud" then + local protname = user:get_player_name() + if minetest.is_protected(pointed_thing.under, protname) then + minetest.record_protection_violation(pointed_thing.under, protname) + return itemstack + end + minetest.set_node(pointed_thing.under, { name = "mcl_mangrove:propagule_mud", param2 = node.param2 }) + minetest.sound_play(mcl_sounds.node_sound_leaves_defaults{pos=pointed_thing.under, gain=0.5, max_hear_range=16}, true) + if not minetest.is_creative_enabled(user:get_player_name()) then + itemstack:take_item(1) -- 1 use + return itemstack + end + end +end +}) + +---------------------------------------------------------------- + +--water can be taken from mangrove water roots-- +minetest.override_item("mcl_buckets:bucket_empty",{ + on_place = function(itemstack, user, pointed_thing) + -- Use pointed node's on_rightclick function first, if present + local node = minetest.get_node(pointed_thing.under) + if user and not user:get_player_control().sneak then + if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then + return minetest.registered_nodes[node.name].on_rightclick (pointed_thing.under, node, user, itemstack) or itemstack + end + end + + -- Place on water roots + if pointed_thing.under and node.name == "mcl_mangrove:water_logged_roots" then + local protname = user:get_player_name() + if minetest.is_protected(pointed_thing.under, protname) then + minetest.record_protection_violation(pointed_thing.under, protname) + return itemstack + end + minetest.set_node(pointed_thing.under, { name = "mcl_mangrove:mangrove_roots", param2 = node.param2 }) + minetest.sound_play("mcl_potions_bottle_pour", {pos=pointed_thing.under, gain=0.9, max_hear_range=16}, true) + if minetest.is_creative_enabled(user:get_player_name()) then + return itemstack + else + return "mcl_buckets:bucket_water" + end + end +end +}) +local water_tex = "default_water_source_animated.png^[verticalframe:16:0" + + +minetest.register_node("mcl_mangrove:water_logged_roots", { + description = ("water_logged_mangrove_roots"), + _doc_items_entry_name = S("water_logged_roots"), + _doc_items_longdesc = + ("Mangrove roots are decorative blocks that form as part of mangrove trees.").."\n\n".. + ("Mangrove roots, despite being a full block, can be waterlogged and do not flow water out").."\n\n".. + ("These cannot be crafted yet only occure when get in contact of water."), + _doc_items_hidden = false, + tiles = { + "("..water_tex..")^mcl_mangrove_roots_top.png", "("..water_tex..")^mcl_mangrove_roots_top.png", + "("..water_tex..")^mcl_mangrove_roots_side.png", "("..water_tex..")^mcl_mangrove_roots_side.png", + "("..water_tex..")^mcl_mangrove_roots_side.png", "("..water_tex..")^mcl_mangrove_roots_side.png" + }, + sounds = mcl_sounds.node_sound_water_defaults(), + use_texture_alpha = USE_TEXTURE_ALPHA, + is_ground_content = false, + paramtype = "light", + walkable = true, + pointable = true, + diggable = true, + buildable_to = flase, + liquids_pointable = true, + 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, + }, + _mcl_blast_resistance = 100, + -- Hardness intentionally set to infinite instead of 100 (Minecraft value) to avoid problems in creative mode + _mcl_hardness = -1, + 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, +}) + +------------------------ +if minetest.get_modpath("mcl_mud") then +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"), + stack_max = 64, + tiles = { + "mcl_mud.png^mcl_mangrove_roots_top.png", "mcl_mud.png^mcl_mangrove_roots_top.png", + "mcl_mud.png^mcl_mangrove_roots_side.png", "mcl_mud.png^mcl_mangrove_roots_side.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, +}) + +--------craft---------- + +minetest.register_craft({ + output = "mcl_mangrove:mangrove_mud_roots", + recipe = { + {"mcl_mangrove:mangrove_roots", "mcl_mud:mud",}, + } + }) + +end + +------hanging_propagule----------- +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", +}) + +------------tree_growth_abm------------ + +local propagule_nodes = { + "mcl_mangrove:propagule_dirt", + "mcl_mangrove:propagule_mud", + "mcl_mangrove:propagule_dirt_with_grass" +} + + +--minetest.register_abm({ +-- label = "Mangrove_tree_growth", +-- nodenames = propagule_nodes, +-- interval = 2, +-- chance = 1, +-- action = function(pos,value) +-- local path = minetest.get_modpath("mcl_mangrove") .. --"/schematics/mcl_mangrove_tree_1.mts", +-- minetest.place_schematic({x = pos.x - 3, y = pos.y - 0, z = pos.z - 4}, --path, -"random", nil, false) +--end +--}) + +---------------------------------------------------------- diff --git a/mods/ITEMS/mcl_mangrove/mod.conf b/mods/ITEMS/mcl_mangrove/mod.conf new file mode 100644 index 000000000..6d7c17b5b --- /dev/null +++ b/mods/ITEMS/mcl_mangrove/mod.conf @@ -0,0 +1,3 @@ +name = mcl_mangrove +author = thunder1035 +depends = mcl_core, mcl_doors, mcl_stairs, mcl_walls, mclx_fences, mcl_boats, mcl_flowerpots diff --git a/mods/ITEMS/mcl_mangrove/models/node.obj b/mods/ITEMS/mcl_mangrove/models/node.obj new file mode 100644 index 000000000..bb50e2495 --- /dev/null +++ b/mods/ITEMS/mcl_mangrove/models/node.obj @@ -0,0 +1,46 @@ +# Blender v3.1.2 OBJ File: 'minetest_base_node.blend' +# www.blender.org +mtllib roots_base_node.mtl +o node +v -0.500000 0.500000 0.500000 +v 0.500000 0.500000 0.500000 +v 0.500000 0.500000 -0.500000 +v -0.500000 0.500000 -0.500000 +v -0.500000 -0.500000 -0.500000 +v 0.500000 -0.500000 -0.500000 +v 0.500000 -0.500000 0.500000 +v -0.500000 -0.500000 0.500000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 0.000000 1.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 1.0000 -0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.0000 1.0000 +usemtl Material +s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/2 6/6/2 7/7/2 8/8/2 +f 7/9/3 6/6/3 3/3/3 2/10/3 +f 5/5/4 8/11/4 1/12/4 4/4/4 +f 6/13/5 5/14/5 4/15/5 3/16/5 +f 8/17/6 7/18/6 2/19/6 1/20/6 diff --git a/mods/ITEMS/mcl_mangrove/models/propagule.obj b/mods/ITEMS/mcl_mangrove/models/propagule.obj new file mode 100644 index 000000000..598573020 --- /dev/null +++ b/mods/ITEMS/mcl_mangrove/models/propagule.obj @@ -0,0 +1,73 @@ +# Blender v3.1.2 OBJ File: 'propagule.blend' +# www.blender.org +mtllib propagule.mtl +o Plane +v 0.500000 0.499931 0.499931 +v 0.500000 -0.499931 0.499931 +v 0.500000 0.499931 -0.499931 +v 0.500000 -0.499931 -0.499931 +v -0.500000 0.500000 0.500000 +v 0.500000 0.500000 0.500000 +v 0.500000 0.500000 -0.500000 +v -0.500000 0.500000 -0.500000 +v -0.500000 -0.500000 -0.500000 +v -0.500000 -0.500000 0.500000 +v 0.500000 -0.500000 -0.500000 +v 0.500000 -0.500000 0.500000 +v -0.347329 1.500000 0.359670 +v 0.347329 1.500000 -0.359670 +v 0.347329 0.500000 -0.359670 +v -0.347329 0.500000 0.359670 +v -0.359670 1.500000 -0.347329 +v 0.359670 1.500000 0.347329 +v 0.359670 0.500000 0.347329 +v -0.359670 0.500000 -0.347329 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.499987 +vt 0.000000 0.499987 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.499868 +vt 0.000000 0.499868 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.499868 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.499868 +vt 0.000000 0.499868 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.499868 +vt 0.000000 0.499868 +vt 0.000000 1.000000 +vt 1.000000 1.000000 +vt 1.000000 0.499985 +vt 0.000000 0.499985 +vt 0.000000 1.000000 +vt 1.000000 1.000000 +vt 1.000000 0.499985 +vt 0.000000 0.499985 +vn 1.0000 0.0000 0.0000 +vn -0.5774 0.5774 0.5774 +vn 0.0000 0.7071 0.7071 +vn 0.0000 0.7071 -0.7071 +vn -0.5774 0.5774 -0.5774 +vn -0.7071 0.0000 -0.7071 +vn -0.7071 -0.0000 0.7071 +vn 0.0000 0.0000 -1.0000 +vn -0.0000 -0.0000 1.0000 +vn -0.7193 0.0000 -0.6947 +vn 0.6947 0.0000 -0.7193 +usemtl default_dirt.png.001 +s off +f 1/1/1 2/2/1 4/3/1 3/4/1 +s 1 +f 5/5/2 6/6/3 7/7/4 8/8/5 +f 9/9/6 10/10/7 5/11/2 8/8/5 +f 11/12/8 9/13/6 8/14/5 7/15/4 +f 10/16/7 12/17/9 6/18/3 5/19/2 +usemtl mcl_mangrove_propagule.png.001 +f 13/20/10 14/21/10 15/22/10 16/23/10 +f 17/24/11 18/25/11 19/26/11 20/27/11 diff --git a/mods/ITEMS/mcl_mangrove/models/propagule_hanging.obj b/mods/ITEMS/mcl_mangrove/models/propagule_hanging.obj new file mode 100644 index 000000000..0a8be50d0 --- /dev/null +++ b/mods/ITEMS/mcl_mangrove/models/propagule_hanging.obj @@ -0,0 +1,975 @@ +# Blender v3.1.2 OBJ File: 'propagule_hanging.blend' +# www.blender.org +mtllib propagule_hanging.mtl +o plant +v 0.000000 0.470112 0.000000 +v 0.000000 -0.529888 0.000000 +v 0.000000 -0.529888 0.000000 +v 0.000000 0.470112 0.000000 +v 0.000000 -0.029888 0.000000 +v 0.000000 -0.029888 0.000000 +v 0.000000 -0.279888 0.000000 +v 0.000000 0.220112 0.000000 +v 0.000000 -0.279888 0.000000 +v 0.000000 0.220112 0.000000 +v -0.086832 0.470112 0.089918 +v 0.086832 -0.529888 -0.089917 +v 0.089917 -0.529888 0.086832 +v -0.089918 0.470112 -0.086832 +v 0.000000 -0.404888 0.000000 +v 0.000000 0.095112 0.000000 +v 0.089917 -0.029888 0.086832 +v 0.000000 -0.404888 0.000000 +v 0.000000 0.095112 0.000000 +v 0.086832 -0.029888 -0.089917 +v 0.086832 0.470112 -0.089917 +v -0.086832 -0.529888 0.089917 +v -0.089917 -0.529888 -0.086832 +v 0.089917 0.470112 0.086832 +v 0.000000 -0.154888 0.000000 +v 0.000000 0.345112 0.000000 +v -0.089917 -0.029888 -0.086832 +v 0.000000 -0.154888 0.000000 +v 0.000000 0.345112 0.000000 +v -0.086832 -0.029888 0.089918 +v 0.086832 0.220112 -0.089917 +v -0.086832 0.220112 0.089918 +v -0.086832 -0.279888 0.089917 +v 0.089917 0.220112 0.086832 +v -0.089918 0.220112 -0.086832 +v -0.089917 -0.279888 -0.086832 +v 0.089917 -0.279888 0.086832 +v 0.086832 -0.279888 -0.089917 +v 0.086832 -0.154888 -0.089917 +v 0.086832 -0.404888 -0.089917 +v 0.089917 -0.154888 0.086832 +v 0.089917 -0.404888 0.086832 +v -0.089917 -0.154888 -0.086832 +v -0.089918 0.345112 -0.086832 +v 0.089917 0.345112 0.086832 +v 0.089917 0.095112 0.086832 +v -0.086832 -0.154888 0.089918 +v -0.086832 0.345112 0.089918 +v 0.086832 0.345112 -0.089917 +v 0.086832 0.095112 -0.089917 +v -0.086832 0.095112 0.089918 +v -0.086832 -0.404888 0.089917 +v -0.089917 0.095112 -0.086832 +v -0.089917 -0.404888 -0.086832 +v -0.043416 0.470112 0.044959 +v 0.043416 -0.529888 -0.044959 +v 0.044959 -0.529888 0.043416 +v -0.044959 0.470112 -0.043416 +v 0.000000 -0.467388 0.000000 +v 0.000000 0.032612 0.000000 +v 0.044959 -0.029888 0.043416 +v 0.000000 -0.467388 0.000000 +v 0.000000 0.032612 0.000000 +v 0.043416 -0.029888 -0.044959 +v 0.000000 -0.217388 0.000000 +v 0.000000 0.282612 0.000000 +v 0.000000 -0.217388 0.000000 +v 0.000000 0.282612 0.000000 +v 0.043416 0.220112 -0.044959 +v 0.044959 0.220112 0.043416 +v 0.044959 -0.279888 0.043416 +v 0.043416 -0.279888 -0.044959 +v 0.000000 -0.342388 0.000000 +v 0.000000 0.157612 0.000000 +v 0.000000 -0.342388 0.000000 +v 0.000000 0.157612 0.000000 +v 0.043416 0.470112 -0.044959 +v -0.043416 -0.529888 0.044959 +v -0.044959 -0.529888 -0.043416 +v 0.044959 0.470112 0.043416 +v 0.000000 -0.092388 0.000000 +v 0.000000 0.407612 0.000000 +v -0.044959 -0.029888 -0.043416 +v 0.000000 -0.092388 0.000000 +v 0.000000 0.407612 0.000000 +v -0.043416 -0.029888 0.044959 +v -0.043416 0.220112 0.044959 +v -0.043416 -0.279888 0.044959 +v -0.044959 0.220112 -0.043416 +v -0.044959 -0.279888 -0.043416 +v 0.086832 -0.217388 -0.089917 +v 0.086832 -0.092388 -0.089917 +v 0.043416 -0.154888 -0.044959 +v 0.086832 -0.467388 -0.089917 +v 0.086832 -0.342388 -0.089917 +v 0.043416 -0.404888 -0.044959 +v 0.089917 -0.217388 0.086832 +v 0.089917 -0.092388 0.086832 +v 0.044959 -0.154888 0.043416 +v 0.089917 -0.467388 0.086832 +v 0.089917 -0.342388 0.086832 +v 0.044959 -0.404888 0.043416 +v -0.089917 -0.217388 -0.086832 +v -0.089917 -0.092388 -0.086832 +v -0.044959 -0.154888 -0.043416 +v -0.089918 0.282612 -0.086832 +v -0.089918 0.407612 -0.086832 +v -0.044959 0.345112 -0.043416 +v 0.089917 0.282612 0.086832 +v 0.089917 0.407612 0.086832 +v 0.044959 0.345112 0.043416 +v 0.089917 0.032612 0.086832 +v 0.089917 0.157612 0.086832 +v 0.044959 0.095112 0.043416 +v -0.086832 -0.217388 0.089917 +v -0.086832 -0.092388 0.089918 +v -0.043416 -0.154888 0.044959 +v -0.086832 0.282612 0.089918 +v -0.086832 0.407612 0.089918 +v -0.043416 0.345112 0.044959 +v 0.086832 0.282612 -0.089917 +v 0.086832 0.407612 -0.089917 +v 0.043416 0.345112 -0.044959 +v 0.086832 0.032612 -0.089917 +v 0.086832 0.157612 -0.089917 +v 0.043416 0.095112 -0.044959 +v -0.086832 0.032612 0.089918 +v -0.086832 0.157612 0.089918 +v -0.043416 0.095112 0.044959 +v -0.086832 -0.467388 0.089917 +v -0.086832 -0.342388 0.089917 +v -0.043416 -0.404888 0.044959 +v -0.089917 0.032612 -0.086832 +v -0.089917 0.157612 -0.086832 +v -0.044959 0.095112 -0.043416 +v -0.089917 -0.467388 -0.086832 +v -0.089917 -0.342388 -0.086832 +v -0.044959 -0.404888 -0.043416 +v -0.044959 -0.342388 -0.043416 +v -0.044959 0.157612 -0.043416 +v -0.043416 -0.342388 0.044959 +v -0.043416 0.157612 0.044959 +v 0.043416 0.157612 -0.044959 +v 0.043416 0.032612 -0.044959 +v 0.043416 0.407612 -0.044959 +v 0.043416 0.282612 -0.044959 +v -0.043416 0.407612 0.044959 +v -0.043416 -0.092388 0.044959 +v 0.044959 0.157612 0.043416 +v 0.044959 0.032612 0.043416 +v 0.044959 0.407612 0.043416 +v 0.044959 0.282612 0.043416 +v -0.044959 0.407612 -0.043416 +v -0.044959 -0.092388 -0.043416 +v 0.044959 -0.342388 0.043416 +v 0.044959 -0.467388 0.043416 +v 0.044959 -0.092388 0.043416 +v 0.044959 -0.217388 0.043416 +v 0.043416 -0.342388 -0.044959 +v 0.043416 -0.467388 -0.044959 +v 0.043416 -0.092388 -0.044959 +v 0.043416 -0.217388 -0.044959 +v -0.044959 -0.217388 -0.043416 +v -0.044959 0.282612 -0.043416 +v -0.043416 -0.217388 0.044959 +v -0.043416 0.282612 0.044959 +v -0.043416 0.032612 0.044959 +v -0.043416 -0.467388 0.044959 +v -0.044959 0.032612 -0.043416 +v -0.044959 -0.467388 -0.043416 +vt 0.218362 0.406348 +vt 0.250401 0.406348 +vt 0.250401 0.376797 +vt 0.218362 0.376797 +vt 0.218362 0.657596 +vt 0.250401 0.657596 +vt 0.250401 0.626276 +vt 0.218362 0.626276 +vt 0.218362 0.406348 +vt 0.250401 0.406348 +vt 0.250401 0.376797 +vt 0.218362 0.376797 +vt 0.218362 0.657596 +vt 0.250401 0.657596 +vt 0.250401 0.626276 +vt 0.218362 0.626276 +vt 0.218362 0.784719 +vt 0.250401 0.784719 +vt 0.250401 0.751554 +vt 0.218362 0.751554 +vt 0.218362 0.532933 +vt 0.250401 0.532933 +vt 0.250401 0.502229 +vt 0.218362 0.502229 +vt 0.218362 0.784719 +vt 0.250401 0.784719 +vt 0.250401 0.751554 +vt 0.218362 0.751554 +vt 0.218362 0.532933 +vt 0.250401 0.532933 +vt 0.250401 0.502229 +vt 0.218362 0.502229 +vt 0.282961 0.532934 +vt 0.315521 0.532934 +vt 0.315521 0.502229 +vt 0.282961 0.502229 +vt 0.282961 0.594957 +vt 0.315521 0.594957 +vt 0.315521 0.563638 +vt 0.282961 0.563638 +vt 0.282961 0.406348 +vt 0.315521 0.406348 +vt 0.315521 0.376797 +vt 0.282961 0.376797 +vt 0.282961 0.469065 +vt 0.315521 0.469065 +vt 0.315521 0.435900 +vt 0.282961 0.435900 +vt 0.282961 0.532934 +vt 0.315521 0.532934 +vt 0.315521 0.502229 +vt 0.282961 0.502229 +vt 0.282961 0.594957 +vt 0.315521 0.594957 +vt 0.315521 0.563638 +vt 0.282961 0.563638 +vt 0.282961 0.406348 +vt 0.315521 0.406348 +vt 0.315521 0.376797 +vt 0.282961 0.376797 +vt 0.282961 0.469065 +vt 0.315521 0.469065 +vt 0.315521 0.435900 +vt 0.282961 0.435900 +vt 0.218362 0.594957 +vt 0.250401 0.594957 +vt 0.250401 0.563638 +vt 0.218362 0.563638 +vt 0.466901 0.935330 +vt 0.498940 0.935330 +vt 0.498940 0.875712 +vt 0.466901 0.875712 +vt 0.282961 0.784719 +vt 0.315521 0.784719 +vt 0.315521 0.751554 +vt 0.282961 0.751554 +vt 0.531500 0.935330 +vt 0.564060 0.935330 +vt 0.564060 0.875712 +vt 0.531500 0.875712 +vt 0.282961 0.657596 +vt 0.315521 0.657596 +vt 0.315521 0.626276 +vt 0.282961 0.626276 +vt 0.282961 0.720234 +vt 0.315521 0.720234 +vt 0.315521 0.688915 +vt 0.282961 0.688915 +vt 0.218362 0.594957 +vt 0.250401 0.594957 +vt 0.250401 0.563638 +vt 0.218362 0.563638 +vt 0.466901 0.935330 +vt 0.498940 0.935330 +vt 0.498940 0.875712 +vt 0.466901 0.875712 +vt 0.282961 0.784719 +vt 0.315521 0.784719 +vt 0.315521 0.751554 +vt 0.282961 0.751554 +vt 0.531500 0.935330 +vt 0.564060 0.935330 +vt 0.564060 0.875712 +vt 0.531500 0.875712 +vt 0.282961 0.657596 +vt 0.315521 0.657596 +vt 0.315521 0.626276 +vt 0.282961 0.626276 +vt 0.282961 0.720234 +vt 0.315521 0.720234 +vt 0.315521 0.688915 +vt 0.282961 0.688915 +vt 0.218362 0.720234 +vt 0.250401 0.720234 +vt 0.250401 0.688915 +vt 0.218362 0.688915 +vt 0.218362 0.469064 +vt 0.250401 0.469064 +vt 0.250401 0.435900 +vt 0.218362 0.435900 +vt 0.218362 0.720234 +vt 0.250401 0.720234 +vt 0.250401 0.688915 +vt 0.218362 0.688915 +vt 0.218362 0.469064 +vt 0.250401 0.469064 +vt 0.250401 0.435900 +vt 0.218362 0.435900 +vt 0.186322 0.469064 +vt 0.186322 0.435900 +vt 0.186322 0.502229 +vt 0.186322 0.720234 +vt 0.186322 0.688915 +vt 0.186322 0.751554 +vt 0.186322 0.469064 +vt 0.186322 0.435900 +vt 0.186322 0.502229 +vt 0.186322 0.720234 +vt 0.186322 0.688915 +vt 0.186322 0.751554 +vt 0.498940 0.998640 +vt 0.531500 0.998640 +vt 0.564060 0.998640 +vt 0.250401 0.817883 +vt 0.282961 0.817883 +vt 0.315521 0.817883 +vt 0.434861 0.935330 +vt 0.434861 0.875712 +vt 0.434861 0.998640 +vt 0.466901 0.998640 +vt 0.186322 0.594957 +vt 0.186322 0.563638 +vt 0.186322 0.626276 +vt 0.498940 0.998640 +vt 0.531500 0.998640 +vt 0.564060 0.998640 +vt 0.250401 0.817883 +vt 0.282961 0.817883 +vt 0.315521 0.817883 +vt 0.434861 0.935330 +vt 0.434861 0.875712 +vt 0.434861 0.998640 +vt 0.466901 0.998640 +vt 0.186322 0.594957 +vt 0.186322 0.563638 +vt 0.186322 0.626276 +vt 0.186322 0.532933 +vt 0.186322 0.784719 +vt 0.186322 0.817883 +vt 0.218362 0.817883 +vt 0.186322 0.532933 +vt 0.186322 0.784719 +vt 0.186322 0.817883 +vt 0.218362 0.817883 +vt 0.186322 0.657596 +vt 0.186322 0.406348 +vt 0.186322 0.376797 +vt 0.186322 0.657596 +vt 0.186322 0.406348 +vt 0.186322 0.376797 +vn 0.6947 0.0000 -0.7193 +vn -0.7193 0.0000 -0.6947 +usemtl mcl_flowers_tallgrass.png +s 1 +f 170/1/1 59/2/1 3/3/1 79/4/1 +f 169/5/1 60/6/1 5/7/1 83/8/1 +f 168/9/2 62/10/2 2/11/2 78/12/2 +f 167/13/2 63/14/2 6/15/2 86/16/2 +f 166/17/2 68/18/2 10/19/2 87/20/2 +f 165/21/2 67/22/2 9/23/2 88/24/2 +f 164/25/1 66/26/1 8/27/1 89/28/1 +f 163/29/1 65/30/1 7/31/1 90/32/1 +f 162/33/2 91/34/2 38/35/2 72/36/2 +f 161/37/2 92/38/2 39/39/2 93/40/2 +f 160/41/2 94/42/2 12/43/2 56/44/2 +f 159/45/2 95/46/2 40/47/2 96/48/2 +f 158/49/1 97/50/1 37/51/1 71/52/1 +f 157/53/1 98/54/1 41/55/1 99/56/1 +f 156/57/1 100/58/1 13/59/1 57/60/1 +f 155/61/1 101/62/1 42/63/1 102/64/1 +f 154/65/1 81/66/1 25/67/1 105/68/1 +f 153/69/1 82/70/1 26/71/1 108/72/1 +f 152/73/1 109/74/1 34/75/1 70/76/1 +f 151/77/1 110/78/1 45/79/1 111/80/1 +f 150/81/1 112/82/1 17/83/1 61/84/1 +f 149/85/1 113/86/1 46/87/1 114/88/1 +f 148/89/2 84/90/2 28/91/2 117/92/2 +f 147/93/2 85/94/2 29/95/2 120/96/2 +f 146/97/2 121/98/2 31/99/2 69/100/2 +f 145/101/2 122/102/2 49/103/2 123/104/2 +f 144/105/2 124/106/2 20/107/2 64/108/2 +f 143/109/2 125/110/2 50/111/2 126/112/2 +f 142/113/2 76/114/2 19/115/2 129/116/2 +f 141/117/2 75/118/2 18/119/2 132/120/2 +f 140/121/1 74/122/1 16/123/1 135/124/1 +f 139/125/1 73/126/1 15/127/1 138/128/1 +f 137/129/1 139/125/1 138/128/1 54/130/1 +f 36/131/1 90/32/1 139/125/1 137/129/1 +f 90/32/1 7/31/1 73/126/1 139/125/1 +f 134/132/1 140/121/1 135/124/1 53/133/1 +f 35/134/1 89/28/1 140/121/1 134/132/1 +f 89/28/1 8/27/1 74/122/1 140/121/1 +f 131/135/2 141/117/2 132/120/2 52/136/2 +f 33/137/2 88/24/2 141/117/2 131/135/2 +f 88/24/2 9/23/2 75/118/2 141/117/2 +f 128/138/2 142/113/2 129/116/2 51/139/2 +f 32/140/2 87/20/2 142/113/2 128/138/2 +f 87/20/2 10/19/2 76/114/2 142/113/2 +f 76/114/2 143/109/2 126/112/2 19/115/2 +f 10/19/2 69/100/2 143/109/2 76/114/2 +f 69/100/2 31/99/2 125/110/2 143/109/2 +f 63/14/2 144/105/2 64/108/2 6/15/2 +f 19/115/2 126/112/2 144/105/2 63/14/2 +f 126/112/2 50/111/2 124/106/2 144/105/2 +f 85/94/2 145/101/2 123/104/2 29/95/2 +f 1/141/2 77/142/2 145/101/2 85/94/2 +f 77/142/2 21/143/2 122/102/2 145/101/2 +f 68/18/2 146/97/2 69/100/2 10/19/2 +f 29/144/2 123/145/2 146/97/2 68/18/2 +f 123/145/2 49/146/2 121/98/2 146/97/2 +f 119/147/2 147/93/2 120/96/2 48/148/2 +f 11/149/2 55/150/2 147/93/2 119/147/2 +f 55/150/2 1/141/2 85/94/2 147/93/2 +f 116/151/2 148/89/2 117/92/2 47/152/2 +f 30/153/2 86/16/2 148/89/2 116/151/2 +f 86/16/2 6/15/2 84/90/2 148/89/2 +f 74/122/1 149/85/1 114/88/1 16/123/1 +f 8/27/1 70/76/1 149/85/1 74/122/1 +f 70/76/1 34/75/1 113/86/1 149/85/1 +f 60/6/1 150/81/1 61/84/1 5/7/1 +f 16/123/1 114/88/1 150/81/1 60/6/1 +f 114/88/1 46/87/1 112/82/1 150/81/1 +f 82/70/1 151/77/1 111/80/1 26/71/1 +f 4/154/1 80/155/1 151/77/1 82/70/1 +f 80/155/1 24/156/1 110/78/1 151/77/1 +f 66/26/1 152/73/1 70/76/1 8/27/1 +f 26/157/1 111/158/1 152/73/1 66/26/1 +f 111/158/1 45/159/1 109/74/1 152/73/1 +f 107/160/1 153/69/1 108/72/1 44/161/1 +f 14/162/1 58/163/1 153/69/1 107/160/1 +f 58/163/1 4/154/1 82/70/1 153/69/1 +f 104/164/1 154/65/1 105/68/1 43/165/1 +f 27/166/1 83/8/1 154/65/1 104/164/1 +f 83/8/1 5/7/1 81/66/1 154/65/1 +f 73/126/1 155/61/1 102/64/1 15/127/1 +f 7/31/1 71/52/1 155/61/1 73/126/1 +f 71/52/1 37/51/1 101/62/1 155/61/1 +f 59/2/1 156/57/1 57/60/1 3/3/1 +f 15/127/1 102/64/1 156/57/1 59/2/1 +f 102/64/1 42/63/1 100/58/1 156/57/1 +f 81/66/1 157/53/1 99/56/1 25/67/1 +f 5/7/1 61/84/1 157/53/1 81/66/1 +f 61/84/1 17/83/1 98/54/1 157/53/1 +f 65/30/1 158/49/1 71/52/1 7/31/1 +f 25/67/1 99/56/1 158/49/1 65/30/1 +f 99/56/1 41/55/1 97/50/1 158/49/1 +f 75/118/2 159/45/2 96/48/2 18/119/2 +f 9/23/2 72/36/2 159/45/2 75/118/2 +f 72/36/2 38/35/2 95/46/2 159/45/2 +f 62/10/2 160/41/2 56/44/2 2/11/2 +f 18/119/2 96/48/2 160/41/2 62/10/2 +f 96/48/2 40/47/2 94/42/2 160/41/2 +f 84/90/2 161/37/2 93/40/2 28/91/2 +f 6/15/2 64/108/2 161/37/2 84/90/2 +f 64/108/2 20/107/2 92/38/2 161/37/2 +f 67/22/2 162/33/2 72/36/2 9/23/2 +f 28/91/2 93/40/2 162/33/2 67/22/2 +f 93/40/2 39/39/2 91/34/2 162/33/2 +f 103/167/1 163/29/1 90/32/1 36/131/1 +f 43/165/1 105/68/1 163/29/1 103/167/1 +f 105/68/1 25/67/1 65/30/1 163/29/1 +f 106/168/1 164/25/1 89/28/1 35/134/1 +f 44/169/1 108/170/1 164/25/1 106/168/1 +f 108/170/1 26/157/1 66/26/1 164/25/1 +f 115/171/2 165/21/2 88/24/2 33/137/2 +f 47/152/2 117/92/2 165/21/2 115/171/2 +f 117/92/2 28/91/2 67/22/2 165/21/2 +f 118/172/2 166/17/2 87/20/2 32/140/2 +f 48/173/2 120/174/2 166/17/2 118/172/2 +f 120/174/2 29/144/2 68/18/2 166/17/2 +f 127/175/2 167/13/2 86/16/2 30/153/2 +f 51/139/2 129/116/2 167/13/2 127/175/2 +f 129/116/2 19/115/2 63/14/2 167/13/2 +f 130/176/2 168/9/2 78/12/2 22/177/2 +f 52/136/2 132/120/2 168/9/2 130/176/2 +f 132/120/2 18/119/2 62/10/2 168/9/2 +f 133/178/1 169/5/1 83/8/1 27/166/1 +f 53/133/1 135/124/1 169/5/1 133/178/1 +f 135/124/1 16/123/1 60/6/1 169/5/1 +f 136/179/1 170/1/1 79/4/1 23/180/1 +f 54/130/1 138/128/1 170/1/1 136/179/1 +f 138/128/1 15/127/1 59/2/1 170/1/1 +o plant_test +v -0.000842 0.420173 0.000152 +v -0.000842 0.420173 0.000152 +v 0.190595 0.340629 0.003494 +v 0.002500 0.340629 -0.191284 +v -0.192278 0.340629 -0.003189 +v -0.004183 0.340629 0.191589 +v 0.094876 0.380401 0.001823 +v 0.193936 0.340629 -0.187943 +v 0.187253 0.340629 0.194930 +v 0.000829 0.380401 -0.095566 +v -0.188937 0.340629 -0.194626 +v 0.193936 0.340629 -0.187943 +v -0.096560 0.380401 -0.001519 +v -0.195620 0.340629 0.188247 +v -0.188937 0.340629 -0.194626 +v -0.002513 0.380401 0.095870 +v 0.187253 0.340629 0.194930 +v -0.195620 0.340629 0.188247 +v 0.188924 0.380401 0.099212 +v -0.099901 0.380401 0.189918 +v -0.190607 0.380401 -0.098907 +v 0.098218 0.380401 -0.189613 +v 0.091535 0.380401 0.193259 +v 0.192265 0.380401 -0.092225 +v -0.093219 0.380401 -0.192955 +v -0.193949 0.380401 0.092529 +vt 0.373047 0.821932 +vt 0.500000 0.821932 +vt 0.500000 0.691073 +vt 0.373047 0.691073 +vt 0.312500 0.821932 +vt 0.500000 0.821932 +vt 0.500000 0.691073 +vt 0.312500 0.691073 +vt 0.312500 0.821932 +vt 0.500000 0.821932 +vt 0.500000 0.691073 +vt 0.312500 0.691073 +vt 0.312500 0.821932 +vt 0.500000 0.821932 +vt 0.500000 0.691073 +vt 0.312500 0.691073 +vt 0.701172 0.821932 +vt 0.701172 0.691073 +vt 0.623047 0.821932 +vt 0.623047 0.691073 +vt 0.623047 0.821932 +vt 0.623047 0.691073 +vt 0.623047 0.821932 +vt 0.623047 0.691073 +vn 0.0067 -0.9235 -0.3836 +vn 0.3836 -0.9235 0.0067 +vn -0.0067 -0.9235 0.3836 +vn -0.3836 -0.9235 -0.0067 +usemtl mcl_ocean_bubble_coral_fan.png +s 1 +f 187/181/3 176/182/3 186/183/3 189/184/3 +f 184/185/4 175/186/4 183/187/4 190/188/4 +f 181/189/5 174/190/5 180/191/5 191/192/5 +f 178/193/6 173/194/6 177/195/6 192/196/6 +f 173/194/6 179/197/6 193/198/6 177/195/6 +f 174/190/5 182/199/5 194/200/5 180/191/5 +f 175/186/4 185/201/4 195/202/4 183/187/4 +f 176/182/3 188/203/3 196/204/3 186/183/3 +l 177 171 +l 180 172 +l 183 171 +l 186 172 +o Cube +v -0.093808 0.196026 0.093233 +v -0.093808 0.390929 0.093233 +v -0.093808 0.196026 -0.093233 +v -0.093808 0.390929 -0.093233 +v 0.093808 0.196026 0.093233 +v 0.093808 0.390929 0.093233 +v 0.093808 0.196026 -0.093233 +v 0.093808 0.390929 -0.093233 +v -0.093808 0.196026 0.000000 +v -0.093808 0.290470 0.093233 +v -0.093808 0.390929 0.000000 +v -0.093808 0.290470 -0.093233 +v -0.000000 0.196026 -0.093233 +v -0.000000 0.390929 -0.093233 +v 0.093808 0.290470 -0.093233 +v 0.093808 0.196026 0.000000 +v 0.093808 0.390929 0.000000 +v 0.093808 0.290470 0.093233 +v -0.000000 0.196026 0.093233 +v -0.000000 0.390929 0.093233 +v -0.000000 0.390929 0.000000 +v -0.000000 0.196026 0.000000 +v -0.000000 0.290470 0.093233 +v 0.093808 0.290470 0.000000 +v -0.000000 0.290470 -0.093233 +v -0.093808 0.290470 0.000000 +v -0.093808 0.196026 0.092775 +v -0.093808 0.290971 0.093233 +v -0.093808 0.390929 -0.092775 +v -0.093808 0.197014 -0.093233 +v -0.092974 0.196026 -0.093233 +v 0.092974 0.390929 -0.093233 +v 0.093808 0.197014 -0.093233 +v 0.093808 0.196026 -0.092775 +v 0.093808 0.390929 0.092775 +v 0.093808 0.197014 0.093233 +v 0.092974 0.196026 0.093233 +v -0.092974 0.390929 0.093233 +v -0.093808 0.196026 -0.092775 +v -0.093808 0.197014 0.093233 +v -0.093808 0.390929 0.092775 +v -0.093808 0.290971 -0.093233 +v 0.092974 0.196026 -0.093233 +v -0.092974 0.390929 -0.093233 +v 0.093808 0.290971 -0.093233 +v 0.093808 0.196026 0.092775 +v 0.093808 0.390929 -0.092775 +v 0.093808 0.290971 0.093233 +v -0.092974 0.196026 0.093233 +v 0.092974 0.390929 0.093233 +v -0.000000 0.390929 0.092775 +v -0.000000 0.390929 -0.092775 +v 0.092974 0.390929 0.000000 +v -0.092974 0.390929 0.000000 +v -0.000000 0.196026 0.092775 +v -0.000000 0.196026 -0.092775 +v -0.092974 0.196026 0.000000 +v 0.092974 0.196026 0.000000 +v -0.092974 0.290470 0.093233 +v 0.092974 0.290470 0.093233 +v -0.000000 0.197014 0.093233 +v -0.000000 0.290971 0.093233 +v 0.093808 0.290470 0.092775 +v 0.093808 0.290470 -0.092775 +v 0.093808 0.197014 0.000000 +v 0.093808 0.290971 0.000000 +v 0.092974 0.290470 -0.093233 +v -0.092974 0.290470 -0.093233 +v -0.000000 0.197014 -0.093233 +v -0.000000 0.290971 -0.093233 +v -0.093808 0.290470 -0.092775 +v -0.093808 0.290470 0.092775 +v -0.093808 0.197014 0.000000 +v -0.093808 0.290971 0.000000 +v -0.093808 0.290971 0.092775 +v -0.093808 0.197014 0.092775 +v -0.093808 0.197014 -0.092775 +v -0.092974 0.290971 -0.093233 +v -0.092974 0.197014 -0.093233 +v 0.092974 0.197014 -0.093233 +v 0.093808 0.290971 -0.092775 +v 0.093808 0.197014 -0.092775 +v 0.093808 0.197014 0.092775 +v 0.092974 0.290971 0.093233 +v 0.092974 0.197014 0.093233 +v -0.092974 0.197014 0.093233 +v 0.092974 0.196026 -0.092775 +v -0.092974 0.196026 -0.092775 +v -0.092974 0.196026 0.092775 +v -0.092974 0.390929 -0.092775 +v 0.092974 0.390929 -0.092775 +v 0.092974 0.390929 0.092775 +v -0.092974 0.390929 0.092775 +v 0.092974 0.196026 0.092775 +v -0.092974 0.290971 0.093233 +v 0.093808 0.290971 0.092775 +v 0.092974 0.290971 -0.093233 +v -0.093808 0.290971 -0.092775 +vt 0.502042 0.373047 +vt 0.564542 0.373047 +vt 0.564542 0.435547 +vt 0.502042 0.435547 +vt 0.502042 0.437500 +vt 0.564542 0.437500 +vt 0.564542 0.500000 +vt 0.502042 0.500000 +vt 0.502042 0.687500 +vt 0.564542 0.687500 +vt 0.564542 0.750000 +vt 0.502042 0.750000 +vt 0.066619 0.765683 +vt 0.129119 0.765683 +vt 0.129119 0.879860 +vt 0.066619 0.879860 +vt 0.436154 0.687500 +vt 0.436520 0.687500 +vt 0.436520 0.750000 +vt 0.436154 0.750000 +vt 0.000020 0.937269 +vt 0.124039 0.937269 +vt 0.124039 0.999769 +vt 0.000020 0.999769 +vt 0.000020 0.937269 +vt 0.124039 0.937269 +vt 0.124039 0.999769 +vt 0.000020 0.999769 +vt 0.000957 0.875000 +vt 0.124977 0.875000 +vt 0.124977 0.937500 +vt 0.000957 0.937500 +vt 0.000020 0.812269 +vt 0.124039 0.812269 +vt 0.124039 0.874769 +vt 0.000020 0.874769 +vt 0.000596 0.374981 +vt 0.124500 0.374981 +vt 0.124500 0.437481 +vt 0.000596 0.437481 +vt 0.000577 0.250031 +vt 0.126692 0.250031 +vt 0.126692 0.376511 +vt 0.000577 0.376511 +vt 0.436154 0.562500 +vt 0.436520 0.562500 +vt 0.436520 0.625000 +vt 0.436154 0.625000 +vt 0.063596 0.765683 +vt 0.064577 0.765683 +vt 0.064577 0.879860 +vt 0.063596 0.879860 +vt 0.065922 0.760824 +vt 0.066902 0.760824 +vt 0.066902 0.823324 +vt 0.065922 0.823324 +vt 0.066496 0.688477 +vt 0.128996 0.688477 +vt 0.128996 0.815430 +vt 0.066496 0.815430 +vt 0.499020 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.750000 +vt 0.499020 0.750000 +vt 0.065922 0.687500 +vt 0.066902 0.687500 +vt 0.066902 0.750000 +vt 0.065922 0.750000 +vt 0.064542 0.687500 +vt 0.127042 0.687500 +vt 0.127042 0.812500 +vt 0.064542 0.812500 +vt 0.499020 0.437500 +vt 0.500000 0.437500 +vt 0.500000 0.500000 +vt 0.499020 0.500000 +vt 0.065426 0.740234 +vt 0.066406 0.740234 +vt 0.066406 0.802734 +vt 0.065426 0.802734 +vt 0.066496 0.689453 +vt 0.128996 0.689453 +vt 0.128996 0.814453 +vt 0.066496 0.814453 +vt 0.499020 0.373047 +vt 0.500000 0.373047 +vt 0.500000 0.435547 +vt 0.499020 0.435547 +vt 0.065922 0.690000 +vt 0.066902 0.690000 +vt 0.066902 0.752500 +vt 0.065922 0.752500 +vt 0.064542 0.690000 +vt 0.127042 0.690000 +vt 0.127042 0.815000 +vt 0.064542 0.815000 +vt 0.068945 0.690000 +vt 0.068945 0.752500 +vt 0.500000 0.308594 +vt 0.502042 0.308594 +vt 0.502042 0.371094 +vt 0.500000 0.371094 +vt 0.564542 0.308594 +vt 0.564542 0.371094 +vt -0.000980 0.690000 +vt 0.061520 0.690000 +vt 0.061520 0.815000 +vt -0.000980 0.815000 +vt 0.436520 0.308594 +vt 0.499020 0.308594 +vt 0.499020 0.371094 +vt 0.436520 0.371094 +vt 0.436520 0.373047 +vt 0.436520 0.435547 +vt 0.061520 0.877500 +vt -0.000980 0.877500 +vt 0.066902 0.815000 +vt 0.065922 0.815000 +vt 0.068449 0.740234 +vt 0.068449 0.802734 +vt 0.502042 0.312500 +vt 0.500000 0.312500 +vt 0.502042 0.689453 +vt 0.564542 0.689453 +vt 0.564542 0.751953 +vt 0.502042 0.751953 +vt 0.000973 0.689453 +vt 0.063473 0.689453 +vt 0.063473 0.814453 +vt 0.000973 0.814453 +vt 0.436520 0.689453 +vt 0.499020 0.689453 +vt 0.499020 0.751953 +vt 0.436520 0.751953 +vt 0.499020 0.312500 +vt 0.436520 0.437500 +vt 0.436520 0.500000 +vt 0.063473 0.876953 +vt 0.000973 0.876953 +vt 0.066406 0.865234 +vt 0.065426 0.865234 +vt 0.068945 0.687500 +vt 0.068945 0.750000 +vt 0.502042 0.562500 +vt 0.500000 0.562500 +vt 0.564542 0.562500 +vt -0.000980 0.687500 +vt 0.061520 0.687500 +vt 0.061520 0.812500 +vt -0.000980 0.812500 +vt 0.499020 0.562500 +vt 0.061520 0.875000 +vt -0.000980 0.875000 +vt 0.066902 0.812500 +vt 0.065922 0.812500 +vt 0.068945 0.760824 +vt 0.068945 0.823324 +vt 0.502042 0.812500 +vt 0.500000 0.812500 +vt 0.564542 0.812500 +vt 0.000973 0.688477 +vt 0.063473 0.688477 +vt 0.063473 0.815430 +vt 0.000973 0.815430 +vt 0.499020 0.812500 +vt 0.436520 0.812500 +vt 0.001096 0.765683 +vt 0.001096 0.879860 +vt 0.063473 0.879883 +vt 0.000973 0.879883 +vt 0.000577 0.250031 +vt 0.000577 0.376511 +vt 0.499769 0.500000 +vt 0.436154 0.500000 +vt 0.499769 0.562500 +vt 0.124500 0.249981 +vt 0.000596 0.312481 +vt 0.124500 0.312481 +vt 0.499769 0.500000 +vt 0.436154 0.500000 +vt 0.436154 0.562500 +vt 0.499769 0.562500 +vt 0.124500 0.374981 +vt 0.124500 0.437481 +vt 0.126692 0.439011 +vt 0.000577 0.439011 +vt 0.000957 0.875000 +vt 0.000957 0.937500 +vt 0.564430 0.500000 +vt 0.501930 0.500000 +vt 0.501930 0.562500 +vt 0.564430 0.562500 +vt 0.564430 0.500000 +vt 0.564430 0.562500 +vt 0.501930 0.562500 +vt 0.501930 0.625000 +vt 0.564542 0.625000 +vt 0.501930 0.500000 +vt 0.501930 0.687500 +vt 0.501930 0.750000 +vt 0.124977 1.000000 +vt 0.000957 1.000000 +vt 0.000957 1.000000 +vt 0.000596 0.374981 +vt 0.000596 0.437481 +vt 0.000577 0.439011 +vt 0.128996 0.879883 +vt 0.066496 0.879883 +vt 0.068945 0.812500 +vt 0.127042 0.875000 +vt 0.064542 0.875000 +vt 0.068449 0.865234 +vt 0.128996 0.876953 +vt 0.066496 0.876953 +vt 0.068945 0.815000 +vt 0.127042 0.877500 +vt 0.064542 0.877500 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +usemtl Material +s off +f 294/205/7 225/206/7 200/207/7 238/208/7 +f 293/209/8 228/210/8 204/211/8 241/212/8 +f 292/213/9 231/214/9 202/215/9 244/216/9 +f 291/217/10 234/218/10 198/219/10 224/220/10 +f 290/221/11 242/222/11 201/223/11 233/224/11 +f 289/225/12 237/226/12 198/227/12 234/228/12 +f 288/229/12 247/230/12 216/231/12 246/232/12 +f 287/233/12 248/234/12 217/235/12 249/236/12 +f 286/237/12 225/238/12 207/239/12 250/240/12 +f 285/241/11 251/242/11 215/243/11 245/244/11 +f 284/245/11 252/246/11 218/247/11 253/248/11 +f 283/249/11 230/250/11 212/251/11 254/252/11 +f 282/253/10 255/254/10 206/255/10 236/256/10 +f 281/257/10 256/258/10 219/259/10 257/260/10 +f 280/261/10 246/262/10 216/263/10 258/264/10 +f 279/265/9 259/266/9 214/267/9 232/268/9 +f 278/269/9 260/270/9 220/271/9 261/272/9 +f 277/273/9 243/274/9 213/275/9 262/276/9 +f 276/277/8 263/278/8 211/279/8 229/280/8 +f 275/281/8 264/282/8 221/283/8 265/284/8 +f 274/285/8 240/286/8 210/287/8 266/288/8 +f 273/289/7 267/290/7 208/291/7 226/292/7 +f 272/293/7 268/294/7 222/295/7 269/296/7 +f 271/297/7 237/298/7 207/299/7 270/300/7 +f 268/294/7 271/301/7 270/302/7 222/295/7 +f 206/303/7 224/304/7 271/305/7 268/306/7 +f 224/304/7 198/307/7 237/308/7 271/305/7 +f 223/309/7 272/310/7 269/311/7 205/312/7 +f 197/313/7 236/314/7 272/315/7 223/316/7 +f 236/314/7 206/303/7 268/306/7 272/315/7 +f 235/317/7 273/289/7 226/292/7 199/318/7 +f 205/312/7 269/311/7 273/319/7 235/320/7 +f 269/296/7 222/295/7 267/321/7 273/322/7 +f 264/282/8 274/323/8 266/324/8 221/283/8 +f 208/291/8 238/208/8 274/325/8 264/326/8 +f 238/327/8 200/328/8 240/329/8 274/330/8 +f 227/331/8 275/332/8 265/333/8 209/334/8 +f 199/335/8 226/336/8 275/337/8 227/338/8 +f 226/292/8 208/291/8 264/326/8 275/339/8 +f 239/340/8 276/277/8 229/280/8 203/341/8 +f 209/334/8 265/333/8 276/342/8 239/343/8 +f 265/284/8 221/283/8 263/344/8 276/345/8 +f 260/270/9 277/346/9 262/347/9 220/271/9 +f 211/279/9 241/212/9 277/348/9 260/349/9 +f 241/212/9 204/211/9 243/350/9 277/348/9 +f 230/351/9 278/352/9 261/353/9 212/354/9 +f 203/341/9 229/280/9 278/355/9 230/250/9 +f 229/280/9 211/279/9 260/349/9 278/355/9 +f 242/222/9 279/265/9 232/268/9 201/223/9 +f 212/354/9 261/353/9 279/356/9 242/357/9 +f 261/272/9 220/271/9 259/358/9 279/359/9 +f 256/258/10 280/360/10 258/361/10 219/259/10 +f 214/267/10 244/216/10 280/362/10 256/363/10 +f 244/216/10 202/215/10 246/364/10 280/362/10 +f 233/365/10 281/366/10 257/367/10 215/368/10 +f 201/223/10 232/268/10 281/369/10 233/370/10 +f 232/268/10 214/267/10 256/363/10 281/369/10 +f 245/371/10 282/253/10 236/256/10 197/372/10 +f 215/368/10 257/367/10 282/373/10 245/374/10 +f 257/260/10 219/259/10 255/254/10 282/253/10 +f 252/246/11 283/375/11 254/376/11 218/247/11 +f 209/377/11 239/378/11 283/249/11 252/379/11 +f 239/378/11 203/341/11 230/250/11 283/249/11 +f 235/380/11 284/245/11 253/381/11 205/382/11 +f 199/383/11 227/384/11 284/385/11 235/386/11 +f 227/384/11 209/377/11 252/379/11 284/385/11 +f 223/387/11 285/241/11 245/244/11 197/388/11 +f 205/382/11 253/381/11 285/241/11 223/387/11 +f 253/248/11 218/247/11 251/389/11 285/390/11 +f 248/234/12 286/391/12 250/392/12 217/235/12 +f 210/393/12 240/394/12 286/395/12 248/396/12 +f 240/394/12 200/397/12 225/398/12 286/395/12 +f 243/350/12 287/399/12 249/400/12 213/401/12 +f 204/211/12 228/402/12 287/399/12 243/350/12 +f 228/402/12 210/393/12 248/396/12 287/399/12 +f 231/214/12 288/403/12 246/404/12 202/215/12 +f 213/401/12 249/400/12 288/403/12 231/214/12 +f 249/236/12 217/235/12 247/405/12 288/406/12 +f 247/230/12 289/225/12 234/228/12 216/231/12 +f 217/235/12 250/392/12 289/407/12 247/405/12 +f 250/240/12 207/239/12 237/226/12 289/225/12 +f 251/242/11 290/408/11 233/409/11 215/243/11 +f 218/247/11 254/376/11 290/410/11 251/389/11 +f 254/252/11 212/251/11 242/222/11 290/221/11 +f 255/254/10 291/217/10 224/220/10 206/255/10 +f 219/259/10 258/361/10 291/217/10 255/254/10 +f 258/264/10 216/263/10 234/411/10 291/412/10 +f 259/266/9 292/213/9 244/216/9 214/267/9 +f 220/271/9 262/347/9 292/413/9 259/358/9 +f 262/276/9 213/275/9 231/414/9 292/415/9 +f 263/278/8 293/209/8 241/212/8 211/279/8 +f 221/283/8 266/324/8 293/416/8 263/344/8 +f 266/288/8 210/287/8 228/417/8 293/418/8 +f 267/290/7 294/205/7 238/208/7 208/291/7 +f 222/295/7 270/302/7 294/419/7 267/321/7 +f 270/300/7 207/299/7 225/420/7 294/421/7 diff --git a/mods/ITEMS/mcl_mangrove/schematics/mcl_mangrove_tree_1.mts b/mods/ITEMS/mcl_mangrove/schematics/mcl_mangrove_tree_1.mts new file mode 100644 index 0000000000000000000000000000000000000000..dd4ebfad3071d7547d5019ce7ad5c2e85b397e1a GIT binary patch literal 414 zcmeYb3HD`RVc=q5XW*)b00veD=ETe*2HxD{ocQGYqExH0%)C?vX%IIzF)zI+zbw@X z#>h!cEK4nBkise%Us9BcOJjUdett=D#hkaHr}+*U@T|V<`)H5+v+FOlUn(!uN|u@M z%v0dbk;2UvEyEd>7n*Ko;<^9c((C$-{q8# zoc?X;?#U{sM zoQC9;ClR&P$DgNtkh>*0%lgR?_p{OOcRzcwyZA}X{rf+5vYeMT|0nYC=UV-FS3Q*1 z{WN4cuzs3a)K70y-$wQcmQNJc`GqR1R^@O{3UTZ^^ikrBz=0~IJJYOA1oCTHb6zYw z!g1VjCr9Sij*PuI2cPfrY*jI|_K-=LE|Gnkd6Gg^P;`qrpVb?gAGW3)Qq}h*vg(#K T$ogj6UzjPbzK4OoGR_qMsJ6Ve literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_mangrove/schematics/mcl_mangrove_tree_2.mts b/mods/ITEMS/mcl_mangrove/schematics/mcl_mangrove_tree_2.mts new file mode 100644 index 0000000000000000000000000000000000000000..8497a695190e27f0c5d7516c1bdf3d7d6847334b GIT binary patch literal 297 zcmeYb3HD`RVPFTrdI(@(V_;6qEMnlzP0oo=&M!)}D$C4EWsnAOa})E@i}K4-tzeA! zqWt`lVjPk=sflH&#SBu|b(R#RrZR|vaPm)FzxC?-gMlUIf-eP}`OBGAzxpNs2A+ih literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_mangrove/schematics/mcl_mangrove_tree_3.mts b/mods/ITEMS/mcl_mangrove/schematics/mcl_mangrove_tree_3.mts new file mode 100644 index 0000000000000000000000000000000000000000..27f918beaa7e72d9f91122023ad10843aaf20f23 GIT binary patch literal 505 zcmeYb3HD`RVc-Hn&U!dtU}IoT%q(Ky%}vgUPtGq&wJOWZOJ$G-adQ*%(u?xTQmtT& z_@ey$l42Z^IjMa=A_0OGDxAQfSX-Xl$u&G=WW=* zO)UyM*$4Jr{`dLcui%V@Qx?68`<67LFlpHq-VWx8jNc6RO%7J#<<>p*Ofd7llI{<$ z)6JVYr?tME&1c;|N6hu2Nb2+XitqmV_&T3+xjOr;{#3t7pC9gy`~6_{J)L*&zI%DE zlNMnwUD355{lx6|{ND2OYiC}+SUPv@wBBWQ5j880rQWDpC0r)^h&lJ^yK_HpGzo9L z*ZD|u3zpZ_8uKtlPz2;EPB4J6n9?F|)%}5);$Y8!DsP)Ht0Rk8r#e5&0bVx>8mO8XmZJQ|+2r)(62g vvwm@uwf$XHs&GqX^2`fr#oawOCNwWCT*qjgdMzOJjPK{jy8im|Glzlz!zJn< literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_mangrove/textures/mcl_mangrove_door_bottom.png b/mods/ITEMS/mcl_mangrove/textures/mcl_mangrove_door_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..fc6097a086ec37d7ca0c98f9568245adf002e77e GIT binary patch literal 6338 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 literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_mangrove/textures/mcl_mangrove_fence.png b/mods/ITEMS/mcl_mangrove/textures/mcl_mangrove_fence.png new file mode 100644 index 0000000000000000000000000000000000000000..23390877d4147586120a552c0ec2d3d065e04570 GIT binary patch literal 6682 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 L+vSAQ`lNpXJKmhW literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_mangrove/textures/mcl_mangrove_log_top.png b/mods/ITEMS/mcl_mangrove/textures/mcl_mangrove_log_top.png new file mode 100644 index 0000000000000000000000000000000000000000..4b47c97a024894d713bc742b88ee34eb70fe5dab GIT binary patch literal 6472 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 literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_mangrove/textures/mcl_mangrove_planks.png b/mods/ITEMS/mcl_mangrove/textures/mcl_mangrove_planks.png new file mode 100644 index 0000000000000000000000000000000000000000..a5abb7d336a307b1ee43186fc6e129fadc5f7f9a GIT binary patch literal 6458 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 RAk)JX-zUI(yXWkbe*=TrjjjLy literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_mangrove/textures/mcl_mangrove_propagule.png b/mods/ITEMS/mcl_mangrove/textures/mcl_mangrove_propagule.png new file mode 100644 index 0000000000000000000000000000000000000000..c6786d207732fa1fce61e77e38d5fa83e17cb81b GIT binary patch literal 5756 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 Pumn*^L~!}k#HIfRM7EJ6 literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_mangrove/textures/mcl_mangrove_propagule_hanging.png b/mods/ITEMS/mcl_mangrove/textures/mcl_mangrove_propagule_hanging.png new file mode 100644 index 0000000000000000000000000000000000000000..e3837022d9d66cd677a5bc3c912f49b484d4d467 GIT binary patch literal 5965 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 literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_mangrove/textures/mcl_mangrove_roots_side.png b/mods/ITEMS/mcl_mangrove/textures/mcl_mangrove_roots_side.png new file mode 100644 index 0000000000000000000000000000000000000000..294ed0c6ada28648f4b344d824284da07117510f GIT binary patch literal 396 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 NOlNnelMX?#{{omiVCDb- literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_mangrove/textures/mcl_stripped_mangrove_log_side.png b/mods/ITEMS/mcl_mangrove/textures/mcl_stripped_mangrove_log_side.png new file mode 100644 index 0000000000000000000000000000000000000000..aee0ffdf471546a6c82e9fcd84bfb01acff9a5d7 GIT binary patch literal 6575 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 literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_mangrove/textures/mcl_stripped_mangrove_log_top.png b/mods/ITEMS/mcl_mangrove/textures/mcl_stripped_mangrove_log_top.png new file mode 100644 index 0000000000000000000000000000000000000000..def02fba515462547dfb619530817bd79a896ce3 GIT binary patch literal 6139 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 Kbttk6i2f&`4O(Xa literal 0 HcmV?d00001 diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua index 3602818ca..2b3055ad7 100644 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ b/mods/MAPGEN/mcl_biomes/init.lua @@ -11,6 +11,7 @@ local mod_mcl_core = minetest.get_modpath("mcl_core") local mod_mcl_mushrooms = minetest.get_modpath("mcl_mushrooms") local mod_mcl_crimson = minetest.get_modpath("mcl_crimson") local mod_mcl_blackstone = minetest.get_modpath("mcl_blackstone") +local mod_mcl_mangrove = minetest.get_modpath("mcl_mangrove") -- Jungle bush schematic. In PC/Java Edition it's Jungle Wood + Oak Leaves local jungle_bush_schematic = mod_mcl_core.."/schematics/mcl_core_jungle_bush_oak_leaves.mts" @@ -3024,6 +3025,43 @@ local function register_decorations() rotation = "random", }) + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"mcl_mud:mud"}, + sidelen = 80, + fill_ratio = 0.045, + biomes = {"MangroveSwamp","MangroveSwamp_shore"}, + y_min = 1, + y_max = mcl_vars.mg_overworld_max, + schematic = mod_mcl_mangrove.."/schematics/mcl_mangrove_tree_1.mts", + flags = "place_center_x, place_center_z", + rotation = "random", + }) + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"mcl_mud:mud"}, + sidelen = 80, + fill_ratio = 0.045, + biomes = {"MangroveSwamp","MangroveSwamp_shore"}, + y_min = 1, + y_max = mcl_vars.mg_overworld_max, + schematic = mod_mcl_mangrove.."/schematics/mcl_mangrove_tree_2.mts", + flags = "place_center_x, place_center_z", + rotation = "random", + }) + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"mcl_mud:mud"}, + sidelen = 80, + fill_ratio = 0.045, + biomes = {"MangroveSwamp","MangroveSwamp_shore"}, + y_min = 1, + y_max = mcl_vars.mg_overworld_max, + schematic = mod_mcl_mangrove.."/schematics/mcl_mangrove_tree_3.mts", + flags = "place_center_x, place_center_z", + rotation = "random", + }) + -- Jungle tree -- Huge jungle tree (2 variants) diff --git a/mods/MAPGEN/mcl_biomes/mod.conf b/mods/MAPGEN/mcl_biomes/mod.conf index b02d78e05..6cce58bf4 100644 --- a/mods/MAPGEN/mcl_biomes/mod.conf +++ b/mods/MAPGEN/mcl_biomes/mod.conf @@ -1,4 +1,4 @@ name = mcl_biomes author = maikerumine description = Adds the various biomes and biome-related things for non-v6 map generators. -depends = mcl_init, mcl_mapgen_core, mcl_core, mcl_worlds, mcl_farming, mcl_flowers, mcl_end, mcl_ocean, mcl_crimson, mcl_blackstone +depends = mcl_init, mcl_mapgen_core, mcl_core, mcl_worlds, mcl_farming, mcl_flowers, mcl_end, mcl_ocean, mcl_crimson, mcl_blackstone, mcl_mangrove From f003aefe197cb8ac1a620c73dbcc0775f8310f44 Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 28 Jul 2022 19:27:34 +0200 Subject: [PATCH 03/17] allow coral reefs in MangroveSwamps --- mods/MAPGEN/mcl_biomes/init.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua index 2b3055ad7..4ad2e523d 100644 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ b/mods/MAPGEN/mcl_biomes/init.lua @@ -2585,7 +2585,7 @@ local function register_coral_decos(ck) } minetest.register_decoration({ deco_type = "schematic", - place_on = {"group:sand","mcl_core:gravel"}, + place_on = {"group:sand","mcl_core:gravel","mcl_mud:mud"}, sidelen = 80, noise_params = noise, biomes = warm_oceans, @@ -2597,7 +2597,7 @@ local function register_coral_decos(ck) }) minetest.register_decoration({ deco_type = "schematic", - place_on = {"group:sand","mcl_core:gravel"}, + place_on = {"group:sand","mcl_core:gravel","mcl_mud:mud"}, noise_params = noise, sidelen = 80, biomes = warm_oceans, @@ -2643,7 +2643,7 @@ local function register_decorations() end minetest.register_decoration({ deco_type = "simple", - place_on = {"group:sand","mcl_core:gravel"}, + place_on = {"group:sand","mcl_core:gravel","mcl_mud:mud"}, sidelen = 16, noise_params = { offset = -0.0085, From e8fc56ab3345439064ba059463c2f862d95c21a5 Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 28 Jul 2022 21:11:21 +0200 Subject: [PATCH 04/17] 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 From 3bf45ec4e9b5006c59d0b21bdc28469b448c1803 Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 28 Jul 2022 23:05:24 +0200 Subject: [PATCH 05/17] Spawn mangroves in shallow water, fix schematics --- .../schematics/mcl_mangrove_tree_1.mts | Bin 414 -> 456 bytes .../schematics/mcl_mangrove_tree_2.mts | Bin 297 -> 329 bytes .../schematics/mcl_mangrove_tree_3.mts | Bin 505 -> 553 bytes mods/MAPGEN/mcl_biomes/init.lua | 31 +++++++++--------- 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/mods/ITEMS/mcl_mangrove/schematics/mcl_mangrove_tree_1.mts b/mods/ITEMS/mcl_mangrove/schematics/mcl_mangrove_tree_1.mts index dd4ebfad3071d7547d5019ce7ad5c2e85b397e1a..68e66e425b21e8e9b5fd4e581530e7619cb73110 100644 GIT binary patch delta 336 zcmV-W0k8g^1IPoAfq%7D+pdE!42uhs&NDxpUqAGcG;K<`j2UV2+{SS;1S7f$e4)Jw zP)JwbXRQ4`$&x;+MkOCL+BaF&{qkCygiMy;lE`FacA-n-6&fhH@8b5Y+83(DEKAbm z^zyy>hQa)<=krsr)wwUoJEGYo`({}@&VEaj9ih|uzHQ=XGk4*Ub9%I?4kz%d9@gJ+vE?(?U6|gGIfEj7P3DQ zqYEjA{h| i`qx8ii}57E6w%|;Hinzu89tTWu5GFZ>=^%XGFJ4;Zmnbh delta 294 zcmV+>0one@1D*qrfq(5)%MQXY46D;k;=CW`*Xb+iBcUo|9FXQo5ZuIZv(Y(M0H<*^ zw*m~`?>S1>*vICsg1yt&)2Giik2;2H&wJUzrMb~v^+L)CPljhlgB#5_gUNlp%G;zb zgo|E$;(7P{yXulLzjc4@6wvLrdg(dNB_nUH19CR+JRHBEsBkU8Wau1-}T zt0f3WVpKtn!tof)5WspO+?G1XQ4cCR3DI%H2**LW2x+y5XuWK~=e|jWBr!Wk9AuXm sYuf{oAbL_;gdZmkI_w_?(ye#h!<4(8;(%m9XiL<9X$5E$ zhr9cFZPxFQ27FZ8n#!)VO0hiR}$eM$#w|w+n=E0zb-zx^S=fG!X166#^=~}zK>mEOOe?})7k6i^XfAjtWL1raoa$xXi zNxh#X_CTdY%tV@+O^~Po+HEP+6H7GlaBgcTG9tx9yoGg!6FphXFh$Iyy1{IawRWTZ zsKQZsl4G)JVSi_;NG~{R6UotVR5h7A{|ne>C1v}8!J{W&_vsm1Nf}?zG0JL*h}{h6 z(W+h)>N&g4;|sX0p~xgICdrf!W}PMPvAURH5l-ck9>1;pc+g4IWK$2snEijYj@d>v pIV@UTwUPtuOdhWqqfK(k#5OtGNW^+MLbM{Ez$%}|Hw3nNY6zjQ$)NxM delta 346 zcmV-g0j2(_1o;DysDHt-gdhxSz`oP|^Zxo%XrYv%?q2p{m~mpJv<-*@kpcEGzLQfT z4GS&G<`HS%A}#nz%Y(9smWAn?4m*#W7Ddq%W#^wE?)^+nL(W9io9!=^PLlKCyI%X? zo8Bz$?)OSdt{W5wb*PGvEDYMFP|I!m_3VllI4fZo3fJ2D^iV6PV)M2cjo5i!8t*(TODYVZ-P sn)(QKhW)B_Alf98nb0P4i;UQigQan<0Xt>ZP-V Date: Fri, 29 Jul 2022 02:48:00 +0200 Subject: [PATCH 06/17] Add lilypads and dead bushes --- mods/ENTITIES/mcl_mobs/spawning.lua | 5 ++++ mods/MAPGEN/mcl_biomes/init.lua | 42 ++++++++++++++++++++--------- 2 files changed, 35 insertions(+), 12 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/spawning.lua b/mods/ENTITIES/mcl_mobs/spawning.lua index bc1b73716..58b8946f8 100644 --- a/mods/ENTITIES/mcl_mobs/spawning.lua +++ b/mods/ENTITIES/mcl_mobs/spawning.lua @@ -71,6 +71,7 @@ local list_of_all_biomes = { "JungleM_underground", "ExtremeHillsM_underground", "JungleEdgeM_underground", + "MangroveSwamp_underground", -- ocean: @@ -134,6 +135,8 @@ local list_of_all_biomes = { "BirchForestM_deep_ocean", "Taiga_deep_ocean", "JungleM_ocean", + "MangroveSwamp_ocean", + "MangroveSwamp_deep_ocean", -- water or beach? @@ -157,6 +160,7 @@ local list_of_all_biomes = { "MushroomIslandShore", "JungleM_shore", "Jungle_shore", + "MangroveSwamp_shore", -- dimension biome: @@ -202,6 +206,7 @@ local list_of_all_biomes = { "MesaBryce", "JungleEdge", "SavannaM", + "MangroveSwamp", } -- count how many mobs are in an area diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua index 2886fd9c3..43cc367de 100644 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ b/mods/MAPGEN/mcl_biomes/init.lua @@ -128,6 +128,7 @@ local function register_biomes() "MesaBryce", "MesaPlateauF", "MesaPlateauFM", + "MangroveSwamp", } -- Ice Plains Spikes (rare) @@ -1350,15 +1351,15 @@ local function register_biomes() depth_top = 1, node_filler = "mcl_mud:mud", depth_filler = 3, - node_riverbed = "mcl_mud:mud", + node_riverbed = "mcl_core:dirt", depth_riverbed = 2, y_min = 1, -- Note: Limited in height! - y_max = 23, + y_max = 27, humidity_point = 95, - heat_point = 54, + heat_point = 94, _mcl_biome_type = "hot", - _mcl_palette_index = 28, + _mcl_palette_index = 27, }) minetest.register_biome({ name = "MangroveSwamp_shore", @@ -1366,20 +1367,20 @@ local function register_biomes() depth_top = 1, node_filler = "mcl_mud:mud", depth_filler = 3, - node_riverbed = "mcl_mud:mud", + node_riverbed = "mcl_core:dirt", depth_riverbed = 2, y_min = -5, y_max = 0, humidity_point = 95, - heat_point = 54, + heat_point = 94, _mcl_biome_type = "hot", - _mcl_palette_index = 28, + _mcl_palette_index = 27, }) minetest.register_biome({ name = "MangroveSwamp_ocean", - node_top = "mcl_mud:mud", + node_top = "mcl_core:dirt", depth_top = 1, - node_filler = "mcl_mud:mud", + node_filler = "mcl_core:dirt", depth_filler = 3, node_riverbed = "mcl_core:gravel", depth_riverbed = 2, @@ -1387,9 +1388,9 @@ local function register_biomes() y_max = -6, vertical_blend = 1, humidity_point = 95, - heat_point = 54, + heat_point = 94, _mcl_biome_type = "hot", - _mcl_palette_index = 28, + _mcl_palette_index = 27, }) -- Swampland minetest.register_biome({ @@ -3091,7 +3092,6 @@ local function register_decorations() 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"}, @@ -3102,6 +3102,24 @@ local function register_decorations() decoration = "mcl_mangrove:mangrove_mud_roots", flags = "place_center_x, place_center_z, force_placement", }) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_mud:mud"}, + sidelen = 80, + fill_ratio = 0.008, + biomes = {"MangroveSwamp","MangroveSwamp_shore"}, + decoration = "mcl_core:deadbush", + flags = "place_center_x, place_center_z", + }) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"mcl_core:water_source"}, + sidelen = 80, + fill_ratio = 0.035, + biomes = {"MangroveSwamp","MangroveSwamp_shore"}, + decoration = "mcl_flowers:waterlily", + flags = "place_center_x, place_center_z, liquid_surface", + }) -- Jungle tree From 77c878f6093fdef7bf001619766dd73db77f1f4c Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 29 Jul 2022 12:48:37 +0200 Subject: [PATCH 07/17] make waterlogged roots work with river water --- mods/ITEMS/mcl_mangrove/init.lua | 27 +++++++++++++++++++++------ mods/MAPGEN/mcl_biomes/init.lua | 19 +++++++++++-------- 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/mods/ITEMS/mcl_mangrove/init.lua b/mods/ITEMS/mcl_mangrove/init.lua index 697abef64..b4ba10142 100644 --- a/mods/ITEMS/mcl_mangrove/init.lua +++ b/mods/ITEMS/mcl_mangrove/init.lua @@ -583,7 +583,7 @@ end local water_tex = "default_water_source_animated.png^[verticalframe:16:0" -minetest.register_node("mcl_mangrove:water_logged_roots", { +local wlroots = { description = ("water_logged_mangrove_roots"), _doc_items_entry_name = S("water_logged_roots"), _doc_items_longdesc = @@ -618,7 +618,16 @@ minetest.register_node("mcl_mangrove:water_logged_roots", { minetest.set_node(pos, {name="mcl_core:water_source"}) end end, -}) +} +minetest.register_node("mcl_mangrove:water_logged_roots", wlroots) +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_top.png", + "("..water_tex..")^mcl_mangrove_roots_side.png", "("..water_tex..")^mcl_mangrove_roots_side.png", + "("..water_tex..")^mcl_mangrove_roots_side.png", "("..water_tex..")^mcl_mangrove_roots_side.png" +} +minetest.register_node("mcl_mangrove:river_water_logged_roots",rwlroots) ------------------------ if minetest.get_modpath("mcl_mud") then @@ -690,14 +699,20 @@ local adjacents = { minetest.register_abm({ label = "Waterlog mangrove roots", nodenames = {"mcl_mangrove:mangrove_roots"}, - neighbors = {"mcl_core:water_source"}, + neighbors = {"group:water"}, 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 + 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 diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua index 43cc367de..d0c6f753e 100644 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ b/mods/MAPGEN/mcl_biomes/init.lua @@ -3082,7 +3082,7 @@ local function register_decorations() minetest.register_decoration({ deco_type = "simple", place_on = {"mcl_mangrove:mangrove_roots"}, - spawn_by = {"mcl_core:water_source"}, + spawn_by = {"group:water"}, num_spawn_by = 2, sidelen = 80, fill_ratio = 10, @@ -4886,16 +4886,19 @@ if mg_name ~= "singlenode" then 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"}) + local nn=minetest.find_nodes_in_area(vector.offset(pos,-8,-1,-8),vector.offset(pos,8,0,8),{"mcl_mangrove:mangrove_roots"}) for _,v in pairs(nn) do local l = pr:next(2,16) - 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,-l,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 + local n = minetest.get_node(vector.offset(v,0,-1,0)).name + if minetest.get_item_group(n,"water") > 0 then + local wl = "mcl_mangrove:water_logged_roots" + if n:find("river") then + wl = "mcl_mangrove:river_water_logged_roots" + end + minetest.bulk_set_node(minetest.find_nodes_in_area(vector.offset(v,0,0,0),vector.offset(v,0,-l,0),{"group:water"}),{name=wl}) + elseif n == "mcl_mud:mud" then minetest.bulk_set_node(minetest.find_nodes_in_area(vector.offset(v,0,0,0),vector.offset(v,0,-l,0),{"mcl_mud:mud"}),{name="mcl_mangrove:mangrove_mud_roots"}) - end - if minetest.get_node(vector.offset(v,0,-1,0)).name == "air" then + elseif n == "air" then minetest.bulk_set_node(minetest.find_nodes_in_area(vector.offset(v,0,0,0),vector.offset(v,0,-l,0),{"air"}),{name="mcl_mangrove:mangrove_roots"}) end end From 4491e962d518bc159d4559941dbaf9b2b0ea4bea Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 29 Jul 2022 13:35:09 +0200 Subject: [PATCH 08/17] grand mcl_mangrove cleanup --- mods/ITEMS/mcl_mangrove/init.lua | 1101 +++++++++++++----------------- mods/ITEMS/mcl_mangrove/mod.conf | 2 +- 2 files changed, 489 insertions(+), 614 deletions(-) diff --git a/mods/ITEMS/mcl_mangrove/init.lua b/mods/ITEMS/mcl_mangrove/init.lua index b4ba10142..105e3f127 100644 --- a/mods/ITEMS/mcl_mangrove/init.lua +++ b/mods/ITEMS/mcl_mangrove/init.lua @@ -1,162 +1,186 @@ local S = minetest.get_translator("mcl_mangrove") -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, { - description = description_trunk, - _doc_items_longdesc = longdesc, - _doc_items_hidden = false, - tiles = {tile_inner, tile_inner, tile_bark}, - paramtype2 = "facedir", - on_place = mcl_util.rotate_axis, - stack_max = 64, - 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 = on_rotate, - _mcl_blast_resistance = 2, - _mcl_hardness = 2, - }) - - minetest.register_craft({ - output = "mcl_mangrove:"..subname.."_bark 3", - recipe = { - { "mcl_mangrove:"..subname, "mcl_mangrove:"..subname }, - { "mcl_mangrove:"..subname, "mcl_mangrove:"..subname }, - } - }) -end - -local register_wooden_planks = function(subname, description, tiles) -minetest.register_node("mcl_mangrove:"..subname, { - description = description, - _doc_items_longdesc = doc.sub.items.temp.build, - _doc_items_hidden = false, - tiles = tiles, - stack_max = 64, - 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, - }) -end - -local register_leaves = function(subname, description, longdesc, tiles, sapling, drop_apples, sapling_chances, leafdecay_distance) - local drop - if leafdecay_distance == nil then - leafdecay_distance = 4 - end +local function get_drops(fortune_level) local apple_chances = {200, 180, 160, 120, 40} local stick_chances = {50, 45, 30, 35, 10} - - local function get_drops(fortune_level) - local drop = { - max_items = 1, - items = { - { - items = {sapling}, - 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] - }, - } - } - if drop_apples then - table.insert(drop.items, { + local sapling_chances = {20, 16, 12, 10} + return { + max_items = 1, + items = { + { + items = {sapling}, + 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 - return drop - end -minetest.register_node("mcl_mangrove:"..subname, { - description = description, - _doc_items_longdesc = longdesc, - _doc_items_hidden = false, - drawtype = "allfaces_optional", - waving = 2, - place_param2 = 1, -- Prevent leafdecay for placed nodes - tiles = tiles, - paramtype = "light", - stack_max = 64, - groups = {handy=1,shearsy=1,swordy=1, leafdecay=leafdecay_distance, flammable=2, leaves=1, deco_block=1, dig_by_piston=1, fire_encouragement=30, fire_flammability=60}, - _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) }, - }) + } + } + } end -local function register_sapling(subname, description, longdesc, tt_help, texture, selbox) - minetest.register_node("mcl_mangrove:"..subname, { - description = description, - _tt_help = tt_help, - _doc_items_longdesc = longdesc, - _doc_items_hidden = false, - drawtype = "plantlike", - waving = 1, - visual_scale = 1.0, - tiles = {texture}, - inventory_image = texture, - wield_image = texture, - paramtype = "light", - sunlight_propagates = true, - walkable = false, - selection_box = { - type = "fixed", - fixed = selbox - }, - stack_max = 64, - 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, - on_place = mcl_util.generate_on_place_plant_function(function(pos, node) +minetest.register_node("mcl_mangrove:mangrove_tree", { + description = S("Mangrove Wood"), + _doc_items_longdesc = S("The trunk of an 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, + 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, +}) +minetest.register_node("mcl_mangrove:mangrove_tree_bark", { + description = S("Mangrove Bark"), + _doc_items_longdesc = S("The bark of an 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, +}) + +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, +}) + +minetest.register_node("mcl_mangrove:mangroveleaves", { + 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}, + _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: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 = function(itemstack, user, pointed_thing) + -- Use pointed node's on_rightclick function first, if present + local node = minetest.get_node(pointed_thing.under) + if user and not user:get_player_control().sneak then + if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then + return minetest.registered_nodes[node.name].on_rightclick (pointed_thing.under, node, user, itemstack) or itemstack + end + end + + -- Place on dirt + if pointed_thing.under and node.name == "mcl_core:dirt" then + local protname = user:get_player_name() + if minetest.is_protected(pointed_thing.under, protname) then + minetest.record_protection_violation(pointed_thing.under, protname) + return itemstack + end + minetest.set_node(pointed_thing.under, { name = "mcl_mangrove:propagule_dirt", param2 = node.param2 }) + minetest.sound_play(mcl_sounds.node_sound_leaves_defaults{pos=pointed_thing.under, gain=0.5, max_hear_range=16}, true) + if not minetest.is_creative_enabled(user:get_player_name()) then + itemstack:take_item(1) -- 1 use + return itemstack + end + end + +-- Place on dirt _with_grass + if pointed_thing.under and node.name == "mcl_core:dirt_with_grass" then + local protname = user:get_player_name() + if minetest.is_protected(pointed_thing.under, protname) then + minetest.record_protection_violation(pointed_thing.under, protname) + return itemstack + end + minetest.set_node(pointed_thing.under, { name = "mcl_mangrove:propagule_dirt_with_grass", param2 = node.param2 }) + minetest.sound_play(mcl_sounds.node_sound_leaves_defaults{pos=pointed_thing.under, gain=0.5, max_hear_range=16}, true) + if not minetest.is_creative_enabled(user:get_player_name()) then + itemstack:take_item(1) -- 1 use + return itemstack + end + end + + if pointed_thing.under and node.name == "mcl_mud:mud" then + local protname = user:get_player_name() + if minetest.is_protected(pointed_thing.under, protname) then + minetest.record_protection_violation(pointed_thing.under, protname) + return itemstack + end + minetest.set_node(pointed_thing.under, { name = "mcl_mangrove:propagule_mud", param2 = node.param2 }) + minetest.sound_play(mcl_sounds.node_sound_leaves_defaults{pos=pointed_thing.under, gain=0.5, max_hear_range=16}, true) + if not minetest.is_creative_enabled(user:get_player_name()) then + itemstack:take_item(1) -- 1 use + return itemstack + end + end + return mcl_util.generate_on_place_plant_function(function(pos, node) local node_under = minetest.get_node_or_nil({x=pos.x,y=pos.y-1,z=pos.z}) if not node_under then return false end local nn = node_under.name return ((minetest.get_item_group(nn, "grass_block") == 1) or nn=="mcl_core:podzol" or nn=="mcl_core:podzol_snow" or nn=="mcl_core:dirt") - end), - node_placement_prediction = "", - _mcl_blast_resistance = 0, - _mcl_hardness = 0, - }) -end + end) + end +}) - ------------------------------------------- - ----plank,tree,leaves and sampling-- - -register_tree_trunk("mangrove_tree", S("Mangrove Wood"), S("Mangrove Bark"), S("The trunk of an Mangrove tree."), "mcl_mangrove_log_top.png", "mcl_mangrove_log.png") -register_wooden_planks("mangrove_wood", S("Mangrove Wood Planks"), {"mcl_mangrove_planks.png"}) -register_sapling("propagule", S("mangrove_propagule"), - S("When placed on soil (such as dirt) and exposed to light, an propagule will grow into an mangrove after some time."), - S("Needs soil and light to grow"), - "mcl_mangrove_propagule_item.png", {-5/16, -0.5, -5/16, 5/16, 0.5, 5/16}) -register_leaves("mangroveleaves", S("Mangrove Leaves"), S("mangrove leaves are grown from mangrove trees."), {"mcl_mangrove_leaves.png"}, "", true, {20, 16, 12, 10}) - - ---other--- - ---stripped mangrove wood-- minetest.register_node("mcl_mangrove:mangrove_stripped_trunk", { description = "The stripped wood of an Mangove tree", _doc_items_longdesc = "The stripped wood of an Mangove tree", @@ -164,7 +188,7 @@ minetest.register_node("mcl_mangrove:mangrove_stripped_trunk", { tiles ={"mcl_stripped_mangrove_log_top.png","mcl_stripped_mangrove_log_side.png",}, paramtype2 = "facedir", on_place = mcl_util.rotate_axis, - stack_max = 64, + 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 = on_rotate, @@ -172,12 +196,263 @@ minetest.register_node("mcl_mangrove:mangrove_stripped_trunk", { _mcl_hardness = 2, }) ---doors and trapdoors-- +minetest.register_node("mcl_mangrove:mangrove_roots", { + description = "Mangrove_Roots", + _doc_items_longdesc = "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_top.png", + "mcl_mangrove_roots_side.png", "mcl_mangrove_roots_side.png", + "mcl_mangrove_roots_side.png", "mcl_mangrove_roots_side.png" + }, + paramtype = "light", + + drawtype = "mesh", + mesh = "node.obj", + 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" }, +}) + +mcl_flowerpots.register_potted_flower("mcl_mangrove:propagule", { + name = "propagule", + desc = S("Mangrove Propagule"), + image = "mcl_mangrove_propagule.png", +}) + +minetest.register_node("mcl_mangrove:propagule_dirt", { + description = "propagule_dirt", + _doc_items_longdesc = "", + _tt_help = "", + drawtype = "plantlike_rooted", + paramtype = "light", + paramtype2 = "meshoptions", + place_param2 = 1, + tiles = { "default_dirt.png" }, + 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_water = 0, 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 = "mcl_core:dirt", + after_dig_node = function(pos) + local node = minetest.get_node(pos) + if minetest.get_item_group(node.name, "dirt") == 0 then + minetest.set_node(pos, {name="mcl_core:dirt"}) + end + end, + _mcl_hardness = 0, + _mcl_blast_resistance = 0, + _mcl_silk_touch_drop = true, +}) + +minetest.register_node("mcl_mangrove:propagule_mud", { + description = "propagule_mud", + _doc_items_longdesc = "", + _tt_help = "", + drawtype = "plantlike_rooted", + paramtype = "light", + paramtype2 = "meshoptions", + place_param2 = 1, + tiles = {"mcl_mud.png"}, + special_tiles = { { name = "mcl_mangrove_propagule_item.png" } }, + inventory_image = "mcl_mangrove_propagule_item.png", + wield_image = "mcl_mangrove_propagule.png", + collision_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, 0.5 - 2/16, 0.5 }, + }, + 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_water = 0, 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 = "mcl_mud:mud", + after_dig_node = function(pos) + local node = minetest.get_node(pos) + if minetest.get_item_group(node.name, "dirt") == 0 then + minetest.set_node(pos, {name="mcl_mud:mud"}) + end + end, + _mcl_hardness = 0, + _mcl_blast_resistance = 0, + _mcl_silk_touch_drop = true, +}) + +minetest.register_node("mcl_mangrove:propagule_dirt_with_grass", { + description = "propagule_dirt_with_grass_", + _doc_items_longdesc = "", + _tt_help = "", + drawtype = "plantlike_rooted", + paramtype = "meshoption", + paramtype2 = "color", + tiles = {"mcl_core_grass_block_top.png", { name="default_dirt.png", color="white" }}, + overlay_tiles = {"mcl_core_grass_block_top.png", "", {name="mcl_core_grass_block_side_overlay.png", tileable_vertical=false}}, + palette = "mcl_core_palette_grass.png", + palette_index = 0, + color = "#8EB971", + special_tiles = { { name = "mcl_mangrove_propagule_item.png" } }, + inventory_image = "mcl_mangrove_propagule_item.png", + wield_image = "mcl_mangrove_propagule.png", + collision_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, 0.5 - 2/16, 0.5 }, + }, + 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_water = 0, 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 = "mcl_core:dirt_with_grass", + after_dig_node = function(pos) + local node = minetest.get_node(pos) + if minetest.get_item_group(node.name, "dirt") == 0 then + minetest.set_node(pos, {name="mcl_core:dirt_with_grass"}) + end + end, + _mcl_hardness = 0, + _mcl_blast_resistance = 0, + _mcl_silk_touch_drop = true, +}) + +local water_tex = "default_water_source_animated.png^[verticalframe:16:0" + +local wlroots = { + description = ("water_logged_mangrove_roots"), + _doc_items_entry_name = S("water_logged_roots"), + _doc_items_longdesc = + ("Mangrove roots are decorative blocks that form as part of mangrove trees.").."\n\n".. + ("Mangrove roots, despite being a full block, can be waterlogged and do not flow water out").."\n\n".. + ("These cannot be crafted yet only occure when get in contact of water."), + _doc_items_hidden = false, + tiles = { + "("..water_tex..")^mcl_mangrove_roots_top.png", "("..water_tex..")^mcl_mangrove_roots_top.png", + "("..water_tex..")^mcl_mangrove_roots_side.png", "("..water_tex..")^mcl_mangrove_roots_side.png", + "("..water_tex..")^mcl_mangrove_roots_side.png", "("..water_tex..")^mcl_mangrove_roots_side.png" + }, + sounds = mcl_sounds.node_sound_water_defaults(), + use_texture_alpha = USE_TEXTURE_ALPHA, + is_ground_content = false, + paramtype = "light", + walkable = true, + pointable = true, + diggable = true, + buildable_to = flase, + 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, +} +minetest.register_node("mcl_mangrove:water_logged_roots", wlroots) +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_top.png", + "("..water_tex..")^mcl_mangrove_roots_side.png", "("..water_tex..")^mcl_mangrove_roots_side.png", + "("..water_tex..")^mcl_mangrove_roots_side.png", "("..water_tex..")^mcl_mangrove_roots_side.png" +} +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_top.png", + "mcl_mud.png^mcl_mangrove_roots_side.png", "mcl_mud.png^mcl_mangrove_roots_side.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, +}) + +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", +}) mcl_doors:register_door("mcl_mangrove:mangrove_door", { description = ("Mangrove Door"), - _doc_items_longdesc = wood_longdesc, - _doc_items_usagehelp = wood_usagehelp, + _doc_items_longdesc = "", + _doc_items_usagehelp = "", inventory_image = "mcl_mangrove_doors.png", groups = {handy=1,axey=1, material_wood=1, flammable=-1}, _mcl_hardness = 3, @@ -187,6 +462,60 @@ mcl_doors:register_door("mcl_mangrove:mangrove_door", { sounds = mcl_sounds.node_sound_wood_defaults(), }) +mcl_doors:register_trapdoor(":mcl_doors: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 Plank Fence"), + "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_core:stair_mangrove", + {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_core:slab_mangrove", + {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({ output = "mcl_doors:mangrove_door 3", recipe = { @@ -196,53 +525,19 @@ minetest.register_craft({ } }) -local woods = { - -- id, desc, texture, craftitem - { "trapdoor", S("Mangrove Trapdoor"), "mcl_mangrove_trapdoor.png", "mcl_mangrove_planks.png", "mcl_mangrove:mangrove_wood" },} - -for w=1, #woods do - mcl_doors:register_trapdoor("mcl_mangrove:"..woods[w][1], { - description = woods[w][2], - _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 = woods[w][3], - tile_side = woods[w][4], - wield_image = woods[w][3], - 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(), - }) +minetest.register_craft({ + output = "mcl_doors:trapdoor_mangrove 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({ - output = "mcl_doors:"..woods[w][1].." 2", - recipe = { - {woods[w][5], woods[w][5], woods[w][5]}, - {woods[w][5], woods[w][5], woods[w][5]}, - } - }) - - minetest.register_craft({ - type = "fuel", - recipe = "mcl_doors:"..woods[w][1], - burntime = 15, - }) -end - -------------------------------- - ---fence and fence gates-- - -mcl_fences.register_fence_and_fence_gate( - "mangrove_wood_fence", - S("Mangrove Wood Fence"), S("Mangrove Wood Plank Fence"), - "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") + type = "fuel", + recipe = "mcl_doors:trapdoor_mangrove", + burntime = 15, +}) minetest.register_craft({ output = "mcl_mangrove:mangrove_wood_fence_gate", @@ -273,422 +568,6 @@ minetest.register_craft({ burntime = 15, }) ----stairs and slabs--- - -local woods = { - { "mangrove_wood", "mcl_mangrove_planks.png", S("Mangrove Wood Stairs"), S("Mangrove Wood Slab"), S("Double Mangrove Wood Slab") },} - -for w=1, #woods do - local wood = woods[w] - mcl_stairs.register_stair(wood[1], "mcl_core:"..wood[1], - {handy=1,axey=1, flammable=3,wood_stairs=1, material_wood=1, fire_encouragement=5, fire_flammability=20}, - {wood[2]}, - wood[3], - mcl_sounds.node_sound_wood_defaults(), 3, 2, - "woodlike") - mcl_stairs.register_slab(wood[1], "mcl_core:"..wood[1], - {handy=1,axey=1, flammable=3,wood_slab=1, material_wood=1, fire_encouragement=5, fire_flammability=20}, - {wood[2]}, - wood[4], - mcl_sounds.node_sound_wood_defaults(), 3, 2, - wood[5]) -end - -minetest.register_node("mcl_mangrove:mangrove_roots", { - description = "Mangrove_Roots", - _doc_items_longdesc = "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_top.png", - "mcl_mangrove_roots_side.png", "mcl_mangrove_roots_side.png", - "mcl_mangrove_roots_side.png", "mcl_mangrove_roots_side.png" - }, - paramtype = "light", - stack_max = 64, - drawtype = "mesh", - mesh = "node.obj", - 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" }, -}) - ---water can be placed in mangrove roots-- -minetest.override_item("mcl_buckets:bucket_water",{ - on_place = function(itemstack, user, pointed_thing) - -- Use pointed node's on_rightclick function first, if present - local node = minetest.get_node(pointed_thing.under) - if user and not user:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick (pointed_thing.under, node, user, itemstack) or itemstack - end - end - - -- Place on roots - if pointed_thing.under and node.name == "mcl_mangrove:mangrove_roots" then - local protname = user:get_player_name() - if minetest.is_protected(pointed_thing.under, protname) then - minetest.record_protection_violation(pointed_thing.under, protname) - return itemstack - end - minetest.set_node(pointed_thing.under, { name = "mcl_mangrove:water_logged_roots", param2 = node.param2 }) - minetest.sound_play("mcl_potions_bottle_pour", {pos=pointed_thing.under, gain=0.9, max_hear_range=16}, true) - if minetest.is_creative_enabled(user:get_player_name()) then - return itemstack - else - return "mcl_buckets:bucket_empty" - end - end -end -}) - -----flower_potted---------------- -mcl_flowerpots.register_potted_flower("mcl_mangrove:propagule", { - name = "propagule", - desc = S("Mangrove Propagule"), - image = "mcl_mangrove_propagule.png", -}) - --------------------------------------- ---------------------propagule------------------------------ - ---nodes to be changed into-- - - minetest.register_node("mcl_mangrove:propagule_dirt", { - description = "propagule_dirt", - _doc_items_longdesc = "", - _tt_help = "", - drawtype = "plantlike_rooted", - paramtype = "light", - paramtype2 = "meshoptions", - place_param2 = 1, - tiles = { "default_dirt.png" }, - 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_water = 0, 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 = "mcl_core:dirt", - after_dig_node = function(pos) - local node = minetest.get_node(pos) - if minetest.get_item_group(node.name, "dirt") == 0 then - minetest.set_node(pos, {name="mcl_core:dirt"}) - end - end, - _mcl_hardness = 0, - _mcl_blast_resistance = 0, - _mcl_silk_touch_drop = true, - }) - - minetest.register_node("mcl_mangrove:propagule_mud", { - description = "propagule_mud", - _doc_items_longdesc = "", - _tt_help = "", - drawtype = "plantlike_rooted", - paramtype = "light", - paramtype2 = "meshoptions", - place_param2 = 1, - tiles = {"mcl_mud.png"}, - special_tiles = { { name = "mcl_mangrove_propagule_item.png" } }, - inventory_image = "mcl_mangrove_propagule_item.png", - wield_image = "mcl_mangrove_propagule.png", - collision_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, 0.5 - 2/16, 0.5 }, - }, - 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_water = 0, 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 = "mcl_mud:mud", - after_dig_node = function(pos) - local node = minetest.get_node(pos) - if minetest.get_item_group(node.name, "dirt") == 0 then - minetest.set_node(pos, {name="mcl_mud:mud"}) - end - end, - _mcl_hardness = 0, - _mcl_blast_resistance = 0, - _mcl_silk_touch_drop = true, - }) - -minetest.register_node("mcl_mangrove:propagule_dirt_with_grass", { - description = "propagule_dirt_with_grass_", - _doc_items_longdesc = "", - _tt_help = "", - drawtype = "plantlike_rooted", - paramtype = "meshoption", - paramtype2 = "color", - tiles = {"mcl_core_grass_block_top.png", { name="default_dirt.png", color="white" }}, - overlay_tiles = {"mcl_core_grass_block_top.png", "", {name="mcl_core_grass_block_side_overlay.png", tileable_vertical=false}}, - palette = "mcl_core_palette_grass.png", - palette_index = 0, - color = "#8EB971", - special_tiles = { { name = "mcl_mangrove_propagule_item.png" } }, - inventory_image = "mcl_mangrove_propagule_item.png", - wield_image = "mcl_mangrove_propagule.png", - collision_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, 0.5 - 2/16, 0.5 }, - }, - 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_water = 0, 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 = "mcl_core:dirt_with_grass", - after_dig_node = function(pos) - local node = minetest.get_node(pos) - if minetest.get_item_group(node.name, "dirt") == 0 then - minetest.set_node(pos, {name="mcl_core:dirt_with_grass"}) - end - end, - _mcl_hardness = 0, - _mcl_blast_resistance = 0, - _mcl_silk_touch_drop = true, - }) - - ------------------------- --- node changer-- -minetest.override_item("mcl_mangrove:propagule",{ - on_place = function(itemstack, user, pointed_thing) - -- Use pointed node's on_rightclick function first, if present - local node = minetest.get_node(pointed_thing.under) - if user and not user:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick (pointed_thing.under, node, user, itemstack) or itemstack - end - end - - -- Place on dirt - if pointed_thing.under and node.name == "mcl_core:dirt" then - local protname = user:get_player_name() - if minetest.is_protected(pointed_thing.under, protname) then - minetest.record_protection_violation(pointed_thing.under, protname) - return itemstack - end - minetest.set_node(pointed_thing.under, { name = "mcl_mangrove:propagule_dirt", param2 = node.param2 }) - minetest.sound_play(mcl_sounds.node_sound_leaves_defaults{pos=pointed_thing.under, gain=0.5, max_hear_range=16}, true) - if not minetest.is_creative_enabled(user:get_player_name()) then - itemstack:take_item(1) -- 1 use - return itemstack - end - end - --- Place on dirt _with_grass - if pointed_thing.under and node.name == "mcl_core:dirt_with_grass" then - local protname = user:get_player_name() - if minetest.is_protected(pointed_thing.under, protname) then - minetest.record_protection_violation(pointed_thing.under, protname) - return itemstack - end - minetest.set_node(pointed_thing.under, { name = "mcl_mangrove:propagule_dirt_with_grass", param2 = node.param2 }) - minetest.sound_play(mcl_sounds.node_sound_leaves_defaults{pos=pointed_thing.under, gain=0.5, max_hear_range=16}, true) - if not minetest.is_creative_enabled(user:get_player_name()) then - itemstack:take_item(1) -- 1 use - return itemstack - end - end - --- Place on mud - if pointed_thing.under and node.name == "mcl_mud:mud" then - local protname = user:get_player_name() - if minetest.is_protected(pointed_thing.under, protname) then - minetest.record_protection_violation(pointed_thing.under, protname) - return itemstack - end - minetest.set_node(pointed_thing.under, { name = "mcl_mangrove:propagule_mud", param2 = node.param2 }) - minetest.sound_play(mcl_sounds.node_sound_leaves_defaults{pos=pointed_thing.under, gain=0.5, max_hear_range=16}, true) - if not minetest.is_creative_enabled(user:get_player_name()) then - itemstack:take_item(1) -- 1 use - return itemstack - end - end -end -}) - ----------------------------------------------------------------- - ---water can be taken from mangrove water roots-- -minetest.override_item("mcl_buckets:bucket_empty",{ - on_place = function(itemstack, user, pointed_thing) - -- Use pointed node's on_rightclick function first, if present - local node = minetest.get_node(pointed_thing.under) - if user and not user:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick (pointed_thing.under, node, user, itemstack) or itemstack - end - end - - -- Place on water roots - if pointed_thing.under and node.name == "mcl_mangrove:water_logged_roots" then - local protname = user:get_player_name() - if minetest.is_protected(pointed_thing.under, protname) then - minetest.record_protection_violation(pointed_thing.under, protname) - return itemstack - end - minetest.set_node(pointed_thing.under, { name = "mcl_mangrove:mangrove_roots", param2 = node.param2 }) - minetest.sound_play("mcl_potions_bottle_pour", {pos=pointed_thing.under, gain=0.9, max_hear_range=16}, true) - if minetest.is_creative_enabled(user:get_player_name()) then - return itemstack - else - return "mcl_buckets:bucket_water" - end - end -end -}) -local water_tex = "default_water_source_animated.png^[verticalframe:16:0" - - -local wlroots = { - description = ("water_logged_mangrove_roots"), - _doc_items_entry_name = S("water_logged_roots"), - _doc_items_longdesc = - ("Mangrove roots are decorative blocks that form as part of mangrove trees.").."\n\n".. - ("Mangrove roots, despite being a full block, can be waterlogged and do not flow water out").."\n\n".. - ("These cannot be crafted yet only occure when get in contact of water."), - _doc_items_hidden = false, - tiles = { - "("..water_tex..")^mcl_mangrove_roots_top.png", "("..water_tex..")^mcl_mangrove_roots_top.png", - "("..water_tex..")^mcl_mangrove_roots_side.png", "("..water_tex..")^mcl_mangrove_roots_side.png", - "("..water_tex..")^mcl_mangrove_roots_side.png", "("..water_tex..")^mcl_mangrove_roots_side.png" - }, - sounds = mcl_sounds.node_sound_water_defaults(), - use_texture_alpha = USE_TEXTURE_ALPHA, - is_ground_content = false, - paramtype = "light", - walkable = true, - pointable = true, - diggable = true, - buildable_to = flase, - liquids_pointable = true, - drop = "mcl_mangrove:mangrove_roots", - stack_max = 64, - 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, - -- Hardness intentionally set to infinite instead of 100 (Minecraft value) to avoid problems in creative mode - _mcl_hardness = -1, - 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, -} -minetest.register_node("mcl_mangrove:water_logged_roots", wlroots) -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_top.png", - "("..water_tex..")^mcl_mangrove_roots_side.png", "("..water_tex..")^mcl_mangrove_roots_side.png", - "("..water_tex..")^mcl_mangrove_roots_side.png", "("..water_tex..")^mcl_mangrove_roots_side.png" -} -minetest.register_node("mcl_mangrove:river_water_logged_roots",rwlroots) - ------------------------- -if minetest.get_modpath("mcl_mud") then -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"), - stack_max = 64, - tiles = { - "mcl_mud.png^mcl_mangrove_roots_top.png", "mcl_mud.png^mcl_mangrove_roots_top.png", - "mcl_mud.png^mcl_mangrove_roots_side.png", "mcl_mud.png^mcl_mangrove_roots_side.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, -}) - ---------craft---------- - -minetest.register_craft({ - output = "mcl_mangrove:mangrove_mud_roots", - recipe = { - {"mcl_mangrove:mangrove_roots", "mcl_mud:mud",}, - } - }) - -end - -------hanging_propagule----------- -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 adjacents = { vector.new(1,0,0), vector.new(-1,0,0), @@ -718,8 +597,6 @@ minetest.register_abm({ end }) -------------tree_growth_abm------------ - local propagule_nodes = { "mcl_mangrove:propagule_dirt", "mcl_mangrove:propagule_mud", @@ -737,5 +614,3 @@ local propagule_nodes = { -- minetest.place_schematic({x = pos.x - 3, y = pos.y - 0, z = pos.z - 4}, --path, -"random", nil, false) --end --}) - ----------------------------------------------------------- diff --git a/mods/ITEMS/mcl_mangrove/mod.conf b/mods/ITEMS/mcl_mangrove/mod.conf index 6d7c17b5b..08c7138d7 100644 --- a/mods/ITEMS/mcl_mangrove/mod.conf +++ b/mods/ITEMS/mcl_mangrove/mod.conf @@ -1,3 +1,3 @@ name = mcl_mangrove author = thunder1035 -depends = mcl_core, mcl_doors, mcl_stairs, mcl_walls, mclx_fences, mcl_boats, mcl_flowerpots +depends = mcl_core, mcl_doors, mcl_stairs, mcl_walls, mclx_fences, mcl_boats, mcl_flowerpots, mcl_mud From 811d7a778f6e0dcab06da47a4f688b1e6258d618 Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 29 Jul 2022 20:10:21 +0200 Subject: [PATCH 09/17] Add tall mangrove tree schematics --- .../schematics/mcl_mangrove_tree_4.mts | Bin 0 -> 755 bytes .../schematics/mcl_mangrove_tree_5.mts | Bin 0 -> 648 bytes mods/MAPGEN/mcl_biomes/init.lua | 26 ++++++++++++++++++ 3 files changed, 26 insertions(+) create mode 100644 mods/ITEMS/mcl_mangrove/schematics/mcl_mangrove_tree_4.mts create mode 100644 mods/ITEMS/mcl_mangrove/schematics/mcl_mangrove_tree_5.mts diff --git a/mods/ITEMS/mcl_mangrove/schematics/mcl_mangrove_tree_4.mts b/mods/ITEMS/mcl_mangrove/schematics/mcl_mangrove_tree_4.mts new file mode 100644 index 0000000000000000000000000000000000000000..46f3e3b591c9567ac15986066edb7a3b788e7800 GIT binary patch literal 755 zcmeYb3HD`RVc=pAV&JUD01Rvl%!!#r47|C?Iq}K)MX6S0nR%%U(jabbVqSVtep#v& zjFFR?Se9ChLo&W7Kfk1yK>#dByB@fBW7*4hX+?hB!bcca`pyYfFlTz=nzki={n=NC_dob8 zZpbKIC>dv1{HSKrCyn@`dB!rIil$DVQ*Z7QTB>Tja!&X;?L7I)$Kl~yW1kl+`nK4* zB<+6PVt%z?-CJ6F;%BM`1bZp3zPa40|J&ZbSGVlR+UB;FW##5yRf6Xen6gFmu3Ij# z3Vw8`ELE-g+APk36YG!f6rOYUe!`3cGq?ObCCgJ2m2u|5m%Q(ruO*!qzhcO8({SBC z{)(mZkB7Vd{=ITD%iNpQPdCIZnV{9zAoVB3sOnVJiGBPv`}S1jefjs^t)~3OsS6(_ z-~E3?c7E-YCF%mIx(exDu!|UDj%j?Yy;Wb6Mda}j5G8>`jFwa@x#g*(!pI=_v zCiHftiQu-F>!*J1O3}%-F;y=z-nP>>sQ9YtqGfScPek2G+;Ohp)#7;XR47Tn#uW?yZs;jd#0cgcOex>xwBu+fQ+=D+U7C&hnH|6l1Q;rOPC|DX4t z>FE~kOYXk$yEi5IwEopcb0@V-IpQ#NlAr&>Z?l%ZyUg;eG<9WXqNb{FnBsYZ_8i8u z+ssW3O!r+0>fUPQ-I&pw=P5P0`wL&_Batl(-`FxGHEw)leRna_^Q}t`SKr+iVwcSQ z__oWw*s~x&$f~PZ@rBQ?jEnpo3re+jDA&au+B3UWZ^h{}r7Zp%(Pf6SSLaRqzsrQo3xP*k7RvI0a*~Dsc``#Iktyzyw&Dk3l$+S0) z>G3^TzoruOIvQ4Bl}w2>W(w3AM{n+IrfD&<7CGy0AsW@2LJ#7 literal 0 HcmV?d00001 diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua index d0c6f753e..e3c07b89f 100644 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ b/mods/MAPGEN/mcl_biomes/init.lua @@ -3066,6 +3066,32 @@ local function register_decorations() flags = "place_center_x, place_center_z, force_placement", rotation = "random", }) + minetest.register_decoration({ + name = "mcl_biomes:mangrove_tree_4", + deco_type = "schematic", + place_on = {"mcl_mud:mud"}, + sidelen = 80, + fill_ratio = 0.023, + biomes = {"MangroveSwamp","MangroveSwamp_shore"}, + y_min = -1, + y_max = mcl_vars.mg_overworld_max, + schematic = mod_mcl_mangrove.."/schematics/mcl_mangrove_tree_4.mts", + flags = "place_center_x, place_center_z, force_placement", + rotation = "random", + }) + minetest.register_decoration({ + name = "mcl_biomes:mangrove_tree_4", + deco_type = "schematic", + place_on = {"mcl_mud:mud"}, + sidelen = 80, + fill_ratio = 0.023, + biomes = {"MangroveSwamp","MangroveSwamp_shore"}, + y_min = -1, + y_max = mcl_vars.mg_overworld_max, + schematic = mod_mcl_mangrove.."/schematics/mcl_mangrove_tree_5.mts", + flags = "place_center_x, place_center_z, force_placement", + rotation = "random", + }) minetest.register_decoration({ deco_type = "simple", From 8e41d5a1f4aac6f15d9dda4db62707d74fccf065 Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 29 Jul 2022 23:10:48 +0200 Subject: [PATCH 10/17] Fix propagule growth --- mods/ITEMS/mcl_core/functions.lua | 1 + mods/ITEMS/mcl_mangrove/init.lua | 447 ++++++++++-------------------- mods/ITEMS/mcl_mangrove/mod.conf | 2 +- 3 files changed, 144 insertions(+), 306 deletions(-) diff --git a/mods/ITEMS/mcl_core/functions.lua b/mods/ITEMS/mcl_core/functions.lua index c7dc7b12a..f5132d74b 100644 --- a/mods/ITEMS/mcl_core/functions.lua +++ b/mods/ITEMS/mcl_core/functions.lua @@ -312,6 +312,7 @@ local function check_growth_width(pos, width, height) end return true end +mcl_core.check_growth_width = check_growth_width -- Check if a tree with id can grow at a position. Options is a table of flags -- for varieties of trees. The 'two_by_two' option is used to check if there is diff --git a/mods/ITEMS/mcl_mangrove/init.lua b/mods/ITEMS/mcl_mangrove/init.lua index 105e3f127..c733fc9b3 100644 --- a/mods/ITEMS/mcl_mangrove/init.lua +++ b/mods/ITEMS/mcl_mangrove/init.lua @@ -1,4 +1,19 @@ 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", +} local function get_drops(fortune_level) local apple_chances = {200, 180, 160, 120, 40} @@ -84,103 +99,6 @@ minetest.register_node("mcl_mangrove:mangroveleaves", { _mcl_fortune_drop = { get_drops(1), get_drops(2), get_drops(3), get_drops(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 = function(itemstack, user, pointed_thing) - -- Use pointed node's on_rightclick function first, if present - local node = minetest.get_node(pointed_thing.under) - if user and not user:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick (pointed_thing.under, node, user, itemstack) or itemstack - end - end - - -- Place on dirt - if pointed_thing.under and node.name == "mcl_core:dirt" then - local protname = user:get_player_name() - if minetest.is_protected(pointed_thing.under, protname) then - minetest.record_protection_violation(pointed_thing.under, protname) - return itemstack - end - minetest.set_node(pointed_thing.under, { name = "mcl_mangrove:propagule_dirt", param2 = node.param2 }) - minetest.sound_play(mcl_sounds.node_sound_leaves_defaults{pos=pointed_thing.under, gain=0.5, max_hear_range=16}, true) - if not minetest.is_creative_enabled(user:get_player_name()) then - itemstack:take_item(1) -- 1 use - return itemstack - end - end - --- Place on dirt _with_grass - if pointed_thing.under and node.name == "mcl_core:dirt_with_grass" then - local protname = user:get_player_name() - if minetest.is_protected(pointed_thing.under, protname) then - minetest.record_protection_violation(pointed_thing.under, protname) - return itemstack - end - minetest.set_node(pointed_thing.under, { name = "mcl_mangrove:propagule_dirt_with_grass", param2 = node.param2 }) - minetest.sound_play(mcl_sounds.node_sound_leaves_defaults{pos=pointed_thing.under, gain=0.5, max_hear_range=16}, true) - if not minetest.is_creative_enabled(user:get_player_name()) then - itemstack:take_item(1) -- 1 use - return itemstack - end - end - - if pointed_thing.under and node.name == "mcl_mud:mud" then - local protname = user:get_player_name() - if minetest.is_protected(pointed_thing.under, protname) then - minetest.record_protection_violation(pointed_thing.under, protname) - return itemstack - end - minetest.set_node(pointed_thing.under, { name = "mcl_mangrove:propagule_mud", param2 = node.param2 }) - minetest.sound_play(mcl_sounds.node_sound_leaves_defaults{pos=pointed_thing.under, gain=0.5, max_hear_range=16}, true) - if not minetest.is_creative_enabled(user:get_player_name()) then - itemstack:take_item(1) -- 1 use - return itemstack - end - end - return mcl_util.generate_on_place_plant_function(function(pos, node) - local node_under = minetest.get_node_or_nil({x=pos.x,y=pos.y-1,z=pos.z}) - if not node_under then return false end - local nn = node_under.name - return ((minetest.get_item_group(nn, "grass_block") == 1) or - nn=="mcl_core:podzol" or nn=="mcl_core:podzol_snow" or - nn=="mcl_core:dirt") - end) - end -}) - minetest.register_node("mcl_mangrove:mangrove_stripped_trunk", { description = "The stripped wood of an Mangove tree", _doc_items_longdesc = "The stripped wood of an Mangove tree", @@ -223,201 +141,43 @@ minetest.register_node("mcl_mangrove:mangrove_roots", { _mcl_fortune_drop = { "mcl_mangrove:mangrove_roots 1", "mcl_mangrove:mangrove_roots 2", "mcl_mangrove:mangrove_roots 3", "mcl_mangrove:mangrove_roots 4" }, }) -mcl_flowerpots.register_potted_flower("mcl_mangrove:propagule", { - name = "propagule", - desc = S("Mangrove Propagule"), - image = "mcl_mangrove_propagule.png", -}) - -minetest.register_node("mcl_mangrove:propagule_dirt", { - description = "propagule_dirt", - _doc_items_longdesc = "", - _tt_help = "", - drawtype = "plantlike_rooted", - paramtype = "light", - paramtype2 = "meshoptions", - place_param2 = 1, - tiles = { "default_dirt.png" }, - 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_water = 0, 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 = "mcl_core:dirt", - after_dig_node = function(pos) - local node = minetest.get_node(pos) - if minetest.get_item_group(node.name, "dirt") == 0 then - minetest.set_node(pos, {name="mcl_core:dirt"}) - end - end, - _mcl_hardness = 0, - _mcl_blast_resistance = 0, - _mcl_silk_touch_drop = true, -}) - -minetest.register_node("mcl_mangrove:propagule_mud", { - description = "propagule_mud", - _doc_items_longdesc = "", - _tt_help = "", - drawtype = "plantlike_rooted", - paramtype = "light", - paramtype2 = "meshoptions", - place_param2 = 1, - tiles = {"mcl_mud.png"}, - special_tiles = { { name = "mcl_mangrove_propagule_item.png" } }, - inventory_image = "mcl_mangrove_propagule_item.png", - wield_image = "mcl_mangrove_propagule.png", - collision_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, 0.5 - 2/16, 0.5 }, - }, - 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_water = 0, 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 = "mcl_mud:mud", - after_dig_node = function(pos) - local node = minetest.get_node(pos) - if minetest.get_item_group(node.name, "dirt") == 0 then - minetest.set_node(pos, {name="mcl_mud:mud"}) - end - end, - _mcl_hardness = 0, - _mcl_blast_resistance = 0, - _mcl_silk_touch_drop = true, -}) - -minetest.register_node("mcl_mangrove:propagule_dirt_with_grass", { - description = "propagule_dirt_with_grass_", - _doc_items_longdesc = "", - _tt_help = "", - drawtype = "plantlike_rooted", - paramtype = "meshoption", - paramtype2 = "color", - tiles = {"mcl_core_grass_block_top.png", { name="default_dirt.png", color="white" }}, - overlay_tiles = {"mcl_core_grass_block_top.png", "", {name="mcl_core_grass_block_side_overlay.png", tileable_vertical=false}}, - palette = "mcl_core_palette_grass.png", - palette_index = 0, - color = "#8EB971", - special_tiles = { { name = "mcl_mangrove_propagule_item.png" } }, - inventory_image = "mcl_mangrove_propagule_item.png", - wield_image = "mcl_mangrove_propagule.png", - collision_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, 0.5 - 2/16, 0.5 }, - }, - 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_water = 0, 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 = "mcl_core:dirt_with_grass", - after_dig_node = function(pos) - local node = minetest.get_node(pos) - if minetest.get_item_group(node.name, "dirt") == 0 then - minetest.set_node(pos, {name="mcl_core:dirt_with_grass"}) - end - end, - _mcl_hardness = 0, - _mcl_blast_resistance = 0, - _mcl_silk_touch_drop = true, -}) - -local water_tex = "default_water_source_animated.png^[verticalframe:16:0" - -local wlroots = { - description = ("water_logged_mangrove_roots"), - _doc_items_entry_name = S("water_logged_roots"), - _doc_items_longdesc = - ("Mangrove roots are decorative blocks that form as part of mangrove trees.").."\n\n".. - ("Mangrove roots, despite being a full block, can be waterlogged and do not flow water out").."\n\n".. - ("These cannot be crafted yet only occure when get in contact of water."), +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, - tiles = { - "("..water_tex..")^mcl_mangrove_roots_top.png", "("..water_tex..")^mcl_mangrove_roots_top.png", - "("..water_tex..")^mcl_mangrove_roots_side.png", "("..water_tex..")^mcl_mangrove_roots_side.png", - "("..water_tex..")^mcl_mangrove_roots_side.png", "("..water_tex..")^mcl_mangrove_roots_side.png" - }, - sounds = mcl_sounds.node_sound_water_defaults(), - use_texture_alpha = USE_TEXTURE_ALPHA, - is_ground_content = 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", - walkable = true, - pointable = true, - diggable = true, - buildable_to = flase, - 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, -} -minetest.register_node("mcl_mangrove:water_logged_roots", wlroots) -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_top.png", - "("..water_tex..")^mcl_mangrove_roots_side.png", "("..water_tex..")^mcl_mangrove_roots_side.png", - "("..water_tex..")^mcl_mangrove_roots_side.png", "("..water_tex..")^mcl_mangrove_roots_side.png" -} -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_top.png", - "mcl_mud.png^mcl_mangrove_roots_side.png", "mcl_mud.png^mcl_mangrove_roots_side.png", - "mcl_mud.png^mcl_mangrove_roots_side.png", "mcl_mud.png^mcl_mangrove_roots_side.png", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-5/16, -0.5, -5/16, 5/16, 0.5, 5/16} }, - 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, + + 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) + local snn = minetest.get_node_or_nil(vector.offset(place_pos,0,-1,0)).name + if not snn then return false end + return table.indexof(propagule_allowed_nodes,snn) ~= -1 + end) }) minetest.register_node("mcl_mangrove:hanging_propagule_1", { @@ -449,6 +209,82 @@ minetest.register_node("mcl_mangrove:hanging_propagule_1", { wield_image = "mcl_mangrove_propagule.png", }) +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 = ("water_logged_mangrove_roots"), + _doc_items_entry_name = S("water_logged_roots"), + _doc_items_longdesc = + ("Mangrove roots are decorative blocks that form as part of mangrove trees.").."\n\n".. + ("Mangrove roots, despite being a full block, can be waterlogged and do not flow water out").."\n\n".. + ("These cannot be crafted yet only occure when get in contact of water."), + _doc_items_hidden = false, + tiles = { + "("..water_tex..")^mcl_mangrove_roots_top.png", + "("..water_tex..")^mcl_mangrove_roots_top.png", + "("..water_tex..")^mcl_mangrove_roots_side.png", + "("..water_tex..")^mcl_mangrove_roots_side.png", + "("..water_tex..")^mcl_mangrove_roots_side.png", + "("..water_tex..")^mcl_mangrove_roots_side.png" + }, + sounds = mcl_sounds.node_sound_water_defaults(), + use_texture_alpha = USE_TEXTURE_ALPHA, + is_ground_content = false, + paramtype = "light", + walkable = true, + pointable = true, + diggable = true, + buildable_to = flase, + 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_top.png", + "("..water_tex..")^mcl_mangrove_roots_side.png", + "("..water_tex..")^mcl_mangrove_roots_side.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_top.png", + "mcl_mud.png^mcl_mangrove_roots_side.png", "mcl_mud.png^mcl_mangrove_roots_side.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 = ("Mangrove Door"), _doc_items_longdesc = "", @@ -597,20 +433,21 @@ minetest.register_abm({ end }) -local propagule_nodes = { - "mcl_mangrove:propagule_dirt", - "mcl_mangrove:propagule_mud", - "mcl_mangrove:propagule_dirt_with_grass" -} - ---minetest.register_abm({ --- label = "Mangrove_tree_growth", --- nodenames = propagule_nodes, --- interval = 2, --- chance = 1, --- action = function(pos,value) --- local path = minetest.get_modpath("mcl_mangrove") .. --"/schematics/mcl_mangrove_tree_1.mts", --- minetest.place_schematic({x = pos.x - 3, y = pos.y - 0, z = pos.z - 4}, --path, -"random", nil, false) ---end ---}) +minetest.register_abm({ + label = "Mangrove_tree_growth", + nodenames = {"mcl_mangrove:propagule"}, + 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 + if r > 3 then h = 18 end + if mcl_core.check_growth_width(pos,w,h) then + minetest.place_schematic(pos, path, "random", nil, false, "place_center_x, place_center_z") + end +end +}) diff --git a/mods/ITEMS/mcl_mangrove/mod.conf b/mods/ITEMS/mcl_mangrove/mod.conf index 08c7138d7..fb71efbf8 100644 --- a/mods/ITEMS/mcl_mangrove/mod.conf +++ b/mods/ITEMS/mcl_mangrove/mod.conf @@ -1,3 +1,3 @@ name = mcl_mangrove author = thunder1035 -depends = mcl_core, mcl_doors, mcl_stairs, mcl_walls, mclx_fences, mcl_boats, mcl_flowerpots, mcl_mud +depends = mcl_core, mcl_doors, mcl_stairs, mcl_walls, mclx_fences, mcl_boats, mcl_flowerpots, mcl_mud, mcl_util From 2b90675ea2e52d50772f14ce993e8c07684ab036 Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 29 Jul 2022 23:36:00 +0200 Subject: [PATCH 11/17] fix warnings --- mods/ITEMS/mcl_mangrove/init.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mods/ITEMS/mcl_mangrove/init.lua b/mods/ITEMS/mcl_mangrove/init.lua index c733fc9b3..d906cd835 100644 --- a/mods/ITEMS/mcl_mangrove/init.lua +++ b/mods/ITEMS/mcl_mangrove/init.lua @@ -23,7 +23,7 @@ local function get_drops(fortune_level) max_items = 1, items = { { - items = {sapling}, + items = {"mcl_mangrove:propagule"}, rarity = sapling_chances[fortune_level + 1] or sapling_chances[fortune_level] }, { @@ -109,7 +109,7 @@ minetest.register_node("mcl_mangrove:mangrove_stripped_trunk", { 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 = on_rotate, + on_rotate = mcl_util.rotate_axis_and_place, _mcl_blast_resistance = 2, _mcl_hardness = 2, }) @@ -234,13 +234,13 @@ local wlroots = { "("..water_tex..")^mcl_mangrove_roots_side.png" }, sounds = mcl_sounds.node_sound_water_defaults(), - use_texture_alpha = USE_TEXTURE_ALPHA, + use_texture_alpha = "clip", is_ground_content = false, paramtype = "light", walkable = true, pointable = true, diggable = true, - buildable_to = flase, + buildable_to = false, liquids_pointable = true, drop = "mcl_mangrove:mangrove_roots", From 844cf6c5dc06486891531d2ef649e42afc7beec5 Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 30 Jul 2022 01:23:03 +0200 Subject: [PATCH 12/17] Fix waterlogged texture to be animated --- mods/ITEMS/mcl_mangrove/init.lua | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/mods/ITEMS/mcl_mangrove/init.lua b/mods/ITEMS/mcl_mangrove/init.lua index d906cd835..c65ceb2d4 100644 --- a/mods/ITEMS/mcl_mangrove/init.lua +++ b/mods/ITEMS/mcl_mangrove/init.lua @@ -226,15 +226,23 @@ local wlroots = { ("These cannot be crafted yet only occure when get in contact of water."), _doc_items_hidden = false, tiles = { - "("..water_tex..")^mcl_mangrove_roots_top.png", - "("..water_tex..")^mcl_mangrove_roots_top.png", - "("..water_tex..")^mcl_mangrove_roots_side.png", - "("..water_tex..")^mcl_mangrove_roots_side.png", - "("..water_tex..")^mcl_mangrove_roots_side.png", - "("..water_tex..")^mcl_mangrove_roots_side.png" + {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(), - use_texture_alpha = "clip", + use_texture_alpha = "blend", is_ground_content = false, paramtype = "light", walkable = true, @@ -258,12 +266,9 @@ local wlroots = { 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_top.png", "("..water_tex..")^mcl_mangrove_roots_side.png", "("..water_tex..")^mcl_mangrove_roots_side.png", - "("..water_tex..")^mcl_mangrove_roots_side.png", - "("..water_tex..")^mcl_mangrove_roots_side.png" } minetest.register_node("mcl_mangrove:water_logged_roots", wlroots) @@ -274,9 +279,9 @@ minetest.register_node("mcl_mangrove:mangrove_mud_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_top.png", - "mcl_mud.png^mcl_mangrove_roots_side.png", "mcl_mud.png^mcl_mangrove_roots_side.png", - "mcl_mud.png^mcl_mangrove_roots_side.png", "mcl_mud.png^mcl_mangrove_roots_side.png", + "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}, From c0fec69c7074c43cc4bc4b596f1a58fec8832311 Mon Sep 17 00:00:00 2001 From: cora Date: Mon, 1 Aug 2022 11:44:01 +0200 Subject: [PATCH 13/17] Add plantlike_rooted propagules --- mods/ITEMS/mcl_mangrove/init.lua | 78 +++++++++++++++++++++++++++++--- 1 file changed, 72 insertions(+), 6 deletions(-) diff --git a/mods/ITEMS/mcl_mangrove/init.lua b/mods/ITEMS/mcl_mangrove/init.lua index c65ceb2d4..45163a118 100644 --- a/mods/ITEMS/mcl_mangrove/init.lua +++ b/mods/ITEMS/mcl_mangrove/init.lua @@ -13,7 +13,10 @@ local propagule_allowed_nodes = { "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} @@ -173,10 +176,19 @@ minetest.register_node("mcl_mangrove:propagule", { node_placement_prediction = "", _mcl_blast_resistance = 0, _mcl_hardness = 0, - on_place = mcl_util.generate_on_place_plant_function(function(place_pos, place_node) - local snn = minetest.get_node_or_nil(vector.offset(place_pos,0,-1,0)).name + 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 - return table.indexof(propagule_allowed_nodes,snn) ~= -1 + 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) }) @@ -208,6 +220,47 @@ minetest.register_node("mcl_mangrove:hanging_propagule_1", { 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", @@ -438,10 +491,11 @@ minetest.register_abm({ end }) - +local abm_nodes = table.copy(propagule_rooted_nodes) +table.insert(abm_nodes,"mcl_mangrove:propagule") minetest.register_abm({ label = "Mangrove_tree_growth", - nodenames = {"mcl_mangrove:propagule"}, + nodenames = abm_nodes, interval = 30, chance = 5, action = function(pos,node) @@ -450,9 +504,21 @@ minetest.register_abm({ 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, false, "place_center_x, place_center_z") + minetest.place_schematic(pos, path, "random", nil, true, "place_center_x, place_center_z") end end }) From 10651659529f8201bd748b9449e5cb2606473605 Mon Sep 17 00:00:00 2001 From: cora Date: Tue, 2 Aug 2022 12:06:13 +0200 Subject: [PATCH 14/17] fix mangrove trapdoor --- mods/ITEMS/mcl_mangrove/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_mangrove/init.lua b/mods/ITEMS/mcl_mangrove/init.lua index 45163a118..1a26c3913 100644 --- a/mods/ITEMS/mcl_mangrove/init.lua +++ b/mods/ITEMS/mcl_mangrove/init.lua @@ -356,7 +356,7 @@ mcl_doors:register_door("mcl_mangrove:mangrove_door", { sounds = mcl_sounds.node_sound_wood_defaults(), }) -mcl_doors:register_trapdoor(":mcl_doors:mangrove_trapdoor", { +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."), From 191e117e0570011fd47b42e076da250b0d309ef7 Mon Sep 17 00:00:00 2001 From: cora Date: Tue, 2 Aug 2022 23:51:48 +0200 Subject: [PATCH 15/17] Axe can strip mangrove wood --- mods/ITEMS/mcl_mangrove/init.lua | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/mods/ITEMS/mcl_mangrove/init.lua b/mods/ITEMS/mcl_mangrove/init.lua index 1a26c3913..f33c0106e 100644 --- a/mods/ITEMS/mcl_mangrove/init.lua +++ b/mods/ITEMS/mcl_mangrove/init.lua @@ -69,6 +69,7 @@ minetest.register_node("mcl_mangrove:mangrove_tree_bark", { 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", { @@ -103,13 +104,25 @@ minetest.register_node("mcl_mangrove:mangroveleaves", { }) minetest.register_node("mcl_mangrove:mangrove_stripped_trunk", { - description = "The stripped wood of an Mangove tree", - _doc_items_longdesc = "The stripped wood of an Mangove tree", + description = "The stripped wood of a Mangove tree", + _doc_items_longdesc = "The stripped wood of a Mangove 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 = "The stripped bark of a Mangove tree", + _doc_items_longdesc = "The stripped bark of a Mangove 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, From c36b359c702c88b38a25d9628ed1bf6351704867 Mon Sep 17 00:00:00 2001 From: cora Date: Wed, 3 Aug 2022 00:00:13 +0200 Subject: [PATCH 16/17] Fix mangrove roots and water logged roots(somewhat) --- mods/ITEMS/mcl_mangrove/init.lua | 23 ++++++------- mods/ITEMS/mcl_mangrove/models/node.obj | 46 ------------------------- 2 files changed, 11 insertions(+), 58 deletions(-) delete mode 100644 mods/ITEMS/mcl_mangrove/models/node.obj diff --git a/mods/ITEMS/mcl_mangrove/init.lua b/mods/ITEMS/mcl_mangrove/init.lua index f33c0106e..6b49fa577 100644 --- a/mods/ITEMS/mcl_mangrove/init.lua +++ b/mods/ITEMS/mcl_mangrove/init.lua @@ -47,7 +47,7 @@ end minetest.register_node("mcl_mangrove:mangrove_tree", { description = S("Mangrove Wood"), - _doc_items_longdesc = S("The trunk of an Mangrove tree."), + _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", @@ -57,10 +57,11 @@ minetest.register_node("mcl_mangrove:mangrove_tree", { 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 an Mangrove tree."), + _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", @@ -137,14 +138,12 @@ minetest.register_node("mcl_mangrove:mangrove_roots", { waving = 0, place_param2 = 1, -- Prevent leafdecay for placed nodes tiles = { - "mcl_mangrove_roots_top.png", "mcl_mangrove_roots_top.png", - "mcl_mangrove_roots_side.png", "mcl_mangrove_roots_side.png", - "mcl_mangrove_roots_side.png", "mcl_mangrove_roots_side.png" + "mcl_mangrove_roots_top.png", + "mcl_mangrove_roots_side.png", + "mcl_mangrove_roots_side.png", }, paramtype = "light", - - drawtype = "mesh", - mesh = "node.obj", + 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 @@ -175,7 +174,6 @@ minetest.register_node("mcl_mangrove:propagule", { 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, @@ -284,8 +282,8 @@ mcl_flowerpots.register_potted_flower("mcl_mangrove:propagule", { local water_tex = "default_water_source_animated.png^[verticalframe:16:0" local wlroots = { - description = ("water_logged_mangrove_roots"), - _doc_items_entry_name = S("water_logged_roots"), + description = ("water logged mangrove roots"), + _doc_items_entry_name = S("water logged mangrove roots"), _doc_items_longdesc = ("Mangrove roots are decorative blocks that form as part of mangrove trees.").."\n\n".. ("Mangrove roots, despite being a full block, can be waterlogged and do not flow water out").."\n\n".. @@ -308,7 +306,8 @@ local wlroots = { "mcl_mangrove_roots_side.png", }, sounds = mcl_sounds.node_sound_water_defaults(), - use_texture_alpha = "blend", + drawtype = "allfaces_optional", + use_texture_alpha = "clip", is_ground_content = false, paramtype = "light", walkable = true, diff --git a/mods/ITEMS/mcl_mangrove/models/node.obj b/mods/ITEMS/mcl_mangrove/models/node.obj deleted file mode 100644 index bb50e2495..000000000 --- a/mods/ITEMS/mcl_mangrove/models/node.obj +++ /dev/null @@ -1,46 +0,0 @@ -# Blender v3.1.2 OBJ File: 'minetest_base_node.blend' -# www.blender.org -mtllib roots_base_node.mtl -o node -v -0.500000 0.500000 0.500000 -v 0.500000 0.500000 0.500000 -v 0.500000 0.500000 -0.500000 -v -0.500000 0.500000 -0.500000 -v -0.500000 -0.500000 -0.500000 -v 0.500000 -0.500000 -0.500000 -v 0.500000 -0.500000 0.500000 -v -0.500000 -0.500000 0.500000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vn 0.0000 1.0000 0.0000 -vn 0.0000 -1.0000 -0.0000 -vn 1.0000 -0.0000 0.0000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 0.0000 -0.0000 1.0000 -usemtl Material -s 1 -f 1/1/1 2/2/1 3/3/1 4/4/1 -f 5/5/2 6/6/2 7/7/2 8/8/2 -f 7/9/3 6/6/3 3/3/3 2/10/3 -f 5/5/4 8/11/4 1/12/4 4/4/4 -f 6/13/5 5/14/5 4/15/5 3/16/5 -f 8/17/6 7/18/6 2/19/6 1/20/6 From e901003e22642e778b45e24a7079bfa3de1c6c1e Mon Sep 17 00:00:00 2001 From: cora Date: Wed, 3 Aug 2022 11:57:17 +0200 Subject: [PATCH 17/17] Fix mangrove (trap)door, stair and slab recipes --- mods/ITEMS/mcl_mangrove/init.lua | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/mods/ITEMS/mcl_mangrove/init.lua b/mods/ITEMS/mcl_mangrove/init.lua index 6b49fa577..511faca75 100644 --- a/mods/ITEMS/mcl_mangrove/init.lua +++ b/mods/ITEMS/mcl_mangrove/init.lua @@ -393,14 +393,14 @@ mcl_fences.register_fence_and_fence_gate( 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_core:stair_mangrove", +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_core:slab_mangrove", +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"), @@ -423,7 +423,13 @@ minetest.register_craft({ }) minetest.register_craft({ - output = "mcl_doors:mangrove_door 3", + 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"}, @@ -432,7 +438,7 @@ minetest.register_craft({ }) minetest.register_craft({ - output = "mcl_doors:trapdoor_mangrove 2", + 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"}, @@ -441,7 +447,7 @@ minetest.register_craft({ minetest.register_craft({ type = "fuel", - recipe = "mcl_doors:trapdoor_mangrove", + recipe = "mcl_mangrove:mangrove_trapdoor", burntime = 15, })