using System; using Dalamud.Plugin; using Microsoft.Extensions.DependencyInjection; using OtterGui.Classes; using OtterGui.Log; using Penumbra.Api; using Penumbra.Collections; using Penumbra.GameData; using Penumbra.GameData.Data; using Penumbra.Interop.ResourceLoading; using Penumbra.Interop.PathResolving; using Penumbra.Interop.ResourceTree; using Penumbra.Interop.Services; using Penumbra.Mods; using Penumbra.Services; using Penumbra.UI; using Penumbra.UI.AdvancedWindow; using Penumbra.UI.ModsTab; using Penumbra.UI.Tabs; using Penumbra.Util; using CharacterUtility = Penumbra.Interop.Services.CharacterUtility; using ModFileSystemSelector = Penumbra.UI.ModsTab.ModFileSystemSelector; namespace Penumbra; public class PenumbraNew { public string Name => "Penumbra"; public static readonly Logger Log = new(); public readonly ServiceProvider Services; public PenumbraNew(Penumbra penumbra, DalamudPluginInterface pi) { var startTimer = new StartTracker(); using var time = startTimer.Measure(StartTimeType.Total); var services = new ServiceCollection(); // Add meta services. services.AddSingleton(Log) .AddSingleton(startTimer) .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton(); // Add Dalamud services var dalamud = new DalamudServices(pi); dalamud.AddServices(services); services.AddSingleton(penumbra); // Add Game Data services.AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton(); // Add Game Services services.AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton(); // Add PathResolver services.AddSingleton() .AddSingleton(); // Add Configuration services.AddTransient() .AddSingleton(); // Add Collection Services services.AddTransient() .AddSingleton() .AddSingleton(); // Add Mod Services services.AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton(); // Add Resource services services.AddSingleton() .AddSingleton() .AddSingleton(); // Add Path Resolver services.AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton(); // Add Interface services.AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton(); // Add Mod Editor services.AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton(); // Add API services.AddSingleton() .AddSingleton(x => x.GetRequiredService()) .AddSingleton() .AddSingleton(); Services = services.BuildServiceProvider(new ServiceProviderOptions { ValidateOnBuild = true }); } public void Dispose() { Services.Dispose(); } }