From 720a1dce7bf874224d862b43292976f39f9a7853 Mon Sep 17 00:00:00 2001 From: Stanley Dimant Date: Sat, 9 Jul 2022 13:29:10 +0200 Subject: [PATCH] add ReversePlayerPath to API, rename ReverseResolvePathPlayer to ReverseResolvePlayerPath --- Penumbra/Api/IPenumbraApi.cs | 6 +++++- Penumbra/Api/PenumbraApi.cs | 11 +++++++++-- Penumbra/Api/PenumbraIpc.cs | 16 ++++++++++++++-- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/Penumbra/Api/IPenumbraApi.cs b/Penumbra/Api/IPenumbraApi.cs index da11cfb7..0ba87fca 100644 --- a/Penumbra/Api/IPenumbraApi.cs +++ b/Penumbra/Api/IPenumbraApi.cs @@ -89,12 +89,16 @@ public interface IPenumbraApi : IPenumbraApiBase // Returns the given gamePath if penumbra would not manipulate it. public string ResolvePath( string gamePath, string characterName ); + // Resolve a given gamePath via Penumbra using any applicable character collections for the current character. + // Returns the given gamePath if penumbra would not manipulate it. + public string ResolvePlayerPath( string gamePath ); + // Reverse resolves a given modded local path into its replacement in form of all applicable game paths for given character collection. public string[] ReverseResolvePath( string moddedPath, string characterName ); // Reverse resolves a given modded local path into its replacement in form of all applicable game paths // using the collection applying to the player character. - public string[] ReverseResolvePathPlayer( string moddedPath ); + public string[] ReverseResolvePlayerPath( string moddedPath ); // Try to load a given gamePath with the resolved path from Penumbra. public T? GetFile< T >( string gamePath ) where T : FileResource; diff --git a/Penumbra/Api/PenumbraApi.cs b/Penumbra/Api/PenumbraApi.cs index 39adf0be..9ce0395f 100644 --- a/Penumbra/Api/PenumbraApi.cs +++ b/Penumbra/Api/PenumbraApi.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Reflection; using Dalamud.Game.ClientState.Objects.Types; using Dalamud.Logging; +using FFXIVClientStructs.FFXIV.Common.Configuration; using Lumina.Data; using Newtonsoft.Json; using OtterGui; @@ -22,7 +23,7 @@ namespace Penumbra.Api; public class PenumbraApi : IDisposable, IPenumbraApi { public (int, int) ApiVersion - => ( 4, 9 ); + => ( 4, 10 ); private Penumbra? _penumbra; private Lumina.GameData? _lumina; @@ -123,6 +124,12 @@ public class PenumbraApi : IDisposable, IPenumbraApi return ResolvePath( path, Penumbra.ModManager, Penumbra.CollectionManager.Default ); } + public string ResolvePlayerPath( string path ) + { + CheckInitialized(); + return ResolvePath( path, Penumbra.ModManager, PathResolver.PlayerCollection() ); + } + public string ResolvePath( string path, string characterName ) { CheckInitialized(); @@ -142,7 +149,7 @@ public class PenumbraApi : IDisposable, IPenumbraApi return ret.Select( r => r.ToString() ).ToArray(); } - public string[] ReverseResolvePathPlayer( string path ) + public string[] ReverseResolvePlayerPath( string path ) { CheckInitialized(); if( !Penumbra.Config.EnableMods ) diff --git a/Penumbra/Api/PenumbraIpc.cs b/Penumbra/Api/PenumbraIpc.cs index c97cca85..d330be61 100644 --- a/Penumbra/Api/PenumbraIpc.cs +++ b/Penumbra/Api/PenumbraIpc.cs @@ -259,13 +259,15 @@ public partial class PenumbraIpc { public const string LabelProviderResolveDefault = "Penumbra.ResolveDefaultPath"; public const string LabelProviderResolveCharacter = "Penumbra.ResolveCharacterPath"; + public const string LabelProviderResolvePlayer = "Penumbra.ResolvePlayerPath"; public const string LabelProviderGetDrawObjectInfo = "Penumbra.GetDrawObjectInfo"; public const string LabelProviderReverseResolvePath = "Penumbra.ReverseResolvePath"; - public const string LabelProviderReverseResolvePathPlayer = "Penumbra.ReverseResolvePathPlayer"; + public const string LabelProviderReverseResolvePathPlayer = "Penumbra.ReverseResolvePlayerPath"; public const string LabelProviderCreatingCharacterBase = "Penumbra.CreatingCharacterBase"; internal ICallGateProvider< string, string >? ProviderResolveDefault; internal ICallGateProvider< string, string, string >? ProviderResolveCharacter; + internal ICallGateProvider< string, string >? ProviderResolvePlayer; internal ICallGateProvider< IntPtr, (IntPtr, string) >? ProviderGetDrawObjectInfo; internal ICallGateProvider< string, string, string[] >? ProviderReverseResolvePath; internal ICallGateProvider< string, string[] >? ProviderReverseResolvePathPlayer; @@ -293,6 +295,16 @@ public partial class PenumbraIpc PluginLog.Error( $"Error registering IPC provider for {LabelProviderResolveCharacter}:\n{e}" ); } + try + { + ProviderResolvePlayer = pi.GetIpcProvider< string, string >( LabelProviderResolvePlayer ); + ProviderResolvePlayer.RegisterFunc( Api.ResolvePlayerPath ); + } + catch( Exception e ) + { + PluginLog.Error( $"Error registering IPC provider for {LabelProviderResolveCharacter}:\n{e}" ); + } + try { ProviderGetDrawObjectInfo = pi.GetIpcProvider< IntPtr, (IntPtr, string) >( LabelProviderGetDrawObjectInfo ); @@ -316,7 +328,7 @@ public partial class PenumbraIpc try { ProviderReverseResolvePathPlayer = pi.GetIpcProvider< string, string[] >( LabelProviderReverseResolvePathPlayer ); - ProviderReverseResolvePathPlayer.RegisterFunc( Api.ReverseResolvePathPlayer ); + ProviderReverseResolvePathPlayer.RegisterFunc( Api.ReverseResolvePlayerPath ); } catch( Exception e ) {