/*******************************************************************************
* AbyssalCraft
* Copyright (c) 2012 - 2017 Shinoow.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v3
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/lgpl-3.0.txt
*
* Contributors:
* Shinoow - implementation
******************************************************************************/
package com.shinoow.abyssalcraft.common.world.biome;
import java.util.Random;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.block.state.pattern.BlockMatcher;
import net.minecraft.init.Blocks;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.chunk.ChunkPrimer;
import net.minecraft.world.gen.feature.WorldGenMinable;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import com.shinoow.abyssalcraft.api.biome.IDreadlandsBiome;
import com.shinoow.abyssalcraft.api.block.ACBlocks;
import com.shinoow.abyssalcraft.common.entity.EntityAbygolem;
import com.shinoow.abyssalcraft.common.entity.EntityChagarothFist;
import com.shinoow.abyssalcraft.common.entity.EntityDreadSpawn;
import com.shinoow.abyssalcraft.common.entity.EntityDreadgolem;
import com.shinoow.abyssalcraft.common.entity.EntityDreadguard;
import com.shinoow.abyssalcraft.common.entity.EntityDreadling;
import com.shinoow.abyssalcraft.common.entity.EntityGreaterDreadSpawn;
import com.shinoow.abyssalcraft.common.entity.EntityLesserDreadbeast;
import com.shinoow.abyssalcraft.common.entity.demon.EntityDemonChicken;
import com.shinoow.abyssalcraft.common.entity.demon.EntityDemonCow;
import com.shinoow.abyssalcraft.common.entity.demon.EntityDemonPig;
import com.shinoow.abyssalcraft.common.entity.demon.EntityDemonSheep;
import com.shinoow.abyssalcraft.lib.ACConfig;
public class BiomeGenDreadlandsBase extends Biome implements IDreadlandsBiome {
@SuppressWarnings("unchecked")
public BiomeGenDreadlandsBase(BiomeProperties par1) {
super(par1);
topBlock = ACBlocks.dreadstone.getDefaultState();
fillerBlock = ACBlocks.dreadstone.getDefaultState();
theBiomeDecorator.treesPerChunk = -1;
theBiomeDecorator.flowersPerChunk= -1;
theBiomeDecorator.grassPerChunk = -1;
setMobSpawns();
}
public void setMobSpawns(){
spawnableMonsterList.clear();
spawnableCreatureList.clear();
spawnableWaterCreatureList.clear();
spawnableCaveCreatureList.clear();
spawnableCreatureList.add(new SpawnListEntry(EntityAbygolem.class, 60, 1, 3));
spawnableMonsterList.add(new SpawnListEntry(EntityDreadgolem.class, 60, 1, 3));
spawnableMonsterList.add(new SpawnListEntry(EntityDreadSpawn.class, 30, 1, 2));
spawnableMonsterList.add(new SpawnListEntry(EntityDreadling.class, 40, 1, 2));
spawnableMonsterList.add(new SpawnListEntry(EntityChagarothFist.class, 2, 1, 1));
spawnableMonsterList.add(new SpawnListEntry(EntityDemonPig.class, 5, 1, 2));
spawnableMonsterList.add(new SpawnListEntry(EntityDemonCow.class, 5, 1, 2));
spawnableMonsterList.add(new SpawnListEntry(EntityDemonChicken.class, 5, 1, 2));
spawnableMonsterList.add(new SpawnListEntry(EntityDemonSheep.class, 5, 1, 2));
spawnableMonsterList.add(new SpawnListEntry(EntityGreaterDreadSpawn.class, 5, 1, 1));
spawnableMonsterList.add(new SpawnListEntry(EntityDreadguard.class, 8, 1, 1));
spawnableMonsterList.add(new SpawnListEntry(EntityLesserDreadbeast.class, 1, 0, 1));
}
@Override
public void decorate(World par1World, Random par2Random, BlockPos pos)
{
super.decorate(par1World, par2Random, pos);
if(ACConfig.generateDreadedAbyssalniteOre)
for(int rarity = 0; rarity < 8; rarity++) {
int veinSize = 4 + par2Random.nextInt(12);
int x = par2Random.nextInt(16) + 8;
int y = par2Random.nextInt(60);
int z = par2Random.nextInt(16) + 8;
new WorldGenMinable(ACBlocks.dreaded_abyssalnite_ore.getDefaultState(), veinSize, BlockMatcher.forBlock(ACBlocks.dreadstone)).generate(par1World, par2Random, pos.add(x, y, z));
}
for (int rarity = 0; rarity < 3; ++rarity)
{
int x = par2Random.nextInt(16) + 8;
int y = par2Random.nextInt(55);
int z = par2Random.nextInt(16) + 8;
new WorldGenMinable(ACBlocks.abyssalnite_stone.getDefaultState(), 16,
BlockMatcher.forBlock(ACBlocks.dreadstone)).generate(par1World, par2Random, pos.add(x, y, z));
}
}
@Override
@SideOnly(Side.CLIENT)
public int getSkyColorByTemp(float par1)
{
return 0;
}
@Override
@SideOnly(Side.CLIENT)
public int getGrassColorAtPos(BlockPos pos)
{
return 0x910000;
}
@Override
@SideOnly(Side.CLIENT)
public int getFoliageColorAtPos(BlockPos pos)
{
return 0x910000;
}
@Override
public void genTerrainBlocks(World world, Random rand, ChunkPrimer chunkPrimer, int x, int z, double d)
{
genDreadlandsTerrain(world, rand, chunkPrimer, x, z, d);
}
public final void genDreadlandsTerrain(World worldIn, Random rand, ChunkPrimer chunkPrimerIn, int x, int z, double d)
{
int i = worldIn.getSeaLevel();
IBlockState iblockstate = topBlock;
IBlockState iblockstate1 = fillerBlock;
int j = -1;
int k = (int)(d / 3.0D + 3.0D + rand.nextDouble() * 0.25D);
int l = x & 15;
int i1 = z & 15;
new BlockPos.MutableBlockPos();
for (int j1 = 255; j1 >= 0; --j1)
if (j1 <= rand.nextInt(5))
chunkPrimerIn.setBlockState(i1, j1, l, Blocks.BEDROCK.getDefaultState());
else
{
IBlockState iblockstate2 = chunkPrimerIn.getBlockState(i1, j1, l);
if (iblockstate2.getMaterial() == Material.AIR)
j = -1;
else if (iblockstate2.getBlock() == ACBlocks.dreadstone)
if (j == -1)
{
if (k <= 0)
{
iblockstate = null;
iblockstate1 = ACBlocks.dreadstone.getDefaultState();
}
else if (j1 >= i - 4 && j1 <= i + 1)
{
iblockstate = topBlock;
iblockstate1 = fillerBlock;
}
j = k;
if (j1 >= i - 1)
chunkPrimerIn.setBlockState(i1, j1, l, iblockstate);
else if (j1 < i - 7 - k)
{
iblockstate = null;
iblockstate1 = ACBlocks.dreadstone.getDefaultState();
chunkPrimerIn.setBlockState(i1, j1, l, ACBlocks.dreadstone.getDefaultState());
} else
chunkPrimerIn.setBlockState(i1, j1, l, iblockstate1);
}
else if (j > 0)
{
--j;
chunkPrimerIn.setBlockState(i1, j1, l, iblockstate1);
}
}
}
}