Add Launching IPC Event. API 5.8

This commit is contained in:
Ottermandias 2025-03-28 16:53:43 +01:00
parent 7498bc469f
commit 01e6f58463
4 changed files with 35 additions and 2 deletions

@ -1 +1 @@
Subproject commit 2cbf4bace53a5749d3eab1ff03025a6e6bd9fc37 Subproject commit bd56d82816b8366e19dddfb2dc7fd7f167e264ee

View file

@ -16,13 +16,16 @@ public class PenumbraApi(
TemporaryApi temporary, TemporaryApi temporary,
UiApi ui) : IDisposable, IApiService, IPenumbraApi UiApi ui) : IDisposable, IApiService, IPenumbraApi
{ {
public const int BreakingVersion = 5;
public const int FeatureVersion = 8;
public void Dispose() public void Dispose()
{ {
Valid = false; Valid = false;
} }
public (int Breaking, int Feature) ApiVersion public (int Breaking, int Feature) ApiVersion
=> (5, 7); => (BreakingVersion, FeatureVersion);
public bool Valid { get; private set; } = true; public bool Valid { get; private set; } = true;
public IPenumbraApiCollection Collection { get; } = collection; public IPenumbraApiCollection Collection { get; } = collection;

View file

@ -0,0 +1,28 @@
using Dalamud.Plugin;
using OtterGui.Log;
using OtterGui.Services;
using Penumbra.Api.Api;
using Serilog.Events;
namespace Penumbra.Api;
public sealed class IpcLaunchingProvider : IApiService
{
public IpcLaunchingProvider(IDalamudPluginInterface pi, Logger log)
{
try
{
using var subscriber = log.MainLogger.IsEnabled(LogEventLevel.Debug)
? IpcSubscribers.Launching.Subscriber(pi,
(major, minor) => log.Debug($"[IPC] Invoked Penumbra.Launching IPC with API Version {major}.{minor}."))
: null;
using var provider = IpcSubscribers.Launching.Provider(pi);
provider.Invoke(PenumbraApi.BreakingVersion, PenumbraApi.FeatureVersion);
}
catch (Exception ex)
{
log.Error($"[IPC] Could not invoke Penumbra.Launching IPC:\n{ex}");
}
}
}

View file

@ -58,6 +58,8 @@ public class Penumbra : IDalamudPlugin
{ {
HookOverrides.Instance = HookOverrides.LoadFile(pluginInterface); HookOverrides.Instance = HookOverrides.LoadFile(pluginInterface);
_services = StaticServiceManager.CreateProvider(this, pluginInterface, Log); _services = StaticServiceManager.CreateProvider(this, pluginInterface, Log);
// Invoke the IPC Penumbra.Launching method before any hooks or other services are created.
_services.GetService<IpcLaunchingProvider>();
Messager = _services.GetService<MessageService>(); Messager = _services.GetService<MessageService>();
_validityChecker = _services.GetService<ValidityChecker>(); _validityChecker = _services.GetService<ValidityChecker>();
_services.EnsureRequiredServices(); _services.EnsureRequiredServices();