From 743f449a49368d1ba502e52bdb4840d70e9d5b07 Mon Sep 17 00:00:00 2001 From: Ottermandias Date: Wed, 28 Dec 2022 12:56:47 +0100 Subject: [PATCH] Don't reflect the interface before it apparently exists. --- Penumbra/Dalamud.cs | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/Penumbra/Dalamud.cs b/Penumbra/Dalamud.cs index d872e629..5be53335 100644 --- a/Penumbra/Dalamud.cs +++ b/Penumbra/Dalamud.cs @@ -38,7 +38,7 @@ public class Dalamud // @formatter:on private static readonly object? DalamudConfig; - private static readonly object? SettingsWindow; + private static readonly MethodInfo? InterfaceGetter; private static readonly MethodInfo? SaveDalamudConfig; public const string WaitingForPluginsOption = "IsResumeGameAfterPluginLoad"; @@ -56,9 +56,9 @@ public class Dalamud var configService = serviceType.MakeGenericType( configType ); var interfaceService = serviceType.MakeGenericType( interfaceType ); - var configGetter = configService.GetMethod( "Get", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic ); - var interfaceGetter = interfaceService.GetMethod( "Get", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic ); - if( configGetter == null || interfaceGetter == null ) + var configGetter = configService.GetMethod( "Get", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic ); + InterfaceGetter = interfaceService.GetMethod( "Get", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic ); + if( configGetter == null || InterfaceGetter == null ) { return; } @@ -69,15 +69,8 @@ public class Dalamud SaveDalamudConfig = DalamudConfig.GetType().GetMethod( "Save", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic ); if( SaveDalamudConfig == null ) { - DalamudConfig = null; - } - - var inter = interfaceGetter.Invoke( null, null ); - SettingsWindow = inter?.GetType().GetField( "settingsWindow", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic )?.GetValue( inter ); - if( SettingsWindow == null ) - { - DalamudConfig = null; - SaveDalamudConfig = null; + DalamudConfig = null; + InterfaceGetter = null; } } } @@ -85,7 +78,7 @@ public class Dalamud { DalamudConfig = null; SaveDalamudConfig = null; - SettingsWindow = null; + InterfaceGetter = null; } } @@ -139,7 +132,9 @@ public class Dalamud getter.SetValue( DalamudConfig, value ); if( windowFieldName != null ) { - SettingsWindow!.GetType().GetField( windowFieldName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic )?.SetValue( SettingsWindow, value ); + var inter = InterfaceGetter!.Invoke( null, null ); + var settingsWindow = inter?.GetType().GetField( "settingsWindow", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic )?.GetValue( inter ); + settingsWindow?.GetType().GetField( windowFieldName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic )?.SetValue( settingsWindow, value ); } SaveDalamudConfig!.Invoke( DalamudConfig, null );