package erebus.blocks; import java.util.List; import java.util.Random; import net.minecraft.block.BlockSapling; import net.minecraft.block.SoundType; import net.minecraft.block.properties.IProperty; import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.block.statemap.StateMap; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraft.world.gen.feature.WorldGenerator; import net.minecraftforge.event.terraingen.TerrainGen; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import erebus.Erebus; import erebus.ModTabs; import erebus.world.feature.plant.WorldGenBamboo; import erebus.world.feature.tree.WorldGenAsperTree; import erebus.world.feature.tree.WorldGenBalsamTree; import erebus.world.feature.tree.WorldGenBaobabTree; import erebus.world.feature.tree.WorldGenCypressTree; import erebus.world.feature.tree.WorldGenErebusHugeTree; import erebus.world.feature.tree.WorldGenEucalyptusTree; import erebus.world.feature.tree.WorldGenMarshwoodTree; import erebus.world.feature.tree.WorldGenMossbarkTree; public class BlockSaplingErebus extends BlockSapling { private final EnumWood wood; public BlockSaplingErebus(EnumWood wood) { this.wood = wood; setSoundType(SoundType.PLANT); setCreativeTab(ModTabs.BLOCKS); Erebus.proxy.setCustomStateMap(this, new StateMap.Builder().ignore(new IProperty[] { TYPE }).build()); } @Override @SideOnly(Side.CLIENT) public void getSubBlocks(Item item, CreativeTabs tab, List<ItemStack> list) { list.add(new ItemStack(item)); } @Override public void updateTick(World world, BlockPos pos, IBlockState state, Random rand) { if (!world.isRemote) { super.updateTick(world, pos, state, rand); if (world.getLightFromNeighbors(pos.up()) >= 9 && rand.nextInt(7) == 0) { if(this != EnumWood.BAMBOO.getSapling()) grow(world, pos, state, rand); else world.setBlockState(pos, EnumWood.BAMBOO.getLog().getDefaultState(), 3); } } } @Override public void generateTree(World world, BlockPos pos, IBlockState state, Random rand) { if (!TerrainGen.saplingGrowTree(world, rand, pos)) return; WorldGenerator worldGen = null; switch (wood) { case EUCALYPTUS: worldGen = new WorldGenEucalyptusTree(); break; case BAOBAB: worldGen = new WorldGenBaobabTree(); break; case ASPER: worldGen = new WorldGenAsperTree(); break; case CYPRESS: worldGen = new WorldGenCypressTree(); break; case MAHOGANY: worldGen = new WorldGenErebusHugeTree(true, true, wood); ((WorldGenErebusHugeTree) worldGen).prepare(20 + rand.nextInt(5)); break; case BALSAM: worldGen = new WorldGenBalsamTree(); break; case MOSSBARK: worldGen = new WorldGenMossbarkTree(); break; case MARSHWOOD: worldGen = new WorldGenMarshwoodTree(); break; case BAMBOO: worldGen = new WorldGenBamboo(true, false); break; default: break; } if (worldGen == null) return; world.setBlockToAir(pos); if (!worldGen.generate(world, rand, pos)) world.setBlockState(pos, (IBlockState) this); } }