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 }