001    package net.minecraft.src;
002    
003    import java.util.ArrayList;
004    import java.util.Arrays;
005    import java.util.Iterator;
006    import java.util.List;
007    import java.util.Map;
008    import java.util.Random;
009    import java.util.Map.Entry;
010    
011    public class MapGenScatteredFeature extends MapGenStructure
012    {
013        private static List biomelist = Arrays.asList(new BiomeGenBase[] {BiomeGenBase.desert, BiomeGenBase.desertHills, BiomeGenBase.jungle, BiomeGenBase.jungleHills, BiomeGenBase.swampland});
014    
015        /** contains possible spawns for scattered features */
016        private List scatteredFeatureSpawnList;
017    
018        /** the maximum distance between scattered features */
019        private int maxDistanceBetweenScatteredFeatures;
020    
021        /** the minimum distance between scattered features */
022        private int minDistanceBetweenScatteredFeatures;
023    
024        public MapGenScatteredFeature()
025        {
026            this.scatteredFeatureSpawnList = new ArrayList();
027            this.maxDistanceBetweenScatteredFeatures = 32;
028            this.minDistanceBetweenScatteredFeatures = 8;
029            this.scatteredFeatureSpawnList.add(new SpawnListEntry(EntityWitch.class, 1, 1, 1));
030        }
031    
032        public MapGenScatteredFeature(Map par1Map)
033        {
034            this();
035            Iterator var2 = par1Map.entrySet().iterator();
036    
037            while (var2.hasNext())
038            {
039                Entry var3 = (Entry)var2.next();
040    
041                if (((String)var3.getKey()).equals("distance"))
042                {
043                    this.maxDistanceBetweenScatteredFeatures = MathHelper.parseIntWithDefaultAndMax((String)var3.getValue(), this.maxDistanceBetweenScatteredFeatures, this.minDistanceBetweenScatteredFeatures + 1);
044                }
045            }
046        }
047    
048        protected boolean canSpawnStructureAtCoords(int par1, int par2)
049        {
050            int var3 = par1;
051            int var4 = par2;
052    
053            if (par1 < 0)
054            {
055                par1 -= this.maxDistanceBetweenScatteredFeatures - 1;
056            }
057    
058            if (par2 < 0)
059            {
060                par2 -= this.maxDistanceBetweenScatteredFeatures - 1;
061            }
062    
063            int var5 = par1 / this.maxDistanceBetweenScatteredFeatures;
064            int var6 = par2 / this.maxDistanceBetweenScatteredFeatures;
065            Random var7 = this.worldObj.setRandomSeed(var5, var6, 14357617);
066            var5 *= this.maxDistanceBetweenScatteredFeatures;
067            var6 *= this.maxDistanceBetweenScatteredFeatures;
068            var5 += var7.nextInt(this.maxDistanceBetweenScatteredFeatures - this.minDistanceBetweenScatteredFeatures);
069            var6 += var7.nextInt(this.maxDistanceBetweenScatteredFeatures - this.minDistanceBetweenScatteredFeatures);
070    
071            if (var3 == var5 && var4 == var6)
072            {
073                BiomeGenBase var8 = this.worldObj.getWorldChunkManager().getBiomeGenAt(var3 * 16 + 8, var4 * 16 + 8);
074                Iterator var9 = biomelist.iterator();
075    
076                while (var9.hasNext())
077                {
078                    BiomeGenBase var10 = (BiomeGenBase)var9.next();
079    
080                    if (var8 == var10)
081                    {
082                        return true;
083                    }
084                }
085            }
086    
087            return false;
088        }
089    
090        protected StructureStart getStructureStart(int par1, int par2)
091        {
092            return new StructureScatteredFeatureStart(this.worldObj, this.rand, par1, par2);
093        }
094    
095        /**
096         * returns possible spawns for scattered features
097         */
098        public List getScatteredFeatureSpawnList()
099        {
100            return this.scatteredFeatureSpawnList;
101        }
102    }