public static MethodInfo ReflectInitModAPI() { ParameterInfo[] parameters; // Init ModAPI var initmethod = typeof(MySandboxGame).GetMethod("InitModAPI", BindingFlags.Instance | BindingFlags.NonPublic); MyDebug.AssertRelease(initmethod != null); if (initmethod != null) { parameters = initmethod.GetParameters(); MyDebug.AssertRelease(parameters.Count() == 0); if (!(parameters.Count() == 0)) { initmethod = null; } } return(initmethod); }
public static bool ReplaceMethod(MethodInfo methodtoreplace, MethodInfo methodtoinject, Type[] types = null) { ParameterInfo[] sourceParameters; ParameterInfo[] destinationParameters; MyDebug.AssertRelease(methodtoreplace != null); if (methodtoreplace != null && methodtoinject != null) { sourceParameters = methodtoreplace.GetParameters(); destinationParameters = methodtoinject.GetParameters(); MyDebug.AssertDebug(sourceParameters.Length == destinationParameters.Length); bool valid = true; // Verify signatures for (var x = 0; x < Math.Min(destinationParameters.Length, sourceParameters.Length); x++) { MyDebug.AssertDebug(destinationParameters[x].ParameterType == sourceParameters[x].ParameterType); if (destinationParameters[x].ParameterType != sourceParameters[x].ParameterType) { valid = false; } } if (sourceParameters.Length != destinationParameters.Length || !valid) { methodtoreplace = null; } } if (methodtoreplace != null && methodtoinject != null) { MethodUtil.ReplaceMethod(methodtoreplace, methodtoinject); return(true); } else { return(false); } }