/** Find all players in a specified range and narrowing down by other parameters */
  public List findPlayers(
      ChunkCoordinates par1ChunkCoordinates,
      int par2,
      int par3,
      int par4,
      int par5,
      int par6,
      int par7) {
    if (this.playerEntityList.isEmpty()) {
      return null;
    } else {
      Object var8 = new ArrayList();
      boolean var9 = par4 < 0;
      int var10 = par2 * par2;
      int var11 = par3 * par3;
      par4 = MathHelper.abs_int(par4);

      for (int var12 = 0; var12 < this.playerEntityList.size(); ++var12) {
        EntityPlayerMP var13 = (EntityPlayerMP) this.playerEntityList.get(var12);

        if (par1ChunkCoordinates != null && (par2 > 0 || par3 > 0)) {
          float var14 =
              par1ChunkCoordinates.getDistanceSquaredToChunkCoordinates(
                  var13.getPlayerCoordinates());

          if (par2 > 0 && var14 < (float) var10 || par3 > 0 && var14 > (float) var11) {
            continue;
          }
        }

        if ((par5 == EnumGameType.NOT_SET.getID()
                || par5 == var13.theItemInWorldManager.getGameType().getID())
            && (par6 <= 0 || var13.experienceLevel >= par6)
            && var13.experienceLevel <= par7) {
          ((List) var8).add(var13);
        }
      }

      if (par1ChunkCoordinates != null) {
        Collections.sort((List) var8, new PlayerPositionComparator(par1ChunkCoordinates));
      }

      if (var9) {
        Collections.reverse((List) var8);
      }

      if (par4 > 0) {
        var8 = ((List) var8).subList(0, Math.min(par4, ((List) var8).size()));
      }

      return (List) var8;
    }
  }