package micdoodle8.mods.galacticraft.api.prefab.world.gen;
import net.minecraft.util.BlockPos;
import net.minecraft.world.biome.BiomeCache;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraft.world.biome.WorldChunkManager;
import net.minecraft.world.gen.layer.IntCache;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
/**
* Do not include this prefab class in your released mod download.
* <p/>
* This chunk manager is used for single-biome dimensions, which is common on basic planets.
*/
public abstract class WorldChunkManagerSpace extends WorldChunkManager
{
private final BiomeCache biomeCache;
private final List<BiomeGenBase> biomesToSpawnIn;
public WorldChunkManagerSpace()
{
this.biomeCache = new BiomeCache(this);
this.biomesToSpawnIn = new ArrayList<BiomeGenBase>();
this.biomesToSpawnIn.add(this.getBiome());
}
@Override
public List getBiomesToSpawnIn()
{
return this.biomesToSpawnIn;
}
public BiomeGenBase func_180300_a(BlockPos p_180300_1_, BiomeGenBase p_180300_2_)
{
return this.getBiome();
}
@Override
public float[] getRainfall(float[] par1ArrayOfFloat, int par2, int par3, int par4, int par5)
{
if (par1ArrayOfFloat == null || par1ArrayOfFloat.length < par4 * par5)
{
par1ArrayOfFloat = new float[par4 * par5];
}
Arrays.fill(par1ArrayOfFloat, 0, par4 * par5, 0.0F);
return par1ArrayOfFloat;
}
@Override
public float getTemperatureAtHeight(float par1, int par2)
{
return par1;
}
@Override
public BiomeGenBase[] getBiomesForGeneration(BiomeGenBase[] par1ArrayOfBiomeGenBase, int par2, int par3, int par4, int par5)
{
IntCache.resetIntCache();
if (par1ArrayOfBiomeGenBase == null || par1ArrayOfBiomeGenBase.length < par4 * par5)
{
par1ArrayOfBiomeGenBase = new BiomeGenBase[par4 * par5];
}
for (int var7 = 0; var7 < par4 * par5; ++var7)
{
par1ArrayOfBiomeGenBase[var7] = this.getBiome();
}
return par1ArrayOfBiomeGenBase;
}
@Override
public BiomeGenBase[] loadBlockGeneratorData(BiomeGenBase[] par1ArrayOfBiomeGenBase, int par2, int par3, int par4, int par5)
{
return this.getBiomeGenAt(par1ArrayOfBiomeGenBase, par2, par3, par4, par5, true);
}
@Override
public BiomeGenBase[] getBiomeGenAt(BiomeGenBase[] listToReuse, int x, int z, int width, int length, boolean cacheFlag)
{
IntCache.resetIntCache();
if (listToReuse == null || listToReuse.length < width * length)
{
listToReuse = new BiomeGenBase[width * length];
}
if (cacheFlag && width == 16 && length == 16 && (x & 15) == 0 && (z & 15) == 0)
{
final BiomeGenBase[] var9 = this.biomeCache.getCachedBiomes(x, z);
System.arraycopy(var9, 0, listToReuse, 0, width * length);
return listToReuse;
}
else
{
for (int var8 = 0; var8 < width * length; ++var8)
{
listToReuse[var8] = this.getBiome();
}
return listToReuse;
}
}
@SuppressWarnings("rawtypes")
@Override
public boolean areBiomesViable(int par1, int par2, int par3, List par4List)
{
return par4List.contains(this.getBiome());
}
@SuppressWarnings("rawtypes")
@Override
public BlockPos findBiomePosition(int par1, int par2, int par3, List par4List, Random par5Random)
{
final int var6 = par1 - par3 >> 2;
final int var7 = par2 - par3 >> 2;
final int var8 = par1 + par3 >> 2;
final int var10 = var8 - var6 + 1;
final int var16 = var6 + 0 % var10 << 2;
final int var17 = var7 + 0 / var10 << 2;
return new BlockPos(var16, 0, var17);
}
@Override
public void cleanupCache()
{
this.biomeCache.cleanupCache();
}
public abstract BiomeGenBase getBiome();
}