private bool FinishItem(PgAdvancement item, Dictionary <string, object> contentTable, Dictionary <string, Json.Token> contentTypeTable, List <object> itemCollection, Json.Token lastItemType, string parsedFile, string parsedKey)
        {
            bool Result = true;

            foreach (KeyValuePair <string, object> Entry in contentTable)
            {
                string Key   = Entry.Key;
                object Value = Entry.Value;

                PgAttribute ParsedAttribute = null !;
                float       ParsedValue     = 0;

                if (Key == "MENTAL_DEFENSE_RATING")
                {
                    continue;
                }

                Result = Inserter <PgAttribute> .SetItemByKey((PgAttribute valueAttribute) => ParsedAttribute = valueAttribute, Key);

                if (Result)
                {
                    if (Value is float FloatValue)
                    {
                        ParsedValue = FloatValue;
                    }
                    else if (Value is int IntValue)
                    {
                        ParsedValue = IntValue;
                    }
                    else
                    {
                        Result = Program.ReportFailure(parsedFile, parsedKey, $"Unknown attribute value '{Value}'");
                    }
                }

                if (Result)
                {
                    PgAdvancementEffectAttribute NewAdvancementEffectAttribute = new PgAdvancementEffectAttribute()
                    {
                        Attribute_Key = ParsedAttribute.Key, RawValue = ParsedValue
                    };

                    ParsingContext.AddSuplementaryObject(NewAdvancementEffectAttribute);
                    item.EffectAttributeList.Add(NewAdvancementEffectAttribute);
                }
            }

            return(Result);
        }
        private bool ParseAdvancementTable(PgSkill item, object value, string parsedFile, string parsedKey)
        {
            if (value == null)
            {
                return(true);
            }

            if (!(value is string TableString))
            {
                return(Program.ReportFailure($"Value '{value}' was expected to be a string"));
            }

            Dictionary <string, ParsingContext> Table = ParsingContext.ObjectKeyTable[typeof(PgAdvancementTable)];

            foreach (KeyValuePair <string, ParsingContext> Entry in Table)
            {
                ParsingContext Context = Entry.Value;

                if (!(Context.Item is PgAdvancementTable AsAdvancementTable))
                {
                    return(Program.ReportFailure($"Object '{Context.Item}' was unexpected"));
                }

                if (AsAdvancementTable.InternalName == TableString)
                {
                    foreach (KeyValuePair <int, PgAdvancement> AdvancementEntry in AsAdvancementTable.LevelTable)
                    {
                        int           Level       = AdvancementEntry.Key;
                        PgAdvancement Advancement = AdvancementEntry.Value;

                        foreach (PgAdvancementEffectAttribute EffectAttribute in Advancement.EffectAttributeList)
                        {
                            PgSkillAdvancement NewSkillAdvancement = new PgSkillAdvancementRewardAdvancement()
                            {
                                RawLevel = Level, EffectAttribute = EffectAttribute
                            };

                            ParsingContext.AddSuplementaryObject(NewSkillAdvancement);
                            item.SkillAdvancementList.Add(NewSkillAdvancement);
                        }
                    }

                    return(true);
                }
            }

            return(Program.ReportFailure($"Advancement table '{TableString}' not found"));
        }