Decompiled source of ENA Utils v1.0.0

plugins/ENA_Utils.dll

Decompiled a day ago
using System;
using System.Collections;
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.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using JetBrains.Annotations;
using JoelG.ENA4;
using Logger;
using Microsoft.CodeAnalysis;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.UIElements.Collections;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("ENA_Utils")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+d9157ff434ff625571c8589452dcaad36f2ea474")]
[assembly: AssemblyProduct("ENA_Utils")]
[assembly: AssemblyTitle("ENA_Utils")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[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;
		}
	}
}
[PublicAPI]
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true, Inherited = false)]
[MeansImplicitUse]
public class Initializer : Attribute
{
	private class DescendingComp : IComparer<float>
	{
		public int Compare(float x, float y)
		{
			return -x.CompareTo(y);
		}
	}

	public float priority = 0f;

	private static HashSet<string> assemblyBlacklist = new HashSet<string>
	{
		"mscorlib", "BepInEx.Preloader", "BepInEx", "System.Core", "MonoMod.Utils", "Mono.Cecil", "Mono.Cecil.Mdb", "Mono.Cecil.Pdb", "Mono.Cecil.Rocks", "MonoMod.RuntimeDetour",
		"0Harmony", "System", "HarmonyXInterop", "Mono.Security", "System.Configuration", "System.Xml", "BepInEx.MonoMod.HookGenPatcher", "MonoMod", "MonoMod.RuntimeDetour.HookGen", "netstandard",
		"UnityEngine.CoreModule", "UnityEngine", "UnityEngine.AIModule", "UnityEngine.ARModule", "UnityEngine.AccessibilityModule", "UnityEngine.AndroidJNIModule", "UnityEngine.AnimationModule", "UnityEngine.AssetBundleModule", "UnityEngine.AudioModule", "UnityEngine.ClothModule",
		"UnityEngine.ClusterInputModule", "UnityEngine.ClusterRendererModule", "UnityEngine.CrashReportingModule", "UnityEngine.DSPGraphModule", "UnityEngine.DirectorModule", "UnityEngine.GIModule", "UnityEngine.GameCenterModule", "UnityEngine.GridModule", "UnityEngine.HotReloadModule", "UnityEngine.IMGUIModule",
		"UnityEngine.ImageConversionModule", "UnityEngine.InputModule", "UnityEngine.InputLegacyModule", "UnityEngine.JSONSerializeModule", "UnityEngine.LocalizationModule", "UnityEngine.NVIDIAModule", "UnityEngine.ParticleSystemModule", "UnityEngine.PerformanceReportingModule", " UnityEngine.PhysicsModule", "UnityEngine.Physics2DModule",
		"UnityEngine.ProfilerModule", "UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule", "UnityEngine.ScreenCaptureModule", "UnityEngine.SharedInternalsModule", "UnityEngine.SpriteMaskModule", "UnityEngine.SpriteShapeModule", "UnityEngine.StreamingModule", " UnityEngine.SubstanceModule", "UnityEngine.SubsystemsModule", "UnityEngine.TLSModule",
		"UnityEngine.TerrainModule", "UnityEngine.TerrainPhysicsModule", "UnityEngine.TextCoreFontEngineModule", "UnityEngine.TextCoreTextEngineModule", "UnityEngine.TextRenderingModule", "UnityEngine.TilemapModule", "UnityEngine.UIModule", "UnityEngine.UIElementsModule", "UnityEngine.UIElementsNativeModule", "UnityEngine.UNETModule",
		"UnityEngine.UmbraModule", "UnityEngine.UnityAnalyticsModule", "UnityEngine.UnityAnalyticsCommonModule", "UnityEngine.UnityConnectModule", "UnityEngine.UnityCurlModule", "UnityEngine.UnityTestProtocolModule", "UnityEngine.UnityWebRequestModule", "UnityEngine.UnityWebRequestAssetBundleModule", "UnityEngine.UnityWebRequestAudioModule", "UnityEngine.UnityWebRequestTextureModule",
		"UnityEngine.UnityWebRequestWWWModule", "UnityEngine.VFXModule", "UnityEngine.VRModule", "UnityEngine.VehiclesModule", "UnityEngine.VideoModule", "UnityEngine.VirtualTexturingModule", "UnityEngine.WindModule", "UnityEngine.XRModule", "Assembly-CSharp-firstpass", "Assembly-CSharp",
		"DOTween.Modules", "UnityFx.Outline", "Unity.RenderPipelines.Universal.Shaders", "DOTweenPro.Scripts", "Unity.Addressables", "UnityFx.Outline.URP", "Unity.ProBuilder", "Unity.RenderPipelines.Core.ShaderLibrary", "UnityEngine.UI", "UnityHierarchyFolders.Runtime",
		"Unity.ProBuilder.Poly2Tri", "YarnSpinner.Unity", "Cinemachine", "LMirman.VespaIO.LLAPI", "PathCreator.Examples", "Unity.RenderPipeline.Universal.ShaderLibrary", "Rewired_Windows_Functions", "Coffee.UIParticle", "ScreenSpaceReflections", "Unity.Recorder",
		"JoelG.ENA4", "Unity.Recorder.Base", "Unity.RenderPipelines.Universal.Runtime", "NaughtyAttributes.Test", "Unity.VisualEffectGraph.Runtime", "Unity.Timeline", "LMirman.Utilities", "Unity.TextMeshPro", "Unity.ProBuilder.Csg", "Unity.ResourceManager",
		"Unity.RenderPipelines.Core.Runtime", "Febucci.TextAnimator.Runtime", "PathCreator", "com.rlabrecque.steamworks.net", "Unity.Mathematics", "Unity.ProBuilder.KdTree", "LMirman.RewiredGlyphs", "Unity.Burst", "YarnSpinnerTests.CommandsInAnAssemblyDefinition", "Unity.ProBuilder.Stl",
		"NaughtyAttributes.Core", "LMirman.VespaIO", "Unity.ScriptableBuildPipeline", "FMODUnityResonance", "FMODUnity", "Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary", "Yarn.Microsoft.Extensions.FileSystemGlobbing", "DOTween", "Yarn.System.Buffers", "Yarn.Antlr4.Runtime.Standard",
		"Rewired_Windows", "YarnSpinner.Compiler", "System.Drawing.Common", "Yarn.System.Runtime.CompilerServices.Unsafe", "Unity.Burst.Unsafe", "Yarn.Google.Protobuf", "Yarn.System.Text.Encodings.Web", "Rewired_Core", "Yarn.Microsoft.Bcl.AsyncInterfaces", "Newtonsoft.Json",
		"YarnSpinner", "System.IO.Packaging", "Yarn.System.Threading.Tasks.Extensions", "Yarn.System.Numerics.Vectors", "DOTweenPro", "DemiLib", "Microsoft.Win32.SystemEvents", "Yarn.CsvHelper", "Yarn.System.Reflection.TypeExtensions", "Yarn.System.Text.Json",
		"Yarn.System.Memory", "UnityExplorer.BIE5.Mono", "UniverseLib.Mono", "Microsoft.CSharp", "System.Collections.Concurrent", "System.Collections", "System.ComponentModel.Composition", "System.Console", "System.Data.DataSetExtensions", "System.Data",
		"System.Transactions", "System.Diagnostics.Debug", "System.Diagnostics.Tools", "System.Drawing", "System.EnterpriseServices", "System.Globalization", "System.IO.Compression", "System.IO.Compression.FileSystem", "System.IO", "System.IO.FileSystem",
		"System.IO.FileSystem.Primitives", "System.Linq", "System.Net.Http", "System.Numerics", "System.ObjectModel", "System.Reflection", " System.Reflection.Extensions", "System.Resources.ResourceManager", "System.Runtime", "System.Runtime.Extensions",
		"System.Runtime.InteropServices", "System.Runtime.Serialization", "System.ServiceModel.Internals", "System.Security", "System.Text.Encoding", "System.Threading", "System.Threading.Tasks", "System.Xml.Linq", "System.Xml.ReaderWriter", "UnityEngine.CoreModule",
		"MonoMod.Utils.GetManagedSizeHelper"
	};

	public static void Init()
	{
		SortedList<float, List<MethodInfo>> sortedList = new SortedList<float, List<MethodInfo>>(new DescendingComp());
		foreach (Assembly scannableAssembly in GetScannableAssemblies())
		{
			Type[] types = GetTypes(scannableAssembly);
			foreach (Type type in types)
			{
				if (!type.IsClass)
				{
					continue;
				}
				MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
				foreach (MethodInfo methodInfo in methods)
				{
					foreach (Initializer customAttribute in methodInfo.GetCustomAttributes<Initializer>(inherit: false))
					{
						if (sortedList.ContainsKey(customAttribute.priority))
						{
							DictionaryExtensions.Get<float, List<MethodInfo>>((IDictionary<float, List<MethodInfo>>)sortedList, customAttribute.priority, (List<MethodInfo>)null).Add(methodInfo);
							continue;
						}
						sortedList.Add(customAttribute.priority, new List<MethodInfo>(1) { methodInfo });
					}
				}
			}
		}
		foreach (List<MethodInfo> value in sortedList.Values)
		{
			foreach (MethodInfo item in value)
			{
				item.Invoke(null, null);
			}
		}
	}

	public Initializer(float priority = 0f)
	{
		this.priority = priority;
	}

	public static IEnumerable<Assembly> GetScannableAssemblies()
	{
		return from a in AppDomain.CurrentDomain.GetAssemblies()
			where !assemblyBlacklist.Contains(a.GetName().Name)
			select a;
	}

	public static Type[] GetTypes(Assembly assembly)
	{
		Type[] types;
		try
		{
			types = assembly.GetTypes();
		}
		catch (ReflectionTypeLoadException ex)
		{
			Log.Error($"ScanAssembly:  {ex}");
			types = ex.Types;
			if (types == null)
			{
				return null;
			}
		}
		catch (Exception arg)
		{
			Log.Error($"ScanAssembly:  {arg}");
			return null;
		}
		return types;
	}
}
namespace Logger
{
	internal static class Log
	{
		private static ManualLogSource _logSource;

		internal static void Init(ManualLogSource logSource)
		{
			_logSource = logSource;
		}

		internal static void Debug(object data)
		{
			_logSource.LogDebug(data);
		}

		internal static void Error(object data)
		{
			_logSource.LogError(data);
		}

		internal static void Fatal(object data)
		{
			_logSource.LogFatal(data);
		}

		internal static void Info(object data)
		{
			StackFrame stackFrame = new StackFrame(1);
			MethodBase method = stackFrame.GetMethod();
			_logSource.LogInfo((object)("[" + method.Name + "]: " + data));
		}

		internal static void Warning(object data)
		{
			_logSource.LogWarning(data);
		}
	}
}
namespace ENA_Utils
{
	[BepInPlugin("Onyx.ENA_Utils", "ENA_Utils", "1.0.0")]
	public class ENA_Utils : BaseUnityPlugin
	{
		public class ModUtil : MonoBehaviour
		{
			private void Start()
			{
				Initializer.Init();
			}
		}

		public const string PluginGUID = "Onyx.ENA_Utils";

		public const string PluginAuthor = "Onyx";

		public const string PluginName = "ENA_Utils";

		public const string PluginVersion = "1.0.0";

		public static GameObject ModUtilObj;

		private static ModUtil _modUtil;

		public void Awake()
		{
			Log.Init(((BaseUnityPlugin)this).Logger);
			SceneChanger.SceneChangeEvent += SceneChangeEvent;
		}

		private void SceneChangeEvent(SceneChangeEventArgs args)
		{
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Expected O, but got Unknown
			if (!Object.op_Implicit((Object)(object)ModUtilObj))
			{
				ModUtilObj = new GameObject("ModUtil");
				_modUtil = ModUtilObj.AddComponent<ModUtil>();
				Object.DontDestroyOnLoad((Object)(object)ModUtilObj);
			}
		}

		public static void StartCoroutine(IEnumerator enumerator)
		{
			if (Object.op_Implicit((Object)(object)ModUtilObj) && Object.op_Implicit((Object)(object)_modUtil))
			{
				((MonoBehaviour)_modUtil).StartCoroutine(enumerator);
			}
			else
			{
				Log.Error("ModUtilobject doesn't exist");
			}
		}

		public static string GetModBundlePath(string bundleName)
		{
			return Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), bundleName + ".bundle");
		}

		public static string GetGameBundlePath(string bundleName)
		{
			return Path.Combine(Addressables.RuntimePath, "StandaloneWindows64", bundleName + ".bundle");
		}
	}
	public static class Reflection
	{
		private const BindingFlags AllFlags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;

		public static MethodInfo GetPropertyGetter(this Type type, string propName)
		{
			return type.GetProperty(propName, BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic).GetGetMethod(nonPublic: true);
		}

		public static MethodInfo GetPropertySetter(this Type type, string propName)
		{
			return type.GetProperty(propName, BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic).GetSetMethod(nonPublic: true);
		}
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	internal sealed class IgnoresAccessChecksToAttribute : Attribute
	{
		public IgnoresAccessChecksToAttribute(string assemblyName)
		{
		}
	}
}