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);
            }
        }