/// <summary>
    /// 设置船mod 或是船装备mod数据
    /// </summary>
    /// <param name="equipmentModL1"></param>
    /// <param name="GeneralModContainer"></param>
    /// <param name="ExclusivelyModContainer"></param>
    private void SetShipModOrShipEquipModData(EquipmentModL1 equipmentModL1, IModContainer GeneralModContainer, IModContainer ExclusivelyModContainer)
    {
        for (int i = 0; i < m_ModCellList.Count; i++)
        {
            m_ModCellList[i].Cleanup();
            if (i < GeneralModContainer.GetCurrentSizeMax())
            {
                m_ModCellList[i].SetBaseData(equipmentModL1, EquipmentModL2.General, GeneralModContainer.GetUID(), i);
            }
            else
            {
                m_ModCellList[i].SetBaseData(equipmentModL1, EquipmentModL2.Exclusively, ExclusivelyModContainer.GetUID(), i - (int)GeneralModContainer.GetCurrentSizeMax());
            }
        }

        IMod[] mods = GeneralModContainer.GetMods();
        if (mods != null && mods.Length > 0)
        {
            for (int i = 0; i < mods.Length; i++)
            {
                m_ModCellList[mods[i].GetPos()].SetData(mods[i]);
            }
        }
        mods = ExclusivelyModContainer.GetMods();
        int GeneralModCount = (int)GeneralModContainer.GetCurrentSizeMax();

        if (mods != null && mods.Length > 0)
        {
            for (int i = 0; i < mods.Length; i++)
            {
                m_ModCellList[mods[i].GetPos() + GeneralModCount].SetData(mods[i]);
            }
        }
    }
        private void Init()
        {
            _mods    = new ModContainer(_stats, _events);
            Instance = this;

            _health    = GetComponent <IHealthContainer>();
            _unlocks   = GetComponent <IUnlockList>();
            _resources = GetComponent <IResourceContainer>();
            _inventory = GetComponent <IInventory>();

            if (_resources != null)
            {
                _resources?.ChangeResource(CreditsResource, 0);
            }

            ResourceEarningMultiplier = new Dictionary <string, IStatReference>();
            _resourceFractionTrackers = new Dictionary <string, float>();

            Resource[] resources = Content.GetAll <Resource>("*/Resources");
            foreach (Resource resource in resources)
            {
                ResourceEarningMultiplier.Add(resource.Identifier, _stats.AddStat(GenerateStatInfo(resource), 1f));
                _resourceFractionTrackers.Add(resource.Identifier, 0f);
            }


            OnNewPlayerInstance?.Invoke(this);
        }
 public static void RecalculateStack(this IModContainer container, string identifier)
 {
     Mod[] nonUnique = container.GetModsOfIdentifier(identifier);
     container.GetUniqueModOfIdentifier(identifier).StackWith(nonUnique);
 }
 public static Mod GetUniqueModOfIdentifier(this IModContainer container, string identifier)
 {
     return(container.GetUniqueMods().FirstOrDefault(x => x.StackIdentifier == identifier));
 }
 public static Mod GetUniqueModOfType(this IModContainer container, Type type)
 {
     return(container.GetUniqueMods().FirstOrDefault(x => type.IsInstanceOfType(x)));
 }
 public static T GetUniqueModOfType <T> (this IModContainer container) where T : Mod
 {
     return((T)container.GetUniqueMods().FirstOrDefault(x => x is T));
 }
 public static Mod[] GetModsOfIdentifier(this IModContainer container, string identifier)
 {
     return(container.GetMods().Where(x => x.StackIdentifier == identifier).ToArray());
 }
 public static Mod[] GetModsOfType(this IModContainer container, Type type)
 {
     return(container.GetMods().Where(x => type.IsInstanceOfType(x)).ToArray());
 }
 public static T[] GetModsOfType <T> (this IModContainer container) where T : Mod
 {
     return((T[])container.GetMods().Where(x => x is T).ToArray());
 }