package net.minecraft.world.gen.layer;
import java.util.concurrent.Callable;
import net.minecraft.crash.CrashReport;
import net.minecraft.crash.CrashReportCategory;
import net.minecraft.util.ReportedException;
import net.minecraft.world.WorldType;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraft.world.gen.ChunkProviderSettings;
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 */
protected long baseSeed;
private static final String __OBFID = "CL_00000559";
public static GenLayer[] func_180781_a(long p_180781_0_, WorldType p_180781_2_, String p_180781_3_)
{
GenLayerIsland var4 = new GenLayerIsland(1L);
GenLayerFuzzyZoom var13 = new GenLayerFuzzyZoom(2000L, var4);
GenLayerAddIsland var14 = new GenLayerAddIsland(1L, var13);
GenLayerZoom var15 = new GenLayerZoom(2001L, var14);
var14 = new GenLayerAddIsland(2L, var15);
var14 = new GenLayerAddIsland(50L, var14);
var14 = new GenLayerAddIsland(70L, var14);
GenLayerRemoveTooMuchOcean var16 = new GenLayerRemoveTooMuchOcean(2L, var14);
GenLayerAddSnow var17 = new GenLayerAddSnow(2L, var16);
var14 = new GenLayerAddIsland(3L, var17);
GenLayerEdge var18 = new GenLayerEdge(2L, var14, GenLayerEdge.Mode.COOL_WARM);
var18 = new GenLayerEdge(2L, var18, GenLayerEdge.Mode.HEAT_ICE);
var18 = new GenLayerEdge(3L, var18, GenLayerEdge.Mode.SPECIAL);
var15 = new GenLayerZoom(2002L, var18);
var15 = new GenLayerZoom(2003L, var15);
var14 = new GenLayerAddIsland(4L, var15);
GenLayerAddMushroomIsland var19 = new GenLayerAddMushroomIsland(5L, var14);
GenLayerDeepOcean var20 = new GenLayerDeepOcean(4L, var19);
GenLayer var21 = GenLayerZoom.magnify(1000L, var20, 0);
ChunkProviderSettings var5 = null;
int var6 = 4;
int var7 = var6;
if (p_180781_2_ == WorldType.CUSTOMIZED && p_180781_3_.length() > 0)
{
var5 = ChunkProviderSettings.Factory.func_177865_a(p_180781_3_).func_177864_b();
var6 = var5.field_177780_G;
var7 = var5.field_177788_H;
}
if (p_180781_2_ == WorldType.LARGE_BIOMES)
{
var6 = 6;
}
GenLayer var8 = GenLayerZoom.magnify(1000L, var21, 0);
GenLayerRiverInit var22 = new GenLayerRiverInit(100L, var8);
GenLayerBiome var9 = new GenLayerBiome(200L, var21, p_180781_2_, p_180781_3_);
GenLayer var25 = GenLayerZoom.magnify(1000L, var9, 2);
GenLayerBiomeEdge var26 = new GenLayerBiomeEdge(1000L, var25);
GenLayer var10 = GenLayerZoom.magnify(1000L, var22, 2);
GenLayerHills var27 = new GenLayerHills(1000L, var26, var10);
var8 = GenLayerZoom.magnify(1000L, var22, 2);
var8 = GenLayerZoom.magnify(1000L, var8, var7);
GenLayerRiver var23 = new GenLayerRiver(1L, var8);
GenLayerSmooth var24 = new GenLayerSmooth(1000L, var23);
Object var28 = new GenLayerRareBiome(1001L, var27);
for (int var11 = 0; var11 < var6; ++var11)
{
var28 = new GenLayerZoom((long)(1000 + var11), (GenLayer)var28);
if (var11 == 0)
{
var28 = new GenLayerAddIsland(3L, (GenLayer)var28);
}
if (var11 == 1 || var6 == 1)
{
var28 = new GenLayerShore(1000L, (GenLayer)var28);
}
}
GenLayerSmooth var29 = new GenLayerSmooth(1000L, (GenLayer)var28);
GenLayerRiverMix var30 = new GenLayerRiverMix(100L, var29, var24);
GenLayerVoronoiZoom var12 = new GenLayerVoronoiZoom(10L, var30);
var30.initWorldGenSeed(p_180781_0_);
var12.initWorldGenSeed(p_180781_0_);
return new GenLayer[] {var30, var12, var30};
}
public GenLayer(long p_i2125_1_)
{
this.baseSeed = p_i2125_1_;
this.baseSeed *= this.baseSeed * 6364136223846793005L + 1442695040888963407L;
this.baseSeed += p_i2125_1_;
this.baseSeed *= this.baseSeed * 6364136223846793005L + 1442695040888963407L;
this.baseSeed += p_i2125_1_;
this.baseSeed *= this.baseSeed * 6364136223846793005L + 1442695040888963407L;
this.baseSeed += p_i2125_1_;
}
/**
* 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 p_75905_1_)
{
this.worldGenSeed = p_75905_1_;
if (this.parent != null)
{
this.parent.initWorldGenSeed(p_75905_1_);
}
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 p_75903_1_, long p_75903_3_)
{
this.chunkSeed = this.worldGenSeed;
this.chunkSeed *= this.chunkSeed * 6364136223846793005L + 1442695040888963407L;
this.chunkSeed += p_75903_1_;
this.chunkSeed *= this.chunkSeed * 6364136223846793005L + 1442695040888963407L;
this.chunkSeed += p_75903_3_;
this.chunkSeed *= this.chunkSeed * 6364136223846793005L + 1442695040888963407L;
this.chunkSeed += p_75903_1_;
this.chunkSeed *= this.chunkSeed * 6364136223846793005L + 1442695040888963407L;
this.chunkSeed += p_75903_3_;
}
/**
* returns a LCG pseudo random number from [0, x). Args: int x
*/
protected int nextInt(int p_75902_1_)
{
int var2 = (int)((this.chunkSeed >> 24) % (long)p_75902_1_);
if (var2 < 0)
{
var2 += p_75902_1_;
}
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 areaX, int areaY, int areaWidth, int areaHeight);
protected static boolean biomesEqualOrMesaPlateau(int biomeIDA, int biomeIDB)
{
if (biomeIDA == biomeIDB)
{
return true;
}
else if (biomeIDA != BiomeGenBase.mesaPlateau_F.biomeID && biomeIDA != BiomeGenBase.mesaPlateau.biomeID)
{
final BiomeGenBase var2 = BiomeGenBase.getBiome(biomeIDA);
final BiomeGenBase var3 = BiomeGenBase.getBiome(biomeIDB);
try
{
return var2 != null && var3 != null ? var2.isEqualTo(var3) : false;
}
catch (Throwable var7)
{
CrashReport var5 = CrashReport.makeCrashReport(var7, "Comparing biomes");
CrashReportCategory var6 = var5.makeCategory("Biomes being compared");
var6.addCrashSection("Biome A ID", Integer.valueOf(biomeIDA));
var6.addCrashSection("Biome B ID", Integer.valueOf(biomeIDB));
var6.addCrashSectionCallable("Biome A", new Callable()
{
private static final String __OBFID = "CL_00000560";
public String call()
{
return String.valueOf(var2);
}
});
var6.addCrashSectionCallable("Biome B", new Callable()
{
private static final String __OBFID = "CL_00000561";
public String call()
{
return String.valueOf(var3);
}
});
throw new ReportedException(var5);
}
}
else
{
return biomeIDB == BiomeGenBase.mesaPlateau_F.biomeID || biomeIDB == BiomeGenBase.mesaPlateau.biomeID;
}
}
/**
* returns true if the biomeId is one of the various ocean biomes.
*/
protected static boolean isBiomeOceanic(int p_151618_0_)
{
return p_151618_0_ == BiomeGenBase.ocean.biomeID || p_151618_0_ == BiomeGenBase.deepOcean.biomeID || p_151618_0_ == BiomeGenBase.frozenOcean.biomeID;
}
/**
* selects a random integer from a set of provided integers
*/
protected int selectRandom(int ... p_151619_1_)
{
return p_151619_1_[this.nextInt(p_151619_1_.length)];
}
/**
* returns the most frequently occurring number of the set, or a random number from those provided
*/
protected int selectModeOrRandom(int p_151617_1_, int p_151617_2_, int p_151617_3_, int p_151617_4_)
{
return p_151617_2_ == p_151617_3_ && p_151617_3_ == p_151617_4_ ? p_151617_2_ : (p_151617_1_ == p_151617_2_ && p_151617_1_ == p_151617_3_ ? p_151617_1_ : (p_151617_1_ == p_151617_2_ && p_151617_1_ == p_151617_4_ ? p_151617_1_ : (p_151617_1_ == p_151617_3_ && p_151617_1_ == p_151617_4_ ? p_151617_1_ : (p_151617_1_ == p_151617_2_ && p_151617_3_ != p_151617_4_ ? p_151617_1_ : (p_151617_1_ == p_151617_3_ && p_151617_2_ != p_151617_4_ ? p_151617_1_ : (p_151617_1_ == p_151617_4_ && p_151617_2_ != p_151617_3_ ? p_151617_1_ : (p_151617_2_ == p_151617_3_ && p_151617_1_ != p_151617_4_ ? p_151617_2_ : (p_151617_2_ == p_151617_4_ && p_151617_1_ != p_151617_3_ ? p_151617_2_ : (p_151617_3_ == p_151617_4_ && p_151617_1_ != p_151617_2_ ? p_151617_3_ : this.selectRandom(new int[] {p_151617_1_, p_151617_2_, p_151617_3_, p_151617_4_}))))))))));
}
}