Don't reflect the interface before it apparently exists.

This commit is contained in:
Ottermandias 2022-12-28 12:56:47 +01:00
parent 5cd4b49fee
commit 743f449a49

View file

@ -38,7 +38,7 @@ public class Dalamud
// @formatter:on // @formatter:on
private static readonly object? DalamudConfig; private static readonly object? DalamudConfig;
private static readonly object? SettingsWindow; private static readonly MethodInfo? InterfaceGetter;
private static readonly MethodInfo? SaveDalamudConfig; private static readonly MethodInfo? SaveDalamudConfig;
public const string WaitingForPluginsOption = "IsResumeGameAfterPluginLoad"; public const string WaitingForPluginsOption = "IsResumeGameAfterPluginLoad";
@ -56,9 +56,9 @@ public class Dalamud
var configService = serviceType.MakeGenericType( configType ); var configService = serviceType.MakeGenericType( configType );
var interfaceService = serviceType.MakeGenericType( interfaceType ); var interfaceService = serviceType.MakeGenericType( interfaceType );
var configGetter = configService.GetMethod( "Get", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic ); var configGetter = configService.GetMethod( "Get", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic );
var interfaceGetter = interfaceService.GetMethod( "Get", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic ); InterfaceGetter = interfaceService.GetMethod( "Get", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic );
if( configGetter == null || interfaceGetter == null ) if( configGetter == null || InterfaceGetter == null )
{ {
return; return;
} }
@ -69,15 +69,8 @@ public class Dalamud
SaveDalamudConfig = DalamudConfig.GetType().GetMethod( "Save", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic ); SaveDalamudConfig = DalamudConfig.GetType().GetMethod( "Save", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic );
if( SaveDalamudConfig == null ) if( SaveDalamudConfig == null )
{ {
DalamudConfig = null; DalamudConfig = null;
} InterfaceGetter = 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;
} }
} }
} }
@ -85,7 +78,7 @@ public class Dalamud
{ {
DalamudConfig = null; DalamudConfig = null;
SaveDalamudConfig = null; SaveDalamudConfig = null;
SettingsWindow = null; InterfaceGetter = null;
} }
} }
@ -139,7 +132,9 @@ public class Dalamud
getter.SetValue( DalamudConfig, value ); getter.SetValue( DalamudConfig, value );
if( windowFieldName != null ) 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 ); SaveDalamudConfig!.Invoke( DalamudConfig, null );