1
0
mirror of https://github.com/mt-mods/moretrees.git synced 2024-12-25 18:20:22 +01:00
moretrees/node_defs.lua
wsor4035 458536dbe6
switch to using xcompat (#46)
* switch to using xcompat

* fix readme

* fix dumb mistake
2024-09-06 22:41:48 +02:00

787 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")