package net.minecraft.village;
import java.util.Iterator;
import java.util.List;
import net.minecraft.entity.EnumCreatureType;
import net.minecraft.entity.monster.EntityZombie;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.ChunkCoordinates;
import net.minecraft.util.MathHelper;
import net.minecraft.util.Vec3;
import net.minecraft.world.SpawnerAnimals;
import net.minecraft.world.World;
public class VillageSiege
{
private World worldObj;
private boolean field_75535_b = false;
private int field_75536_c = -1;
private int field_75533_d;
private int field_75534_e;
/** Instance of Village. */
private Village theVillage;
private int field_75532_g;
private int field_75538_h;
private int field_75539_i;
public VillageSiege(World par1World)
{
this.worldObj = par1World;
}
/**
* Runs a single tick for the village siege
*/
public void tick()
{
boolean var1 = false;
if (var1)
{
if (this.field_75536_c == 2)
{
this.field_75533_d = 100;
return;
}
}
else
{
if (this.worldObj.isDaytime())
{
this.field_75536_c = 0;
return;
}
if (this.field_75536_c == 2)
{
return;
}
if (this.field_75536_c == 0)
{
float var2 = this.worldObj.getCelestialAngle(0.0F);
if ((double)var2 < 0.5D || (double)var2 > 0.501D)
{
return;
}
this.field_75536_c = this.worldObj.rand.nextInt(10) == 0 ? 1 : 2;
this.field_75535_b = false;
if (this.field_75536_c == 2)
{
return;
}
}
}
if (!this.field_75535_b)
{
if (!this.func_75529_b())
{
return;
}
this.field_75535_b = true;
}
if (this.field_75534_e > 0)
{
--this.field_75534_e;
}
else
{
this.field_75534_e = 2;
if (this.field_75533_d > 0)
{
this.spawnZombie();
--this.field_75533_d;
}
else
{
this.field_75536_c = 2;
}
}
}
private boolean func_75529_b()
{
List var1 = this.worldObj.playerEntities;
Iterator var2 = var1.iterator();
while (var2.hasNext())
{
EntityPlayer var3 = (EntityPlayer)var2.next();
this.theVillage = this.worldObj.villageCollectionObj.findNearestVillage((int)var3.posX, (int)var3.posY, (int)var3.posZ, 1);
if (this.theVillage != null && this.theVillage.getNumVillageDoors() >= 10 && this.theVillage.getTicksSinceLastDoorAdding() >= 20 && this.theVillage.getNumVillagers() >= 20)
{
ChunkCoordinates var4 = this.theVillage.getCenter();
float var5 = (float)this.theVillage.getVillageRadius();
boolean var6 = false;
int var7 = 0;
while (true)
{
if (var7 < 10)
{
this.field_75532_g = var4.posX + (int)((double)(MathHelper.cos(this.worldObj.rand.nextFloat() * (float)Math.PI * 2.0F) * var5) * 0.9D);
this.field_75538_h = var4.posY;
this.field_75539_i = var4.posZ + (int)((double)(MathHelper.sin(this.worldObj.rand.nextFloat() * (float)Math.PI * 2.0F) * var5) * 0.9D);
var6 = false;
Iterator var8 = this.worldObj.villageCollectionObj.getVillageList().iterator();
while (var8.hasNext())
{
Village var9 = (Village)var8.next();
if (var9 != this.theVillage && var9.isInRange(this.field_75532_g, this.field_75538_h, this.field_75539_i))
{
var6 = true;
break;
}
}
if (var6)
{
++var7;
continue;
}
}
if (var6)
{
return false;
}
Vec3 var10 = this.func_75527_a(this.field_75532_g, this.field_75538_h, this.field_75539_i);
if (var10 != null)
{
this.field_75534_e = 0;
this.field_75533_d = 20;
return true;
}
break;
}
}
}
return false;
}
private boolean spawnZombie()
{
Vec3 var1 = this.func_75527_a(this.field_75532_g, this.field_75538_h, this.field_75539_i);
if (var1 == null)
{
return false;
}
else
{
EntityZombie var2;
try
{
var2 = new EntityZombie(this.worldObj);
var2.initCreature();
var2.setVillager(false);
}
catch (Exception var4)
{
var4.printStackTrace();
return false;
}
var2.setLocationAndAngles(var1.xCoord, var1.yCoord, var1.zCoord, this.worldObj.rand.nextFloat() * 360.0F, 0.0F);
this.worldObj.spawnEntityInWorld(var2);
ChunkCoordinates var3 = this.theVillage.getCenter();
var2.setHomeArea(var3.posX, var3.posY, var3.posZ, this.theVillage.getVillageRadius());
return true;
}
}
private Vec3 func_75527_a(int par1, int par2, int par3)
{
for (int var4 = 0; var4 < 10; ++var4)
{
int var5 = par1 + this.worldObj.rand.nextInt(16) - 8;
int var6 = par2 + this.worldObj.rand.nextInt(6) - 3;
int var7 = par3 + this.worldObj.rand.nextInt(16) - 8;
if (this.theVillage.isInRange(var5, var6, var7) && SpawnerAnimals.canCreatureTypeSpawnAtLocation(EnumCreatureType.monster, this.worldObj, var5, var6, var7))
{
this.worldObj.getWorldVec3Pool().getVecFromPool((double)var5, (double)var6, (double)var7);
}
}
return null;
}
}