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