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