Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of BepinExUtils v1.0.2
BepInExUtils.dll
Decompiled 9 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Threading.Tasks; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using BepInExUtils.Attributes; using BepInExUtils.Interfaces; using BepInExUtils.Logging; using HarmonyLib; using JetBrains.Annotations; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyCompany("BepInExUtils")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+be66c586b5eb68b50fbdc6822a2dc2f27e6b474d")] [assembly: AssemblyProduct("BepInExUtils")] [assembly: AssemblyTitle("BepInExUtils")] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace BepInExUtils { [BepInUtils("io.github.ykysnk.BepinExUtils", "BepInEx Utils", "1.0.2")] [BepInPlugin("io.github.ykysnk.BepinExUtils", "BepInEx Utils", "1.0.2")] public class Main : BaseUnityPlugin, IBepInUtils { private const string Version = "1.0.2"; private static Main? _instance; private readonly Harmony _harmony = new Harmony("io.github.ykysnk.BepinExUtils"); public void Init() { } public Main() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown _instance = this; Configs.Init(); Utils.Logger.Info("Plugin BepInEx Utils is loaded, version 1.0.2"); _harmony.PatchAll(Assembly.GetExecutingAssembly()); Init(); } } [PublicAPI] public static class MethodUtils { private const string UnknownName = "Unknown"; public static string CallerName => GetCallerName(2); public static string MethodName => GetMethodName(1); public static string GetCallerName(int index = 1) { int index2 = index + 1; StackFrame frame = new StackTrace().GetFrame(index2); if (frame == null) { return "Unknown"; } MethodBase method = frame.GetMethod(); if (method == null) { return "Unknown"; } return method.DeclaringType?.Name ?? method.Name; } public static string GetMethodName(int index = 0) { int index2 = index + 1; StackFrame frame = new StackTrace().GetFrame(index2); if (frame == null) { return "Unknown"; } MethodBase method = frame.GetMethod(); if (!(method == null)) { return method.Name; } return "Unknown"; } } internal static class Utils { internal const string Guid = "io.github.ykysnk.BepinExUtils"; internal const string Name = "BepInEx Utils"; internal const string Version = "1.0.2"; private static Logger? _logger; public static Logger Logger => _logger ?? (_logger = new Logger("BepInEx Utils")); } public static class Configs { internal static void Init() { } } } namespace BepInExUtils.Proxy { [PublicAPI] public abstract class ClassProxy { protected readonly Type Type; [Obsolete("Use Native instead.")] protected object Instance => Native; public object Native { get; } protected ClassProxy(object? instance, string className) { if (string.IsNullOrEmpty(className)) { throw new ArgumentException("Class name cannot be null or empty", "className"); } Type = AccessTools.TypeByName(className); if (Type == null) { throw new TypeAccessException("Type " + className + " not found."); } if (Type.BaseType == GetType()) { throw new TypeAccessException("Type " + className + " is subclass of " + GetType().Name + "."); } Type type = instance?.GetType(); if (type != Type) { throw new TypeAccessException("instance " + type?.FullName + " is not match " + Type.FullName + "."); } Native = instance ?? throw new NullReferenceException("instance is null"); } protected ClassProxy(string className) { if (string.IsNullOrEmpty(className)) { throw new ArgumentException("Class name cannot be null or empty", "className"); } Type = AccessTools.TypeByName(className); if (Type == null) { throw new TypeAccessException("Type " + className + " not found."); } if (Type.BaseType == GetType()) { throw new TypeAccessException("Type " + className + " is subclass of " + GetType().Name + "."); } if (Type.IsAbstract) { throw new TypeAccessException("Type " + className + " is abstract class."); } Native = Activator.CreateInstance(Type) ?? throw new NullReferenceException("Could not create instance"); } protected ClassProxy(string className, params object[] args) { if (string.IsNullOrEmpty(className)) { throw new ArgumentException("Class name cannot be null or empty", "className"); } Type = AccessTools.TypeByName(className); if (Type == null) { throw new TypeAccessException("Type " + className + " not found."); } if (Type.BaseType == GetType()) { throw new TypeAccessException("Type " + className + " is subclass of " + GetType().Name + "."); } if (Type.IsAbstract) { throw new TypeAccessException("Type " + className + " is abstract class."); } Native = Activator.CreateInstance(Type, args) ?? throw new NullReferenceException("Could not create instance"); } protected ClassProxy(string className, object[] args, object[] activationAttributes) { if (string.IsNullOrEmpty(className)) { throw new ArgumentException("Class name cannot be null or empty", "className"); } Type = AccessTools.TypeByName(className); if (Type == null) { throw new TypeAccessException("Type " + className + " not found."); } if (Type.BaseType == GetType()) { throw new TypeAccessException("Type " + className + " is subclass of " + GetType().Name + "."); } if (Type.IsAbstract) { throw new TypeAccessException("Type " + className + " is abstract class."); } Native = Activator.CreateInstance(Type, args, activationAttributes) ?? throw new NullReferenceException("Could not create instance"); } } } namespace BepInExUtils.Logging { [PublicAPI] public class AsyncLogSource : ILogSource, IDisposable { public string SourceName { get; } public event EventHandler<LogEventArgs>? LogEvent; public AsyncLogSource(string sourceName) { SourceName = sourceName; base..ctor(); } public void Dispose() { } public async Task Log(LogLevel level, object data) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) object data2 = data; await Task.Run(delegate { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Expected O, but got Unknown this.LogEvent?.Invoke(this, new LogEventArgs(data2, level, (ILogSource)(object)this)); }); } public async Task LogFatal(object data) { await Log((LogLevel)1, data); } public async Task LogError(object data) { await Log((LogLevel)2, data); } public async Task LogWarning(object data) { await Log((LogLevel)4, data); } public async Task LogMessage(object data) { await Log((LogLevel)8, data); } public async Task LogInfo(object data) { await Log((LogLevel)16, data); } public async Task LogDebug(object data) { await Log((LogLevel)32, data); } } [PublicAPI] public class Logger { [CompilerGenerated] private string <sourceName>P; private const string LogFormat = "[{0}] {1}"; private AsyncLogSource? _logger; private AsyncLogSource LogSource => _logger ?? (_logger = CreateAsyncLogSource(<sourceName>P)); public Logger(string sourceName) { <sourceName>P = sourceName; base..ctor(); } public static AsyncLogSource CreateAsyncLogSource(string sourceName) { AsyncLogSource asyncLogSource = new AsyncLogSource(sourceName); Logger.Sources.Add((ILogSource)(object)asyncLogSource); return asyncLogSource; } public void LogError(object data) { LogSource.LogError($"[{MethodUtils.CallerName}] {data}"); } public async Task LogErrorAsync(object data) { await LogSource.LogError($"[{MethodUtils.CallerName}] {data}"); } public void LogDebug(object data) { LogSource.LogDebug($"[{MethodUtils.CallerName}] {data}"); } public async Task LogDebugAsync(object data) { await LogSource.LogDebug($"[{MethodUtils.CallerName}] {data}"); } public void LogWarning(object data) { LogSource.LogWarning($"[{MethodUtils.CallerName}] {data}"); } public async Task LogWarningAsync(object data) { await LogSource.LogWarning($"[{MethodUtils.CallerName}] {data}"); } public void LogFatal(object data) { LogSource.LogFatal($"[{MethodUtils.CallerName}] {data}"); } public async Task LogFatalAsync(object data) { await LogSource.LogFatal($"[{MethodUtils.CallerName}] {data}"); } public void LogInfo(object data) { LogSource.LogInfo($"[{MethodUtils.CallerName}] {data}"); } public async Task LogInfoAsync(object data) { await LogSource.LogInfo($"[{MethodUtils.CallerName}] {data}"); } public void LogMessage(object data) { LogSource.LogMessage($"[{MethodUtils.CallerName}] {data}"); } public async Task LogMessageAsync(object data) { await LogSource.LogMessage($"[{MethodUtils.CallerName}] {data}"); } public void Error(object data) { LogSource.LogError($"[{MethodUtils.CallerName}] {data}"); } public async Task ErrorAsync(object data) { await LogSource.LogError($"[{MethodUtils.CallerName}] {data}"); } public void Debug(object data) { LogSource.LogDebug($"[{MethodUtils.CallerName}] {data}"); } public async Task DebugAsync(object data) { await LogSource.LogDebug($"[{MethodUtils.CallerName}] {data}"); } public void Warning(object data) { LogSource.LogWarning($"[{MethodUtils.CallerName}] {data}"); } public async Task WarningAsync(object data) { await LogSource.LogWarning($"[{MethodUtils.CallerName}] {data}"); } public void Fatal(object data) { LogSource.LogFatal($"[{MethodUtils.CallerName}] {data}"); } public async Task FatalAsync(object data) { await LogSource.LogFatal($"[{MethodUtils.CallerName}] {data}"); } public void Info(object data) { LogSource.LogInfo($"[{MethodUtils.CallerName}] {data}"); } public async Task InfoAsync(object data) { await LogSource.LogInfo($"[{MethodUtils.CallerName}] {data}"); } public void Message(object data) { LogSource.LogMessage($"[{MethodUtils.CallerName}] {data}"); } public async Task MessageAsync(object data) { await LogSource.LogMessage($"[{MethodUtils.CallerName}] {data}"); } } } namespace BepInExUtils.Interfaces { [PublicAPI] [Obsolete("Use IBepInUtils instead")] public abstract class BepInUtilsUnityPlugin : BaseUnityPlugin { protected abstract void PostAwake(); } [PublicAPI] public interface IBepInUtils { void Init(); } } namespace BepInExUtils.Extensions { public static class AssemblyExtensions { public sealed class <>E__0 { [PublicAPI] private Stream GetManifestResourceStreamOrThrow(string resource) { throw null; } [PublicAPI] public string GetEmbeddedResource(string resource) { throw null; } [PublicAPI] public byte[] GetEmbeddedResourceBytes(string resource) { throw null; } [PublicAPI] public AssetBundle GetEmbeddedAssetBundle(string resource) { throw null; } [PublicAPI] public bool LoadEmbeddedImage(ref Texture2D tex, string resource) { throw null; } } [SpecialName] [PublicAPI] private static Stream GetManifestResourceStreamOrThrow(this Assembly assembly, string resource) { return assembly.GetManifestResourceStream(resource) ?? throw new Exception(string.Format("Failed to find EmbeddedResource '{0}' in Assembly '{1}' (Available Resources: {2})", resource, assembly, string.Join(", ", assembly.GetManifestResourceNames()))); } [SpecialName] [PublicAPI] public static string GetEmbeddedResource(this Assembly assembly, string resource) { using StreamReader streamReader = new StreamReader(assembly.GetManifestResourceStreamOrThrow(resource)); return streamReader.ReadToEnd(); } [SpecialName] [PublicAPI] public static byte[] GetEmbeddedResourceBytes(this Assembly assembly, string resource) { using Stream stream = assembly.GetManifestResourceStreamOrThrow(resource); using MemoryStream memoryStream = new MemoryStream(); byte[] array = new byte[stream.Length]; int count; while ((count = stream.Read(array, 0, array.Length)) != 0) { memoryStream.Write(array, 0, count); } return memoryStream.ToArray(); } [SpecialName] [PublicAPI] public static AssetBundle GetEmbeddedAssetBundle(this Assembly assembly, string resource) { using Stream stream = assembly.GetManifestResourceStreamOrThrow(resource); return AssetBundle.LoadFromStream(stream); } [SpecialName] [PublicAPI] public static bool LoadEmbeddedImage(this Assembly assembly, ref Texture2D tex, string resource) { return ImageConversion.LoadImage(tex, assembly.GetEmbeddedResourceBytes(resource)); } } public static class ComponentExtensions { public sealed class <>E__0 { [PublicAPI] public string? FullName() { throw null; } } [SpecialName] [PublicAPI] public static string? FullName(this Component obj) { if (Object.op_Implicit((Object)(object)obj)) { return obj.gameObject.FullName(); } return null; } } public static class ConfigEntryExtensions { public sealed class <>E__0<T> { [PublicAPI] public ConfigEntryEx<T> TryGetValue(T defaultValue = default(T)) { throw null; } [PublicAPI] public ConfigEntryEx<T> Value() { throw null; } } [SpecialName] [PublicAPI] public static ConfigEntryEx<T> TryGetValue<T>(this ConfigEntry<T>? configEntry, T defaultValue = default(T)) { return new ConfigEntryEx<T>(configEntry, defaultValue); } [SpecialName] [PublicAPI] public static ConfigEntryEx<T> Value<T>(this ConfigEntry<T>? configEntry) { T val = (T)((configEntry != null) ? ((ConfigEntryBase)configEntry).DefaultValue : null); return configEntry.TryGetValue((val != null) ? val : default(T)); } } [PublicAPI] public class ConfigEntryEx<T> { [CompilerGenerated] private ConfigEntry<T>? <configEntry>P; [CompilerGenerated] private T <defaultValue>P; private T Value { get { if (<configEntry>P != null) { return <configEntry>P.Value; } return <defaultValue>P; } } public T V { get { return Value; } set { Set(value); } } public ConfigEntryEx(ConfigEntry<T>? configEntry, T defaultValue = default(T)) { <configEntry>P = configEntry; <defaultValue>P = defaultValue; base..ctor(); } public void Set(T value) { if (<configEntry>P != null) { <configEntry>P.Value = value; } } public static implicit operator T(ConfigEntryEx<T> instance) { return instance.Value; } public static explicit operator ConfigEntryEx<T>(ConfigEntry<T>? configEntry) { return new ConfigEntryEx<T>(configEntry); } } public static class DictionaryExtensions { public sealed class <>E__0<TKey, TValue> { [PublicAPI] public TValue? GetValueOrDefault(TKey key) { throw null; } } [SpecialName] [PublicAPI] public static TValue? GetValueOrDefault<TKey, TValue>(this IDictionary<TKey, TValue> dict, TKey key) { if (!dict.TryGetValue(key, out var value)) { return default(TValue); } return value; } } public static class GameObjectExtensions { public sealed class <>E__0 { [PublicAPI] public string? FullName() { throw null; } } [SpecialName] [PublicAPI] public static string? FullName(this GameObject obj) { if (Object.op_Implicit((Object)(object)obj)) { return obj.transform.FullName(); } return null; } } public static class ListExtensions { public sealed class <>E__0<T> { [PublicAPI] public bool TryGetValue(int index, out T? value) { throw null; } [PublicAPI] public T? GetValueOrDefault(int index) { throw null; } [PublicAPI] public bool TrySetValue(int index, T value) { throw null; } } public sealed class <>E__1<T> { [PublicAPI] public bool TryGetValue(int index, out T? value) { throw null; } [PublicAPI] public T? GetValueOrDefault(int index) { throw null; } [PublicAPI] public bool TrySetValue(int index, T value) { throw null; } } [SpecialName] [PublicAPI] public static bool TryGetValue<T>(this IList<T?>? list, int index, out T? value) { if (index < 0 || index >= list.Count) { value = default(T); return false; } value = list[index]; return true; } [SpecialName] [PublicAPI] public static T? GetValueOrDefault<T>(this IList<T?>? list, int index) { if (!list.TryGetValue(index, out T value)) { return default(T); } return value; } [SpecialName] [PublicAPI] public static bool TrySetValue<T>(this IList<T?>? list, int index, T? value) { if (index < 0 || index >= list.Count) { return false; } list[index] = value; return true; } [SpecialName] [PublicAPI] public static bool TryGetValue<T>(this T?[]? array, int index, out T? value) { if (index < 0 || index >= array.Length) { value = default(T); return false; } value = array[index]; return true; } [SpecialName] [PublicAPI] public static T? GetValueOrDefault<T>(this T?[]? array, int index) { if (!array.TryGetValue(index, out T value)) { return default(T); } return value; } [SpecialName] [PublicAPI] public static bool TrySetValue<T>(this T?[]? array, int index, T? value) { if (index < 0 || index >= array.Length) { return false; } array[index] = value; return true; } } public static class MonoBehaviourExtensions { public sealed class <>E__0 { [PublicAPI] public string? FullName() { throw null; } } [SpecialName] [PublicAPI] public static string? FullName(this MonoBehaviour behaviour) { if (Object.op_Implicit((Object)(object)behaviour)) { return ((Component)behaviour).transform.FullName(); } return null; } } public static class ObjectExtensions { public sealed class <>E__0 { [PublicAPI] public T? MethodInvoke<T>(string methodName, params object?[] parameters) { throw null; } [PublicAPI] public object GenericMethodInvoke<T>(string methodName, params object?[] parameters) { throw null; } [PublicAPI] public object GenericMethodInvoke<T, T2>(string methodName, params object?[] parameters) { throw null; } [PublicAPI] public object GenericMethodInvoke<T, T2, T3>(string methodName, params object?[] parameters) { throw null; } [PublicAPI] public object GenericMethodInvoke<T, T2, T3, T4>(string methodName, params object?[] parameters) { throw null; } [PublicAPI] public object GenericMethodInvoke<T, T2, T3, T4, T5>(string methodName, params object?[] parameters) { throw null; } [PublicAPI] public object GenericMethodInvoke<T, T2, T3, T4, T5, T6>(string methodName, params object?[] parameters) { throw null; } [PublicAPI] public object GenericMethodInvoke<T, T2, T3, T4, T5, T6, T7>(string methodName, params object?[] parameters) { throw null; } [PublicAPI] public object GenericMethodInvoke<T, T2, T3, T4, T5, T6, T7, T8>(string methodName, params object?[] parameters) { throw null; } [PublicAPI] public object GenericMethodInvoke<T, T2, T3, T4, T5, T6, T7, T8, T9>(string methodName, params object?[] parameters) { throw null; } [PublicAPI] public object GenericMethodInvoke<T, T2, T3, T4, T5, T6, T7, T8, T9, T10>(string methodName, params object?[] parameters) { throw null; } [PublicAPI] public void MethodInvoke(string methodName, params object?[] parameters) { throw null; } [PublicAPI] public T? GetFieldValue<T>(string fieldName) { throw null; } [PublicAPI] public void SetFieldValue<T>(string fieldName, T value) { throw null; } [PublicAPI] public T? GetPropertyValue<T>(string propertyName) { throw null; } [PublicAPI] public void SetPropertyValue<T>(string propertyName, T value) { throw null; } } [SpecialName] [PublicAPI] public static T? MethodInvoke<T>(this object obj, string methodName, params object?[] parameters) { if (obj == null) { throw new ArgumentNullException("obj"); } if (string.IsNullOrWhiteSpace(methodName)) { throw new ArgumentNullException("methodName"); } Type[] types = AccessTools.GetTypes(parameters); MethodInfo methodInfo = AccessTools.Method(obj.GetType(), methodName, types, (Type[])null); if (methodInfo == null) { methodInfo = AccessTools.Method(obj.GetType(), methodName, (Type[])null, (Type[])null); } if (methodInfo == null) { throw new MethodAccessException("Method " + methodName + " with parameters [" + string.Join(", ", types.ToList()) + "] not found."); } if (methodInfo.IsGenericMethod) { throw new MethodAccessException("use object.GenericMethodInvoke instead."); } if (methodInfo.GetParameters().Length != parameters.Length) { throw new TargetParameterCountException("Method " + methodName + " parameters count not match."); } object obj2 = methodInfo.Invoke(methodInfo.IsStatic ? null : obj, parameters); if (obj2 is T) { return (T)obj2; } return default(T); } [SpecialName] [PublicAPI] public static object GenericMethodInvoke<T>(this object obj, string methodName, params object?[] parameters) { if (obj == null) { throw new ArgumentNullException("obj"); } if (string.IsNullOrWhiteSpace(methodName)) { throw new ArgumentNullException("methodName"); } Type[] types = AccessTools.GetTypes(parameters); MethodInfo methodInfo = AccessTools.Method(obj.GetType(), methodName, types, (Type[])null); if (methodInfo == null) { methodInfo = AccessTools.Method(obj.GetType(), methodName, (Type[])null, (Type[])null); } if (methodInfo == null) { throw new MethodAccessException("Method " + methodName + " with parameters [" + string.Join(", ", types.ToList()) + "] not found."); } if (!methodInfo.IsGenericMethod) { throw new MethodAccessException("Method " + methodName + " is not generic method."); } methodInfo = methodInfo.MakeGenericMethod(typeof(T)); if (methodInfo.GetParameters().Length == parameters.Length) { return methodInfo.Invoke(methodInfo.IsStatic ? null : obj, parameters); } throw new TargetParameterCountException("Method " + methodName + " parameters count not match."); } [SpecialName] [PublicAPI] public static object GenericMethodInvoke<T, T2>(this object obj, string methodName, params object?[] parameters) { if (obj == null) { throw new ArgumentNullException("obj"); } if (string.IsNullOrWhiteSpace(methodName)) { throw new ArgumentNullException("methodName"); } Type[] types = AccessTools.GetTypes(parameters); MethodInfo methodInfo = AccessTools.Method(obj.GetType(), methodName, types, (Type[])null); if (methodInfo == null) { methodInfo = AccessTools.Method(obj.GetType(), methodName, (Type[])null, (Type[])null); } if (methodInfo == null) { throw new MethodAccessException("Method " + methodName + " with parameters [" + string.Join(", ", types.ToList()) + "] not found."); } if (!methodInfo.IsGenericMethod) { throw new MethodAccessException("Method " + methodName + " is not generic method."); } methodInfo = methodInfo.MakeGenericMethod(typeof(T), typeof(T2)); if (methodInfo.GetParameters().Length == parameters.Length) { return methodInfo.Invoke(methodInfo.IsStatic ? null : obj, parameters); } throw new TargetParameterCountException("Method " + methodName + " parameters count not match."); } [SpecialName] [PublicAPI] public static object GenericMethodInvoke<T, T2, T3>(this object obj, string methodName, params object?[] parameters) { if (obj == null) { throw new ArgumentNullException("obj"); } if (string.IsNullOrWhiteSpace(methodName)) { throw new ArgumentNullException("methodName"); } Type[] types = AccessTools.GetTypes(parameters); MethodInfo methodInfo = AccessTools.Method(obj.GetType(), methodName, types, (Type[])null); if (methodInfo == null) { methodInfo = AccessTools.Method(obj.GetType(), methodName, (Type[])null, (Type[])null); } if (methodInfo == null) { throw new MethodAccessException("Method " + methodName + " with parameters [" + string.Join(", ", types.ToList()) + "] not found."); } if (!methodInfo.IsGenericMethod) { throw new MethodAccessException("Method " + methodName + " is not generic method."); } methodInfo = methodInfo.MakeGenericMethod(typeof(T), typeof(T2), typeof(T3)); if (methodInfo.GetParameters().Length == parameters.Length) { return methodInfo.Invoke(methodInfo.IsStatic ? null : obj, parameters); } throw new TargetParameterCountException("Method " + methodName + " parameters count not match."); } [SpecialName] [PublicAPI] public static object GenericMethodInvoke<T, T2, T3, T4>(this object obj, string methodName, params object?[] parameters) { if (obj == null) { throw new ArgumentNullException("obj"); } if (string.IsNullOrWhiteSpace(methodName)) { throw new ArgumentNullException("methodName"); } Type[] types = AccessTools.GetTypes(parameters); MethodInfo methodInfo = AccessTools.Method(obj.GetType(), methodName, types, (Type[])null); if (methodInfo == null) { methodInfo = AccessTools.Method(obj.GetType(), methodName, (Type[])null, (Type[])null); } if (methodInfo == null) { throw new MethodAccessException("Method " + methodName + " with parameters [" + string.Join(", ", types.ToList()) + "] not found."); } if (!methodInfo.IsGenericMethod) { throw new MethodAccessException("Method " + methodName + " is not generic method."); } methodInfo = methodInfo.MakeGenericMethod(typeof(T), typeof(T2), typeof(T3), typeof(T4)); if (methodInfo.GetParameters().Length == parameters.Length) { return methodInfo.Invoke(methodInfo.IsStatic ? null : obj, parameters); } throw new TargetParameterCountException("Method " + methodName + " parameters count not match."); } [SpecialName] [PublicAPI] public static object GenericMethodInvoke<T, T2, T3, T4, T5>(this object obj, string methodName, params object?[] parameters) { if (obj == null) { throw new ArgumentNullException("obj"); } if (string.IsNullOrWhiteSpace(methodName)) { throw new ArgumentNullException("methodName"); } Type[] types = AccessTools.GetTypes(parameters); MethodInfo methodInfo = AccessTools.Method(obj.GetType(), methodName, types, (Type[])null); if (methodInfo == null) { methodInfo = AccessTools.Method(obj.GetType(), methodName, (Type[])null, (Type[])null); } if (methodInfo == null) { throw new MethodAccessException("Method " + methodName + " with parameters [" + string.Join(", ", types.ToList()) + "] not found."); } if (!methodInfo.IsGenericMethod) { throw new MethodAccessException("Method " + methodName + " is not generic method."); } methodInfo = methodInfo.MakeGenericMethod(typeof(T), typeof(T2), typeof(T3), typeof(T4), typeof(T5)); if (methodInfo.GetParameters().Length == parameters.Length) { return methodInfo.Invoke(methodInfo.IsStatic ? null : obj, parameters); } throw new TargetParameterCountException("Method " + methodName + " parameters count not match."); } [SpecialName] [PublicAPI] public static object GenericMethodInvoke<T, T2, T3, T4, T5, T6>(this object obj, string methodName, params object?[] parameters) { if (obj == null) { throw new ArgumentNullException("obj"); } if (string.IsNullOrWhiteSpace(methodName)) { throw new ArgumentNullException("methodName"); } Type[] types = AccessTools.GetTypes(parameters); MethodInfo methodInfo = AccessTools.Method(obj.GetType(), methodName, types, (Type[])null); if (methodInfo == null) { methodInfo = AccessTools.Method(obj.GetType(), methodName, (Type[])null, (Type[])null); } if (methodInfo == null) { throw new MethodAccessException("Method " + methodName + " with parameters [" + string.Join(", ", types.ToList()) + "] not found."); } if (!methodInfo.IsGenericMethod) { throw new MethodAccessException("Method " + methodName + " is not generic method."); } methodInfo = methodInfo.MakeGenericMethod(typeof(T), typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6)); if (methodInfo.GetParameters().Length == parameters.Length) { return methodInfo.Invoke(methodInfo.IsStatic ? null : obj, parameters); } throw new TargetParameterCountException("Method " + methodName + " parameters count not match."); } [SpecialName] [PublicAPI] public static object GenericMethodInvoke<T, T2, T3, T4, T5, T6, T7>(this object obj, string methodName, params object?[] parameters) { if (obj == null) { throw new ArgumentNullException("obj"); } if (string.IsNullOrWhiteSpace(methodName)) { throw new ArgumentNullException("methodName"); } Type[] types = AccessTools.GetTypes(parameters); MethodInfo methodInfo = AccessTools.Method(obj.GetType(), methodName, types, (Type[])null); if (methodInfo == null) { methodInfo = AccessTools.Method(obj.GetType(), methodName, (Type[])null, (Type[])null); } if (methodInfo == null) { throw new MethodAccessException("Method " + methodName + " with parameters [" + string.Join(", ", types.ToList()) + "] not found."); } if (!methodInfo.IsGenericMethod) { throw new MethodAccessException("Method " + methodName + " is not generic method."); } methodInfo = methodInfo.MakeGenericMethod(typeof(T), typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7)); if (methodInfo.GetParameters().Length == parameters.Length) { return methodInfo.Invoke(methodInfo.IsStatic ? null : obj, parameters); } throw new TargetParameterCountException("Method " + methodName + " parameters count not match."); } [SpecialName] [PublicAPI] public static object GenericMethodInvoke<T, T2, T3, T4, T5, T6, T7, T8>(this object obj, string methodName, params object?[] parameters) { if (obj == null) { throw new ArgumentNullException("obj"); } if (string.IsNullOrWhiteSpace(methodName)) { throw new ArgumentNullException("methodName"); } Type[] types = AccessTools.GetTypes(parameters); MethodInfo methodInfo = AccessTools.Method(obj.GetType(), methodName, types, (Type[])null); if (methodInfo == null) { methodInfo = AccessTools.Method(obj.GetType(), methodName, (Type[])null, (Type[])null); } if (methodInfo == null) { throw new MethodAccessException("Method " + methodName + " with parameters [" + string.Join(", ", types.ToList()) + "] not found."); } if (!methodInfo.IsGenericMethod) { throw new MethodAccessException("Method " + methodName + " is not generic method."); } methodInfo = methodInfo.MakeGenericMethod(typeof(T), typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8)); if (methodInfo.GetParameters().Length == parameters.Length) { return methodInfo.Invoke(methodInfo.IsStatic ? null : obj, parameters); } throw new TargetParameterCountException("Method " + methodName + " parameters count not match."); } [SpecialName] [PublicAPI] public static object GenericMethodInvoke<T, T2, T3, T4, T5, T6, T7, T8, T9>(this object obj, string methodName, params object?[] parameters) { if (obj == null) { throw new ArgumentNullException("obj"); } if (string.IsNullOrWhiteSpace(methodName)) { throw new ArgumentNullException("methodName"); } Type[] types = AccessTools.GetTypes(parameters); MethodInfo methodInfo = AccessTools.Method(obj.GetType(), methodName, types, (Type[])null); if (methodInfo == null) { methodInfo = AccessTools.Method(obj.GetType(), methodName, (Type[])null, (Type[])null); } if (methodInfo == null) { throw new MethodAccessException("Method " + methodName + " with parameters [" + string.Join(", ", types.ToList()) + "] not found."); } if (!methodInfo.IsGenericMethod) { throw new MethodAccessException("Method " + methodName + " is not generic method."); } methodInfo = methodInfo.MakeGenericMethod(typeof(T), typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9)); if (methodInfo.GetParameters().Length == parameters.Length) { return methodInfo.Invoke(methodInfo.IsStatic ? null : obj, parameters); } throw new TargetParameterCountException("Method " + methodName + " parameters count not match."); } [SpecialName] [PublicAPI] public static object GenericMethodInvoke<T, T2, T3, T4, T5, T6, T7, T8, T9, T10>(this object obj, string methodName, params object?[] parameters) { if (obj == null) { throw new ArgumentNullException("obj"); } if (string.IsNullOrWhiteSpace(methodName)) { throw new ArgumentNullException("methodName"); } Type[] types = AccessTools.GetTypes(parameters); MethodInfo methodInfo = AccessTools.Method(obj.GetType(), methodName, types, (Type[])null); if (methodInfo == null) { methodInfo = AccessTools.Method(obj.GetType(), methodName, (Type[])null, (Type[])null); } if (methodInfo == null) { throw new MethodAccessException("Method " + methodName + " with parameters [" + string.Join(", ", types.ToList()) + "] not found."); } if (!methodInfo.IsGenericMethod) { throw new MethodAccessException("Method " + methodName + " is not generic method."); } methodInfo = methodInfo.MakeGenericMethod(typeof(T), typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10)); if (methodInfo.GetParameters().Length == parameters.Length) { return methodInfo.Invoke(methodInfo.IsStatic ? null : obj, parameters); } throw new TargetParameterCountException("Method " + methodName + " parameters count not match."); } [SpecialName] [PublicAPI] public static void MethodInvoke(this object obj, string methodName, params object?[] parameters) { if (obj == null) { throw new ArgumentNullException("obj"); } if (string.IsNullOrWhiteSpace(methodName)) { throw new ArgumentNullException("methodName"); } Type[] types = AccessTools.GetTypes(parameters); MethodInfo methodInfo = AccessTools.Method(obj.GetType(), methodName, types, (Type[])null); if (methodInfo == null) { methodInfo = AccessTools.Method(obj.GetType(), methodName, (Type[])null, (Type[])null); } if (methodInfo == null) { throw new MethodAccessException("Method " + methodName + " with parameters [" + string.Join(", ", types.ToList()) + "] not found."); } if (methodInfo.IsGenericMethod) { throw new MethodAccessException("use object.GenericMethodInvoke instead."); } if (methodInfo.GetParameters().Length != parameters.Length) { throw new TargetParameterCountException("Method " + methodName + " parameters count not match."); } methodInfo.Invoke(methodInfo.IsStatic ? null : obj, parameters); } [SpecialName] [PublicAPI] public static T? GetFieldValue<T>(this object obj, string fieldName) { if (obj == null) { throw new ArgumentNullException("obj"); } if (string.IsNullOrWhiteSpace(fieldName)) { throw new ArgumentNullException("fieldName"); } FieldInfo fieldInfo = AccessTools.Field(obj.GetType(), fieldName); if (fieldInfo == null) { throw new FieldAccessException("Field " + fieldName + " not found."); } object value = fieldInfo.GetValue(fieldInfo.IsStatic ? null : obj); if (value is T) { return (T)value; } return default(T); } [SpecialName] [PublicAPI] public static void SetFieldValue<T>(this object obj, string fieldName, T value) { if (obj == null) { throw new ArgumentNullException("obj"); } if (string.IsNullOrWhiteSpace(fieldName)) { throw new ArgumentNullException("fieldName"); } FieldInfo fieldInfo = AccessTools.Field(obj.GetType(), fieldName); if (fieldInfo == null) { throw new FieldAccessException("Field " + fieldName + " not found."); } fieldInfo.SetValue(fieldInfo.IsStatic ? null : obj, value); } [SpecialName] [PublicAPI] public static T? GetPropertyValue<T>(this object obj, string propertyName) { if (obj == null) { throw new ArgumentNullException("obj"); } if (string.IsNullOrWhiteSpace(propertyName)) { throw new ArgumentNullException("propertyName"); } PropertyInfo propertyInfo = AccessTools.Property(obj.GetType(), propertyName); if (propertyInfo == null) { throw new MemberAccessException("Property " + propertyName + " not found."); } MethodInfo getMethod = propertyInfo.GetMethod; if (getMethod == null) { throw new MethodAccessException("Property " + propertyName + " don't have any getter."); } object value = propertyInfo.GetValue(getMethod.IsStatic ? null : obj); if (value is T) { return (T)value; } return default(T); } [SpecialName] [PublicAPI] public static void SetPropertyValue<T>(this object obj, string propertyName, T value) { if (obj == null) { throw new ArgumentNullException("obj"); } if (string.IsNullOrWhiteSpace(propertyName)) { throw new ArgumentNullException("propertyName"); } PropertyInfo propertyInfo = AccessTools.Property(obj.GetType(), propertyName); if (propertyInfo == null) { throw new MemberAccessException("Property " + propertyName + " not found."); } MethodInfo setMethod = propertyInfo.SetMethod; if (setMethod == null) { throw new MethodAccessException("Property " + propertyName + " don't have any setter."); } propertyInfo.SetValue(setMethod.IsStatic ? null : obj, value); } } public static class StringExtensions { public sealed class <>E__0 { [PublicAPI] public string? FirstPath(char value) { throw null; } [PublicAPI] public string? FirstPath(string value) { throw null; } [PublicAPI] public string? LastPath(char value) { throw null; } [PublicAPI] public string? LastPath(string value) { throw null; } [PublicAPI] public string? MiddlePath(char first, char last) { throw null; } [PublicAPI] public string? MiddlePath(string first, string last) { throw null; } [PublicAPI] public string? MiddlePath(char first, string last) { throw null; } [PublicAPI] public string? MiddlePath(string first, char last) { throw null; } [PublicAPI] public bool TryGetValue(int index, out char? value) { throw null; } [PublicAPI] public char? GetValueOrDefault(int index) { throw null; } } [SpecialName] [PublicAPI] public static string? FirstPath(this string str, char value) { int num = str.LastIndexOf(value); if (num >= 0) { return str.Substring(0, num); } return null; } [SpecialName] [PublicAPI] public static string? FirstPath(this string str, string value) { int num = str.LastIndexOf(value, StringComparison.Ordinal); if (num >= 0) { return str.Substring(0, num - value.Length + 1); } return null; } [SpecialName] [PublicAPI] public static string? LastPath(this string str, char value) { int num = str.IndexOf(value); if (num >= 0) { return str.Substring(num + 1); } return null; } [SpecialName] [PublicAPI] public static string? LastPath(this string str, string value) { int num = str.IndexOf(value, StringComparison.Ordinal); if (num >= 0) { return str.Substring(num + value.Length); } return null; } [SpecialName] [PublicAPI] public static string? MiddlePath(this string str, char first, char last) { return str.FirstPath(last)?.LastPath(first); } [SpecialName] [PublicAPI] public static string? MiddlePath(this string str, string first, string last) { return str.FirstPath(last)?.LastPath(first); } [SpecialName] [PublicAPI] public static string? MiddlePath(this string str, char first, string last) { return str.FirstPath(last)?.LastPath(first); } [SpecialName] [PublicAPI] public static string? MiddlePath(this string str, string first, char last) { return str.FirstPath(last)?.LastPath(first); } [SpecialName] [PublicAPI] public static bool TryGetValue(this string str, int index, out char? value) { if (index < 0 || index >= str.Length) { value = null; return false; } value = str[index]; return true; } [SpecialName] [PublicAPI] public static char? GetValueOrDefault(this string str, int index) { if (!str.TryGetValue(index, out var value)) { return null; } return value; } } public static class TransformExtensions { public sealed class <>E__0 { [PublicAPI] public string? FullName() { throw null; } [PublicAPI] public Vector3 GetWorldScale() { throw null; } } [SpecialName] [PublicAPI] public static string? FullName(this Transform transform) { string text = ((Object)transform).name; while (Object.op_Implicit((Object)(object)transform.parent)) { transform = transform.parent; text = ((Object)transform).name + "/" + text; } return text; } [SpecialName] [PublicAPI] public static Vector3 GetWorldScale(this Transform transform) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) Vector3 val = transform.localScale; Transform parent = transform.parent; while (Object.op_Implicit((Object)(object)parent)) { val = Vector3.Scale(val, parent.localScale); parent = parent.parent; } return val; } } [PublicAPI] public class TraverseEx<T> { private readonly Traverse<T> _traverse; public T Value { get { return _traverse.Value; } set { _traverse.Value = value; } } public T V { get { return _traverse.Value; } set { _traverse.Value = value; } } public TraverseEx(Traverse<T> traverse) { _traverse = traverse; base..ctor(); } public void Set(T value) { _traverse.Value = value; } public T Get() { return _traverse.Value; } public static implicit operator T(TraverseEx<T> instance) { return instance._traverse.Value; } public static explicit operator TraverseEx<T>(Traverse<T> traverse) { return new TraverseEx<T>(traverse); } } public static class TypeExtensions { public sealed class <>E__0 { [PublicAPI] public T? MethodInvokeInType<T>(string methodName, params object?[] parameters) { throw null; } [PublicAPI] public object GenericMethodInvokeInType<T>(string methodName, params object?[] parameters) { throw null; } [PublicAPI] public object GenericMethodInvokeInType<T, T2>(string methodName, params object?[] parameters) { throw null; } [PublicAPI] public object GenericMethodInvokeInType<T, T2, T3>(string methodName, params object?[] parameters) { throw null; } [PublicAPI] public object GenericMethodInvokeInType<T, T2, T3, T4>(string methodName, params object?[] parameters) { throw null; } [PublicAPI] public object GenericMethodInvokeInType<T, T2, T3, T4, T5>(string methodName, params object?[] parameters) { throw null; } [PublicAPI] public object GenericMethodInvokeInType<T, T2, T3, T4, T5, T6>(string methodName, params object?[] parameters) { throw null; } [PublicAPI] public object GenericMethodInvokeInType<T, T2, T3, T4, T5, T6, T7>(string methodName, params object?[] parameters) { throw null; } [PublicAPI] public object GenericMethodInvokeInType<T, T2, T3, T4, T5, T6, T7, T8>(string methodName, params object?[] parameters) { throw null; } [PublicAPI] public object GenericMethodInvokeInType<T, T2, T3, T4, T5, T6, T7, T8, T9>(string methodName, params object?[] parameters) { throw null; } [PublicAPI] public object GenericMethodInvokeInType<T, T2, T3, T4, T5, T6, T7, T8, T9, T10>(string methodName, params object?[] parameters) { throw null; } [PublicAPI] public void MethodInvokeInType(string methodName, params object?[] parameters) { throw null; } [PublicAPI] public T? GetFieldValueInType<T>(string fieldName) { throw null; } [PublicAPI] public void SetFieldValueInType<T>(string fieldName, T value) { throw null; } [PublicAPI] public T? GetPropertyValueInType<T>(string propertyName) { throw null; } [PublicAPI] public void SetPropertyValueInType<T>(string propertyName, T value) { throw null; } } [SpecialName] [PublicAPI] public static T? MethodInvokeInType<T>(this Type type, string methodName, params object?[] parameters) { if (string.IsNullOrWhiteSpace(methodName)) { throw new ArgumentNullException("methodName"); } Type[] types = AccessTools.GetTypes(parameters); MethodInfo methodInfo = AccessTools.Method(type, methodName, types, (Type[])null); if (methodInfo == null) { methodInfo = AccessTools.Method(type, methodName, (Type[])null, (Type[])null); } if (methodInfo == null) { throw new MethodAccessException("Method " + methodName + " with parameters [" + string.Join(", ", types.ToList()) + "] not found."); } if (methodInfo.IsGenericMethod) { throw new MethodAccessException("use Type.GenericMethodInvokeInType instead."); } if (methodInfo.GetParameters().Length != parameters.Length) { throw new TargetParameterCountException("Method " + methodName + " parameters count not match."); } object obj = methodInfo.Invoke(null, parameters); if (obj is T) { return (T)obj; } return default(T); } [SpecialName] [PublicAPI] public static object GenericMethodInvokeInType<T>(this Type type, string methodName, params object?[] parameters) { if (string.IsNullOrWhiteSpace(methodName)) { throw new ArgumentNullException("methodName"); } Type[] types = AccessTools.GetTypes(parameters); MethodInfo methodInfo = AccessTools.Method(type, methodName, types, (Type[])null); if (methodInfo == null) { methodInfo = AccessTools.Method(type, methodName, (Type[])null, (Type[])null); } if (methodInfo == null) { throw new MethodAccessException("Method " + methodName + " with parameters [" + string.Join(", ", types.ToList()) + "] not found."); } if (!methodInfo.IsGenericMethod) { throw new MethodAccessException("Method " + methodName + " is not generic method."); } methodInfo = methodInfo.MakeGenericMethod(typeof(T)); if (methodInfo.GetParameters().Length == parameters.Length) { return methodInfo.Invoke(null, parameters); } throw new TargetParameterCountException("Method " + methodName + " parameters count not match."); } [SpecialName] [PublicAPI] public static object GenericMethodInvokeInType<T, T2>(this Type type, string methodName, params object?[] parameters) { if (string.IsNullOrWhiteSpace(methodName)) { throw new ArgumentNullException("methodName"); } Type[] types = AccessTools.GetTypes(parameters); MethodInfo methodInfo = AccessTools.Method(type, methodName, types, (Type[])null); if (methodInfo == null) { methodInfo = AccessTools.Method(type, methodName, (Type[])null, (Type[])null); } if (methodInfo == null) { throw new MethodAccessException("Method " + methodName + " with parameters [" + string.Join(", ", types.ToList()) + "] not found."); } if (!methodInfo.IsGenericMethod) { throw new MethodAccessException("Method " + methodName + " is not generic method."); } methodInfo = methodInfo.MakeGenericMethod(typeof(T), typeof(T2)); if (methodInfo.GetParameters().Length == parameters.Length) { return methodInfo.Invoke(null, parameters); } throw new TargetParameterCountException("Method " + methodName + " parameters count not match."); } [SpecialName] [PublicAPI] public static object GenericMethodInvokeInType<T, T2, T3>(this Type type, string methodName, params object?[] parameters) { if (string.IsNullOrWhiteSpace(methodName)) { throw new ArgumentNullException("methodName"); } Type[] types = AccessTools.GetTypes(parameters); MethodInfo methodInfo = AccessTools.Method(type, methodName, types, (Type[])null); if (methodInfo == null) { methodInfo = AccessTools.Method(type, methodName, (Type[])null, (Type[])null); } if (methodInfo == null) { throw new MethodAccessException("Method " + methodName + " with parameters [" + string.Join(", ", types.ToList()) + "] not found."); } if (!methodInfo.IsGenericMethod) { throw new MethodAccessException("Method " + methodName + " is not generic method."); } methodInfo = methodInfo.MakeGenericMethod(typeof(T), typeof(T2), typeof(T3)); if (methodInfo.GetParameters().Length == parameters.Length) { return methodInfo.Invoke(null, parameters); } throw new TargetParameterCountException("Method " + methodName + " parameters count not match."); } [SpecialName] [PublicAPI] public static object GenericMethodInvokeInType<T, T2, T3, T4>(this Type type, string methodName, params object?[] parameters) { if (string.IsNullOrWhiteSpace(methodName)) { throw new ArgumentNullException("methodName"); } Type[] types = AccessTools.GetTypes(parameters); MethodInfo methodInfo = AccessTools.Method(type, methodName, types, (Type[])null); if (methodInfo == null) { methodInfo = AccessTools.Method(type, methodName, (Type[])null, (Type[])null); } if (methodInfo == null) { throw new MethodAccessException("Method " + methodName + " with parameters [" + string.Join(", ", types.ToList()) + "] not found."); } if (!methodInfo.IsGenericMethod) { throw new MethodAccessException("Method " + methodName + " is not generic method."); } methodInfo = methodInfo.MakeGenericMethod(typeof(T), typeof(T2), typeof(T3), typeof(T4)); if (methodInfo.GetParameters().Length == parameters.Length) { return methodInfo.Invoke(null, parameters); } throw new TargetParameterCountException("Method " + methodName + " parameters count not match."); } [SpecialName] [PublicAPI] public static object GenericMethodInvokeInType<T, T2, T3, T4, T5>(this Type type, string methodName, params object?[] parameters) { if (string.IsNullOrWhiteSpace(methodName)) { throw new ArgumentNullException("methodName"); } Type[] types = AccessTools.GetTypes(parameters); MethodInfo methodInfo = AccessTools.Method(type, methodName, types, (Type[])null); if (methodInfo == null) { methodInfo = AccessTools.Method(type, methodName, (Type[])null, (Type[])null); } if (methodInfo == null) { throw new MethodAccessException("Method " + methodName + " with parameters [" + string.Join(", ", types.ToList()) + "] not found."); } if (!methodInfo.IsGenericMethod) { throw new MethodAccessException("Method " + methodName + " is not generic method."); } methodInfo = methodInfo.MakeGenericMethod(typeof(T), typeof(T2), typeof(T3), typeof(T4), typeof(T5)); if (methodInfo.GetParameters().Length == parameters.Length) { return methodInfo.Invoke(null, parameters); } throw new TargetParameterCountException("Method " + methodName + " parameters count not match."); } [SpecialName] [PublicAPI] public static object GenericMethodInvokeInType<T, T2, T3, T4, T5, T6>(this Type type, string methodName, params object?[] parameters) { if (string.IsNullOrWhiteSpace(methodName)) { throw new ArgumentNullException("methodName"); } Type[] types = AccessTools.GetTypes(parameters); MethodInfo methodInfo = AccessTools.Method(type, methodName, types, (Type[])null); if (methodInfo == null) { methodInfo = AccessTools.Method(type, methodName, (Type[])null, (Type[])null); } if (methodInfo == null) { throw new MethodAccessException("Method " + methodName + " with parameters [" + string.Join(", ", types.ToList()) + "] not found."); } if (!methodInfo.IsGenericMethod) { throw new MethodAccessException("Method " + methodName + " is not generic method."); } methodInfo = methodInfo.MakeGenericMethod(typeof(T), typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6)); if (methodInfo.GetParameters().Length == parameters.Length) { return methodInfo.Invoke(null, parameters); } throw new TargetParameterCountException("Method " + methodName + " parameters count not match."); } [SpecialName] [PublicAPI] public static object GenericMethodInvokeInType<T, T2, T3, T4, T5, T6, T7>(this Type type, string methodName, params object?[] parameters) { if (string.IsNullOrWhiteSpace(methodName)) { throw new ArgumentNullException("methodName"); } Type[] types = AccessTools.GetTypes(parameters); MethodInfo methodInfo = AccessTools.Method(type, methodName, types, (Type[])null); if (methodInfo == null) { methodInfo = AccessTools.Method(type, methodName, (Type[])null, (Type[])null); } if (methodInfo == null) { throw new MethodAccessException("Method " + methodName + " with parameters [" + string.Join(", ", types.ToList()) + "] not found."); } if (!methodInfo.IsGenericMethod) { throw new MethodAccessException("Method " + methodName + " is not generic method."); } methodInfo = methodInfo.MakeGenericMethod(typeof(T), typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7)); if (methodInfo.GetParameters().Length == parameters.Length) { return methodInfo.Invoke(null, parameters); } throw new TargetParameterCountException("Method " + methodName + " parameters count not match."); } [SpecialName] [PublicAPI] public static object GenericMethodInvokeInType<T, T2, T3, T4, T5, T6, T7, T8>(this Type type, string methodName, params object?[] parameters) { if (string.IsNullOrWhiteSpace(methodName)) { throw new ArgumentNullException("methodName"); } Type[] types = AccessTools.GetTypes(parameters); MethodInfo methodInfo = AccessTools.Method(type, methodName, types, (Type[])null); if (methodInfo == null) { methodInfo = AccessTools.Method(type, methodName, (Type[])null, (Type[])null); } if (methodInfo == null) { throw new MethodAccessException("Method " + methodName + " with parameters [" + string.Join(", ", types.ToList()) + "] not found."); } if (!methodInfo.IsGenericMethod) { throw new MethodAccessException("Method " + methodName + " is not generic method."); } methodInfo = methodInfo.MakeGenericMethod(typeof(T), typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8)); if (methodInfo.GetParameters().Length == parameters.Length) { return methodInfo.Invoke(null, parameters); } throw new TargetParameterCountException("Method " + methodName + " parameters count not match."); } [SpecialName] [PublicAPI] public static object GenericMethodInvokeInType<T, T2, T3, T4, T5, T6, T7, T8, T9>(this Type type, string methodName, params object?[] parameters) { if (string.IsNullOrWhiteSpace(methodName)) { throw new ArgumentNullException("methodName"); } Type[] types = AccessTools.GetTypes(parameters); MethodInfo methodInfo = AccessTools.Method(type, methodName, types, (Type[])null); if (methodInfo == null) { methodInfo = AccessTools.Method(type, methodName, (Type[])null, (Type[])null); } if (methodInfo == null) { throw new MethodAccessException("Method " + methodName + " with parameters [" + string.Join(", ", types.ToList()) + "] not found."); } if (!methodInfo.IsGenericMethod) { throw new MethodAccessException("Method " + methodName + " is not generic method."); } methodInfo = methodInfo.MakeGenericMethod(typeof(T), typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9)); if (methodInfo.GetParameters().Length == parameters.Length) { return methodInfo.Invoke(null, parameters); } throw new TargetParameterCountException("Method " + methodName + " parameters count not match."); } [SpecialName] [PublicAPI] public static object GenericMethodInvokeInType<T, T2, T3, T4, T5, T6, T7, T8, T9, T10>(this Type type, string methodName, params object?[] parameters) { if (string.IsNullOrWhiteSpace(methodName)) { throw new ArgumentNullException("methodName"); } Type[] types = AccessTools.GetTypes(parameters); MethodInfo methodInfo = AccessTools.Method(type, methodName, types, (Type[])null); if (methodInfo == null) { methodInfo = AccessTools.Method(type, methodName, (Type[])null, (Type[])null); } if (methodInfo == null) { throw new MethodAccessException("Method " + methodName + " with parameters [" + string.Join(", ", types.ToList()) + "] not found."); } if (!methodInfo.IsGenericMethod) { throw new MethodAccessException("Method " + methodName + " is not generic method."); } methodInfo = methodInfo.MakeGenericMethod(typeof(T), typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10)); if (methodInfo.GetParameters().Length == parameters.Length) { return methodInfo.Invoke(null, parameters); } throw new TargetParameterCountException("Method " + methodName + " parameters count not match."); } [SpecialName] [PublicAPI] public static void MethodInvokeInType(this Type type, string methodName, params object?[] parameters) { if (string.IsNullOrWhiteSpace(methodName)) { throw new ArgumentNullException("methodName"); } Type[] types = AccessTools.GetTypes(parameters); MethodInfo methodInfo = AccessTools.Method(type, methodName, types, (Type[])null); if (methodInfo == null) { methodInfo = AccessTools.Method(type, methodName, (Type[])null, (Type[])null); } if (methodInfo == null) { throw new MethodAccessException("Method " + methodName + " with parameters [" + string.Join(", ", types.ToList()) + "] not found."); } if (methodInfo.IsGenericMethod) { throw new MethodAccessException("use Type.GenericMethodInvokeInType instead."); } if (methodInfo.GetParameters().Length != parameters.Length) { throw new TargetParameterCountException("Method " + methodName + " parameters count not match."); } methodInfo.Invoke(null, parameters); } [SpecialName] [PublicAPI] public static T? GetFieldValueInType<T>(this Type type, string fieldName) { if (string.IsNullOrWhiteSpace(fieldName)) { throw new ArgumentNullException("fieldName"); } FieldInfo fieldInfo = AccessTools.Field(type, fieldName); if (fieldInfo == null) { throw new FieldAccessException("Field " + fieldName + " not found."); } object value = fieldInfo.GetValue(null); if (value is T) { return (T)value; } return default(T); } [SpecialName] [PublicAPI] public static void SetFieldValueInType<T>(this Type type, string fieldName, T value) { if (string.IsNullOrWhiteSpace(fieldName)) { throw new ArgumentNullException("fieldName"); } FieldInfo fieldInfo = AccessTools.Field(type, fieldName); if (fieldInfo == null) { throw new FieldAccessException("Field " + fieldName + " not found."); } fieldInfo.SetValue(null, value); } [SpecialName] [PublicAPI] public static T? GetPropertyValueInType<T>(this Type type, string propertyName) { if (string.IsNullOrWhiteSpace(propertyName)) { throw new ArgumentNullException("propertyName"); } PropertyInfo propertyInfo = AccessTools.Property(type, propertyName); if (propertyInfo == null) { throw new MemberAccessException("Property " + propertyName + " not found."); } if (propertyInfo.GetMethod == null) { throw new MethodAccessException("Property " + propertyName + " don't have any getter."); } object value = propertyInfo.GetValue(null); if (value is T) { return (T)value; } return default(T); } [SpecialName] [PublicAPI] public static void SetPropertyValueInType<T>(this Type type, string propertyName, T value) { if (string.IsNullOrWhiteSpace(propertyName)) { throw new ArgumentNullException("propertyName"); } PropertyInfo propertyInfo = AccessTools.Property(type, propertyName); if (propertyInfo == null) { throw new MemberAccessException("Property " + propertyName + " not found."); } if (propertyInfo.SetMethod == null) { throw new MethodAccessException("Property " + propertyName + " don't have any setter."); } propertyInfo.SetValue(null, value); } } } namespace BepInExUtils.Commands { public readonly record struct CommandInfo { public readonly CommandManager.Command Command; public readonly string Description; public readonly string Name; public CommandInfo(string Name, string Description, CommandManager.Command Command) { this.Command = Command; this.Description = Description; this.Name = Name; } [CompilerGenerated] public void Deconstruct(out string Name, out string Description, out CommandManager.Command Command) { Name = this.Name; Description = this.Description; Command = this.Command; } } [PublicAPI] public sealed class CommandManager { public delegate Task Command(string[] args); public static readonly CommandManager Instance = new CommandManager(); private readonly Dictionary<string, CommandInfo> _commands = new Dictionary<string, CommandInfo>(); private CommandManager() { AddDefaultCommands(); Utils.Logger.Debug("CommandManager init"); } private void AddDefaultCommands() { AddCommand(new CommandInfo("help", "Show command infos", async delegate { IEnumerable<string> values = _commands.Values.Select((CommandInfo cmd) => cmd.Name + " - " + cmd.Description); await Utils.Logger.InfoAsync("Available commands:\n" + string.Join("\n", values)); })); AddCommand(new CommandInfo("echo", "Echo args", async delegate(string[] args) { await Utils.Logger.InfoAsync(string.Join("\n", args)); })); } public void AddCommand(CommandInfo commandInfo) { if (_commands.ContainsKey(commandInfo.Name)) { Utils.Logger.Error("Command " + commandInfo.Name + " already exists"); } else { _commands.Add(commandInfo.Name, commandInfo); } } public void AddCommand(string commandName, string description, Command command) { AddCommand(new CommandInfo(commandName, description, command)); } public async Task<bool> ExecuteCommand(string command, params string[] args) { if (!_commands.TryGetValue(command, out var value)) { return false; } await value.Command(args); return true; } } } namespace BepInExUtils.Attributes { [AttributeUsage(AttributeTargets.Class)] [PublicAPI] public class AccessExtensionsAttribute : Attribute { } [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] [PublicAPI] public class AccessFieldAttribute<T> : Attribute { public string FieldName { get; protected set; } public AccessFieldAttribute(string fieldName) { FieldName = fieldName; base..ctor(); } } [AttributeUsage(AttributeTargets.Class)] [PublicAPI] public class AccessInstanceAttribute<T> : Attribute { } [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] [PublicAPI] public class AccessMethodAttribute : Attribute { public string MethodName { get; protected set; } public Type[] Args { get; protected set; } public AccessMethodAttribute(string methodName, params Type[] args) { MethodName = methodName; Args = args; base..ctor(); } } [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] [PublicAPI] public class AccessMethodAttribute<T> : Attribute { public string MethodName { get; protected set; } public Type[] Args { get; protected set; } public AccessMethodAttribute(string methodName, params Type[] args) { MethodName = methodName; Args = args; base..ctor(); } } [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] [PublicAPI] public class AccessPropertyAttribute<T> : Attribute { public string PropertyName { get; protected set; } public AccessPropertyAttribute(string propertyName) { PropertyName = propertyName; base..ctor(); } } [AttributeUsage(AttributeTargets.Class)] [PublicAPI] public class BepInUtilsAttribute : Attribute { public string Guid { get; protected set; } public string Name { get; protected set; } public string Version { get; protected set; } public BepInUtilsAttribute(string guid, string name, string version) { Guid = guid; Name = name; Version = version; base..ctor(); } } [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] [PublicAPI] public class ConfigBindAttribute<T> : Attribute where T : IComparable { public string Key { get; protected set; } public ConfigDefinition ConfigDefinition { get; protected set; } public T DefaultValue { get; protected set; } public ConfigDescription? ConfigDescription { get; protected set; } public ConfigBindAttribute(string key, string section, T defaultValue, string description) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Expected O, but got Unknown //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Expected O, but got Unknown Key = key; ConfigDefinition = new ConfigDefinition(section, key); DefaultValue = defaultValue; ConfigDescription = new ConfigDescription(description, (AcceptableValueBase)null, Array.Empty<object>()); } public ConfigBindAttribute(string key, string section, T defaultValue, string description, T minValue, T maxValue) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Expected O, but got Unknown //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Expected O, but got Unknown Key = key; ConfigDefinition = new ConfigDefinition(section, key); DefaultValue = defaultValue; ConfigDescription = new ConfigDescription(description, (AcceptableValueBase)(object)new AcceptableValueRange<T>(minValue, maxValue), Array.Empty<object>()); } } }