ReactorPluginManager()
 {
     VanillaReactorMaxType = Enum.GetValues(typeof(EReactorType)).Length;
     Logger.Info($"MaxTypeint = {VanillaReactorMaxType - 1}");
     foreach (PulsarPlugin plugin in PluginManager.Instance.GetAllPlugins())
     {
         Assembly asm           = plugin.GetType().Assembly;
         Type     ReactorPlugin = typeof(ReactorPlugin);
         foreach (Type t in asm.GetTypes())
         {
             if (ReactorPlugin.IsAssignableFrom(t) && !t.IsInterface && !t.IsAbstract)
             {
                 Logger.Info("Loading reactor from assembly");
                 ReactorPlugin ReactorPluginHandler = (ReactorPlugin)Activator.CreateInstance(t);
                 if (GetReactorIDFromName(ReactorPluginHandler.Name) == -1)
                 {
                     ReactorTypes.Add(ReactorPluginHandler);
                     Logger.Info($"Added reactor: '{ReactorPluginHandler.Name}' with ID '{GetReactorIDFromName(ReactorPluginHandler.Name)}'");
                 }
                 else
                 {
                     Logger.Info($"Could not add reactor from {plugin.Name} with the duplicate name of '{ReactorPluginHandler.Name}'");
                 }
             }
         }
     }
 }
        public static PLReactor CreateReactor(int Subtype, int level)
        {
            PLReactor InReactor;

            if (Subtype >= Instance.VanillaReactorMaxType)
            {
                InReactor = new PLReactor(EReactorType.E_REAC_ID_MAX, level);
                int subtypeformodded = Subtype - Instance.VanillaReactorMaxType;
                if (Global.DebugLogging)
                {
                    Logger.Info($"Subtype for modded is {subtypeformodded}");
                }
                if (subtypeformodded <= Instance.ReactorTypes.Count && subtypeformodded > -1)
                {
                    if (Global.DebugLogging)
                    {
                        Logger.Info("Creating reactor from list info");
                    }
                    ReactorPlugin ReactorType = Instance.ReactorTypes[Subtype - Instance.VanillaReactorMaxType];
                    InReactor.SubType = Subtype;
                    InReactor.Name    = ReactorType.Name;
                    InReactor.Desc    = ReactorType.Description;
                    InReactor.GetType().GetField("m_IconTexture", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(InReactor, ReactorType.IconTexture);
                    InReactor.EnergyOutputMax       = ReactorType.EnergyOutputMax;
                    InReactor.EnergySignatureAmt    = ReactorType.EnergySignatureAmount;
                    InReactor.TempMax               = ReactorType.MaxTemp;
                    InReactor.EmergencyCooldownTime = ReactorType.EmergencyCooldownTime;
                    InReactor.HeatOutput            = ReactorType.HeatOutput;
                    InReactor.GetType().GetField("m_MarketPrice", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(InReactor, (ObscuredInt)ReactorType.MarketPrice);
                    InReactor.CargoVisualPrefabID     = ReactorType.CargoVisualID;
                    InReactor.CanBeDroppedOnShipDeath = ReactorType.CanBeDroppedOnShipDeath;
                    InReactor.Experimental            = ReactorType.Experimental;
                    InReactor.Unstable   = ReactorType.Unstable;
                    InReactor.Contraband = ReactorType.Contraband;
                    InReactor.GetType().GetField("OriginalEnergyOutputMax", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(InReactor, InReactor.EnergyOutputMax);
                    InReactor.GetType().GetField("Price_LevelMultiplierExponent", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(InReactor, (ObscuredFloat)ReactorType.Price_LevelMultiplierExponent);
                }
            }
            else
            {
                InReactor = new PLReactor((EReactorType)Subtype, level);
            }
            return(InReactor);
        }