private IStatBuilder AdditionalLevels(string identityInfix, IGemTagBuilder gemTag, Func <BuildParameters, string, string> buildIdentitySuffix)
        {
            var coreBuilder = new CoreStatBuilderFromCoreBuilder <string>(
                CoreBuilder.Proxy(gemTag, (ps, b) => buildIdentitySuffix(ps, b.Build(ps))),
                (e, t) => StatFactory.FromIdentity($"Gem.AdditionalLevels{identityInfix}.{t}", e, typeof(int)));

            return(new StatBuilder(StatFactory, coreBuilder));
        }
        public IStatBuilder DamageHasKeyword(DamageSource damageSource, IKeywordBuilder keyword)
        {
            var coreBuilder = new CoreStatBuilderFromCoreBuilder <Keyword>(
                CoreBuilder.Proxy(keyword, (ps, b) => b.Build(ps)),
                (e, k) => StatFactory.MainSkillPartDamageHasKeyword(e, k, damageSource));

            return(new StatBuilder(StatFactory, coreBuilder));
        }
        public IStatBuilder AdditionalLevels(ISkillBuilder skill)
        {
            var coreBuilder = new CoreStatBuilderFromCoreBuilder <string>(
                CoreBuilder.Proxy(skill, (ps, b) => b.Build(ps).Id),
                (e, t) => StatFactory.FromIdentity($"Gem.AdditionalLevels.{t}", e, typeof(int)));

            return(new StatBuilder(StatFactory, coreBuilder));
        }