001    package net.minecraft.src;
002    
003    import java.util.Arrays;
004    import java.util.List;
005    import java.util.Random;
006    
007    public class MapGenVillage extends MapGenStructure
008    {
009        /** A list of all the biomes villages can spawn in. */
010        public static List villageSpawnBiomes = Arrays.asList(new BiomeGenBase[] {BiomeGenBase.plains, BiomeGenBase.desert});
011    
012        /** World terrain type, 0 for normal, 1 for flat map */
013        private final int terrainType;
014    
015        public MapGenVillage(int par1)
016        {
017            this.terrainType = par1;
018        }
019    
020        protected boolean canSpawnStructureAtCoords(int par1, int par2)
021        {
022            byte var3 = 32;
023            byte var4 = 8;
024            int var5 = par1;
025            int var6 = par2;
026    
027            if (par1 < 0)
028            {
029                par1 -= var3 - 1;
030            }
031    
032            if (par2 < 0)
033            {
034                par2 -= var3 - 1;
035            }
036    
037            int var7 = par1 / var3;
038            int var8 = par2 / var3;
039            Random var9 = this.worldObj.setRandomSeed(var7, var8, 10387312);
040            var7 *= var3;
041            var8 *= var3;
042            var7 += var9.nextInt(var3 - var4);
043            var8 += var9.nextInt(var3 - var4);
044    
045            if (var5 == var7 && var6 == var8)
046            {
047                boolean var10 = this.worldObj.getWorldChunkManager().areBiomesViable(var5 * 16 + 8, var6 * 16 + 8, 0, villageSpawnBiomes);
048    
049                if (var10)
050                {
051                    return true;
052                }
053            }
054    
055            return false;
056        }
057    
058        protected StructureStart getStructureStart(int par1, int par2)
059        {
060            return new StructureVillageStart(this.worldObj, this.rand, par1, par2, this.terrainType);
061        }
062    }