-- Code of rubber tree by PilzAdam

local S = core.get_translator("technic_worldgen")

local has_mcl = core.get_modpath("mcl_core")

core.register_node(":moretrees:rubber_tree_sapling", {
	description = S("Rubber Tree Sapling"),
	drawtype = "plantlike",
	tiles = {"technic_rubber_sapling.png"},
	inventory_image = "technic_rubber_sapling.png",
	wield_image = "technic_rubber_sapling.png",
	paramtype = "light",
	walkable = false,
	groups = {dig_immediate=3, flammable=2, sapling=1},
	sounds = technic.sounds.node_sound_defaults(),
})

core.register_craft({
	type = "fuel",
	recipe = "moretrees:rubber_tree_sapling",
	burntime = 10
})

core.register_node(":moretrees:rubber_tree_trunk", {
	description = S("Rubber Tree"),
	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, axey=1, handy=1},
	_mcl_blast_resistance = 2,
	_mcl_hardness = 2,
	sounds = technic.sounds.node_sound_wood_defaults(),
})

core.register_node(":moretrees:rubber_tree_trunk_empty", {
	description = S("Rubber Tree"),
	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, axey=1, handy=1},
	_mcl_blast_resistance = 2,
	_mcl_hardness = 2,
	sounds = technic.sounds.node_sound_wood_defaults(),
})

local leaves_drop = {
  max_items = 1,
  items = {
    {items = {"moretrees:rubber_tree_sapling"}, rarity = 20},
    {items = {"moretrees:rubber_tree_leaves"}}
  }
}

if has_mcl then
  leaves_drop.items = {
    {items = {"moretrees:rubber_tree_sapling"}, rarity = 20},
    {items = {"mcl_core:stick 1"}, rarity = 30},
    {items = {"mcl_core:stick 2"}, rarity = 40},
    {items = {"mcl_core:apple"}, rarity = 50}
  }
end

core.register_node(":moretrees:rubber_tree_leaves", {
	drawtype = "allfaces_optional",
	description = S("Rubber Tree Leaves"),
	tiles = {"technic_rubber_leaves.png"},
	paramtype = "light",
	groups = {snappy=3, leafdecay=3, flammable=2, leaves=1, swordy=1, handy=1},
	_mcl_blast_resistance = 0.2,
	_mcl_hardness = 0.2,
	_mcl_silk_touch_drop = true,
	drop = leaves_drop,
	sounds = technic.sounds.node_sound_leaves_defaults(),
})

technic.rubber_tree_model={
	axiom = "FFFFA",
	rules_a = "[&FFBFA]////[&BFFFA]////[&FBFFA]",
	rules_b = "[&FFA]////[&FFA]////[&FFA]",
	trunk = "moretrees:rubber_tree_trunk",
	leaves = "moretrees:rubber_tree_leaves",
	angle = 35,
	iterations = 3,
	random_level = 1,
	trunk_type = "double",
	thin_branches = true
}

core.register_abm({
	nodenames = {"moretrees:rubber_tree_sapling"},
	label = "Worldgen: grow rubber tree sapling",
	interval = 60,
	chance = 20,
	action = function(pos, node)
		core.remove_node(pos)
		core.spawn_tree(pos, technic.rubber_tree_model)
	end
})

if technic.config:get_bool("enable_rubber_tree_generation") then
	core.register_on_generated(function(minp, maxp, blockseed)
		if math.random(1, 100) > 5 then
			return
		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 = core.find_node_near(tmp, maxp.x - minp.x,
				{has_mcl and "mcl_core:dirt_with_grass" or "default:dirt_with_grass"})
		if pos ~= nil then
			core.spawn_tree({x=pos.x, y=pos.y+1, z=pos.z}, technic.rubber_tree_model)
		end
	end)
end
