You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1493 lines
49 KiB

cg_decor = {}
local path = minetest.get_modpath("cg_decor")
dofile(path.."/crafts.lua")
dofile(path.."/decoration.lua")
--------------------------------------------------------------------------------------------
-- Mulch -----------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------
--[[minetest.register_node("cg_decor:mulch", {
description = "Dirt with Mulch",
tiles = {"cg_decor_mulch.png", "default_dirt.png", "default_dirt.png"},
is_ground_content = true,
groups = {crumbly=3,soil=1},
drop = 'cg_decor:mulch',--'default:dirt',
sounds = default.node_sound_dirt_defaults({
footstep = {name="default_grass_footstep", gain=0.25},
}),
})
]]
--------------------------------------------------------------------------------------------
-- Flowers ---------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------
function cg_decor.register_flower(name, desc, texture, sel_box) --global flower register
if not sel_box or sel_box == "" then
sel_box = { -0.5, -0.5, -0.5, 0.5, -0.3, 0.5 }
end
minetest.register_node("cg_decor:"..name, {
description = desc,
drawtype = "mesh",
mesh = "cg_decor_tree_leaves.obj",
tiles = { texture },
inventory_image = texture,
wield_image = texture,
sunlight_propagates = true,
paramtype = "light",
walkable = false,
buildable_to = true,
groups = {snappy=3,flammable=2,flower=1,attached_node=1},
sounds = default.node_sound_leaves_defaults(),
selection_box = {
type = "fixed",
fixed = sel_box,
},
})
end
cg_decor.register_flower("lilly_of_the_valley", "Lilly of the valley", "cg_decor_lotv.png")
minetest.register_node("cg_decor:sunflower", {
description = "Sunflower",
drawtype = "mesh",
mesh = "cg_decor_sunflower.obj",
tiles = { "cg_decor_sunflower.png" },
inventory_image = "cg_decor_sunflower_inv.png",
wield_image = "cg_decor_sunflower_inv.png",
sunlight_propagates = true,
paramtype2 = "facedir",
paramtype = "light",
walkable = true,
groups = {snappy=3,flammable=2,flower=1,attached_node=1},
sounds = default.node_sound_leaves_defaults(),
selection_box = {
type = "fixed",
fixed = { -0.1, -0.5, -0.1, 0.1, 1.6, 0.1 },
},
collision_box = {
type = "fixed",
fixed = { -0.1, -0.5, -0.1, 0.1, 1.6, 0.1 },
},
})
minetest.register_node("cg_decor:window_sill", {
description = "Window sill",
tiles = {"cg_decor_siding_wall.png"},
drawtype = "nodebox",
paramtype = "light",
paramtype2 = "facedir",
node_box = {
type = "fixed",
fixed = {
{-0.625, -0.625, -0.5625, 0.625, -0.4375, -0.5},
{-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5},
{-0.625, -0.625, 0.5, 0.625, -0.4375, 0.5625},
}
},
groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
sounds = default.node_sound_wood_defaults(),
})
minetest.register_node("cg_decor:wall", {
description = "Dryall",
tiles = {"cg_decor_siding_wall.png"},
groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
sounds = default.node_sound_wood_defaults(),
})
--------------------------------------------------------------------------------------------
-- Blocks ----------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------
--[[if minetest.get_modpath("homedecor") then
end
local roof_list = {
{"Red", "#900000:150"},
{"Green", "#006500:200"},
{"Dark_grey", "#202020:200"},
{"Silver", "#b0b0b0:175"},
{"Rusty", "#ffffff:150"},
}
for i in ipairs(roof_list) do
local desc = roof_list[i][1]
local color = desc:lower()
local value = roof_list[i][2]
local extra = ""
if color == "rusty" then extra = "^cg_decor_metalroof_overlay_rusty.png" end
minetest.register_node("cg_decor:metal_roof_"..color, {
description = "Metal Roof ("..desc..")",
drawtype = "mesh",
mesh = "cg_decor_metalroof.obj",
tiles = {"(cg_decor_bg.png^[colorize:"..value..")^cg_decor_metalroof_overlay.png"..extra},
paramtype = "light",
paramtype2 = "facedir",
selection_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, -0.25, 0.5},
{-0.5, -0.25, -0.25, 0.5, 0, 0.5},
{-0.5, 0, 0, 0.5, 0.25, 0.5},
{-0.5, 0.25, 0.25, 0.5, 0.5, 0.5}
}
},
collision_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, -0.25, 0.5},
{-0.5, -0.25, -0.25, 0.5, 0, 0.5},
{-0.5, 0, 0, 0.5, 0.25, 0.5},
{-0.5, 0.25, 0.25, 0.5, 0.5, 0.5}
}
},
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
on_place = minetest.rotate_node,
sounds = default.node_sound_wood_defaults()
})
minetest.register_node("cg_decor:metal_roof_"..color.."_corner", {
description = "Metal Roof Corner ("..desc..")",
drawtype = "mesh",
mesh = "cg_decor_metalroof_corner.obj",
tiles = {"(cg_decor_bg.png^[colorize:"..value..")^cg_decor_metalroof_overlay.png"..extra},
paramtype = "light",
paramtype2 = "facedir",
selection_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, -0.25, 0.5},
{-0.5, -0.25, -0.25, 0.25, 0, 0.5},
{-0.5, 0, 0, 0, 0.25, 0.5},
{-0.5, 0.25, 0.25, -0.25, 0.5, 0.5}
}
},
collision_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, -0.25, 0.5},
{-0.5, -0.25, -0.25, 0.25, 0, 0.5},
{-0.5, 0, 0, 0, 0.25, 0.5},
{-0.5, 0.25, 0.25, -0.25, 0.5, 0.5}
}
},
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
on_place = minetest.rotate_node,
sounds = default.node_sound_wood_defaults()
})
minetest.register_node("cg_decor:metal_roof_"..color.."_valley", {
description = "Metal Roof Valley ("..desc..")",
drawtype = "mesh",
mesh = "cg_decor_metalroof_valley.obj",
tiles = {"(cg_decor_bg.png^[colorize:"..value..")^cg_decor_metalroof_overlay.png"..extra},
paramtype = "light",
paramtype2 = "facedir",
selection_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, -0.25, 0.5},
{-0.5, -0.5, -0.25, 0.5, 0, 0.5},
{-0.5, -0.5, -0.5, 0.25, 0, 0.5},
{-0.5, 0, -0.5, 0, 0.25, 0.5},
{-0.5, 0, 0, 0.5, 0.25, 0.5},
{-0.5, 0.25, 0.25, 0.5, 0.5, 0.5},
{-0.5, 0.25, -0.5, -0.25, 0.5, 0.5},
}
},
collision_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, -0.25, 0.5},
{-0.5, -0.5, -0.25, 0.5, 0, 0.5},
{-0.5, -0.5, -0.5, 0.25, 0, 0.5},
{-0.5, 0, -0.5, 0, 0.25, 0.5},
{-0.5, 0, 0, 0.5, 0.25, 0.5},
{-0.5, 0.25, 0.25, 0.5, 0.5, 0.5},
{-0.5, 0.25, -0.5, -0.25, 0.5, 0.5},
}
},
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
on_place = minetest.rotate_node,
sounds = default.node_sound_wood_defaults()
})
minetest.register_node("cg_decor:metal_roof_"..color.."_flat", {
description = "Metal Roof Flat ("..desc..")",
drawtype = "mesh",
mesh = "cg_decor_metalroof_flat.obj",
tiles = {"(cg_decor_bg.png^[colorize:"..value..")^cg_decor_metalroof_overlay.png"..extra},
paramtype = "light",
paramtype2 = "facedir",
selection_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, -0.4, 0.5},
}
},
collision_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, -0.4, 0.5},
}
},
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
on_place = minetest.rotate_node,
sounds = default.node_sound_wood_defaults()
})
end
]]
minetest.register_craft({
output = 'cg_decor:floor_block_white 4',
recipe = {
{'default:clay', 'default:clay'},
{'default:clay', 'default:clay'},
}
})
minetest.register_craft({
output = 'cg_decor:tile_white 4',
recipe = {
{'cg_decor:floor_block_white', 'cg_decor:floor_block_white'},
{'cg_decor:floor_block_white', 'cg_decor:floor_block_white'},
}
})
local color_list = {
{"Red", "#900000:150"},
{"Yellow", "#f0f000:150"},
{"Green", "#005000:150"},
{"Blue", "#001080:175"},
{"Violet", "#500090:150"},
{"Black", "#000000:200"},
{"Dark_grey", "#202020:200"},
{"Grey", "#b0b0b0:175"},
{"White", "#ffffff:150"},
{"Orange", "#a04000:185"},
}
local ore_list = {
{"coal"},
{"iron"},
{"copper"},
{"mese"},
{"gold"},
{"diamond"}
}
for i in ipairs(color_list) do
local desc = color_list[i][1]
local color = desc:lower()
local value = color_list[i][2]
stairs.register_stair("carpeted_wood_"..color, "cg_decor:carpetblock_wood_"..color,
{snappy=2,choppy=2,oddly_breakable_by_hand=2,flammable=3},
{"cg_decor_carpet.png^[colorize:"..value,
"default_wood.png",
"default_wood.png",
"default_wood.png",
"default_wood.png",
"default_wood.png^(cg_decor_carpet_overlay.png^[colorize:"..value..")"},
"Carpeted Wooden Stair",
default.node_sound_defaults())
stairs.register_slab("carpeted_wood_"..color, "cg_decor:carpetblock_wood_"..color,
{snappy=2,choppy=2,oddly_breakable_by_hand=2,flammable=3},
{"cg_decor_carpet.png^[colorize:"..value,
"default_wood.png",
"default_wood.png^(cg_decor_carpet_overlay.png^[colorize:"..value..")",
"default_wood.png^(cg_decor_carpet_overlay.png^[colorize:"..value..")",
"default_wood.png^(cg_decor_carpet_overlay.png^[colorize:"..value..")",
"default_wood.png^(cg_decor_carpet_overlay.png^[colorize:"..value..")"},
"Carpeted Wooden Slab",
default.node_sound_defaults())
stairs.register_stair("carpeted_junglewood_"..color, "cg_decor:carpetblock_junglewood_"..color,
{snappy=2,choppy=2,oddly_breakable_by_hand=2,flammable=3},
{"cg_decor_carpet.png^[colorize:"..value,
"default_junglewood.png",
"default_junglewood.png",
"default_junglewood.png",
"default_junglewood.png",
"default_junglewood.png^(cg_decor_carpet_overlay.png^[colorize:"..value..")"},
"Carpeted Wooden Stair",
default.node_sound_defaults())
stairs.register_slab("carpeted_junglewood_"..color, "cg_decor:carpetblock_junglewood_"..color,
{snappy=2,choppy=2,oddly_breakable_by_hand=2,flammable=3},
{"cg_decor_carpet.png^[colorize:"..value,
"default_junglewood.png",
"default_junglewood.png^(cg_decor_carpet_overlay.png^[colorize:"..value..")",
"default_junglewood.png^(cg_decor_carpet_overlay.png^[colorize:"..value..")",
"default_junglewood.png^(cg_decor_carpet_overlay.png^[colorize:"..value..")",
"default_junglewood.png^(cg_decor_carpet_overlay.png^[colorize:"..value..")"},
"Carpeted Wooden Slab",
default.node_sound_defaults())
minetest.register_node("cg_decor:carpet_"..color, {
description = "Carpet layer ("..desc..")",
tiles = {"cg_decor_carpet.png^[colorize:"..value },
paramtype = "light",
drawtype = "nodebox",
paramtype2 = "facedir",
node_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, -0.4875, 0.5
}},
groups = {choppy=2,oddly_breakable_by_hand=2,flammable=2},
sounds = default.node_sound_wood_defaults(),
})
minetest.register_node("cg_decor:carpetblock_"..color, {
description = "Carpet or drywall("..desc..")",
tiles = {"cg_decor_carpet.png^[colorize:"..value, "cg_decor_siding_wall.png" },
paramtype = "light",
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0.5125, 0.5},
},
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
},
groups = {choppy=2,oddly_breakable_by_hand=1,flammable=2},
sounds = default.node_sound_wood_defaults(),
})
minetest.register_node("cg_decor:carpetblock_wood_"..color, {
description = "Carpet on Wood ("..desc..")",
tiles = {"cg_decor_carpet.png^[colorize:"..value, "default_wood.png" },
paramtype = "light",
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0.5125, 0.5},
},
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
},
groups = {choppy=2,oddly_breakable_by_hand=1,flammable=2},
sounds = default.node_sound_wood_defaults(),
})
minetest.register_node("cg_decor:carpetblock_junglewood_"..color, {
description = "Carpet on Junglewood ("..desc..")",
tiles = {"cg_decor_carpet.png^[colorize:"..value, "default_junglewood.png" },
paramtype = "light",
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0.5125, 0.5},
},
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
},
groups = {choppy=2,oddly_breakable_by_hand=1,flammable=2},
sounds = default.node_sound_wood_defaults(),
})
minetest.register_node("cg_decor:siding_"..color, {
description = "Siding "..desc,
tiles = {"cg_decor_siding_top.png^[colorize:"..value, "cg_decor_siding_top.png^[colorize:"..value.."^[transformR180",
"cg_decor_siding.png^[colorize:"..value, "cg_decor_siding.png^[colorize:"..value,
"cg_decor_siding_wall.png", "cg_decor_siding.png^[colorize:"..value},
paramtype = "light",
paramtype2 = "facedir",
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {{-0.5, -0.5, -0.375, 0.5, 0.5, 0.5},
{-0.5, -0.459958, -0.4375, 0.5, -0.172287, -0.375},
{-0.5, 0.203899, -0.4375, 0.5, 0.5, -0.375},
{-0.5, -0.12803, -0.4375, 0.5, 0.165964, -0.375},
}},
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
},
groups = {choppy=2,oddly_breakable_by_hand=1,flammable=2},
sounds = default.node_sound_wood_defaults(),
})
minetest.register_node("cg_decor:siding_"..color.."_insidecorner", {
description = "Siding inside corner"..desc,
tiles = {"cg_decor_siding.png^[colorize:"..value, "cg_decor_siding.png^[colorize:"..value,
"cg_decor_siding_wall.png", "cg_decor_siding.png^[colorize:"..value.."^(cg_decor_corner_overlay.png^[transformR180)",
"cg_decor_siding_wall.png", "cg_decor_siding.png^[colorize:"..value.."^cg_decor_corner_overlay.png"},
paramtype = "light",
paramtype2 = "facedir",
groups = {choppy=2,oddly_breakable_by_hand=1,flammable=2},
sounds = default.node_sound_wood_defaults(),
})
minetest.register_node("cg_decor:siding_"..color.."_corner", {
description = "Siding corner "..desc,
tiles = {"cg_decor_siding_corner_top.png^[colorize:"..value, "cg_decor_siding_corner_top.png^[colorize:"..value.."^[transformR270",
"cg_decor_siding.png^[colorize:"..value.."^cg_decor_corner_overlay2.png", "cg_decor_siding.png^[colorize:"..value.."^(cg_decor_corner_overlay.png^[transformR180)",
"cg_decor_siding.png^[colorize:"..value.."^(cg_decor_corner_overlay2.png^[transformR180)", "cg_decor_siding.png^[colorize:"..value.."^cg_decor_corner_overlay.png"},
paramtype = "light",
paramtype2 = "facedir",
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {{-0.375, -0.5, -0.375, 0.5, 0.5, 0.5},
{-0.375, -0.459958, -0.4375, 0.5, -0.172287, -0.375},
{-0.375, 0.203899, -0.4375, 0.5, 0.5, -0.375},
{-0.375, -0.12803, -0.4375, 0.5, 0.165964, -0.375},
{-0.4375, 0.203899, -0.4375, -0.375, 0.5, 0.5},
{-0.4375, -0.12803, -0.4375, -0.375, 0.165964, 0.5},
{-0.4375, -0.456797, -0.4375, -0.375, -0.172287, 0.5},
{-0.5, -0.5, -0.5, -0.3125, 0.5, -0.375},
{-0.5, -0.5, -0.5, -0.375, 0.5, -0.3125},
}},
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
},
groups = {choppy=2,oddly_breakable_by_hand=1,flammable=2},
sounds = default.node_sound_wood_defaults(),
})
minetest.register_craft( {
type = "shapeless",
output = 'cg_decor:floor_block_'..color,
recipe = { 'cg_decor:floor_block_white', 'dye:'..color},
})
minetest.register_craft( {
type = "shapeless",
output = 'cg_decor:tile_'..color,
recipe = { 'cg_decor:tile_white', 'dye:'..color},
})
minetest.register_craft({
output = 'cg_decor:tile_'..color..' 4',
recipe = {
{'cg_decor:floor_block_'..color, 'cg_decor:floor_block_'..color},
{'cg_decor:floor_block_'..color, 'cg_decor:floor_block_'..color},
}
})
minetest.register_node("cg_decor:floor_block_"..color, {
description = desc.." Decrotive floor block",
tiles = {"cg_decor_floor_block.png^[colorize:"..value},
groups = {cracky=3, stone=1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node("cg_decor:tile_"..color, {
description = desc.." Decrotive tile",
tiles = {"cg_decor_floor_tile.png^[colorize:"..value},
groups = {cracky=3, stone=1},
sounds = default.node_sound_stone_defaults(),
})
if minetest.get_modpath("stairs") then
stairs.register_stair_and_slab("decor_block_"..color, "cg_decor:floor_block_"..color,
{cracky=3},
{"cg_decor_floor_block.png^[colorize:"..value},
desc.." Decrotive floor block Stair",
desc.." Decrotive floor block Slab",
default.node_sound_stone_defaults())
stairs.register_slab("decor_tile_"..color, "cg_decor:tile_"..color,
{cracky=3},
{"cg_decor_floor_tile.png^[colorize:"..value},
desc.." Decrotive tile Slab",
default.node_sound_stone_defaults())
end
for i in ipairs(ore_list) do
local ore = ore_list[i][1]
local craft_ore = ore.."_lump"
if ore == "mese" then craft_ore = "mese_crystal" end
minetest.register_node("cg_decor:tile_"..color.."_"..ore, {
description = desc.." Decrotive "..ore.." tile",
tiles = {"cg_decor_floor_tile.png^[colorize:"..value.."^default_mineral_"..ore..".png"},
groups = {cracky=3, stone=1},
sounds = default.node_sound_stone_defaults(),
})
if minetest.get_modpath("stairs") then
stairs.register_slab("decor_tile_"..color.."_"..ore, "cg_decor:tile_"..color.."_"..ore,
{cracky=3},
{"cg_decor_floor_tile.png^[colorize:"..value.."^default_mineral_"..ore..".png"},
desc.." Decrotive "..ore.." tile Slab",
default.node_sound_stone_defaults())
end
minetest.register_craft( {
type = "shapeless",
output = 'cg_decor:tile_'..color..'_'..ore,
recipe = {'cg_decor:tile_'..color, 'default:'..craft_ore},
})
end
end
--------------------------------------------------------------------------------------------
-- Fences ----------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------
local material_list = {
{"Steel", "default_steel_block.png", "default:steelblock" },
{"Copper", "default_copper_block.png", "default:copperblock" },
{"Gold", "default_gold_block.png", "default:goldblock" },
{"Diamond", "default_diamond_block.png", "default:diamondblock"},
{"Mese", "default_mese_block.png", "default:mese" },
{"Bronze", "default_bronze_block.png", "default:bronzeblock" },
--{"Jungle_wood", "default_junglewood.png", "default:junglewood" },
--{"Acacia_wood", "default_acacia_wood.png", "default:acaciawood" },
{"Obsidian", "default_obsidian.png", "default:obsidian" },
}
for i in ipairs(material_list) do
local desc = material_list[i][1]
local material = desc:lower()
local texture = material_list[i][2]
local craft_material = material_list[i][3]
minetest.register_node("cg_decor:fence_"..material, {
description = desc.." Fence",
drawtype = "fencelike",
tiles = {texture},
inventory_image = "default_fence_overlay.png^"..texture..
"^default_fence_overlay.png^[makealpha:255,126,126^cg_decor_fence_overlay.png",
wield_image = "default_fence_overlay.png^"..texture..
"^default_fence_overlay.png^[makealpha:255,126,126^cg_decor_fence_overlay.png",
paramtype = "light",
is_ground_content = false,
selection_box = {
type = "fixed",
fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
},
groups = {choppy=2,oddly_breakable_by_hand=2,flammable=2},
sounds = default.node_sound_wood_defaults(),
})
end
if minetest.get_modpath("steel") then -- register rusted steel fence if "steel" mod is loaded
minetest.register_node("cg_decor:fence_steel_rusted", {
description = "Rusted Steel Fence",
drawtype = "fencelike",
tiles = {"steel_rusted.png"},
inventory_image = "default_fence_overlay.png^steel_rusted.png"..
"^default_fence_overlay.png^[makealpha:255,126,126^cg_decor_fence_overlay.png",
wield_image = "default_fence_overlay.png^steel_rusted.png"..
"^default_fence_overlay.png^[makealpha:255,126,126^cg_decor_fence_overlay.png",
paramtype = "light",
is_ground_content = false,
selection_box = {
type = "fixed",
fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
},
groups = {choppy=2,oddly_breakable_by_hand=2,flammable=2},
sounds = default.node_sound_wood_defaults(),
})
end
--------------------------------------------------------------------------------------------
-- Trees and bushes ------------------------------------------------------------------------
--------------------------------------------------------------------------------------------
function cg_decor.register_tree(treename, tree_image, drop) --global tree register
local drop_lg, drop_sm
if drop and drop ~= "" then
minetest.register_node("cg_decor:"..drop, {
description = drop,
drawtype = "plantlike",
visual_scale = 0.8,
tiles = {"cg_decor_"..drop..".png"},
inventory_image = "cg_decor_"..drop..".png",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
is_ground_content = true,
groups = {fleshy=3,dig_immediate=3,flammable=2,attached_node=1,not_in_creative_inventory=1},
on_use = minetest.item_eat(1),
selection_box = {
type = "fixed",
fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2}
},
sounds = default.node_sound_leaves_defaults()
})
end
if not drop then
drop_sm = "cg_decor:"..treename.."_tree"
drop_lg = "cg_decor:"..treename.."_tree_large"
else
drop_sm = "cg_decor:"..drop.." 2"
drop_lg = "cg_decor:"..drop.." 4"
end
minetest.register_node("cg_decor:"..treename.."_tree", {
description = treename.." tree",
drawtype = "plantlike",
visual_scale = 1.0,
tiles = {tree_image},
inventory_image = tree_image,
wield_image = tree_image,
paramtype = "light",
walkable = false,
is_ground_content = true,
selection_box = {
type = "fixed",
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
},
groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1},
sounds = default.node_sound_leaves_defaults(),
})
minetest.register_node("cg_decor:"..treename.."_tree_large", {
description = "Large "..treename.." tree",
drawtype = "plantlike",
visual_scale = 1.5,
tiles = {tree_image},
inventory_image = tree_image,
wield_image = tree_image,
paramtype = "light",
walkable = false,
is_ground_content = true,
selection_box = {
type = "fixed",
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
},
groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1},
sounds = default.node_sound_leaves_defaults(),
})
minetest.register_node("cg_decor:"..treename.."_tree_extralarge", {
description = "Extra large "..treename.." tree",
drawtype = "plantlike",
visual_scale = 1.9,
tiles = {tree_image},
inventory_image = tree_image,
wield_image = tree_image,
paramtype = "light",
walkable = false,
is_ground_content = true,
selection_box = {
type = "fixed",
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
},
groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1},
sounds = default.node_sound_leaves_defaults(),
})
minetest.register_node("cg_decor:"..treename.."_leaves", {
drawtype = "mesh",
mesh = "cg_decor_tree_leaves.obj",
waving = 1,
visual_scale = 1.5,
tiles = {"cg_decor_"..treename.."_leaves.png"},
paramtype = "light",
walkable = false,
climbable = true,
is_ground_content = false,
collision_box = {
type = "fixed",
fixed = {-0.2, -0.2, -0.2, 0.2, 0.5, 0.2}
},
groups = {snappy=3, leafdecay=2, flammable=2, leaves=1},
drop = {
max_items = 3,
items = {{items = {drop_sm},}}
},
sounds = default.node_sound_leaves_defaults(),
})
minetest.register_node("cg_decor:"..treename.."_leaves_large", {
drawtype = "mesh",
mesh = "cg_decor_tree_leaves.obj",
waving = 1,
visual_scale = 2.5,
tiles = {"cg_decor_"..treename.."_leaves.png"},
paramtype = "light",
walkable = false,
climbable = true,
is_ground_content = false,
groups = {snappy=3, leafdecay=3, flammable=2, leaves=1},
drop = {
max_items = 5,
items = {{items = {drop_lg},}}
},
collision_box = {
type = "fixed",
fixed = {-0.2, -0.2, -0.2, 0.2, 1.2, 0.2}
},
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 1.5, 0.5}
},
sounds = default.node_sound_leaves_defaults(),
})
minetest.register_abm({
nodenames = {"cg_decor:"..treename.."_tree"},
interval = 1,
chance = 1,
action = function(pos, node)
local nu = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name
local node2 = minetest.get_node({x = pos.x, y = pos.y+1, z = pos.z})
local node3 = minetest.get_node({x = pos.x, y = pos.y+2, z = pos.z})
local node4 = minetest.get_node({x = pos.x, y = pos.y+3, z = pos.z})
local is_soil = minetest.get_item_group(nu, "soil")
if is_soil == 0 then
minetest.remove_node(pos)
minetest.spawn_item(pos, "cg_decor:"..treename.."_tree")
return
end
if (node2.name == "air" or node2.name == "ignore") and (node3.name == "air" or node3.name == "ignore")
and (node4.name == "air" or node4.name == "ignore") then
minetest.add_node(pos, { name = "cg_decor:tree_trunk_base" })
minetest.add_node({x = pos.x, y = pos.y+1, z = pos.z}, { name = "cg_decor:tree_trunk" })
minetest.add_node({x = pos.x, y = pos.y+2, z = pos.z}, { name = "cg_decor:"..treename.."_leaves" })
else
minetest.remove_node(pos)
minetest.spawn_item(pos, "cg_decor:"..treename.."_tree")
return
end
end
})
minetest.register_abm({
nodenames = {"cg_decor:"..treename.."_tree_large"},
interval = 1,
chance = 1,
action = function(pos, node)
local nu = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name
local node2 = minetest.get_node({x = pos.x, y = pos.y+1, z = pos.z})
local node3 = minetest.get_node({x = pos.x, y = pos.y+2, z = pos.z})
local node4 = minetest.get_node({x = pos.x, y = pos.y+3, z = pos.z})
local node5 = minetest.get_node({x = pos.x, y = pos.y+4, z = pos.z})
local is_soil = minetest.get_item_group(nu, "soil")
if is_soil == 0 then
minetest.remove_node(pos)
minetest.spawn_item(pos, "cg_decor:"..treename.."_tree_large")
return
end
if (node2.name == "air" or node2.name == "ignore") and (node3.name == "air" or node3.name == "ignore")
and (node4.name == "air" or node4.name == "ignore") and (node5.name == "air" or node5.name == "ignore") then
minetest.add_node(pos, { name = "cg_decor:tree_trunk_base" })
minetest.add_node({x = pos.x, y = pos.y+1, z = pos.z}, { name = "cg_decor:tree_trunk" })
minetest.add_node({x = pos.x, y = pos.y+2, z = pos.z}, { name = "cg_decor:"..treename.."_leaves_large" })
else
minetest.remove_node(pos)
minetest.spawn_item(pos, "cg_decor:"..treename.."_tree_large")
return
end
end
})
minetest.register_abm({
nodenames = {"cg_decor:"..treename.."_tree_extralarge"},
interval = 1,
chance = 1,
action = function(pos, node)
local nu = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name
local node2 = minetest.get_node({x = pos.x, y = pos.y+1, z = pos.z})
local node3 = minetest.get_node({x = pos.x, y = pos.y+2, z = pos.z})
local node4 = minetest.get_node({x = pos.x, y = pos.y+3, z = pos.z})
local node5 = minetest.get_node({x = pos.x, y = pos.y+4, z = pos.z})
local node6 = minetest.get_node({x = pos.x, y = pos.y+5, z = pos.z})
local is_soil = minetest.get_item_group(nu, "soil")
if is_soil == 0 then
minetest.remove_node(pos)
minetest.spawn_item(pos, "cg_decor:"..treename.."_tree_extralarge")
return
end
if (node2.name == "air" or node2.name == "ignore") and (node3.name == "air" or node3.name == "ignore")
and (node4.name == "air" or node4.name == "ignore") and (node5.name == "air" or node5.name == "ignore")
and (node6.name == "air" or node6.name == "ignore") then
minetest.add_node(pos, { name = "cg_decor:tree_trunk_base" })
minetest.add_node({x = pos.x, y = pos.y+1, z = pos.z}, { name = "cg_decor:tree_trunk" })
minetest.add_node({x = pos.x, y = pos.y+2, z = pos.z}, { name = "cg_decor:tree_trunk" })
minetest.add_node({x = pos.x, y = pos.y+3, z = pos.z}, { name = "cg_decor:"..treename.."_leaves_large" })
else
minetest.remove_node(pos)
minetest.spawn_item(pos, "cg_decor:"..treename.."_tree_extralarge")
return
end
end
})
end
--------------------------------------------------------------------------------------------
function cg_decor.register_bush(name, scale, drop) --global bush register
if drop and drop ~= "" then
minetest.register_node("cg_decor:"..drop, {
description = drop,
drawtype = "plantlike",
visual_scale = 0.8,
tiles = {"cg_decor_"..drop..".png"},
inventory_image = "cg_decor_"..drop..".png",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
is_ground_content = true,
groups = {fleshy=3,dig_immediate=3,flammable=2,attached_node=1,not_in_creative_inventory=1},
on_use = minetest.item_eat(1),
selection_box = {
type = "fixed",
fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2}
},
sounds = default.node_sound_leaves_defaults()
})
end
if not drop then
drop = "cg_decor:"..name.."_bush"
else
drop = "cg_decor:"..drop.." 2"
end
minetest.register_node("cg_decor:"..name.."_bush", {
description = "Large "..name.." Bush",
drawtype = "mesh",
mesh = "cg_decor_tree_leaves.obj",
waving = 1,
visual_scale = scale,
tiles = {"cg_decor_"..name.."_leaves.png"},
wield_image = "cg_decor_"..name.."_leaves.png",
inventory_image = "cg_decor_"..name.."_leaves.png",
paramtype = "light",
is_ground_content = false,
groups = {snappy=3, flammable=2},
drop = {
max_items = 2,
items = {{items = {drop},}}
},
collision_box = {
type = "fixed",
fixed = {-0.2, -0.2, -0.2, 0.2, 0.5, 0.2}
},
sounds = default.node_sound_leaves_defaults(),
})
end
--------------------------------------------------------------------------------------------
cg_decor.register_tree("regular", "cg_decor_tree.png")
cg_decor.register_tree("dogwood", "cg_decor_dogwood_tree.png")
cg_decor.register_tree("japanese_maple", "cg_decor_jp_maple_tree.png")
cg_decor.register_tree("cherry", "cg_decor_cherry_tree.png", "cherry")
cg_decor.register_tree("crape_myrtle", "cg_decor_crape_myrtle_tree.png")
cg_decor.register_tree("african_tulip", "cg_decor_african_tulip_tree.png")
cg_decor.register_bush("regular", 1.5)
cg_decor.register_bush("blackberry", 1.5, "blackberry")
--------------------------------------------------------------------------------------------
-- Hydrangeas ------------------------------------------------------------------------------
local hydrangea_list = { --some colors are listed more than once to create a more realistic color pattern
{"White", "#ffffff:150"},
{"purple", "#5030a0:180"},
{"Blue", "#3060c0:200"},
{"light pink", "#f0a0a0:200"},
{"White", "#ffffff:150"},
{"pink", "#f06060:200"},
{"light purple","#9070c0:150"},
{"light blue", "#80a0ff:170"},
{"light pink", "#f0a0a0:200"},
{"light purple","#9070c0:150"},
{"White", "#ffffff:150"},
{"light blue", "#80a0ff:170"},
{"dark purple", "#500090:200"},
{"dark blue", "#001080:200"}
}
for i in ipairs(hydrangea_list) do
local value = hydrangea_list[i][2]
local desc,desc_sm
if i == 1 then
desc = "Hydrangea"
desc_sm = "Hydrangea small"
else
desc = ""
desc_sm = ""
end
minetest.register_node("cg_decor:hydrangea_bush"..i, {
description = desc,
drawtype = "mesh",
mesh = "cg_decor_tree_leaves.obj",
waving = 1,
visual_scale = 1.5,
tiles = {"cg_decor_leaves.png^(cg_decor_hydrangea.png^[colorize:"..value..")"},
wield_image = "cg_decor_leaves.png^(cg_decor_hydrangea.png^[colorize:"..value..")",
inventory_image = "cg_decor_leaves.png^(cg_decor_hydrangea.png^[colorize:"..value..")",
paramtype = "light",
is_ground_content = false,
groups = {snappy=3, flammable=2},
drop = {
max_items = 2,
items = {{items = {"cg_decor:hydrangea_bush1"},}}
},
collision_box = {
type = "fixed",
fixed = {-0.2, -0.2, -0.2, 0.2, 0.5, 0.2}
},
sounds = default.node_sound_leaves_defaults(),
after_place_node = function(pos, placer, itemstack, pointed_thing)
minetest.add_node(pos, { name = "cg_decor:hydrangea_bush"..math.random(1,14)})
end,
})
minetest.register_node("cg_decor:hydrangea_bushsmall"..i, {
description = desc_sm,
drawtype = "mesh",
mesh = "cg_decor_tree_leaves.obj",
waving = 1,
visual_scale = 0.8,
tiles = {"cg_decor_leaves.png^(cg_decor_hydrangea.png^[colorize:"..value..")"},
wield_image = "cg_decor_leaves.png^(cg_decor_hydrangea.png^[colorize:"..value..")",
inventory_image = "cg_decor_leaves.png^(cg_decor_hydrangea.png^[colorize:"..value..")",
paramtype = "light",
is_ground_content = false,
groups = {snappy=3, flammable=2},
drop = {
max_items = 2,
items = {{items = {"cg_decor:hydrangea_bushsmall1"},}}
},
collision_box = {
type = "fixed",
fixed = {-0.2, -0.2, -0.2, 0.2, 0.5, 0.2}
},
sounds = default.node_sound_leaves_defaults(),
after_place_node = function(pos, placer, itemstack, pointed_thing)
minetest.add_node(pos, { name = "cg_decor:hydrangea_bushsmall"..math.random(1,14)})
end,
})
end
--------------------------------------------------------------------------------------------
minetest.register_node("cg_decor:tree_medium", {
description = "Medium tree",
drawtype = "plantlike",
visual_scale = 1.6,
tiles = {"cg_decor_tree.png"},
inventory_image = "cg_decor_tree.png",
wield_image = "cg_decor_tree.png",
paramtype = "light",
walkable = true,
is_ground_content = true,
selection_box = {
type = "fixed",
fixed = {-0.1, -0.5, -0.1, 0.1, 1.0, 0.1}
},
collision_box = {
type = "fixed",
fixed = {-0.1, -0.5, -0.1, 0.1, 1.0, 0.1}
},
groups = {snappy=3,flammable=2,attached_node=1},
sounds = default.node_sound_leaves_defaults(),
})
minetest.register_node("cg_decor:tree_small", {
description = "Small tree",
drawtype = "plantlike",
visual_scale = 1.3,
tiles = {"cg_decor_tree.png"},
inventory_image = "cg_decor_tree.png",
wield_image = "cg_decor_tree.png",
paramtype = "light",
walkable = true,
is_ground_content = true,
selection_box = {
type = "fixed",
fixed = {-0.1, -0.5, -0.1, 0.1, 0.7, 0.1}
},
collision_box = {
type = "fixed",
fixed = {-0.1, -0.5, -0.1, 0.1, 0.7, 0.1}
},
groups = {snappy=3,flammable=2,attached_node=1},
sounds = default.node_sound_leaves_defaults(),
})
minetest.register_node("cg_decor:tree_xsmall", {
description = "Extra small tree",
drawtype = "plantlike",
visual_scale = 1.0,
tiles = {"cg_decor_tree.png"},
inventory_image = "cg_decor_tree.png",
wield_image = "cg_decor_tree.png",
paramtype = "light",
walkable = true,
is_ground_content = true,
selection_box = {
type = "fixed",
fixed = {-0.05, -0.5, -0.05, 0.05, 0.2, 0.05}
},
collision_box = {
type = "fixed",
fixed = {-0.05, -0.5, -0.05, 0.05, 0.2, 0.05}
},
groups = {snappy=3,flammable=2,attached_node=1},
sounds = default.node_sound_leaves_defaults(),
})
--tree trunk nodes
minetest.register_node("cg_decor:redwood_tree", {
description = "Redwood Tree",
tiles = {"cg_decor_redwood_tree_top.png", "cg_decor_redwood_tree_top.png", "cg_decor_redwood_tree.png"},
paramtype = "light",
paramtype2 = "facedir",
is_ground_content = false,
groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2,redwood=1},
sounds = default.node_sound_wood_defaults(),
})
minetest.register_node("cg_decor:tree_trunk", {
drawtype = "mesh",
mesh = "cg_decor_small_tree.obj",
tiles = {"cg_decor_tree_trunk.png"},
paramtype = "light",
is_ground_content = true,
climbable = true,
selection_box = {
type = "fixed",
fixed = { -0.125, -0.5, -0.125, 0.125, 0.5, 0.125 },
},
collision_box = {
type = "fixed",
fixed = { -0.125, -0.5, -0.125, 0.125, 0.5, 0.125 },
},
drop = {
max_items = 1,
items = {{items = {'default:stick 2'},}}
},
groups = {snappy=3,flammable=2,leafdecay=2},
sounds = default.node_sound_leaves_defaults(),
})
minetest.register_node("cg_decor:tree_trunk_base", {
drawtype = "mesh",
mesh = "cg_decor_small_tree.obj",
tiles = {"cg_decor_tree_trunk.png"},
paramtype = "light",
is_ground_content = true,
climbable = true,
selection_box = {
type = "fixed",
fixed = { -0.125, -0.5, -0.125, 0.125, 0.5, 0.125 },
},
collision_box = {
type = "fixed",
fixed = { -0.125, -0.5, -0.125, 0.125, 0.5, 0.125 },
},
drop = {
max_items = 1,
items = {{items = {'default:stick 2'},}}
},
groups = {snappy=3,flammable=2,tree=1},
sounds = default.node_sound_leaves_defaults(),
})
minetest.register_node("cg_decor:jungleleaves", {
drawtype = "allfaces_optional",
use_texture_alpha = true,
waving = 1,
visual_scale = 1.3,
tiles = {"default_jungleleaves.png"},
paramtype = "light",
is_ground_content = false,
groups = {snappy=3, leafdecay=5, flammable=2, leaves=1},
drop = {
max_items = 1,
items = {
{
-- player will get leaves only if he get no saplings,
-- this is because max_items is 1
items = {'cg_decor:jungleleaves'},
}
}
},
sounds = default.node_sound_leaves_defaults(),
})
minetest.register_node("cg_decor:sapling_jungle", {
description = "Jungle Sapling",
drawtype = "plantlike",
visual_scale = 1.5,
tiles = {"cg_decor_junglesapling.png"},
inventory_image = "cg_decor_junglesapling.png",
wield_image = "cg_decor_junglesapling.png",
paramtype = "light",
walkable = false,
selection_box = {
type = "fixed",
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
},
groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1},
sounds = default.node_sound_leaves_defaults(),
})
minetest.register_node("cg_decor:sapling_redwood", {
description = "Redwood Sapling",
drawtype = "plantlike",
visual_scale = 1.9,
tiles = {"cg_decor_redwood_sapling.png"},
inventory_image = "cg_decor_redwood_sapling.png",
wield_image = "cg_decor_redwood_sapling.png",
paramtype = "light",
walkable = false,
selection_box = {
type = "fixed",
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
},
groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1},
sounds = default.node_sound_leaves_defaults(),
})
minetest.register_node("cg_decor:redwood_leaves", {
description = "Redwood Leaves",
drawtype = "allfaces_optional",
waving = 1,
visual_scale = 1.3,
tiles = {"cg_decor_redwood_leaves.png"},
paramtype = "light",
climbable = true,
is_ground_content = false,
groups = {snappy=3, rwldecay=6, flammable=2, leaves=1},
drop = {
max_items = 1,
items = {
{
-- player will get sapling with 1/20 chance
items = {'cg_decor:sapling_redwood'},
rarity = 500,
},
{
-- player will get leaves only if he get no saplings,
-- this is because max_items is 1
items = {'cg_decor:redwood_leaves'},
}
}
},
sounds = default.node_sound_leaves_defaults()
})
minetest.register_node("cg_decor:leaves", {
drawtype = "allfaces_optional",
waving = 1,
visual_scale = 1.3,
tiles = {"default_leaves.png"},
paramtype = "light",
is_ground_content = false,
groups = {snappy=3, leafdecay=4, flammable=2, leaves=1},
drop = {
max_items = 1,
items = {
{
-- player will get leaves only if he get no saplings,
-- this is because max_items is 1
items = {'cg_decor:leaves'},
}
}
},
sounds = default.node_sound_leaves_defaults(),
})
minetest.register_node("cg_decor:sapling", {
description = "Sapling",
drawtype = "plantlike",
visual_scale = 1.5,
tiles = {"cg_decor_sapling.png"},
inventory_image = "cg_decor_sapling.png",
wield_image = "cg_decor_sapling.png",
paramtype = "light",
walkable = false,
is_ground_content = true,
selection_box = {
type = "fixed",
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
},
groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1},
sounds = default.node_sound_leaves_defaults(),
})
minetest.register_node("cg_decor:sapling_apple", {
description = "Sapling",
drawtype = "plantlike",
visual_scale = 1.5,
tiles = {"cg_decor_applesapling.png"},
inventory_image = "cg_decor_applesapling.png",
wield_image = "cg_decor_applesapling.png",
paramtype = "light",
walkable = false,
is_ground_content = true,
selection_box = {
type = "fixed",
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
},
groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1},
sounds = default.node_sound_leaves_defaults(),
})
--------------------------------------------------------------------------------------------
local air_node = minetest.get_content_id("air")
local ignore_node = minetest.get_content_id("ignore")
local tree_node = minetest.get_content_id("default:tree")
local jtree_node = minetest.get_content_id("default:jungletree")
local dleaf_node = minetest.get_content_id("default:leaves")
local leaf_node = minetest.get_content_id("cg_decor:leaves")
local jleaf_node = minetest.get_content_id("cg_decor:jungleleaves")
local djleaf_node = minetest.get_content_id("default:jungleleaves")
local apple_node = minetest.get_content_id("default:apple")
function cg_decor.grow_tree(data, a, pos, is_apple_tree)
local height = math.random(8, 14)
if is_apple_tree == true then height = 5 end
for x_area = -3, 3 do
for y_area = -2, 3 do
for z_area = -3, 3 do
if math.random(1,30) < 23 and math.abs(x_area) + math.abs(z_area) < 5
and math.abs(x_area) + math.abs(y_area) < 5 and math.abs(z_area) + math.abs(y_area) < 5 then
local area_l = a:index(pos.x+x_area, pos.y+height+y_area-1, pos.z+z_area)
if data[area_l] == air_node or data[area_l] == ignore_node then
if is_apple_tree and math.random(1, 50) <= 10 then
data[area_l] = apple_node
else
data[area_l] = leaf_node
end
end
end
end
end
end
for tree_h = 0, height-1 do
local area_t = a:index(pos.x, pos.y+tree_h, pos.z)
if data[area_t] == air_node or data[area_t] == rleaf_node or data[area_t] == ignore_node
or data[area_t] == leaf_node or data[area_t] == jleaf_node or data[area_t] == dleaf_node
or data[area_t] == djleaf_node or data[area_t] == apple_node then
data[area_t] = tree_node
end
end
end
function cg_decor.grow_jungletree(data, a, pos)
local height = math.random(11, 20)
for x_area = -5, 5 do
for y_area = -4, 4 do
for z_area = -5, 5 do
if math.random(1,30) < 23 and math.abs(x_area) + math.abs(z_area) < 8
and math.abs(x_area) + math.abs(y_area) < 8 and math.abs(z_area) + math.abs(y_area) < 8 then
local area_l = a:index(pos.x+x_area, pos.y+height+y_area-1, pos.z+z_area)
if data[area_l] == air_node or data[area_l] == ignore_node then
data[area_l] = jleaf_node
end
end
end
end
end
for tree_h = 0, height-1 do
local area_t = a:index(pos.x, pos.y+tree_h, pos.z)
if data[area_t] == air_node or data[area_t] == rleaf_node or data[area_t] == ignore_node
or data[area_t] == leaf_node or data[area_t] == jleaf_node or data[area_t] == dleaf_node
or data[area_t] == djleaf_node then
data[area_t] = jtree_node
end
end
for roots_x = -1, 1 do
for roots_z = -1, 1 do
if math.random(1, 3) >= 2 then
if a:contains(pos.x+roots_x, pos.y-1, pos.z+roots_z) and data[a:index(pos.x+roots_x, pos.y-1, pos.z+roots_z)] == air_node then
data[a:index(pos.x+roots_x, pos.y-1, pos.z+roots_z)] = jtree_node
elseif a:contains(pos.x+roots_x, pos.y, pos.z+roots_z) and data[a:index(pos.x+roots_x, pos.y, pos.z+roots_z)] == air_node then
data[a:index(pos.x+roots_x, pos.y, pos.z+roots_z)] = jtree_node
end
end
end
end
end
function cg_decor.grow_redwood(data, a, pos)
local rtree_node = minetest.get_content_id("cg_decor:redwood_tree")
local rleaf_node = minetest.get_content_id("cg_decor:redwood_leaves")
local height = math.random(40, 60)
local giant = math.random(1,72)
if giant == (15 or 28) then --random giant redwoods
height = math.random(70, 90)
elseif giant == 36 then
height = math.random(90, 120)
end
for x_area = -8, 8 do
for y_area = -12, 12 do
for z_area = -8, 8 do
if math.random(1,30) < 20 and math.abs(x_area) + math.abs(z_area) < 14
and math.abs(x_area) + math.abs(y_area) < 17 and math.abs(z_area) + math.abs(y_area) < 17 then
local area_l = a:index(pos.x+x_area, pos.y+height+y_area-5, pos.z+z_area)
if data[area_l] == air_node or data[area_l] == ignore_node then
if math.random(1, 30) >= 28 and math.abs(x_area) < 5
and math.abs(z_area) < 5 and math.abs(y_area) < 9 then
data[area_l] = rtree_node
else
data[area_l] = rleaf_node
end
end
end
end
end
end
for tree_h = -5, height-1 do
for x_dir = -1, 1 do
for z_dir = -1, 1 do
if math.abs(x_dir) + math.abs(z_dir) == 1 then
local area_t = a:index(pos.x+x_dir, pos.y+tree_h, pos.z+z_dir)
if data[area_t] == air_node or data[area_t] == rleaf_node or data[area_t] == ignore_node
or data[area_t] == leaf_node or data[area_t] == jleaf_node or data[area_t] == dleaf_node
or data[area_t] == djleaf_node then
data[area_t] = rtree_node
end
elseif x_dir == 0 and z_dir == 0 and tree_h > 0 then
local area_a = a:index(pos.x+x_dir, pos.y+tree_h, pos.z+z_dir)
data[area_a] = air_node
end
end
end
end
local area_tt = a:index(pos.x, pos.y+height, pos.z)
data[area_tt] = rtree_node
end
function cg_decor.can_grow_on(pos, type)
local nu = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name
local is_type = minetest.get_item_group(nu, type)
if is_type == 0 then
return true
end
end
function cg_decor.add_tree_to_map(vm, data)
vm:set_data(data)
vm:write_to_map(data)
vm:update_map()
end
minetest.register_abm({
nodenames = {"cg_decor:sapling"},
interval = 1,
chance = 5,
action = function(pos, node)
cg_decor.can_grow_on(pos, "soil")
minetest.remove_node(pos)
minetest.log("action", "A decor sapling grows into a tree at "..minetest.pos_to_string(pos))
local vm = minetest.get_voxel_manip()
local minp, maxp = vm:read_from_map({x=pos.x-16, y=pos.y, z=pos.z-16}, {x=pos.x+16, y=pos.y+16, z=pos.z+16})
local a = VoxelArea:new{MinEdge=minp, MaxEdge=maxp}
local data = vm:get_data()
cg_decor.grow_tree(data, a, pos, false)
cg_decor.add_tree_to_map(vm, data)
end
})
minetest.register_abm({
nodenames = {"cg_decor:sapling_apple"},
interval = 1,
chance = 5,
action = function(pos, node)
cg_decor.can_grow_on(pos, "soil")
minetest.remove_node(pos)
minetest.log("action", "A decor apple sapling grows into a tree at "..minetest.pos_to_string(pos))
local vm = minetest.get_voxel_manip()
local minp, maxp = vm:read_from_map({x=pos.x-16, y=pos.y, z=pos.z-16}, {x=pos.x+16, y=pos.y+26, z=pos.z+16})
local a = VoxelArea:new{MinEdge=minp, MaxEdge=maxp}
local data = vm:get_data()
cg_decor.grow_tree(data, a, pos, true)
cg_decor.add_tree_to_map(vm, data)
end
})
minetest.register_abm({
nodenames = {"cg_decor:sapling_jungle"},
interval = 1,
chance = 5,
action = function(pos, node)
cg_decor.can_grow_on(pos, "soil")
minetest.remove_node(pos)
minetest.log("action", "A jungle decor sapling grows into a tree at "..minetest.pos_to_string(pos))
local vm = minetest.get_voxel_manip()
local minp, maxp = vm:read_from_map({x=pos.x-16, y=pos.y-1, z=pos.z-16}, {x=pos.x+16, y=pos.y+16, z=pos.z+16})
local a = VoxelArea:new{MinEdge=minp, MaxEdge=maxp}
local data = vm:get_data()
cg_decor.grow_jungletree(data, a, pos)
cg_decor.add_tree_to_map(vm, data)
end
})
minetest.register_abm({
nodenames = {"cg_decor:sapling_redwood"},
interval = 1,
chance = 5,
action = function(pos, node)
cg_decor.can_grow_on(pos, "soil")
minetest.remove_node(pos)
minetest.log("action", "A redwood sapling grows into a tree at "..minetest.pos_to_string(pos))
local vm = minetest.get_voxel_manip()
local minp, maxp = vm:read_from_map({x=pos.x-24, y=pos.y-7, z=pos.z-24}, {x=pos.x+24, y=pos.y+140, z=pos.z+24})
local a = VoxelArea:new{MinEdge=minp, MaxEdge=maxp}
local data = vm:get_data()
cg_decor.grow_redwood(data, a, pos)
cg_decor.add_tree_to_map(vm, data)
end
})
minetest.register_abm({
nodenames = {"group:rwldecay"},
neighbors = {"air", "group:liquid"},
interval = 5,
chance = 2,
action = function(pos, node, _, _)
local pos1 = {x=pos.x, y=pos.y-1, z=pos.z}
local node = minetest.get_node(pos)
local node_under = minetest.get_node(pos1)
local decay = minetest.registered_nodes[node.name].groups.rwldecay
local nodes_around = minetest.find_node_near(pos, decay, {"ignore", "group:redwood"})
if not decay or decay == 0 then
return
elseif decay ~= 1 and nodes_around then
return
else
if minetest.get_item_group(node_under.name, "rerwood") >= 1 then
return
else
itemstacks = minetest.get_node_drops(node.name)
for _, itemname in ipairs(itemstacks) do
if itemname ~= node.name then
local p_drop = {
x = pos.x - 0.5 + math.random(),
y = pos.y - 0.5 + math.random(),
z = pos.z - 0.5 + math.random(),
}
minetest.add_item(p_drop, itemname)
end
end
minetest.remove_node(pos)
nodeupdate(pos)
end
end
end
})