package com.insane.illuminatedbows.blocks;
import java.util.List;
import java.util.Random;
import com.insane.illuminatedbows.Config;
import cpw.mods.fml.common.eventhandler.Event;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.BlockSapling;
import net.minecraft.block.IGrowable;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import net.minecraftforge.event.entity.player.BonemealEvent;
public class BlockIlluminatedSapling extends BlockSapling implements IGrowable{
private Random boneRand = new Random();
public BlockIlluminatedSapling() {
super();
float f = 0.4F;
this.setBlockBounds(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, f * 2.0F, 0.5F + f);
this.setCreativeTab(CreativeTabs.tabDecorations);
this.setStepSound(Block.soundTypeGrass);
this.setLightLevel(0.87F);
this.setBlockName("illuminatedSapling");
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@SideOnly(Side.CLIENT)
@Override
public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List) {
par3List.add(new ItemStack(par1, 1, 0));
}
@Override
public void updateTick(World par1World, int par2, int par3, int par4, Random par5Random)
{
if (!par1World.isRemote)
{
super.updateTick(par1World, par2, par3, par4, par5Random);
if (par1World.getBlockLightValue(par2, par3 + 1, par4) >= 9 && par5Random.nextInt(7) == 0)
{
this.growTree(par1World, par2, par3, par4);
}
}
}
@SideOnly(Side.CLIENT)
@Override
public void registerBlockIcons(IIconRegister par1IconRegister) {
this.blockIcon = par1IconRegister.registerIcon("illuminatedbows:illuminatedsapling");
}
@SideOnly(Side.CLIENT)
@Override
public IIcon getIcon(int par1, int par2) {
return this.blockIcon;
}
@SubscribeEvent
public void onUseBonemeal(BonemealEvent event)
{
if (event.block==IlluminatedBlocks.illuminatedSapling) {
if (boneRand.nextInt(Config.boneMealChance)==0) {
if (!event.world.isRemote) {
this.growTree(event.world, event.x, event.y, event.z);
}
}
event.setResult(Event.Result.ALLOW);
}
}
private void growTree(World par1World, int par2, int par3, int par4) {
//Check for space around tree
boolean space=true;
for (int i=1; i<8; i++) { //Space for the wood blocks.
if (!par1World.isAirBlock(par2, par3+i, par4)) {
space=false;
break;
}
}
if (space) { //Generate tree
par1World.setBlock(par2,par3,par4, IlluminatedBlocks.illuminatedWood);
for (int i=1; i<6; i++) {
if (par1World.isAirBlock(par2, par3+i, par4)) {
par1World.setBlock(par2, par3+i, par4, IlluminatedBlocks.illuminatedWood);
}
}
par1World.setBlock(par2,par3+6,par4,IlluminatedBlocks.illuminatedLeaves); //Top Leaf
for (int i=3; i<7; i=i+2) { //Thin leaf layers
if (par1World.isAirBlock(par2+1, par3+i, par4)) {
par1World.setBlock(par2+1,par3+i, par4, IlluminatedBlocks.illuminatedLeaves);
} if (par1World.isAirBlock(par2-1, par3+i, par4)) {
par1World.setBlock(par2-1,par3+i, par4, IlluminatedBlocks.illuminatedLeaves);
} if (par1World.isAirBlock(par2, par3+i, par4+1)) {
par1World.setBlock(par2,par3+i, par4+1, IlluminatedBlocks.illuminatedLeaves);
} if (par1World.isAirBlock(par2, par3+i, par4-1)) {
par1World.setBlock(par2,par3+i, par4-1, IlluminatedBlocks.illuminatedLeaves);
}
}
for (int i=2; i<6; i=i+2) {
for (int z=-1; z<=1; z++) {
if (par1World.isAirBlock(par2-2, par3+i, par4+z)) {
par1World.setBlock(par2-2,par3+i,par4+z, IlluminatedBlocks.illuminatedLeaves);
}
}
for (int z=-2; z<=2; z++) {
if (par1World.isAirBlock(par2-1, par3+i, par4+z)) {
par1World.setBlock(par2-1,par3+i,par4+z, IlluminatedBlocks.illuminatedLeaves);
}
}
for (int z=-2; z<=2; z++) {
if (z!=0) {
if (par1World.isAirBlock(par2, par3+i, par4+z)) {
par1World.setBlock(par2,par3+i,par4+z, IlluminatedBlocks.illuminatedLeaves);
}
}
}
for (int z=-2; z<=2; z++) {
if (par1World.isAirBlock(par2+1, par3+i, par4+z)) {
par1World.setBlock(par2+1,par3+i,par4+z, IlluminatedBlocks.illuminatedLeaves);
}
}
for (int z=-1; z<=1; z++) {
if (par1World.isAirBlock(par2+2, par3+i, par4+z)) {
par1World.setBlock(par2+2,par3+i,par4+z, IlluminatedBlocks.illuminatedLeaves);
}
}
}
}
}
@Override
public boolean func_149851_a(World world, int x, int y, int z, boolean isClient)
{
this.updateTick(world, x, y, z, world.rand);
return super.func_149851_a(world, x, y, z, isClient);
}
@Override
public void func_149853_b(World world, Random rand, int x, int y, int z)
{
this.updateTick(world, x, y, z, rand);
}
}