public virtual void AssembleSpliceSettings(SlimeTrait trait, SpliceSettings settings)
 {
 }
 /// <summary>
 /// Augment the trait in someway after the host object is transformed in some way
 /// </summary>
 /// <param name="trait"></param>
 /// <param name="obj">The object after transformation</param>
 public abstract void MaybeTransformSlimeTrait(SlimeTrait trait, GameObject obj);
 public abstract SlimeTrait CombineTraits(SlimeTrait original, SlimeTrait other, SpliceSettings settings);
 /// <summary>
 /// Apply the trait to an object
 /// </summary>
 /// <param name="trait"></param>
 /// <param name="obj"></param>
 public abstract void ApplyToGameObject(SlimeTrait trait, GameObject obj);
 /// <summary>
 /// Configure the trait based on the state of the object
 /// </summary>
 /// <param name="trait"></param>
 /// <param name="obj"></param>
 public abstract void ConfigureSlimeTrait(SlimeTrait trait, GameObject obj);
 public abstract bool TraitNeedsToBeSaved(SlimeTrait Trait);
 public abstract void DeserializeTrait(SlimeTrait trait, CompoundDataPiece piece);
 public abstract string GetTraitDescription(SlimeTrait trait);
 public virtual int GetTraitDisplayPriority(SlimeTrait trait) => DefaultDisplayPriority;
 public abstract Color GetTraitDisplayColor(SlimeTrait trait);
 public abstract string GetTraitDisplayName(SlimeTrait trait);
 internal void AddTrait(SlimeTrait trait) => Traits.Add(trait);