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