786 lines
29 KiB
Lua
786 lines
29 KiB
Lua
local S = minetest.get_translator("moretrees")
|
|
|
|
moretrees.avoidnodes = {}
|
|
|
|
local jungle_sapling_texture = minetest.get_modpath("default") and "default_junglesapling.png"
|
|
or "moretrees_cedar_sapling.png"
|
|
|
|
moretrees.treelist = {
|
|
{"beech", S("Beech Tree")},
|
|
{"apple_tree", S("Apple Tree")},
|
|
{"oak", S("Oak Tree"), "acorn", S("Acorn"), {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 0.8 },
|
|
{"sequoia", S("Giant Sequoia")},
|
|
{"birch", S("Birch Tree")},
|
|
{"palm", S("Palm Tree"), "palm_fruit_trunk_gen", S("Palm Tree"), {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 1.0 },
|
|
{"date_palm", S("Date Palm Tree"), "date_palm_fruit_trunk",S("Date Palm Tree"), {0, 0, 0, 0, 0, 0}, 0.0 },
|
|
{"spruce", S("Spruce Tree"), "spruce_cone", S("Spruce Cone"), {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 0.8 },
|
|
{"cedar", S("Cedar Tree"), "cedar_cone", S("Cedar Cone"), {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 0.8 },
|
|
{"poplar", S("Poplar Tree")},
|
|
{"poplar_small", S("Poplar Tree")},
|
|
{"willow", S("Willow Tree")},
|
|
{"rubber_tree", S("Rubber Tree")},
|
|
{"fir", S("Douglas Fir"), "fir_cone", S("Fir Cone"), {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 0.8 },
|
|
{"jungletree", S("Jungle Tree"), nil, nil, nil, nil, jungle_sapling_texture },
|
|
}
|
|
|
|
moretrees.treedesc = {
|
|
beech = {
|
|
trunk = S("Beech Tree Trunk"),
|
|
planks = S("Beech Tree Planks"),
|
|
sapling = S("Beech Tree Sapling"),
|
|
leaves = S("Beech Tree Leaves"),
|
|
trunk_stair = S("Beech Tree Trunk Stair"),
|
|
trunk_slab = S("Beech Tree Trunk Slab"),
|
|
planks_stair = S("Beech Tree Planks Stair"),
|
|
planks_slab = S("Beech Tree Planks Slab"),
|
|
fence = S("Beech Tree Fence"),
|
|
fence_rail = S("Beech Tree Fence Rail"),
|
|
fence_gate = S("Beech Tree Fence Gate"),
|
|
},
|
|
apple_tree = {
|
|
trunk = S("Apple Tree Trunk"),
|
|
planks = S("Apple Tree Planks"),
|
|
sapling = S("Apple Tree Sapling"),
|
|
leaves = S("Apple Tree Leaves"),
|
|
trunk_stair = S("Apple Tree Trunk Stair"),
|
|
trunk_slab = S("Apple Tree Trunk Slab"),
|
|
planks_stair = S("Apple Tree Planks Stair"),
|
|
planks_slab = S("Apple Tree Planks Slab"),
|
|
fence = S("Apple Tree Fence"),
|
|
fence_rail = S("Apple Tree Fence Rail"),
|
|
fence_gate = S("Apple Tree Fence Gate"),
|
|
},
|
|
oak = {
|
|
trunk = S("Oak Tree Trunk"),
|
|
planks = S("Oak Tree Planks"),
|
|
sapling = S("Oak Tree Sapling"),
|
|
leaves = S("Oak Tree Leaves"),
|
|
trunk_stair = S("Oak Tree Trunk Stair"),
|
|
trunk_slab = S("Oak Tree Trunk Slab"),
|
|
planks_stair = S("Oak Tree Planks Stair"),
|
|
planks_slab = S("Oak Tree Planks Slab"),
|
|
fence = S("Oak Tree Fence"),
|
|
fence_rail = S("Oak Tree Fence Rail"),
|
|
fence_gate = S("Oak Tree Fence Gate"),
|
|
},
|
|
sequoia = {
|
|
trunk = S("Giant Sequoia Trunk"),
|
|
planks = S("Giant Sequoia Planks"),
|
|
sapling = S("Giant Sequoia Sapling"),
|
|
leaves = S("Giant Sequoia Leaves"),
|
|
trunk_stair = S("Giant Sequoia Trunk Stair"),
|
|
trunk_slab = S("Giant Sequoia Trunk Slab"),
|
|
planks_stair = S("Giant Sequoia Planks Stair"),
|
|
planks_slab = S("Giant Sequoia Planks Slab"),
|
|
fence = S("Giant Sequoia Fence"),
|
|
fence_rail = S("Giant Sequoia Fence Rail"),
|
|
fence_gate = S("Giant Sequoia Fence Gate"),
|
|
},
|
|
birch = {
|
|
trunk = S("Birch Tree Trunk"),
|
|
planks = S("Birch Tree Planks"),
|
|
sapling = S("Birch Tree Sapling"),
|
|
leaves = S("Birch Tree Leaves"),
|
|
trunk_stair = S("Birch Tree Trunk Stair"),
|
|
trunk_slab = S("Birch Tree Trunk Slab"),
|
|
planks_stair = S("Birch Tree Planks Stair"),
|
|
planks_slab = S("Birch Tree Planks Slab"),
|
|
fence = S("Birch Tree Fence"),
|
|
fence_rail = S("Birch Tree Fence Rail"),
|
|
fence_gate = S("Birch Tree Fence Gate"),
|
|
},
|
|
palm = {
|
|
trunk = S("Palm Tree Trunk"),
|
|
planks = S("Palm Tree Planks"),
|
|
sapling = S("Palm Tree Sapling"),
|
|
leaves = S("Palm Tree Leaves"),
|
|
trunk_stair = S("Palm Tree Trunk Stair"),
|
|
trunk_slab = S("Palm Tree Trunk Slab"),
|
|
planks_stair = S("Palm Tree Planks Stair"),
|
|
planks_slab = S("Palm Tree Planks Slab"),
|
|
fence = S("Palm Tree Fence"),
|
|
fence_rail = S("Palm Tree Fence Rail"),
|
|
fence_gate = S("Palm Tree Fence Gate"),
|
|
},
|
|
date_palm = {
|
|
trunk = S("Date Palm Tree Trunk"),
|
|
planks = S("Date Palm Tree Planks"),
|
|
sapling = S("Date Palm Tree Sapling"),
|
|
leaves = S("Date Palm Tree Leaves"),
|
|
trunk_stair = S("Date Palm Tree Trunk Stair"),
|
|
trunk_slab = S("Date Palm Tree Trunk Slab"),
|
|
planks_stair = S("Date Palm Tree Planks Stair"),
|
|
planks_slab = S("Date Palm Tree Planks Slab"),
|
|
fence = S("Date Palm Tree Fence"),
|
|
fence_rail = S("Date Palm Tree Fence Rail"),
|
|
fence_gate = S("Date Palm Tree Fence Gate"),
|
|
},
|
|
spruce = {
|
|
trunk = S("Spruce Tree Trunk"),
|
|
planks = S("Spruce Tree Planks"),
|
|
sapling = S("Spruce Tree Sapling"),
|
|
leaves = S("Spruce Tree Leaves"),
|
|
trunk_stair = S("Spruce Tree Trunk Stair"),
|
|
trunk_slab = S("Spruce Tree Trunk Slab"),
|
|
planks_stair = S("Spruce Tree Planks Stair"),
|
|
planks_slab = S("Spruce Tree Planks Slab"),
|
|
fence = S("Spruce Tree Fence"),
|
|
fence_rail = S("Spruce Tree Fence Rail"),
|
|
fence_gate = S("Spruce Tree Fence Gate"),
|
|
},
|
|
cedar = {
|
|
trunk = S("Cedar Tree Trunk"),
|
|
planks = S("Cedar Tree Planks"),
|
|
sapling = S("Cedar Tree Sapling"),
|
|
leaves = S("Cedar Tree Leaves"),
|
|
trunk_stair = S("Cedar Tree Trunk Stair"),
|
|
trunk_slab = S("Cedar Tree Trunk Slab"),
|
|
planks_stair = S("Cedar Tree Planks Stair"),
|
|
planks_slab = S("Cedar Tree Planks Slab"),
|
|
fence = S("Cedar Tree Fence"),
|
|
fence_rail = S("Cedar Tree Fence Rail"),
|
|
fence_gate = S("Cedar Tree Fence Gate"),
|
|
},
|
|
poplar = {
|
|
trunk = S("Poplar Tree Trunk"),
|
|
planks = S("Poplar Tree Planks"),
|
|
sapling = S("Poplar Tree Sapling"),
|
|
leaves = S("Poplar Tree Leaves"),
|
|
trunk_stair = S("Poplar Tree Trunk Stair"),
|
|
trunk_slab = S("Poplar Tree Trunk Slab"),
|
|
planks_stair = S("Poplar Tree Planks Stair"),
|
|
planks_slab = S("Poplar Tree Planks Slab"),
|
|
fence = S("Poplar Tree Fence"),
|
|
fence_rail = S("Poplar Tree Fence Rail"),
|
|
fence_gate = S("Poplar Tree Fence Gate"),
|
|
},
|
|
poplar_small = {
|
|
sapling = S("Small poplar Tree Sapling"),
|
|
},
|
|
willow = {
|
|
trunk = S("Willow Tree Trunk"),
|
|
planks = S("Willow Tree Planks"),
|
|
sapling = S("Willow Tree Sapling"),
|
|
leaves = S("Willow Tree Leaves"),
|
|
trunk_stair = S("Willow Tree Trunk Stair"),
|
|
trunk_slab = S("Willow Tree Trunk Slab"),
|
|
planks_stair = S("Willow Tree Planks Stair"),
|
|
planks_slab = S("Willow Tree Planks Slab"),
|
|
fence = S("Willow Tree Fence"),
|
|
fence_rail = S("Willow Tree Fence Rail"),
|
|
fence_gate = S("Willow Tree Fence Gate"),
|
|
},
|
|
rubber_tree = {
|
|
trunk = S("Rubber Tree Trunk"),
|
|
planks = S("Rubber Tree Planks"),
|
|
sapling = S("Rubber Tree Sapling"),
|
|
leaves = S("Rubber Tree Leaves"),
|
|
trunk_stair = S("Rubber Tree Trunk Stair"),
|
|
trunk_slab = S("Rubber Tree Trunk Slab"),
|
|
planks_stair = S("Rubber Tree Planks Stair"),
|
|
planks_slab = S("Rubber Tree Planks Slab"),
|
|
fence = S("Rubber Tree Fence"),
|
|
fence_rail = S("Rubber Tree Fence Rail"),
|
|
fence_gate = S("Rubber Tree Fence Gate"),
|
|
},
|
|
fir = {
|
|
trunk = S("Douglas Fir Trunk"),
|
|
planks = S("Douglas Fir Planks"),
|
|
sapling = S("Douglas Fir Sapling"),
|
|
leaves = S("Douglas Fir Leaves"),
|
|
trunk_stair = S("Douglas Fir Trunk Stair"),
|
|
trunk_slab = S("Douglas Fir Trunk Slab"),
|
|
planks_stair = S("Douglas Fir Planks Stair"),
|
|
planks_slab = S("Douglas Fir Planks Slab"),
|
|
fence = S("Douglas Fir Fence"),
|
|
fence_rail = S("Douglas Fir Fence Rail"),
|
|
fence_gate = S("Douglas Fir Fence Gate"),
|
|
},
|
|
jungletree = {
|
|
trunk = S("Jungle Tree Trunk"),
|
|
planks = S("Jungle Tree Planks"),
|
|
sapling = S("Jungle Tree Sapling"),
|
|
leaves = S("Jungle Tree Leaves"),
|
|
trunk_stair = S("Jungle Tree Trunk Stair"),
|
|
trunk_slab = S("Jungle Tree Trunk Slab"),
|
|
planks_stair = S("Jungle Tree Planks Stair"),
|
|
planks_slab = S("Jungle Tree Planks Slab"),
|
|
fence = S("Jungle Tree Fence"),
|
|
fence_rail = S("Jungle Tree Fence Rail"),
|
|
fence_gate = S("Jungle Tree Fence Gate"),
|
|
},
|
|
}
|
|
|
|
|
|
-- local dirs1 = { 21, 20, 23, 22, 21 }
|
|
local dirs2 = { 12, 9, 18, 7, 12 }
|
|
-- local dirs3 = { 14, 11, 16, 5, 14 }
|
|
|
|
local moretrees_new_leaves_drawtype = "allfaces_optional"
|
|
local moretrees_plantlike_leaves_visual_scale = 1
|
|
|
|
if moretrees.plantlike_leaves then
|
|
moretrees_new_leaves_drawtype = "plantlike"
|
|
moretrees_plantlike_leaves_visual_scale = math.sqrt(2)
|
|
end
|
|
|
|
-- redefine default leaves to handle plantlike and/or leaf decay options
|
|
|
|
if minetest.get_modpath("default") and moretrees.plantlike_leaves then
|
|
minetest.override_item(xcompat.materials.apple_leaves, {
|
|
inventory_image = minetest.inventorycube("default_leaves.png"),
|
|
drawtype = "plantlike",
|
|
visual_scale = math.sqrt(2)
|
|
})
|
|
end
|
|
|
|
-- redefine default jungle leaves for same
|
|
|
|
if minetest.get_modpath("default") and moretrees.plantlike_leaves then
|
|
minetest.override_item(xcompat.materials.jungle_leaves, {
|
|
inventory_image = minetest.inventorycube("default_jungleleaves.png"),
|
|
drawtype = "plantlike",
|
|
visual_scale = math.sqrt(2)
|
|
})
|
|
end
|
|
|
|
for i in ipairs(moretrees.treelist) do
|
|
local treename = moretrees.treelist[i][1]
|
|
local fruit = moretrees.treelist[i][3]
|
|
local fruitdesc = moretrees.treelist[i][4]
|
|
local selbox = moretrees.treelist[i][5]
|
|
local vscale = moretrees.treelist[i][6]
|
|
|
|
local saptex = moretrees.treelist[i][7]
|
|
|
|
-- player will get a sapling with 1/100 chance
|
|
-- player will get leaves only if he/she gets no saplings,
|
|
-- this is because max_items is 1
|
|
|
|
local droprarity = 100
|
|
local decay = moretrees.leafdecay_radius
|
|
|
|
if treename == "palm" then
|
|
droprarity = 20
|
|
decay = moretrees.palm_leafdecay_radius
|
|
elseif treename == "date_palm" then
|
|
decay = moretrees.date_palm_leafdecay_radius
|
|
end
|
|
|
|
-- dont register planks/nodes for trees from default and small varients for trees
|
|
local split_tn = treename:split("_")
|
|
if treename ~= "jungletree" and treename ~= "pine" and split_tn[2]~="small" then
|
|
|
|
saptex = "moretrees_"..treename.."_sapling.png"
|
|
|
|
minetest.register_node("moretrees:"..treename.."_trunk", {
|
|
description = moretrees.treedesc[treename].trunk,
|
|
tiles = {
|
|
"moretrees_"..treename.."_trunk_top.png",
|
|
"moretrees_"..treename.."_trunk_top.png",
|
|
"moretrees_"..treename.."_trunk.png"
|
|
},
|
|
paramtype2 = "facedir",
|
|
is_ground_content = false,
|
|
groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
|
|
sounds = xcompat.sounds.node_sound_wood_defaults(),
|
|
on_place = minetest.rotate_node,
|
|
})
|
|
|
|
if moretrees.enable_planks then
|
|
minetest.register_node("moretrees:"..treename.."_planks", {
|
|
description = moretrees.treedesc[treename].planks,
|
|
tiles = {"moretrees_"..treename.."_wood.png"},
|
|
is_ground_content = false,
|
|
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
|
|
sounds = xcompat.sounds.node_sound_wood_defaults(),
|
|
})
|
|
end
|
|
|
|
local moretrees_leaves_inventory_image = nil
|
|
local moretrees_new_leaves_waving = nil
|
|
|
|
if moretrees.plantlike_leaves then
|
|
moretrees_leaves_inventory_image = minetest.inventorycube("moretrees_"..treename.."_leaves.png")
|
|
else
|
|
moretrees_new_leaves_waving = 1
|
|
end
|
|
|
|
minetest.register_node("moretrees:"..treename.."_leaves", {
|
|
description = moretrees.treedesc[treename].leaves,
|
|
drawtype = moretrees_new_leaves_drawtype,
|
|
waving = moretrees_new_leaves_waving,
|
|
visual_scale = moretrees_plantlike_leaves_visual_scale,
|
|
tiles = { "moretrees_"..treename.."_leaves.png" },
|
|
inventory_image = moretrees_leaves_inventory_image,
|
|
paramtype = "light",
|
|
is_ground_content = false,
|
|
groups = {snappy = 3, flammable = 2, leaves = 1, moretrees_leaves = 1, leafdecay = 1},
|
|
sounds = xcompat.sounds.node_sound_leaves_defaults(),
|
|
|
|
drop = {
|
|
max_items = 1,
|
|
items = {
|
|
{items = {"moretrees:"..treename.."_sapling"}, rarity = droprarity },
|
|
{items = {"moretrees:"..treename.."_leaves"} }
|
|
}
|
|
},
|
|
})
|
|
|
|
if minetest.get_modpath("moreblocks") then
|
|
|
|
stairsplus:register_all(
|
|
"moretrees",
|
|
treename.."_trunk",
|
|
"moretrees:"..treename.."_trunk",
|
|
{
|
|
groups = { snappy=1, choppy=2, oddly_breakable_by_hand=1, flammable=2, not_in_creative_inventory=1 },
|
|
tiles = {
|
|
"moretrees_"..treename.."_trunk_top.png",
|
|
"moretrees_"..treename.."_trunk_top.png",
|
|
"moretrees_"..treename.."_trunk.png"
|
|
},
|
|
description = moretrees.treedesc[treename].trunk,
|
|
drop = treename.."_trunk",
|
|
}
|
|
)
|
|
|
|
if moretrees.enable_planks then
|
|
stairsplus:register_all(
|
|
"moretrees",
|
|
treename.."_planks",
|
|
"moretrees:"..treename.."_planks",
|
|
{
|
|
groups = { snappy=1, choppy=2, oddly_breakable_by_hand=2, flammable=3, not_in_creative_inventory=1 },
|
|
tiles = { "moretrees_"..treename.."_wood.png" },
|
|
description = moretrees.treedesc[treename].planks,
|
|
drop = treename.."_planks",
|
|
}
|
|
)
|
|
end
|
|
elseif minetest.get_modpath("stairs") then
|
|
stairs.register_stair_and_slab(
|
|
"moretrees_"..treename.."_trunk",
|
|
"moretrees:"..treename.."_trunk",
|
|
{ snappy=1, choppy=2, oddly_breakable_by_hand=1, flammable=2 },
|
|
{ "moretrees_"..treename.."_trunk_top.png",
|
|
"moretrees_"..treename.."_trunk_top.png",
|
|
"moretrees_"..treename.."_trunk.png"
|
|
},
|
|
moretrees.treedesc[treename].trunk_stair,
|
|
moretrees.treedesc[treename].trunk_slab,
|
|
xcompat.sounds.node_sound_wood_defaults()
|
|
)
|
|
|
|
if moretrees.enable_planks then
|
|
stairs.register_stair_and_slab(
|
|
"moretrees_"..treename.."_planks",
|
|
"moretrees:"..treename.."_planks",
|
|
{ snappy=1, choppy=2, oddly_breakable_by_hand=2, flammable=3 },
|
|
{ "moretrees_"..treename.."_wood.png" },
|
|
moretrees.treedesc[treename].planks_stair,
|
|
moretrees.treedesc[treename].planks_slab,
|
|
xcompat.sounds.node_sound_wood_defaults()
|
|
)
|
|
end
|
|
|
|
end
|
|
|
|
if minetest.get_modpath("default") and moretrees.enable_planks then
|
|
local planks_name = "moretrees:" .. treename .. "_planks"
|
|
local planks_tile = "moretrees_" .. treename .. "_wood.png"
|
|
default.register_fence("moretrees:" .. treename .. "_fence", {
|
|
description = moretrees.treedesc[treename].fence,
|
|
texture = planks_tile,
|
|
inventory_image = "default_fence_overlay.png^" .. planks_tile ..
|
|
"^default_fence_overlay.png^[makealpha:255,126,126",
|
|
wield_image = "default_fence_overlay.png^" .. planks_tile ..
|
|
"^default_fence_overlay.png^[makealpha:255,126,126",
|
|
material = planks_name,
|
|
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
|
|
sounds = xcompat.sounds.node_sound_wood_defaults()
|
|
})
|
|
default.register_fence_rail("moretrees:" .. treename .. "_fence_rail", {
|
|
description = moretrees.treedesc[treename].fence_rail,
|
|
texture = planks_tile,
|
|
inventory_image = "default_fence_rail_overlay.png^" .. planks_tile ..
|
|
"^default_fence_rail_overlay.png^[makealpha:255,126,126",
|
|
wield_image = "default_fence_rail_overlay.png^" .. planks_tile ..
|
|
"^default_fence_rail_overlay.png^[makealpha:255,126,126",
|
|
material = planks_name,
|
|
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
|
|
sounds = xcompat.sounds.node_sound_wood_defaults()
|
|
})
|
|
if minetest.global_exists("doors") then
|
|
doors.register_fencegate("moretrees:" .. treename .. "_gate", {
|
|
description = moretrees.treedesc[treename].fence_gate,
|
|
texture = planks_tile,
|
|
material = planks_name,
|
|
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}
|
|
})
|
|
end
|
|
end
|
|
end
|
|
|
|
-- the default game provides jungle tree and pine saplings.
|
|
if treename~="jungletree" and treename ~= "pine" then
|
|
local regular_groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1,sapling=1}
|
|
if minetest.settings:get_bool("creative_mode", false) then
|
|
regular_groups["not_in_creative_inventory"]=1
|
|
end
|
|
|
|
minetest.register_node("moretrees:"..treename.."_sapling", {
|
|
description = moretrees.treedesc[treename].sapling,
|
|
drawtype = "plantlike",
|
|
tiles = {split_tn[2] and split_tn[2]=="small" and "moretrees_" .. treename .. "_sapling.png" or saptex},
|
|
inventory_image = split_tn[2] and split_tn[2]=="small" and "moretrees_" .. treename .. "_sapling.png" or saptex,
|
|
paramtype = "light",
|
|
paramtype2 = "waving",
|
|
walkable = false,
|
|
is_ground_content = true,
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
|
|
},
|
|
groups = regular_groups,
|
|
sounds = xcompat.sounds.node_sound_default(),
|
|
on_place = function(itemstack, placer, pointed_thing)
|
|
itemstack = xcompat.functions.sapling_on_place(itemstack, placer, pointed_thing,
|
|
"moretrees:" ..treename.. "_sapling",
|
|
-- minp, maxp to be checked, relative to sapling pos
|
|
-- minp_relative.y = 1 because sapling pos has been checked
|
|
{x = -3, y = 1, z = -3},
|
|
{x = 3, y = 6, z = 3},
|
|
-- maximum interval of interior volume check
|
|
4)
|
|
|
|
return itemstack
|
|
end,
|
|
on_construct = function(pos)
|
|
minetest.get_node_timer(pos):start(300)
|
|
end,
|
|
on_timer = function(pos, elapsed)
|
|
if moretrees.can_grow(pos, treename) then
|
|
--moretrees["grow_" .. treename](pos)
|
|
minetest.set_node(pos, {name="air"})
|
|
if type(moretrees["spawn_" .. treename .. "_object"])=="string" then
|
|
local split = moretrees["spawn_" .. treename .. "_object"]:split(".")
|
|
moretrees[split[2]](pos)
|
|
else
|
|
minetest.spawn_tree(pos, moretrees["spawn_" .. treename .. "_object"])
|
|
end
|
|
else
|
|
minetest.get_node_timer(pos):start(300)
|
|
end
|
|
end,
|
|
})
|
|
end
|
|
|
|
local ongen_groups = {
|
|
snappy = 2,
|
|
dig_immediate = 3,
|
|
flammable = 2,
|
|
attached_node = 1,
|
|
sapling = 1,
|
|
moretrees_ongen = 1,
|
|
not_in_creative_inventory = 1
|
|
}
|
|
if minetest.settings:get_bool("creative_mode", false) then
|
|
ongen_groups["not_in_creative_inventory"]=nil
|
|
end
|
|
minetest.register_node("moretrees:"..treename.."_sapling_ongen", {
|
|
description = S("@1 (fast growth)", moretrees.treedesc[treename].sapling),
|
|
drawtype = "plantlike",
|
|
tiles = {split_tn[2] and split_tn[2]=="small" and "moretrees_" .. treename .. "_sapling.png" or saptex,},
|
|
inventory_image = split_tn[2] and split_tn[2]=="small" and "moretrees_" .. treename .. "_sapling.png" or saptex,
|
|
paramtype = "light",
|
|
paramtype2 = "waving",
|
|
walkable = false,
|
|
is_ground_content = true,
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
|
|
},
|
|
groups = ongen_groups,
|
|
sounds = xcompat.sounds.node_sound_default(),
|
|
drop = "moretrees:"..treename.."_sapling",
|
|
on_place = function(itemstack, placer, pointed_thing)
|
|
itemstack = xcompat.functions.sapling_on_place(itemstack, placer, pointed_thing,
|
|
"moretrees:" ..treename.. "_sapling_ongen",
|
|
-- minp, maxp to be checked, relative to sapling pos
|
|
-- minp_relative.y = 1 because sapling pos has been checked
|
|
{x = -3, y = 1, z = -3},
|
|
{x = 3, y = 6, z = 3},
|
|
-- maximum interval of interior volume check
|
|
4)
|
|
|
|
return itemstack
|
|
end,
|
|
on_construct = function(pos)
|
|
minetest.get_node_timer(pos):start(2)
|
|
end,
|
|
on_timer = function(pos, elapsed)
|
|
if moretrees.can_grow(pos, treename) then
|
|
--moretrees["grow_" .. treename](pos)
|
|
minetest.set_node(pos, {name="air"})
|
|
if type(moretrees["spawn_" .. treename .. "_object"])=="string" then
|
|
local split = moretrees["spawn_" .. treename .. "_object"]:split(".")
|
|
moretrees[split[2]](pos)
|
|
else
|
|
minetest.spawn_tree(pos, moretrees["spawn_" .. treename .. "_object"])
|
|
end
|
|
else
|
|
minetest.get_node_timer(pos):start(300)
|
|
end
|
|
end,
|
|
})
|
|
|
|
local fruitname = nil
|
|
if fruit then
|
|
fruitname = "moretrees:"..fruit
|
|
minetest.register_node(fruitname, {
|
|
description = fruitdesc,
|
|
drawtype = "plantlike",
|
|
tiles = { "moretrees_"..fruit..".png" },
|
|
inventory_image = "moretrees_"..fruit..".png^[transformR180",
|
|
wield_image = "moretrees_"..fruit..".png^[transformR180",
|
|
visual_scale = vscale,
|
|
paramtype = "light",
|
|
sunlight_propagates = true,
|
|
is_ground_content = false,
|
|
walkable = false,
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = selbox
|
|
},
|
|
groups = {fleshy=3,dig_immediate=3,flammable=2, attached_node=1, leafdecay = 1, leafdecay_drop = 1},
|
|
sounds = xcompat.sounds.node_sound_default(),
|
|
after_place_node = function(pos, placer)
|
|
if placer:is_player() then
|
|
minetest.set_node(pos, {name = "moretrees:"..fruit, param2 = 1})
|
|
end
|
|
end
|
|
})
|
|
end
|
|
|
|
if treename ~= "jungletree"
|
|
and treename ~= "poplar_small"
|
|
and treename ~= "pine"
|
|
and minetest.get_modpath("default") then
|
|
default.register_leafdecay({
|
|
trunks = { "moretrees:"..treename.."_trunk" },
|
|
leaves = { "moretrees:"..treename.."_leaves", fruitname },
|
|
radius = decay,
|
|
})
|
|
end
|
|
|
|
minetest.register_abm({
|
|
nodenames = { "moretrees:"..treename.."_trunk_sideways" },
|
|
interval = 1,
|
|
chance = 1,
|
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
local fdir = node.param2 or 0
|
|
local nfdir = dirs2[fdir+1]
|
|
minetest.add_node(pos, {name = "moretrees:"..treename.."_trunk", param2 = nfdir})
|
|
end,
|
|
})
|
|
|
|
table.insert(moretrees.avoidnodes, "moretrees:"..treename.."_trunk")
|
|
|
|
if moretrees.spawn_saplings then
|
|
table.insert(moretrees.avoidnodes, "moretrees:"..treename.."_sapling")
|
|
table.insert(moretrees.avoidnodes, "moretrees:"..treename.."_sapling_ongen")
|
|
end
|
|
end
|
|
|
|
-- poplar saplings leaves
|
|
local poplar_leaves_drop = minetest.registered_nodes["moretrees:poplar_leaves"].drop
|
|
minetest.override_item("moretrees:poplar_leaves", {
|
|
drop = {
|
|
max_items = poplar_leaves_drop.max_items,
|
|
items = {
|
|
{items = {"moretrees:poplar_sapling"}, rarity = 1.33 * poplar_leaves_drop.items[1].rarity },
|
|
{items = {"moretrees:poplar_small_sapling"}, rarity = 1.33 * poplar_leaves_drop.items[1].rarity },
|
|
{items = {"moretrees:poplar_leaves"} }
|
|
}
|
|
}
|
|
})
|
|
|
|
-- Extra nodes for jungle trees:
|
|
|
|
local jungleleaves = {"yellow","red"}
|
|
local jungleleavesnames = {S("Yellow"), S("Red")}
|
|
for color = 1, #jungleleaves do
|
|
local leave_name = "moretrees:jungletree_leaves_"..jungleleaves[color]
|
|
|
|
local moretrees_leaves_inventory_image = nil
|
|
|
|
if moretrees.plantlike_leaves then
|
|
moretrees_leaves_inventory_image = minetest.inventorycube("moretrees_jungletree_leaves_"..jungleleaves[color]..".png")
|
|
else
|
|
moretrees_new_leaves_waving = 1
|
|
end
|
|
|
|
minetest.register_node(leave_name, {
|
|
description = S("Jungle Tree Leaves (@1)", jungleleavesnames[color]),
|
|
drawtype = moretrees_new_leaves_drawtype,
|
|
waving = moretrees_new_leaves_waving,
|
|
visual_scale = moretrees_plantlike_leaves_visual_scale,
|
|
tiles = {"moretrees_jungletree_leaves_"..jungleleaves[color]..".png"},
|
|
inventory_image = moretrees_leaves_inventory_image,
|
|
paramtype = "light",
|
|
is_ground_content = false,
|
|
groups = {snappy = 3, flammable = 2, leaves = 1, moretrees_leaves = 1, leafdecay = 3 },
|
|
drop = minetest.get_modpath("default") and {
|
|
max_items = 1,
|
|
items = {
|
|
{items = {"default:junglesapling"}, rarity = 100 },
|
|
{items = {"moretrees:jungletree_leaves_"..jungleleaves[color]} }
|
|
}
|
|
} or nil,
|
|
sounds = xcompat.sounds.node_sound_leaves_defaults(),
|
|
})
|
|
end
|
|
|
|
-- To get Moretrees to generate its own jungle trees among the default mapgen
|
|
-- we need our own copy of that node, which moretrees will match against.
|
|
|
|
if minetest.get_modpath("default") then
|
|
local jungle_tree = table.copy(minetest.registered_nodes["default:jungletree"])
|
|
jungle_tree.drop = "default:jungletree"
|
|
minetest.register_node("moretrees:jungletree_trunk", jungle_tree)
|
|
|
|
default.register_leafdecay({
|
|
trunks = { "default:jungletree", "moretrees:jungletree_trunk" },
|
|
leaves = { xcompat.materials.jungle_leaves, "moretrees:jungletree_leaves_yellow", "moretrees:jungletree_leaves_red" },
|
|
radius = moretrees.leafdecay_radius,
|
|
})
|
|
end
|
|
|
|
-- Extra needles for firs
|
|
|
|
local moretrees_leaves_inventory_image = nil
|
|
|
|
if moretrees.plantlike_leaves then
|
|
moretrees_leaves_inventory_image = minetest.inventorycube("moretrees_fir_leaves_bright.png")
|
|
end
|
|
|
|
minetest.register_node("moretrees:fir_leaves_bright", {
|
|
drawtype = moretrees_new_leaves_drawtype,
|
|
waving = moretrees_new_leaves_waving,
|
|
visual_scale = moretrees_plantlike_leaves_visual_scale,
|
|
description = S("Douglas Fir Leaves (Bright)"),
|
|
tiles = { "moretrees_fir_leaves_bright.png" },
|
|
inventory_image = moretrees_leaves_inventory_image,
|
|
paramtype = "light",
|
|
is_ground_content = false,
|
|
groups = {snappy = 3, flammable = 2, leaves = 1, moretrees_leaves = 1, leafdecay = 3 },
|
|
drop = {
|
|
max_items = 1,
|
|
items = {
|
|
{items = {'moretrees:fir_sapling'}, rarity = 100 },
|
|
{items = {'moretrees:fir_leaves_bright'} }
|
|
}
|
|
},
|
|
sounds = xcompat.sounds.node_sound_leaves_defaults()
|
|
})
|
|
|
|
if minetest.get_modpath("default") then
|
|
default.register_leafdecay({
|
|
trunks = { "moretrees:fir_trunk" },
|
|
leaves = { "moretrees:fir_leaves", "moretrees:fir_leaves_bright" },
|
|
radius = moretrees.leafdecay_radius,
|
|
})
|
|
end
|
|
|
|
|
|
if minetest.get_modpath("default") and moretrees.enable_redefine_apple then
|
|
local appledef = table.copy(minetest.registered_nodes["default:apple"])
|
|
appledef.groups.attached_node = 1
|
|
minetest.register_node(":default:apple", appledef)
|
|
end
|
|
|
|
table.insert(moretrees.avoidnodes, "default:jungletree")
|
|
table.insert(moretrees.avoidnodes, "default:pine_tree")
|
|
table.insert(moretrees.avoidnodes, "default:acacia_tree")
|
|
table.insert(moretrees.avoidnodes, "moretrees:fir_trunk")
|
|
table.insert(moretrees.avoidnodes, "default:tree")
|
|
|
|
if moretrees.spawn_saplings then
|
|
table.insert(moretrees.avoidnodes, "snow:sapling_pine")
|
|
table.insert(moretrees.avoidnodes, "default:junglesapling")
|
|
table.insert(moretrees.avoidnodes, "default:pine_sapling")
|
|
end
|
|
|
|
-- "empty" (tapped) rubber tree nodes
|
|
|
|
minetest.register_node("moretrees:rubber_tree_trunk_empty", {
|
|
description = S("Rubber Tree Trunk (Empty)"),
|
|
tiles = {
|
|
"moretrees_rubber_tree_trunk_top.png",
|
|
"moretrees_rubber_tree_trunk_top.png",
|
|
"moretrees_rubber_tree_trunk_empty.png"
|
|
},
|
|
groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
|
|
sounds = xcompat.sounds.node_sound_wood_defaults(),
|
|
paramtype2 = "facedir",
|
|
is_ground_content = false,
|
|
on_place = minetest.rotate_node,
|
|
})
|
|
|
|
minetest.register_abm({
|
|
nodenames = { "moretrees:rubber_tree_trunk_empty_sideways" },
|
|
interval = 1,
|
|
chance = 1,
|
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
local fdir = node.param2 or 0
|
|
local nfdir = dirs2[fdir+1]
|
|
minetest.add_node(pos, {name = "moretrees:rubber_tree_trunk_empty", param2 = nfdir})
|
|
end,
|
|
})
|
|
|
|
-- For compatibility with old nodes, recently-changed nodes, and default nodes
|
|
|
|
minetest.register_alias("technic:rubber_tree_full", "moretrees:rubber_tree_trunk")
|
|
minetest.register_alias("farming_plus:rubber_tree_full", "moretrees:rubber_tree_trunk")
|
|
minetest.register_alias("farming:rubber_tree_full", "moretrees:rubber_tree_trunk")
|
|
|
|
minetest.register_alias("technic:rubber_leaves", "moretrees:rubber_tree_leaves")
|
|
minetest.register_alias("farming_plus:rubber_leaves", "moretrees:rubber_tree_leaves")
|
|
minetest.register_alias("farming:rubber_leaves", "moretrees:rubber_tree_leaves")
|
|
|
|
minetest.register_alias("technic:rubber_tree_sapling", "moretrees:rubber_tree_sapling")
|
|
minetest.register_alias("farming_plus:rubber_sapling", "moretrees:rubber_tree_sapling")
|
|
minetest.register_alias("farming:rubber_sapling", "moretrees:rubber_tree_sapling")
|
|
|
|
minetest.register_alias("moretrees:conifer_trunk", "moretrees:fir_trunk")
|
|
minetest.register_alias("moretrees:conifer_trunk_sideways", "moretrees:fir_trunk_sideways")
|
|
minetest.register_alias("moretrees:conifer_leaves", "moretrees:fir_leaves")
|
|
minetest.register_alias("moretrees:conifer_leaves_bright", "moretrees:fir_leaves_bright")
|
|
minetest.register_alias("moretrees:conifer_sapling", "moretrees:fir_sapling")
|
|
|
|
minetest.register_alias("conifers:trunk", "moretrees:fir_trunk")
|
|
minetest.register_alias("conifers:trunk_reversed", "moretrees:fir_trunk_sideways")
|
|
minetest.register_alias("conifers:leaves", "moretrees:fir_leaves")
|
|
minetest.register_alias("conifers:leaves_special", "moretrees:fir_leaves_bright")
|
|
minetest.register_alias("conifers:sapling", "moretrees:fir_sapling")
|
|
|
|
minetest.register_alias("moretrees:jungletree_sapling", "default:junglesapling")
|
|
minetest.register_alias("moretrees:jungletree_trunk_sideways", "moreblocks:horizontal_jungle_tree")
|
|
minetest.register_alias("moretrees:jungletree_planks", "default:junglewood")
|
|
minetest.register_alias("moretrees:jungletree_leaves_green", xcompat.materials.jungle_leaves)
|
|
|
|
minetest.register_alias("moretrees:acacia_trunk", "default:acacia_tree")
|
|
minetest.register_alias("moretrees:acacia_planks", "default:acacia_wood")
|
|
minetest.register_alias("moretrees:acacia_sapling", "default:acacia_sapling")
|
|
minetest.register_alias("moretrees:acacia_leaves", "default:acacia_leaves")
|
|
|
|
minetest.register_alias("moretrees:pine_trunk", "moretrees:cedar_trunk")
|
|
minetest.register_alias("moretrees:pine_planks", "moretrees:cedar_planks")
|
|
minetest.register_alias("moretrees:pine_sapling", "moretrees:cedar_sapling")
|
|
minetest.register_alias("moretrees:pine_leaves", "moretrees:cedar_leaves")
|
|
minetest.register_alias("moretrees:pine_cone", "moretrees:cedar_cone")
|
|
minetest.register_alias("moretrees:pine_nuts", "moretrees:cedar_nuts")
|
|
minetest.register_alias("moretrees:pine_sapling_ongen", "moretrees:cedar_sapling_ongen")
|
|
|
|
minetest.register_alias("moretrees:dates", "moretrees:dates_f4")
|