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