| | |
| | | -- Code of rubber tree by PilzAdam |
| | | |
| | | minetest.register_node("technic:rubber_sapling", { |
| | | description = "Rubber Tree Sapling", |
| | | drawtype = "plantlike", |
| | |
| | | |
| | | minetest.register_node("technic:rubber_tree_full", { |
| | | description = "Rubber Tree", |
| | | tiles = {"default_tree_top.png", "default_tree_top.png", "farming_rubber_tree_full.png"}, |
| | | tiles = {"default_tree_top.png", "default_tree_top.png", "technic_rubber_tree_full.png"}, |
| | | groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2}, |
| | | drop = "default:tree", |
| | | sounds = default.node_sound_wood_defaults(), |
| | |
| | | |
| | | |
| | | minetest.register_node("technic:rubber_tree_empty", { |
| | | tiles = {"default_tree_top.png", "default_tree_top.png", "farming_rubber_tree_empty.png"}, |
| | | tiles = {"default_tree_top.png", "default_tree_top.png", "technic_rubber_tree_empty.png"}, |
| | | groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2, not_in_creative_inventory=1}, |
| | | drop = "default:tree", |
| | | sounds = default.node_sound_wood_defaults(), |
| | |
| | | interval = 60, |
| | | chance = 20, |
| | | action = function(pos, node) |
| | | farming:generate_tree(pos, "technic:rubber_tree_full", "technic:rubber_leaves", {"default:dirt", "default:dirt_with_grass"}) |
| | | technic:generate_tree(pos, "technic:rubber_tree_full", "technic:rubber_leaves", {"default:dirt", "default:dirt_with_grass"}) |
| | | 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 |
| | | farming: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"}) |
| | | technic: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"}) |
| | | 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 |