001 package net.minecraft.src; 002 003 public abstract class GenLayer 004 { 005 /** seed from World#getWorldSeed that is used in the LCG prng */ 006 private long worldGenSeed; 007 008 /** parent GenLayer that was provided via the constructor */ 009 protected GenLayer parent; 010 011 /** 012 * final part of the LCG prng that uses the chunk X, Z coords along with the other two seeds to generate 013 * pseudorandom numbers 014 */ 015 private long chunkSeed; 016 017 /** base seed to the LCG prng provided via the constructor */ 018 private long baseSeed; 019 020 /** 021 * the first array item is a linked list of the bioms, the second is the zoom function, the third is the same as the 022 * first. 023 */ 024 public static GenLayer[] initializeAllBiomeGenerators(long par0, WorldType par2WorldType) 025 { 026 GenLayerIsland var3 = new GenLayerIsland(1L); 027 GenLayerFuzzyZoom var9 = new GenLayerFuzzyZoom(2000L, var3); 028 GenLayerAddIsland var10 = new GenLayerAddIsland(1L, var9); 029 GenLayerZoom var11 = new GenLayerZoom(2001L, var10); 030 var10 = new GenLayerAddIsland(2L, var11); 031 GenLayerAddSnow var12 = new GenLayerAddSnow(2L, var10); 032 var11 = new GenLayerZoom(2002L, var12); 033 var10 = new GenLayerAddIsland(3L, var11); 034 var11 = new GenLayerZoom(2003L, var10); 035 var10 = new GenLayerAddIsland(4L, var11); 036 GenLayerAddMushroomIsland var16 = new GenLayerAddMushroomIsland(5L, var10); 037 byte var4 = 4; 038 039 if (par2WorldType == WorldType.LARGE_BIOMES) 040 { 041 var4 = 6; 042 } 043 044 GenLayer var5 = GenLayerZoom.func_75915_a(1000L, var16, 0); 045 GenLayerRiverInit var13 = new GenLayerRiverInit(100L, var5); 046 var5 = GenLayerZoom.func_75915_a(1000L, var13, var4 + 2); 047 GenLayerRiver var14 = new GenLayerRiver(1L, var5); 048 GenLayerSmooth var15 = new GenLayerSmooth(1000L, var14); 049 GenLayer var6 = GenLayerZoom.func_75915_a(1000L, var16, 0); 050 GenLayerBiome var17 = new GenLayerBiome(200L, var6, par2WorldType); 051 var6 = GenLayerZoom.func_75915_a(1000L, var17, 2); 052 Object var18 = new GenLayerHills(1000L, var6); 053 054 for (int var7 = 0; var7 < var4; ++var7) 055 { 056 var18 = new GenLayerZoom((long)(1000 + var7), (GenLayer)var18); 057 058 if (var7 == 0) 059 { 060 var18 = new GenLayerAddIsland(3L, (GenLayer)var18); 061 } 062 063 if (var7 == 1) 064 { 065 var18 = new GenLayerShore(1000L, (GenLayer)var18); 066 } 067 068 if (var7 == 1) 069 { 070 var18 = new GenLayerSwampRivers(1000L, (GenLayer)var18); 071 } 072 } 073 074 GenLayerSmooth var19 = new GenLayerSmooth(1000L, (GenLayer)var18); 075 GenLayerRiverMix var20 = new GenLayerRiverMix(100L, var19, var15); 076 GenLayerVoronoiZoom var8 = new GenLayerVoronoiZoom(10L, var20); 077 var20.initWorldGenSeed(par0); 078 var8.initWorldGenSeed(par0); 079 return new GenLayer[] {var20, var8, var20}; 080 } 081 082 public GenLayer(long par1) 083 { 084 this.baseSeed = par1; 085 this.baseSeed *= this.baseSeed * 6364136223846793005L + 1442695040888963407L; 086 this.baseSeed += par1; 087 this.baseSeed *= this.baseSeed * 6364136223846793005L + 1442695040888963407L; 088 this.baseSeed += par1; 089 this.baseSeed *= this.baseSeed * 6364136223846793005L + 1442695040888963407L; 090 this.baseSeed += par1; 091 } 092 093 /** 094 * Initialize layer's local worldGenSeed based on its own baseSeed and the world's global seed (passed in as an 095 * argument). 096 */ 097 public void initWorldGenSeed(long par1) 098 { 099 this.worldGenSeed = par1; 100 101 if (this.parent != null) 102 { 103 this.parent.initWorldGenSeed(par1); 104 } 105 106 this.worldGenSeed *= this.worldGenSeed * 6364136223846793005L + 1442695040888963407L; 107 this.worldGenSeed += this.baseSeed; 108 this.worldGenSeed *= this.worldGenSeed * 6364136223846793005L + 1442695040888963407L; 109 this.worldGenSeed += this.baseSeed; 110 this.worldGenSeed *= this.worldGenSeed * 6364136223846793005L + 1442695040888963407L; 111 this.worldGenSeed += this.baseSeed; 112 } 113 114 /** 115 * Initialize layer's current chunkSeed based on the local worldGenSeed and the (x,z) chunk coordinates. 116 */ 117 public void initChunkSeed(long par1, long par3) 118 { 119 this.chunkSeed = this.worldGenSeed; 120 this.chunkSeed *= this.chunkSeed * 6364136223846793005L + 1442695040888963407L; 121 this.chunkSeed += par1; 122 this.chunkSeed *= this.chunkSeed * 6364136223846793005L + 1442695040888963407L; 123 this.chunkSeed += par3; 124 this.chunkSeed *= this.chunkSeed * 6364136223846793005L + 1442695040888963407L; 125 this.chunkSeed += par1; 126 this.chunkSeed *= this.chunkSeed * 6364136223846793005L + 1442695040888963407L; 127 this.chunkSeed += par3; 128 } 129 130 /** 131 * returns a LCG pseudo random number from [0, x). Args: int x 132 */ 133 protected int nextInt(int par1) 134 { 135 int var2 = (int)((this.chunkSeed >> 24) % (long)par1); 136 137 if (var2 < 0) 138 { 139 var2 += par1; 140 } 141 142 this.chunkSeed *= this.chunkSeed * 6364136223846793005L + 1442695040888963407L; 143 this.chunkSeed += this.worldGenSeed; 144 return var2; 145 } 146 147 /** 148 * Returns a list of integer values generated by this layer. These may be interpreted as temperatures, rainfall 149 * amounts, or biomeList[] indices based on the particular GenLayer subclass. 150 */ 151 public abstract int[] getInts(int var1, int var2, int var3, int var4); 152 }