private StatData GetStataDataPrivate(IEnumerable <Data <StatData> > statDataListsToSearch, string itemStatText, bool preferLocalStat)
        {
            StatData result = null;

            StatDataTextMatchResult statDataMatch = GetStatDataMatch(statDataListsToSearch, itemStatText, preferLocalStat);

            if (statDataMatch == null)
            {
                this.logger.LogWarning("Failed to find matching stat data for {@itemStatText}.", itemStatText);
            }
            else
            {
                result = statDataMatch.StatData;
            }

            return(result);
        }
        private static StatDataTextMatchResult GetStatDataMatch(IEnumerable <Data <StatData> > statDataListsToSearch, string itemStatText, bool preferLocalStat)
        {
            StatDataTextMatchResult result = null;
            var statDataTextMatcher        = new StatDataTextMatcher(itemStatText);

            foreach (var statData in statDataListsToSearch.SelectMany(x => x.Entries))
            {
                StatDataTextMatchResult matchResult = statDataTextMatcher.Match(statData);

                if (matchResult.IsMatch)
                {
                    if ((preferLocalStat && matchResult.IsLocalStat) || (!preferLocalStat && !matchResult.IsLocalStat))
                    {
                        result = matchResult;
                        break;
                    }

                    result = matchResult;
                }
            }

            return(result);
        }