minetest.register_node("technic:rubber_leaves", {
drawtype = "allfaces_optional",
visual_scale = 1.3,
- tiles = {"default_leaves.png"},
+ tiles = {"technic_rubber_leaves.png"},
paramtype = "light",
groups = {snappy=3, leafdecay=3, flammable=2, not_in_creative_inventory=1},
drop = {
interval = 60,
chance = 20,
action = function(pos, node)
- generate_tree(pos, "technic:rubber_tree_full", "technic:rubber_leaves", {"default:dirt", "default:dirt_with_grass"})
+ rubber_tree={
+ axiom="FFFFA",
+ rules_a="[&FFBFA]////[&BFFFA]////[&FBFFA]",
+ rules_b="[&FFA]////[&FFA]////[&FFA]",
+ trunk="technic:rubber_tree_full",
+ leaves="technic:rubber_leaves",
+ angle=35,
+ iterations=3,
+ random_level=1,
+ thin_trunks=false;
+ fruit_tree=false,
+ fruit=""
+ }
+ minetest.env:spawn_tree(pos,rubber_tree)
end
})
local tmp = {x=(maxp.x-minp.x)/2+minp.x, y=(maxp.y-minp.y)/2+minp.y, z=(maxp.z-minp.z)/2+minp.z}
local pos = minetest.env:find_node_near(tmp, maxp.x-minp.x, {"default:dirt_with_grass"})
if pos ~= nil then
- generate_tree({x=pos.x, y=pos.y+1, z=pos.z}, "technic:rubber_tree_full", "technic:rubber_leaves", {"default:dirt", "default:dirt_with_grass"})
+ rubber_tree={
+ axiom="FFFFA",
+ rules_a="[&FFBFA]////[&BFFFA]////[&FBFFA]",
+ rules_b="[&FFA]////[&FFA]////[&FFA]",
+ trunk="technic:rubber_tree_full",
+ leaves="technic:rubber_leaves",
+ angle=35,
+ iterations=3,
+ random_level=1,
+ thin_trunks=false;
+ fruit_tree=false,
+ fruit=""
+ }
+ minetest.env:spawn_tree({x=pos.x, y=pos.y+1, z=pos.z},rubber_tree)
end
end)
recipe = "technic:rubber_sapling",
burntime = 10
})
-
-function generate_tree(pos, trunk, leaves, underground, replacements)
- pos.y = pos.y-1
- local nodename = minetest.env:get_node(pos).name
- local ret = true
- for _,name in ipairs(underground) do
- if nodename == name then
- ret = false
- break
- end
- end
- pos.y = pos.y+1
- if ret or minetest.env:get_node_light(pos) < 8 then
- return
- end
-
- node = {name = ""}
- for dy=1,4 do
- pos.y = pos.y+dy
- if minetest.env:get_node(pos).name ~= "air" then
- return
- end
- pos.y = pos.y-dy
- end
- node.name = trunk
- for dy=0,4 do
- pos.y = pos.y+dy
- minetest.env:set_node(pos, node)
- pos.y = pos.y-dy
- end
-
- if not replacements then
- replacements = {}
- end
-
- node.name = leaves
- pos.y = pos.y+3
- for dx=-2,2 do
- for dz=-2,2 do
- for dy=0,3 do
- pos.x = pos.x+dx
- pos.y = pos.y+dy
- pos.z = pos.z+dz
-
- if dx == 0 and dz == 0 and dy==3 then
- if minetest.env:get_node(pos).name == "air" and math.random(1, 5) <= 4 then
- minetest.env:set_node(pos, node)
- for name,rarity in pairs(replacements) do
- if math.random(1, rarity) == 1 then
- minetest.env:set_node(pos, {name=name})
- end
- end
- end
- elseif dx == 0 and dz == 0 and dy==4 then
- if minetest.env:get_node(pos).name == "air" and math.random(1, 5) <= 4 then
- minetest.env:set_node(pos, node)
- for name,rarity in pairs(replacements) do
- if math.random(1, rarity) == 1 then
- minetest.env:set_node(pos, {name=name})
- end
- end
- end
- elseif math.abs(dx) ~= 2 and math.abs(dz) ~= 2 then
- if minetest.env:get_node(pos).name == "air" then
- minetest.env:set_node(pos, node)
- for name,rarity in pairs(replacements) do
- if math.random(1, rarity) == 1 then
- minetest.env:set_node(pos, {name=name})
- end
- end
- end
- else
- if math.abs(dx) ~= 2 or math.abs(dz) ~= 2 then
- if minetest.env:get_node(pos).name == "air" and math.random(1, 5) <= 4 then
- minetest.env:set_node(pos, node)
- for name,rarity in pairs(replacements) do
- if math.random(1, rarity) == 1 then
- minetest.env:set_node(pos, {name=name})
- end
- end
- end
- end
- end
-
- pos.x = pos.x-dx
- pos.y = pos.y-dy
- pos.z = pos.z-dz
- end
- end
- end
-end