package net.minecraft.world.gen.layer;
import net.minecraft.world.WorldType;
import net.minecraftforge.common.*;
import net.minecraftforge.event.terraingen.*;
public abstract class GenLayer
{
/** seed from World#getWorldSeed that is used in the LCG prng */
private long worldGenSeed;
/** parent GenLayer that was provided via the constructor */
protected GenLayer parent;
/**
* final part of the LCG prng that uses the chunk X, Z coords along with the other two seeds to generate
* pseudorandom numbers
*/
private long chunkSeed;
/** base seed to the LCG prng provided via the constructor */
private long baseSeed;
/**
* the first array item is a linked list of the bioms, the second is the zoom function, the third is the same as the
* first.
*/
public static GenLayer[] initializeAllBiomeGenerators(long par0, WorldType par2WorldType)
{
GenLayerIsland var3 = new GenLayerIsland(1L);
GenLayerFuzzyZoom var9 = new GenLayerFuzzyZoom(2000L, var3);
GenLayerAddIsland var10 = new GenLayerAddIsland(1L, var9);
GenLayerZoom var11 = new GenLayerZoom(2001L, var10);
var10 = new GenLayerAddIsland(2L, var11);
GenLayerAddSnow var12 = new GenLayerAddSnow(2L, var10);
var11 = new GenLayerZoom(2002L, var12);
var10 = new GenLayerAddIsland(3L, var11);
var11 = new GenLayerZoom(2003L, var10);
var10 = new GenLayerAddIsland(4L, var11);
GenLayerAddMushroomIsland var16 = new GenLayerAddMushroomIsland(5L, var10);
byte var4 = 4;
if (par2WorldType == WorldType.LARGE_BIOMES)
{
var4 = 6;
}
var4 = getModdedBiomeSize(par2WorldType, var4);
GenLayer var5 = GenLayerZoom.func_75915_a(1000L, var16, 0);
GenLayerRiverInit var13 = new GenLayerRiverInit(100L, var5);
var5 = GenLayerZoom.func_75915_a(1000L, var13, var4 + 2);
GenLayerRiver var14 = new GenLayerRiver(1L, var5);
GenLayerSmooth var15 = new GenLayerSmooth(1000L, var14);
GenLayer var6 = GenLayerZoom.func_75915_a(1000L, var16, 0);
GenLayerBiome var17 = new GenLayerBiome(200L, var6, par2WorldType);
var6 = GenLayerZoom.func_75915_a(1000L, var17, 2);
Object var18 = new GenLayerHills(1000L, var6);
for (int var7 = 0; var7 < var4; ++var7)
{
var18 = new GenLayerZoom((long)(1000 + var7), (GenLayer)var18);
if (var7 == 0)
{
var18 = new GenLayerAddIsland(3L, (GenLayer)var18);
}
if (var7 == 1)
{
var18 = new GenLayerShore(1000L, (GenLayer)var18);
}
if (var7 == 1)
{
var18 = new GenLayerSwampRivers(1000L, (GenLayer)var18);
}
}
GenLayerSmooth var19 = new GenLayerSmooth(1000L, (GenLayer)var18);
GenLayerRiverMix var20 = new GenLayerRiverMix(100L, var19, var15);
GenLayerVoronoiZoom var8 = new GenLayerVoronoiZoom(10L, var20);
var20.initWorldGenSeed(par0);
var8.initWorldGenSeed(par0);
return new GenLayer[] {var20, var8, var20};
}
public GenLayer(long par1)
{
this.baseSeed = par1;
this.baseSeed *= this.baseSeed * 6364136223846793005L + 1442695040888963407L;
this.baseSeed += par1;
this.baseSeed *= this.baseSeed * 6364136223846793005L + 1442695040888963407L;
this.baseSeed += par1;
this.baseSeed *= this.baseSeed * 6364136223846793005L + 1442695040888963407L;
this.baseSeed += par1;
}
/**
* Initialize layer's local worldGenSeed based on its own baseSeed and the world's global seed (passed in as an
* argument).
*/
public void initWorldGenSeed(long par1)
{
this.worldGenSeed = par1;
if (this.parent != null)
{
this.parent.initWorldGenSeed(par1);
}
this.worldGenSeed *= this.worldGenSeed * 6364136223846793005L + 1442695040888963407L;
this.worldGenSeed += this.baseSeed;
this.worldGenSeed *= this.worldGenSeed * 6364136223846793005L + 1442695040888963407L;
this.worldGenSeed += this.baseSeed;
this.worldGenSeed *= this.worldGenSeed * 6364136223846793005L + 1442695040888963407L;
this.worldGenSeed += this.baseSeed;
}
/**
* Initialize layer's current chunkSeed based on the local worldGenSeed and the (x,z) chunk coordinates.
*/
public void initChunkSeed(long par1, long par3)
{
this.chunkSeed = this.worldGenSeed;
this.chunkSeed *= this.chunkSeed * 6364136223846793005L + 1442695040888963407L;
this.chunkSeed += par1;
this.chunkSeed *= this.chunkSeed * 6364136223846793005L + 1442695040888963407L;
this.chunkSeed += par3;
this.chunkSeed *= this.chunkSeed * 6364136223846793005L + 1442695040888963407L;
this.chunkSeed += par1;
this.chunkSeed *= this.chunkSeed * 6364136223846793005L + 1442695040888963407L;
this.chunkSeed += par3;
}
/**
* returns a LCG pseudo random number from [0, x). Args: int x
*/
protected int nextInt(int par1)
{
int var2 = (int)((this.chunkSeed >> 24) % (long)par1);
if (var2 < 0)
{
var2 += par1;
}
this.chunkSeed *= this.chunkSeed * 6364136223846793005L + 1442695040888963407L;
this.chunkSeed += this.worldGenSeed;
return var2;
}
/**
* Returns a list of integer values generated by this layer. These may be interpreted as temperatures, rainfall
* amounts, or biomeList[] indices based on the particular GenLayer subclass.
*/
public abstract int[] getInts(int var1, int var2, int var3, int var4);
public static byte getModdedBiomeSize(WorldType worldType, byte original)
{
WorldTypeEvent.BiomeSize event = new WorldTypeEvent.BiomeSize(worldType, original);
MinecraftForge.TERRAIN_GEN_BUS.post(event);
return event.newSize;
}
}