001 package net.minecraft.src; 002 003 import java.util.Arrays; 004 import java.util.Iterator; 005 import java.util.List; 006 import java.util.Map; 007 import java.util.Random; 008 import java.util.Map.Entry; 009 010 public class MapGenVillage extends MapGenStructure 011 { 012 /** A list of all the biomes villages can spawn in. */ 013 public static List villageSpawnBiomes = Arrays.asList(new BiomeGenBase[] {BiomeGenBase.plains, BiomeGenBase.desert}); 014 015 /** World terrain type, 0 for normal, 1 for flat map */ 016 private int terrainType; 017 private int field_82665_g; 018 private int field_82666_h; 019 020 public MapGenVillage() 021 { 022 this.terrainType = 0; 023 this.field_82665_g = 32; 024 this.field_82666_h = 8; 025 } 026 027 public MapGenVillage(Map par1Map) 028 { 029 this(); 030 Iterator var2 = par1Map.entrySet().iterator(); 031 032 while (var2.hasNext()) 033 { 034 Entry var3 = (Entry)var2.next(); 035 036 if (((String)var3.getKey()).equals("size")) 037 { 038 this.terrainType = MathHelper.parseIntWithDefaultAndMax((String)var3.getValue(), this.terrainType, 0); 039 } 040 else if (((String)var3.getKey()).equals("distance")) 041 { 042 this.field_82665_g = MathHelper.parseIntWithDefaultAndMax((String)var3.getValue(), this.field_82665_g, this.field_82666_h + 1); 043 } 044 } 045 } 046 047 protected boolean canSpawnStructureAtCoords(int par1, int par2) 048 { 049 int var3 = par1; 050 int var4 = par2; 051 052 if (par1 < 0) 053 { 054 par1 -= this.field_82665_g - 1; 055 } 056 057 if (par2 < 0) 058 { 059 par2 -= this.field_82665_g - 1; 060 } 061 062 int var5 = par1 / this.field_82665_g; 063 int var6 = par2 / this.field_82665_g; 064 Random var7 = this.worldObj.setRandomSeed(var5, var6, 10387312); 065 var5 *= this.field_82665_g; 066 var6 *= this.field_82665_g; 067 var5 += var7.nextInt(this.field_82665_g - this.field_82666_h); 068 var6 += var7.nextInt(this.field_82665_g - this.field_82666_h); 069 070 if (var3 == var5 && var4 == var6) 071 { 072 boolean var8 = this.worldObj.getWorldChunkManager().areBiomesViable(var3 * 16 + 8, var4 * 16 + 8, 0, villageSpawnBiomes); 073 074 if (var8) 075 { 076 return true; 077 } 078 } 079 080 return false; 081 } 082 083 protected StructureStart getStructureStart(int par1, int par2) 084 { 085 return new StructureVillageStart(this.worldObj, this.rand, par1, par2, this.terrainType); 086 } 087 }