package com.pam.harvestcraft.blocks.growables;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import com.pam.harvestcraft.HarvestCraft;
import net.minecraft.block.Block;
import net.minecraft.block.IGrowable;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.PropertyInteger;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.FMLLog;
public class BlockPamFruitLog extends Block implements IGrowable, PamCropGrowable {
private static final int MATURE_AGE = 2;
private final BlockPamSapling sapling;
private final Item fruitItem;
public static final PropertyInteger AGE = PropertyInteger.create("age", 0, MATURE_AGE);
private String BASE_STAGE_ID = null;
public BlockPamFruitLog(BlockPamSapling sapling, Item fruit) {
super(Material.WOOD);
this.setHardness(2.0F);
this.setTickRandomly(true);
this.setDefaultState(this.blockState.getBaseState().withProperty(AGE, 0));
this.setCreativeTab(HarvestCraft.modTab);
this.setSoundType(SoundType.WOOD);
this.sapling = sapling;
this.fruitItem = fruit;
}
@Override
public PropertyInteger getAgeProperty() {
return AGE;
}
@Override
public boolean isWood(IBlockAccess world, BlockPos pos) {
return true;
}
@Override
public boolean canSustainLeaves(IBlockState state, IBlockAccess world, BlockPos pos) {
return true;
}
public Item getFruitItem() {
if(fruitItem == null) {
FMLLog.bigWarning("Cannot get fruit %s.", getUnlocalizedName());
}
return fruitItem;
}
public BlockPamSapling getSapling() {
return sapling;
}
public String getStageId(int stage) {
if(BASE_STAGE_ID == null) {
BASE_STAGE_ID =
getUnlocalizedName().replaceFirst("pam", "").replaceFirst("tile.", "").toLowerCase() + "_stage";
}
return BASE_STAGE_ID + stage;
}
@Override
public int getMatureAge() {
return MATURE_AGE;
}
@Override
public boolean isMature(IBlockState state) {
return getMetaFromState(state) >= getMatureAge();
}
@Override
public Item getItemDropped(IBlockState state, Random rand, int fortune) {
if(isMature(state)) {
return getFruitItem();
}
return null;
}
@Override
public BlockRenderLayer getBlockLayer() {
return BlockRenderLayer.CUTOUT;
}
@Override
public IBlockState getStateFromMeta(int meta) {
return this.getDefaultState().withProperty(AGE, meta);
}
@Override
public int getMetaFromState(IBlockState state) {
return state.getValue(AGE);
}
@Override
protected BlockStateContainer createBlockState() {
return new BlockStateContainer(this, AGE);
}
@Override
public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) {
int i = state.getValue(AGE);
if(i < MATURE_AGE && rand.nextInt(25) == 0) {
state = state.withProperty(AGE, i + 1);
worldIn.setBlockState(pos, state, 2);
}
super.updateTick(worldIn, pos, state, rand);
}
private void grow(World worldIn, BlockPos pos, IBlockState state) {
int i = state.getValue(AGE) + MathHelper.getInt(worldIn.rand, 2, 5);
if(i > MATURE_AGE) {
i = 2;
}
worldIn.setBlockState(pos, state.withProperty(AGE, i), 2);
}
@Override
public List<ItemStack> getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
final List<ItemStack> drops = new ArrayList<ItemStack>();
// drops.add(new ItemStack(this, 1));
if(getMetaFromState(state) >= MATURE_AGE) {
drops.add(new ItemStack(getFruitItem(), 1));
drops.add(new ItemStack(getFruitItem(), 1));
}
return drops;
}
@Override
public boolean canGrow(World worldIn, BlockPos pos, IBlockState state, boolean isClient) {
return !isMature(state);
}
@Override
public boolean canUseBonemeal(World worldIn, Random rand, BlockPos pos, IBlockState state) {
return true;
}
@Override
public void grow(World worldIn, Random rand, BlockPos pos, IBlockState state) {
this.grow(worldIn, pos, state);
}
}