From 8ccf7faed16b76efff2ab88cf22a0a13869bb31b Mon Sep 17 00:00:00 2001 From: Maciej Kasatkin <mk@realbadangel.pl> Date: Sun, 07 Oct 2012 21:02:20 +0200 Subject: [PATCH] quick crash fix --- rubber.lua | 101 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 97 insertions(+), 4 deletions(-) diff --git a/rubber.lua b/rubber.lua index 38153ce..0d1f9b9 100644 --- a/rubber.lua +++ b/rubber.lua @@ -1,3 +1,5 @@ +-- Code of rubber tree by PilzAdam + minetest.register_node("technic:rubber_sapling", { description = "Rubber Tree Sapling", drawtype = "plantlike", @@ -12,7 +14,7 @@ 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(), @@ -30,7 +32,7 @@ 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(), @@ -69,7 +71,7 @@ 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 }) @@ -80,7 +82,7 @@ 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) @@ -91,3 +93,94 @@ 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 -- Gitblit v1.8.0