package net.minecraft.server; import java.util.Iterator; import javax.annotation.Nullable; public class VillageSiege { private boolean a; private VillageSiege.State b; private int c; private int d; private int e; private int f; private int g; public VillageSiege() { this.b = VillageSiege.State.SIEGE_DONE; } public int a(WorldServer worldserver, boolean flag, boolean flag1) { if (!worldserver.isDay() && flag) { float f = worldserver.f(0.0F); if ((double) f == 0.5D) { this.b = worldserver.random.nextInt(10) == 0 ? VillageSiege.State.SIEGE_TONIGHT : VillageSiege.State.SIEGE_DONE; } if (this.b == VillageSiege.State.SIEGE_DONE) { return 0; } else { if (!this.a) { if (!this.a(worldserver)) { return 0; } this.a = true; } if (this.d > 0) { --this.d; return 0; } else { this.d = 2; if (this.c > 0) { this.b(worldserver); --this.c; } else { this.b = VillageSiege.State.SIEGE_DONE; } return 1; } } } else { this.b = VillageSiege.State.SIEGE_DONE; this.a = false; return 0; } } private boolean a(WorldServer worldserver) { Iterator iterator = worldserver.getPlayers().iterator(); while (iterator.hasNext()) { EntityHuman entityhuman = (EntityHuman) iterator.next(); if (!entityhuman.isSpectator()) { BlockPosition blockposition = entityhuman.getChunkCoordinates(); if (worldserver.b_(blockposition) && worldserver.getBiome(blockposition).q() != BiomeBase.Geography.MUSHROOM) { for (int i = 0; i < 10; ++i) { float f = worldserver.random.nextFloat() * 6.2831855F; this.e = blockposition.getX() + MathHelper.d(MathHelper.cos(f) * 32.0F); this.f = blockposition.getY(); this.g = blockposition.getZ() + MathHelper.d(MathHelper.sin(f) * 32.0F); if (this.a(worldserver, new BlockPosition(this.e, this.f, this.g)) != null) { this.d = 0; this.c = 20; break; } } return true; } } } return false; } private void b(WorldServer worldserver) { Vec3D vec3d = this.a(worldserver, new BlockPosition(this.e, this.f, this.g)); if (vec3d != null) { EntityZombie entityzombie; try { entityzombie = new EntityZombie(worldserver); entityzombie.prepare(worldserver, worldserver.getDamageScaler(new BlockPosition(entityzombie)), EnumMobSpawn.EVENT, (GroupDataEntity) null, (NBTTagCompound) null); } catch (Exception exception) { exception.printStackTrace(); return; } entityzombie.setPositionRotation(vec3d.x, vec3d.y, vec3d.z, worldserver.random.nextFloat() * 360.0F, 0.0F); worldserver.addEntity(entityzombie); } } @Nullable private Vec3D a(WorldServer worldserver, BlockPosition blockposition) { for (int i = 0; i < 10; ++i) { int j = blockposition.getX() + worldserver.random.nextInt(16) - 8; int k = blockposition.getZ() + worldserver.random.nextInt(16) - 8; int l = worldserver.a(HeightMap.Type.WORLD_SURFACE, j, k); BlockPosition blockposition1 = new BlockPosition(j, l, k); if (worldserver.b_(blockposition1) && EntityMonster.c(EntityTypes.ZOMBIE, worldserver, EnumMobSpawn.EVENT, blockposition1, worldserver.random)) { return new Vec3D((double) blockposition1.getX() + 0.5D, (double) blockposition1.getY(), (double) blockposition1.getZ() + 0.5D); } } return null; } static enum State { SIEGE_CAN_ACTIVATE, SIEGE_TONIGHT, SIEGE_DONE; private State() {} } }