import java.util.ArrayList;
import java.util.List;
import net.minecraft.server.MinecraftServer;

public class ic
{
  private List<ep> a = new ArrayList<ep>();
  private fb b = new fb();
  private List<Object> c = new ArrayList<Object>();
  private MinecraftServer d;

  public ic(MinecraftServer paramMinecraftServer)
  {
    this.d = paramMinecraftServer;
  }

  public void a() {
    for (int i = 0; i < this.c.size(); i++) {
      ((aj)this.c.get(i)).a();
    }
    this.c.clear();
  }

  private aj a(int paramInt1, int paramInt2, boolean paramBoolean) {
    long l = paramInt1 + 2147483647L | paramInt2 + 2147483647L << 32;
    aj localaj = (aj)this.b.a(l);
    if ((localaj == null) && (paramBoolean)) {
      localaj = new aj(this, paramInt1, paramInt2);
      this.b.a(l, localaj);
    }
    return localaj;
  }

  public void a(io paramio, int paramInt1, int paramInt2, int paramInt3) {
    int i = paramInt1 >> 4;
    int j = paramInt3 >> 4;
    aj localaj = a(i, j, false);
    if (localaj != null)
      localaj.a(paramio);
  }

  public void a(int paramInt1, int paramInt2, int paramInt3)
  {
    int i = paramInt1 >> 4;
    int j = paramInt3 >> 4;
    aj localaj = a(i, j, false);
    if (localaj != null)
      localaj.a(paramInt1 & 0xF, paramInt2, paramInt3 & 0xF);
  }

  public void a(ep paramep)
  {
    

    int i = (int)paramep.p >> 4;
    int j = (int)paramep.r >> 4;

    paramep.d = paramep.p;
    paramep.e = paramep.r;

    for (int k = i - 10; k <= i + 10; k++) {
      for (int m = j - 10; m <= j + 10; m++) {
        a(k, m, true).a(paramep);
      }
    }
    this.a.add(paramep);
  }

  public void b(ep paramep) {
    
    int i = (int)paramep.p >> 4;
    int j = (int)paramep.r >> 4;

    for (int k = i - 10; k <= i + 10; k++) {
      for (int m = j - 10; m <= j + 10; m++) {
        aj localaj = a(k, m, false);
        if (localaj == null) continue; localaj.b(paramep);
      }
    }
    this.a.remove(paramep);
  }

  private boolean a(int paramInt1, int paramInt2, int paramInt3, int paramInt4) {
    int i = paramInt1 - paramInt3;
    int j = paramInt2 - paramInt4;
    if ((i < -10) || (i > 10)) return false;
    return (j >= -10) && (j <= 10);
  }

  public void c(ep paramep)
  {
    int i = (int)paramep.p >> 4;
    int j = (int)paramep.r >> 4;

    double d1 = paramep.d - paramep.p;
    double d2 = paramep.e - paramep.r;
    double d3 = d1 * d1 + d2 * d2;
    if (d3 < 64.0D) return;

    int k = (int)paramep.d >> 4;
    int m = (int)paramep.e >> 4;

    int n = i - k;
    int i1 = j - m;
    if ((n == 0) && (i1 == 0)) return;

    for (int i2 = i - 10; i2 <= i + 10; i2++) {
      for (int i3 = j - 10; i3 <= j + 10; i3++) {
        if (!a(i2, i3, k, m)) {
          a(i2, i3, true).a(paramep);
        }
        if (!a(i2 - n, i3 - i1, i, j)) {
          aj localaj = a(i2 - n, i3 - i1, false);
          if (localaj == null) continue; localaj.b(paramep);
        }
      }
    }
    paramep.d = paramep.p;
    paramep.e = paramep.r;
  }

  public int b() {
    return 144;
  }
}