001 package net.minecraft.src;
002
003 import java.util.ArrayList;
004 import java.util.Collections;
005 import java.util.List;
006 import java.util.Random;
007
008 public class MapGenStronghold extends MapGenStructure
009 {
010 private BiomeGenBase[] allowedBiomeGenBases;
011
012 /**
013 * is spawned false and set true once the defined BiomeGenBases were compared with the present ones
014 */
015 private boolean ranBiomeCheck;
016 private ChunkCoordIntPair[] structureCoords;
017
018 public MapGenStronghold()
019 {
020 this.allowedBiomeGenBases = new BiomeGenBase[] {BiomeGenBase.desert, BiomeGenBase.forest, BiomeGenBase.extremeHills, BiomeGenBase.swampland, BiomeGenBase.taiga, BiomeGenBase.icePlains, BiomeGenBase.iceMountains, BiomeGenBase.desertHills, BiomeGenBase.forestHills, BiomeGenBase.extremeHillsEdge, BiomeGenBase.jungle, BiomeGenBase.jungleHills};
021 this.structureCoords = new ChunkCoordIntPair[3];
022 }
023
024 protected boolean canSpawnStructureAtCoords(int par1, int par2)
025 {
026 if (!this.ranBiomeCheck)
027 {
028 Random var3 = new Random();
029 var3.setSeed(this.worldObj.getSeed());
030 double var4 = var3.nextDouble() * Math.PI * 2.0D;
031
032 for (int var6 = 0; var6 < this.structureCoords.length; ++var6)
033 {
034 double var7 = (1.25D + var3.nextDouble()) * 32.0D;
035 int var9 = (int)Math.round(Math.cos(var4) * var7);
036 int var10 = (int)Math.round(Math.sin(var4) * var7);
037 ArrayList var11 = new ArrayList();
038 Collections.addAll(var11, this.allowedBiomeGenBases);
039 ChunkPosition var12 = this.worldObj.getWorldChunkManager().findBiomePosition((var9 << 4) + 8, (var10 << 4) + 8, 112, var11, var3);
040
041 if (var12 != null)
042 {
043 var9 = var12.x >> 4;
044 var10 = var12.z >> 4;
045 }
046 else
047 {
048 System.out.println("Placed stronghold in INVALID biome at (" + var9 + ", " + var10 + ")");
049 }
050
051 this.structureCoords[var6] = new ChunkCoordIntPair(var9, var10);
052 var4 += (Math.PI * 2D) / (double)this.structureCoords.length;
053 }
054
055 this.ranBiomeCheck = true;
056 }
057
058 ChunkCoordIntPair[] var13 = this.structureCoords;
059 int var14 = var13.length;
060
061 for (int var5 = 0; var5 < var14; ++var5)
062 {
063 ChunkCoordIntPair var15 = var13[var5];
064
065 if (par1 == var15.chunkXPos && par2 == var15.chunkZPos)
066 {
067 System.out.println(par1 + ", " + par2);
068 return true;
069 }
070 }
071
072 return false;
073 }
074
075 /**
076 * Returns a list of other locations at which the structure generation has been run, or null if not relevant to this
077 * structure generator.
078 */
079 protected List getCoordList()
080 {
081 ArrayList var1 = new ArrayList();
082 ChunkCoordIntPair[] var2 = this.structureCoords;
083 int var3 = var2.length;
084
085 for (int var4 = 0; var4 < var3; ++var4)
086 {
087 ChunkCoordIntPair var5 = var2[var4];
088
089 if (var5 != null)
090 {
091 var1.add(var5.getChunkPosition(64));
092 }
093 }
094
095 return var1;
096 }
097
098 protected StructureStart getStructureStart(int par1, int par2)
099 {
100 StructureStrongholdStart var3;
101
102 for (var3 = new StructureStrongholdStart(this.worldObj, this.rand, par1, par2); var3.getComponents().isEmpty() || ((ComponentStrongholdStairs2)var3.getComponents().get(0)).portalRoom == null; var3 = new StructureStrongholdStart(this.worldObj, this.rand, par1, par2))
103 {
104 ;
105 }
106
107 return var3;
108 }
109 }