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 RecentItemsDisplay v0.2.0
RecentItemsDisplay.dll
Decompiled 5 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Reflection; using System.Resources; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using CanvasUtil; using DataDrivenConstants.Marker; using GlobalEnums; using HutongGames.PlayMaker; using HutongGames.PlayMaker.Actions; using Md.CollectableItem; using Md.CollectableRelic; using Md.FakeCollectable; using Md.HeroController; using Md.MateriumItem; using Md.PlayMakerFSM; using Md.PowerUpGetMsg; using Md.QuitToMenu; using Md.ShopItem; using Md.SkillGetMsg; using Md.ToolCrest; using Md.ToolItem; using Md.UIManager; using Microsoft.CodeAnalysis; using MonoDetour; using MonoDetour.Cil; using MonoDetour.DetourTypes; using MonoDetour.HookGen; using MonoDetour.Reflection.Unspeakable; using MonoMod.Utils; using Newtonsoft.Json; using RecentItemsDisplay.Localization; using RecentItemsDisplay.Serialization; using Silksong.DataManager; using Silksong.FsmUtil; using Silksong.ModMenu.Plugin; using Silksong.UnityHelper.Extensions; using TMPro; using TMProOld; using TeamCherry.Localization; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: NeutralResourcesLanguage("EN")] [assembly: MonoDetourTargets(typeof(GameManager))] [assembly: MonoDetourTargets(typeof(QuitToMenu))] [assembly: MonoDetourTargets(typeof(InvAnimateUpAndDown))] [assembly: MonoDetourTargets(typeof(UIManager))] [assembly: MonoDetourTargets(typeof(GameMap))] [assembly: MonoDetourTargets(typeof(HeroController))] [assembly: MonoDetourTargets(typeof(CollectableItem))] [assembly: MonoDetourTargets(typeof(CollectableRelic))] [assembly: MonoDetourTargets(typeof(ToolItem))] [assembly: MonoDetourTargets(typeof(ToolCrest))] [assembly: MonoDetourTargets(typeof(MateriumItem))] [assembly: MonoDetourTargets(typeof(FakeCollectable))] [assembly: MonoDetourTargets(typeof(ShopItem))] [assembly: MonoDetourTargets(typeof(PlayMakerFSM))] [assembly: MonoDetourTargets(typeof(PowerUpGetMsg))] [assembly: MonoDetourTargets(typeof(SkillGetMsg))] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("RecentItemsDisplay")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("0.2.0.0")] [assembly: AssemblyInformationalVersion("0.2.0+9981a13caa6ac425ceea18340e9d0cf2d3491edf")] [assembly: AssemblyProduct("RecentItemsDisplay")] [assembly: AssemblyTitle("RecentItemsDisplay")] [assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/flibber-hk/Silksong.RecentItemsDisplay")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.2.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] 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 System.Runtime.Versioning { [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Module | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Interface | AttributeTargets.Delegate, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class RequiresPreviewFeaturesAttribute : Attribute { public string? Message { get; } public string? Url { get; set; } public RequiresPreviewFeaturesAttribute() { } public RequiresPreviewFeaturesAttribute(string? message) { Message = message; } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class CallerArgumentExpressionAttribute : Attribute { public string ParameterName { get; } public CallerArgumentExpressionAttribute(string parameterName) { ParameterName = parameterName; } } [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Interface, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class CollectionBuilderAttribute : Attribute { public Type BuilderType { get; } public string MethodName { get; } public CollectionBuilderAttribute(Type builderType, string methodName) { BuilderType = builderType; MethodName = methodName; } } [AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class CompilerFeatureRequiredAttribute : Attribute { public const string RefStructs = "RefStructs"; public const string RequiredMembers = "RequiredMembers"; public string FeatureName { get; } public bool IsOptional { get; set; } public CompilerFeatureRequiredAttribute(string featureName) { FeatureName = featureName; } } [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class InterpolatedStringHandlerArgumentAttribute : Attribute { public string[] Arguments { get; } public InterpolatedStringHandlerArgumentAttribute(string argument) { Arguments = new string[1] { argument }; } public InterpolatedStringHandlerArgumentAttribute(params string[] arguments) { Arguments = arguments; } } [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class InterpolatedStringHandlerAttribute : Attribute { } [EditorBrowsable(EditorBrowsableState.Never)] [ExcludeFromCodeCoverage] internal static class IsExternalInit { } [AttributeUsage(AttributeTargets.Method, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class ModuleInitializerAttribute : Attribute { } [AttributeUsage(AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class OverloadResolutionPriorityAttribute : Attribute { public int Priority { get; } public OverloadResolutionPriorityAttribute(int priority) { Priority = priority; } } [AttributeUsage(AttributeTargets.Parameter, Inherited = true, AllowMultiple = false)] [ExcludeFromCodeCoverage] internal sealed class ParamCollectionAttribute : Attribute { } [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class RequiredMemberAttribute : Attribute { } [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] [EditorBrowsable(EditorBrowsableState.Never)] [ExcludeFromCodeCoverage] internal sealed class RequiresLocationAttribute : Attribute { } [AttributeUsage(AttributeTargets.Module | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Event | AttributeTargets.Interface, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class SkipLocalsInitAttribute : Attribute { } } namespace System.Diagnostics.CodeAnalysis { [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class ConstantExpectedAttribute : Attribute { public object? Min { get; set; } public object? Max { get; set; } } [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Module | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Interface | AttributeTargets.Delegate, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class ExperimentalAttribute : Attribute { public string DiagnosticId { get; } public string? UrlFormat { get; set; } public ExperimentalAttribute(string diagnosticId) { DiagnosticId = diagnosticId; } } [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)] [ExcludeFromCodeCoverage] internal sealed class MemberNotNullAttribute : Attribute { public string[] Members { get; } public MemberNotNullAttribute(string member) { Members = new string[1] { member }; } public MemberNotNullAttribute(params string[] members) { Members = members; } } [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)] [ExcludeFromCodeCoverage] internal sealed class MemberNotNullWhenAttribute : Attribute { public bool ReturnValue { get; } public string[] Members { get; } public MemberNotNullWhenAttribute(bool returnValue, string member) { ReturnValue = returnValue; Members = new string[1] { member }; } public MemberNotNullWhenAttribute(bool returnValue, params string[] members) { ReturnValue = returnValue; Members = members; } } [AttributeUsage(AttributeTargets.Constructor, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class SetsRequiredMembersAttribute : Attribute { } [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class StringSyntaxAttribute : Attribute { public const string CompositeFormat = "CompositeFormat"; public const string DateOnlyFormat = "DateOnlyFormat"; public const string DateTimeFormat = "DateTimeFormat"; public const string EnumFormat = "EnumFormat"; public const string GuidFormat = "GuidFormat"; public const string Json = "Json"; public const string NumericFormat = "NumericFormat"; public const string Regex = "Regex"; public const string TimeOnlyFormat = "TimeOnlyFormat"; public const string TimeSpanFormat = "TimeSpanFormat"; public const string Uri = "Uri"; public const string Xml = "Xml"; public string Syntax { get; } public object?[] Arguments { get; } public StringSyntaxAttribute(string syntax) { Syntax = syntax; Arguments = new object[0]; } public StringSyntaxAttribute(string syntax, params object?[] arguments) { Syntax = syntax; Arguments = arguments; } } [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class UnscopedRefAttribute : Attribute { } } namespace Md.SkillGetMsg { internal static class Setup { public delegate void PrefixSignature(SkillGetMsg self, ref ToolItemSkill skill); public delegate void PostfixSignature(SkillGetMsg self, ref ToolItemSkill skill); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(SkillGetMsg).GetMethod("Setup", (BindingFlags)(-1), null, new Type[1] { typeof(ToolItemSkill) }, null) ?? throw new MissingMethodException("SkillGetMsg", "Setup"); } } } namespace Md.PowerUpGetMsg { internal static class Setup { public delegate void PrefixSignature(PowerUpGetMsg self, ref PowerUps skill); public delegate void PostfixSignature(PowerUpGetMsg self, ref PowerUps skill); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(PowerUpGetMsg).GetMethod("Setup", (BindingFlags)(-1), null, new Type[1] { typeof(PowerUps) }, null) ?? throw new MissingMethodException("PowerUpGetMsg", "Setup"); } } } namespace Md.ShopItem { internal static class SetPurchased { public delegate void PrefixSignature(ShopItem self, ref Action onComplete, ref int subItemIndex); public delegate void PostfixSignature(ShopItem self, ref Action onComplete, ref int subItemIndex); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(ShopItem).GetMethod("SetPurchased", (BindingFlags)(-1), null, new Type[2] { typeof(Action), typeof(int) }, null) ?? throw new MissingMethodException("ShopItem", "SetPurchased"); } } } namespace Md.FakeCollectable { internal static class Get { public delegate void PrefixSignature(FakeCollectable self, ref bool showPopup); public delegate void PostfixSignature(FakeCollectable self, ref bool showPopup); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(FakeCollectable).GetMethod("Get", (BindingFlags)(-1), null, new Type[1] { typeof(bool) }, null) ?? throw new MissingMethodException("FakeCollectable", "Get"); } } internal static class GetPopupIcon { public delegate void PrefixSignature(FakeCollectable self); public delegate void PostfixSignature(FakeCollectable self, ref Sprite returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(FakeCollectable).GetMethod("GetPopupIcon", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("FakeCollectable", "GetPopupIcon"); } } internal static class GetPopupName { public delegate void PrefixSignature(FakeCollectable self); public delegate void PostfixSignature(FakeCollectable self, ref string returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(FakeCollectable).GetMethod("GetPopupName", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("FakeCollectable", "GetPopupName"); } } } namespace Md.MateriumItem { internal static class Get { public delegate void PrefixSignature(MateriumItem self, ref bool showPopup); public delegate void PostfixSignature(MateriumItem self, ref bool showPopup); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(MateriumItem).GetMethod("Get", (BindingFlags)(-1), null, new Type[1] { typeof(bool) }, null) ?? throw new MissingMethodException("MateriumItem", "Get"); } } internal static class GetPopupIcon { public delegate void PrefixSignature(MateriumItem self); public delegate void PostfixSignature(MateriumItem self, ref Sprite returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(MateriumItem).GetMethod("GetPopupIcon", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("MateriumItem", "GetPopupIcon"); } } internal static class GetPopupName { public delegate void PrefixSignature(MateriumItem self); public delegate void PostfixSignature(MateriumItem self, ref string returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(MateriumItem).GetMethod("GetPopupName", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("MateriumItem", "GetPopupName"); } } } namespace Md.ToolCrest { internal static class Get { public delegate void PrefixSignature(ToolCrest self, ref bool showPopup); public delegate void PostfixSignature(ToolCrest self, ref bool showPopup); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(ToolCrest).GetMethod("Get", (BindingFlags)(-1), null, new Type[1] { typeof(bool) }, null) ?? throw new MissingMethodException("ToolCrest", "Get"); } } internal static class GetPopupIcon { public delegate void PrefixSignature(ToolCrest self); public delegate void PostfixSignature(ToolCrest self, ref Sprite returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(ToolCrest).GetMethod("GetPopupIcon", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("ToolCrest", "GetPopupIcon"); } } internal static class Unlock { public delegate void PrefixSignature(ToolCrest self); public delegate void PostfixSignature(ToolCrest self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(ToolCrest).GetMethod("Unlock", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("ToolCrest", "Unlock"); } } } namespace Md.ToolItem { internal static class Get { public delegate void PrefixSignature(ToolItem self, ref bool showPopup); public delegate void PostfixSignature(ToolItem self, ref bool showPopup); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(ToolItem).GetMethod("Get", (BindingFlags)(-1), null, new Type[1] { typeof(bool) }, null) ?? throw new MissingMethodException("ToolItem", "Get"); } } internal static class GetPopupIcon { public delegate void PrefixSignature(ToolItem self); public delegate void PostfixSignature(ToolItem self, ref Sprite returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(ToolItem).GetMethod("GetPopupIcon", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("ToolItem", "GetPopupIcon"); } } internal static class Unlock { public delegate void PrefixSignature(ToolItem self, ref Action afterTutorialMsg, ref PopupFlags popupFlags); public delegate void PostfixSignature(ToolItem self, ref Action afterTutorialMsg, ref PopupFlags popupFlags); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(ToolItem).GetMethod("Unlock", (BindingFlags)(-1), null, new Type[2] { typeof(Action), typeof(PopupFlags) }, null) ?? throw new MissingMethodException("ToolItem", "Unlock"); } } internal static class GetPopupName { public delegate void PrefixSignature(ToolItem self); public delegate void PostfixSignature(ToolItem self, ref string returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(ToolItem).GetMethod("GetPopupName", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("ToolItem", "GetPopupName"); } } } namespace Md.CollectableRelic { internal static class Get { public delegate void PrefixSignature(CollectableRelic self, ref bool showPopup); public delegate void PostfixSignature(CollectableRelic self, ref bool showPopup); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(CollectableRelic).GetMethod("Get", (BindingFlags)(-1), null, new Type[1] { typeof(bool) }, null) ?? throw new MissingMethodException("CollectableRelic", "Get"); } } internal static class GetPopupIcon { public delegate void PrefixSignature(CollectableRelic self); public delegate void PostfixSignature(CollectableRelic self, ref Sprite returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(CollectableRelic).GetMethod("GetPopupIcon", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("CollectableRelic", "GetPopupIcon"); } } internal static class GetPopupName { public delegate void PrefixSignature(CollectableRelic self); public delegate void PostfixSignature(CollectableRelic self, ref string returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(CollectableRelic).GetMethod("GetPopupName", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("CollectableRelic", "GetPopupName"); } } } namespace Md.CollectableItem { internal static class Get { public delegate void PrefixSignature(CollectableItem self, ref bool showPopup); public delegate void PostfixSignature(CollectableItem self, ref bool showPopup); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(CollectableItem).GetMethod("Get", (BindingFlags)(-1), null, new Type[1] { typeof(bool) }, null) ?? throw new MissingMethodException("CollectableItem", "Get"); } } internal static class GetPopupIcon { public delegate void PrefixSignature(CollectableItem self); public delegate void PostfixSignature(CollectableItem self, ref Sprite returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(CollectableItem).GetMethod("GetPopupIcon", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("CollectableItem", "GetPopupIcon"); } } internal static class Collect { public delegate void PrefixSignature(CollectableItem self, ref int amount, ref bool showPopup); public delegate void PostfixSignature(CollectableItem self, ref int amount, ref bool showPopup); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(CollectableItem).GetMethod("Collect", (BindingFlags)(-1), null, new Type[2] { typeof(int), typeof(bool) }, null) ?? throw new MissingMethodException("CollectableItem", "Collect"); } } internal static class GetPopupName { public delegate void PrefixSignature(CollectableItem self); public delegate void PostfixSignature(CollectableItem self, ref string returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(CollectableItem).GetMethod("GetPopupName", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("CollectableItem", "GetPopupName"); } } } namespace Md.GameMap { internal static class Start { public delegate void PrefixSignature(GameMap self); public delegate void PostfixSignature(GameMap self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(GameMap).GetMethod("Start", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("GameMap", "Start"); } } } namespace Md.UIManager { internal static class Start { public delegate void PrefixSignature(UIManager self); public delegate void PostfixSignature(UIManager self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(UIManager).GetMethod("Start", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("UIManager", "Start"); } } internal static class UIGoToPauseMenu { public delegate void PrefixSignature(UIManager self); public delegate void PostfixSignature(UIManager self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(UIManager).GetMethod("UIGoToPauseMenu", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("UIManager", "UIGoToPauseMenu"); } } internal static class UIClosePauseMenu { public delegate void PrefixSignature(UIManager self); public delegate void PostfixSignature(UIManager self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(UIManager).GetMethod("UIClosePauseMenu", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("UIManager", "UIClosePauseMenu"); } } } namespace Md.QuitToMenu { internal static class Start { public delegate void PrefixSignature(QuitToMenu self); public delegate void PostfixSignature(QuitToMenu self, ref IEnumerator returnValue); public delegate void PrefixMoveNextSignature(SpeakableEnumerator<object, QuitToMenu> self); public delegate void PostfixMoveNextSignature(SpeakableEnumerator<object, QuitToMenu> self, ref bool continueEnumeration); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MonoDetourHook PrefixMoveNext(PrefixMoveNextSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>((MethodBase)StateMachineTarget(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook PostfixMoveNext(PostfixMoveNextSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>((MethodBase)StateMachineTarget(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHookMoveNext(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook((MethodBase)StateMachineTarget(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(QuitToMenu).GetMethod("Start", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("QuitToMenu", "Start"); } public static MethodInfo StateMachineTarget() { return Extensions.GetStateMachineTarget((MethodInfo)Target()); } } } namespace Md.PlayMakerFSM { internal static class AddEventHandlerDelegate { internal static class Invoke { public delegate void PrefixSignature(AddEventHandlerDelegate self, ref PlayMakerFSM fsm); public delegate void PostfixSignature(AddEventHandlerDelegate self, ref PlayMakerFSM fsm); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(AddEventHandlerDelegate).GetMethod("Invoke", (BindingFlags)(-1), null, new Type[1] { typeof(PlayMakerFSM) }, null) ?? throw new MissingMethodException("PlayMakerFSM+AddEventHandlerDelegate", "Invoke"); } } } internal static class Start { public delegate void PrefixSignature(PlayMakerFSM self); public delegate void PostfixSignature(PlayMakerFSM self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(PlayMakerFSM).GetMethod("Start", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("PlayMakerFSM", "Start"); } } internal static class Init { public delegate void PrefixSignature(PlayMakerFSM self); public delegate void PostfixSignature(PlayMakerFSM self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(PlayMakerFSM).GetMethod("Init", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("PlayMakerFSM", "Init"); } } } namespace Md.HeroController { internal static class HeroSetDelegate { internal static class Invoke { public delegate void PrefixSignature(HeroSetDelegate self, ref HeroController heroController); public delegate void PostfixSignature(HeroSetDelegate self, ref HeroController heroController); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(HeroSetDelegate).GetMethod("Invoke", (BindingFlags)(-1), null, new Type[1] { typeof(HeroController) }, null) ?? throw new MissingMethodException("HeroController+HeroSetDelegate", "Invoke"); } } } internal static class HeroInPosition { internal static class Invoke { public delegate void PrefixSignature(HeroInPosition self, ref bool forceDirect); public delegate void PostfixSignature(HeroInPosition self, ref bool forceDirect); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(HeroInPosition).GetMethod("Invoke", (BindingFlags)(-1), null, new Type[1] { typeof(bool) }, null) ?? throw new MissingMethodException("HeroController+HeroInPosition", "Invoke"); } } } internal static class DamageTakenDelegate { internal static class Invoke { public delegate void PrefixSignature(DamageTakenDelegate self, ref DamageInfo damageInfo); public delegate void PostfixSignature(DamageTakenDelegate self, ref DamageInfo damageInfo); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(DamageTakenDelegate).GetMethod("Invoke", (BindingFlags)(-1), null, new Type[1] { typeof(DamageInfo) }, null) ?? throw new MissingMethodException("HeroController+DamageTakenDelegate", "Invoke"); } } } internal static class Start { public delegate void PrefixSignature(HeroController self); public delegate void PostfixSignature(HeroController self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(HeroController).GetMethod("Start", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("HeroController", "Start"); } } internal static class ConfigGroup { internal static class Setup { public delegate void PrefixSignature(ConfigGroup self); public delegate void PostfixSignature(ConfigGroup self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(ConfigGroup).GetMethod("Setup", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("HeroController+ConfigGroup", "Setup"); } } } internal static class GetState { public delegate void PrefixSignature(HeroController self, ref string stateName); public delegate void PostfixSignature(HeroController self, ref string stateName, ref bool returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(HeroController).GetMethod("GetState", (BindingFlags)(-1), null, new Type[1] { typeof(string) }, null) ?? throw new MissingMethodException("HeroController", "GetState"); } } } namespace Md.GameManager { internal static class PausedEvent { internal static class Invoke { public delegate void PrefixSignature(PausedEvent self, ref bool isPaused); public delegate void PostfixSignature(PausedEvent self, ref bool isPaused); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(PausedEvent).GetMethod("Invoke", (BindingFlags)(-1), null, new Type[1] { typeof(bool) }, null) ?? throw new MissingMethodException("GameManager+PausedEvent", "Invoke"); } } } internal static class GameStateEvent { internal static class Invoke { public delegate void PrefixSignature(GameStateEvent self, ref GameState gameState); public delegate void PostfixSignature(GameStateEvent self, ref GameState gameState); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(GameStateEvent).GetMethod("Invoke", (BindingFlags)(-1), null, new Type[1] { typeof(GameState) }, null) ?? throw new MissingMethodException("GameManager+GameStateEvent", "Invoke"); } } } internal static class BossLoad { internal static class Invoke { public delegate void PrefixSignature(BossLoad self); public delegate void PostfixSignature(BossLoad self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(BossLoad).GetMethod("Invoke", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("GameManager+BossLoad", "Invoke"); } } } internal static class EnterSceneEvent { internal static class Invoke { public delegate void PrefixSignature(EnterSceneEvent self); public delegate void PostfixSignature(EnterSceneEvent self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(EnterSceneEvent).GetMethod("Invoke", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("GameManager+EnterSceneEvent", "Invoke"); } } } internal static class SceneTransitionFinishEvent { internal static class Invoke { public delegate void PrefixSignature(SceneTransitionFinishEvent self); public delegate void PostfixSignature(SceneTransitionFinishEvent self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(SceneTransitionFinishEvent).GetMethod("Invoke", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("GameManager+SceneTransitionFinishEvent", "Invoke"); } } } internal static class SceneTransitionBeganDelegate { internal static class Invoke { public delegate void PrefixSignature(SceneTransitionBeganDelegate self, ref SceneLoad sceneLoad); public delegate void PostfixSignature(SceneTransitionBeganDelegate self, ref SceneLoad sceneLoad); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(SceneTransitionBeganDelegate).GetMethod("Invoke", (BindingFlags)(-1), null, new Type[1] { typeof(SceneLoad) }, null) ?? throw new MissingMethodException("GameManager+SceneTransitionBeganDelegate", "Invoke"); } } } internal static class Start { public delegate void PrefixSignature(GameManager self); public delegate void PostfixSignature(GameManager self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(GameManager).GetMethod("Start", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("GameManager", "Start"); } } internal static class SceneLoadInfo { internal new static class ToString { public delegate void PrefixSignature(SceneLoadInfo self); public delegate void PostfixSignature(SceneLoadInfo self, ref string returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(SceneLoadInfo).GetMethod("ToString", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("GameManager+SceneLoadInfo", "ToString"); } } } } namespace Md.InvAnimateUpAndDown { internal static class Show { public delegate void PrefixSignature(InvAnimateUpAndDown self); public delegate void PostfixSignature(InvAnimateUpAndDown self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(InvAnimateUpAndDown).GetMethod("Show", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("InvAnimateUpAndDown", "Show"); } } internal static class Hide { public delegate void PrefixSignature(InvAnimateUpAndDown self); public delegate void PostfixSignature(InvAnimateUpAndDown self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(InvAnimateUpAndDown).GetMethod("Hide", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("InvAnimateUpAndDown", "Hide"); } } } namespace MonoDetour.HookGen { internal static class DefaultMonoDetourManager { internal static MonoDetourManager Instance { get; } = New(); internal static MonoDetourManager New() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown return new MonoDetourManager(typeof(DefaultMonoDetourManager).Assembly.GetName().Name); } } [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class, AllowMultiple = true, Inherited = false)] internal class MonoDetourTargetsAttribute : Attribute, IMonoDetourTargets { public Type? TargetType { get; } public bool IncludeNestedTypes { get; set; } public string[]? Members { get; set; } public string[]? MemberNamePrefixes { get; set; } public string[]? MemberNameSuffixes { get; set; } public bool GenerateControlFlowVariants { get; set; } public MonoDetourTargetsAttribute(Type? targetType = null) { TargetType = targetType; IncludeNestedTypes = true; base..ctor(); } } } namespace BepInEx { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] [Microsoft.CodeAnalysis.Embedded] internal sealed class BepInAutoPluginAttribute : Attribute { public BepInAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace BepInEx.Preloader.Core.Patching { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] [Microsoft.CodeAnalysis.Embedded] internal sealed class PatcherAutoPluginAttribute : Attribute { public PatcherAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace Microsoft.CodeAnalysis { [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace DataDrivenConstants.Marker { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] internal sealed class JsonDataAttribute : Attribute { public string ValuePath { get; } public string[] FileGlobs { get; } public JsonDataAttribute(string valuePath, params string[] fileGlobs) { ValuePath = valuePath; FileGlobs = (string[])fileGlobs.Clone(); } } internal enum ReplacementKind { Normal, Regex } [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = true)] internal sealed class ReplacementRuleAttribute : Attribute { public string OldString { get; } public string NewString { get; } public ReplacementKind ReplacementKind { get; } public ReplacementRuleAttribute(string oldString, string newString, ReplacementKind replacementKind = ReplacementKind.Normal) { OldString = oldString; NewString = newString; ReplacementKind = replacementKind; } } } namespace RecentItemsDisplay { internal static class Display { private static readonly ManualLogSource Log = Logger.CreateLogSource("RecentItemsDisplay.Display"); private static readonly Vector2 AnchorPoint = new Vector2(0.9f, 0.9f); private static GameObject? _canvas; private static GameObject? _title; private static readonly Queue<GameObject> _items = new Queue<GameObject>(); public static int NumDisplayableItems => ConfigSettings.NumDisplayableItems.Value; public static bool DisplayEnabled => ConfigSettings.DisplayEnabled.Value; public static int MaxItems { get; internal set; } = 15; internal static event Action? OnCreateDisplay; public static void Create() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Expected O, but got Unknown if (!((Object)(object)_canvas != (Object)null)) { _canvas = CanvasUtil.CreateCanvas((RenderMode)0, new Vector2(1920f, 1080f)); CanvasGroup component = _canvas.GetComponent<CanvasGroup>(); component.interactable = false; component.blocksRaycasts = false; Object.DontDestroyOnLoad((Object)(object)_canvas); _title = CanvasUtil.CreateTextPanel(_canvas, "RECENT_ITEMS_TITLE".LocalizeKey(), 24, (TextAnchor)4, new RectData(new Vector2(200f, 100f), Vector2.zero, AnchorPoint + new Vector2(-0.025f, 0.05f), AnchorPoint + new Vector2(-0.025f, 0.05f)), true); UpdateVisibility(); Show(); Display.OnCreateDisplay?.Invoke(); } } public static void Destroy() { if ((Object)(object)_canvas != (Object)null) { Object.Destroy((Object)(object)_canvas); } _canvas = null; _items.Clear(); } public static void Redraw() { Destroy(); Create(); UpdateVisibility(); } internal static void AddItem(Sprite? sprite, string msg, Color? textColor = null) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Expected O, but got Unknown //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Expected O, but got Unknown //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Expected O, but got Unknown //IL_00e5: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_canvas == (Object)null) { Create(); } GameObject val = CanvasUtil.CreateBasePanel(_canvas, new RectData(new Vector2(200f, 50f), Vector2.zero, AnchorPoint, AnchorPoint)); if ((Object)(object)sprite != (Object)null) { CanvasUtil.CreateImagePanel(val, sprite, new RectData(new Vector2(50f, 50f), Vector2.zero, new Vector2(-0.1f, 0.5f), new Vector2(-0.1f, 0.5f))); } GameObject val2 = CanvasUtil.CreateTextPanel(val, msg, 24, (TextAnchor)3, new RectData(new Vector2(400f, 100f), Vector2.zero, new Vector2(1.1f, 0.5f), new Vector2(1.1f, 0.5f)), Fonts.GetFont("Perpetua")); if (textColor.HasValue) { ((Graphic)val2.GetComponent<Text>()).color = textColor.Value; } _items.Enqueue(val); if (_items.Count > MaxItems) { Object.Destroy((Object)(object)_items.Dequeue()); } UpdatePositions(); UpdateVisibility(); } private static void UpdatePositions() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) int num = _items.Count - 1; foreach (GameObject item in _items) { Vector2 val = AnchorPoint + new Vector2(0f, -0.06f * (float)num--); item.GetComponent<RectTransform>().anchorMin = val; item.GetComponent<RectTransform>().anchorMax = val; item.SetActive(num < MaxItems - 1); } } private static void UpdateVisibility() { if ((Object)(object)_canvas == (Object)null) { return; } _canvas.SetActive(DisplayEnabled); foreach (var (val, num) in _items.Reverse().Select((GameObject go, int idx) => (go, idx))) { val.SetActive(num < NumDisplayableItems); } if ((Object)(object)_title != (Object)null) { _title.SetActive(_items.Count > 0); } } public static void Show() { if (!((Object)(object)_canvas == (Object)null)) { _canvas.SetActive(DisplayEnabled); } } public static void Hide() { if (!((Object)(object)_canvas == (Object)null)) { _canvas.SetActive(false); } } internal static void Hook() { ((BaseUnityPlugin)RecentItemsDisplayPlugin.Instance).Config.SettingChanged += OnConfigSettingChanged; Md.QuitToMenu.Start.PostfixMoveNext(DestroyOnQuitToMenu); Md.HeroController.Start.Postfix(CreateOnEnterGame); UIGoToPauseMenu.Postfix(HideOnPause); UIClosePauseMenu.Postfix(ShowOnUnpause); } private static void OnConfigSettingChanged(object sender, SettingChangedEventArgs e) { Redraw(); } private static void ShowOnUnpause(UIManager self) { Show(); } private static void HideOnPause(UIManager self) { Hide(); } private static void CreateOnEnterGame(HeroController self) { Create(); } private static void DestroyOnQuitToMenu(SpeakableEnumerator<object, QuitToMenu> self, ref bool continueEnumeration) { Destroy(); } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("io.github.flibber-hk.recentitemsdisplay", "RecentItemsDisplay", "0.2.0")] public class RecentItemsDisplayPlugin : BaseUnityPlugin, ISaveDataMod<SaveData>, ISaveDataMod { public const string Id = "io.github.flibber-hk.recentitemsdisplay"; public static RecentItemsDisplayPlugin Instance { get; private set; } SaveData? ISaveDataMod<SaveData>.SaveData { get { return SaveData.GetData(); } set { SaveData.SetData(value); } } public static string Name => "RecentItemsDisplay"; public static string Version => "0.2.0"; private void Awake() { Instance = this; ConfigSettings.Init(((BaseUnityPlugin)this).Config); Display.Hook(); VanillaItems.Hook(); MessageSerializationBridge.Hook(); ((BaseUnityPlugin)this).Logger.LogInfo((object)("Plugin " + Name + " (io.github.flibber-hk.recentitemsdisplay) has loaded!")); } } internal static class VanillaItems { private static readonly MonoDetourManager mgr = new MonoDetourManager("io.github.flibber-hk.recentitemsdisplay :: VanillaItems"); private static readonly MonoDetourManager fsmMgr = new MonoDetourManager("io.github.flibber-hk.recentitemsdisplay :: VanillaItems :: FSM"); private static readonly ManualLogSource Log = Logger.CreateLogSource("RecentItemsDisplay.VanillaItems"); private static void SendToDisplay(ISpriteProvider sprite, string text) { MessageSerializationBridge.SendItemToDisplay(sprite, text); } public static void Hook() { Md.MateriumItem.Get.Prefix(OnCollectMateriumItem, null, applyByDefault: true, mgr); Collect.Prefix(OnCollectCollectableItem, null, applyByDefault: true, mgr); Md.CollectableRelic.Get.Prefix(OnCollectCollectableRelic, null, applyByDefault: true, mgr); Md.FakeCollectable.Get.Prefix(GetFakeCollectable, null, applyByDefault: true, mgr); Md.ToolItem.Unlock.Prefix(OnCollectToolItem, null, applyByDefault: true, mgr); Md.ToolCrest.Unlock.Prefix(OnCollectToolCrest, null, applyByDefault: true, mgr); SetPurchased.Postfix(OnBuyShopItem, null, applyByDefault: true, mgr); Md.PowerUpGetMsg.Setup.Postfix(OnGetPowerUp, null, applyByDefault: true, mgr); Md.SkillGetMsg.Setup.Postfix(OnGetSkill, null, applyByDefault: true, mgr); Md.PlayMakerFSM.Start.Prefix(WatchFsms, null, applyByDefault: true, fsmMgr); } private static bool NameMatches(this string self, string target) { if (target == self) { return true; } if (!self.StartsWith(target)) { return false; } string text = self.Substring(target.Length); if (string.IsNullOrWhiteSpace(text)) { return true; } return text.TrimStart().StartsWith("("); } private static void OnGetSkill(SkillGetMsg self, ref ToolItemSkill skill) { SendToDisplay(new ToolItemSprite(((ToolItem)skill).name), ((QuestTargetCounter)skill).GetUIMsgName()); } private static void OnGetPowerUp(PowerUpGetMsg self, ref PowerUps skill) { SendToDisplay(new NonSerializableSprite { RuntimeSprite = self.solidSprite.sprite }, self.nameText.text); } private static void WatchFsms(PlayMakerFSM self) { WatchSpoolsAndMaskShards(self); WatchSilkHearts(self); WatchUpgradeFsm(self); WatchMelodyFsm(self); WatchGeneralGetFsm(self); } private static void WatchGeneralGetFsm(PlayMakerFSM self) { if (!((Object)((Component)self).gameObject).name.NameMatches("UI Msg Get Item") || self.FsmName != "Msg Control") { return; } FsmState state = FsmUtil.GetState(self, "Stop Up"); if (state == null) { return; } FsmUtil.InsertMethod(state, 0, (Action<FsmStateAction>)delegate(FsmStateAction a) { string value = a.Fsm.GetFsmString("Item").Value; if (!(value == "SilkHeart") && !value.StartsWith("Hunter Combo")) { GameObject gameObject = ((Component)a.Fsm.FsmComponent).gameObject; GameObject val = UnityExtensions.FindChild(gameObject, "Icon"); if (!((Object)(object)val == (Object)null)) { GameObject val2 = UnityExtensions.FindChild(gameObject, "Item Name"); if (!((Object)(object)val2 == (Object)null)) { Sprite sprite = val.GetComponent<SpriteRenderer>().sprite; TextMeshPro val3 = default(TextMeshPro); string text; if (val2.TryGetComponent<TextMeshPro>(ref val3)) { text = ((TMP_Text)val3).text; } else { TextMeshPro val4 = default(TextMeshPro); if (!val2.TryGetComponent<TextMeshPro>(ref val4)) { return; } text = ((TMP_Text)val4).text; } SendToDisplay(new NonSerializableSprite { RuntimeSprite = sprite }, text); } } } }); } private static void WatchMelodyFsm(PlayMakerFSM self) { if (!((Object)((Component)self).gameObject).name.NameMatches("UI Msg Get Item Melody") || self.FsmName != "Msg Control") { return; } FsmState state = FsmUtil.GetState(self, "Stop Up"); if (state == null) { return; } FsmUtil.InsertMethod(state, 0, (Action<FsmStateAction>)delegate(FsmStateAction a) { GameObject gameObject = ((Component)a.Fsm.FsmComponent).gameObject; GameObject val = UnityExtensions.FindChild(gameObject, "Contents/Icon"); if (!((Object)(object)val == (Object)null)) { GameObject val2 = UnityExtensions.FindChild(gameObject, "Contents/Item Name"); if (!((Object)(object)val2 == (Object)null)) { Sprite sprite = val.GetComponent<SpriteRenderer>().sprite; TextMeshPro val3 = default(TextMeshPro); string text; if (val2.TryGetComponent<TextMeshPro>(ref val3)) { text = ((TMP_Text)val3).text; } else { TextMeshPro val4 = default(TextMeshPro); if (!val2.TryGetComponent<TextMeshPro>(ref val4)) { return; } text = ((TMP_Text)val4).text; } SendToDisplay(new NonSerializableSprite { RuntimeSprite = sprite }, text); } } }); } private static void WatchUpgradeFsm(PlayMakerFSM self) { if (!((Object)((Component)self).gameObject).name.NameMatches("UI Msg Crest Evolve") || self.FsmName != "Msg Control") { return; } string[] array = new string[2] { "Set Socket 1", "Set Socket 2" }; foreach (string text in array) { FsmState state = FsmUtil.GetState(self, text); if (state == null) { continue; } FsmUtil.AddMethod(state, (Action<FsmStateAction>)delegate(FsmStateAction a) { SetGameObject firstActionOfType = FsmUtil.GetFirstActionOfType<SetGameObject>(a.State); if (firstActionOfType != null) { GameObject val = UnityExtensions.FindChild(firstActionOfType.gameObject.Value, "Pivot/Crest"); if (!((Object)(object)val == (Object)null)) { Sprite sprite = val.GetComponent<SpriteRenderer>().sprite; SendToDisplay(new NonSerializableSprite { RuntimeSprite = sprite }, Language.Get("UI_MSG_TITLE_EXTRASLOT_NAME", "Tools")); } } }); } } private static void WatchSilkHearts(PlayMakerFSM self) { //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) if (!((Object)((Component)self).gameObject).name.NameMatches("Memory Control") || self.FsmName != "Memory Control") { return; } FsmState state = FsmUtil.GetState(self, "End Scene"); if (state == null) { return; } foreach (RunFSM item in state.Actions.OfType<RunFSM>()) { if (((Object)item.fsmTemplateControl.fsmTemplate).name == "memory_scene_control_pre_end_silkheart") { GameObject val = UnityExtensions.FindGameObject(((Component)self).gameObject.scene, "GameObject/silk_cocoon_core/heart/heart_core_beat"); if ((Object)(object)val == (Object)null) { ManualLogSource log = Log; Scene scene = ((Component)self).gameObject.scene; log.LogError((object)("Unable to locate heart core in scene " + ((Scene)(ref scene)).name)); break; } Sprite sprite = val.GetComponent<SpriteRenderer>().sprite; FsmUtil.InsertMethod(state, 1, (Action<FsmStateAction>)delegate { SendToDisplay(new NonSerializableSprite { RuntimeSprite = sprite }, Language.Get("MEMORY_MSG_TITLE_SILKHEART", "Prompts")); }); } } } private static void CheckTrackerMarker(PlayMakerFSM self, string fsmName, string goPrefix, string stateName, string langKey, string sheet = "UI") { string langKey2 = langKey; string sheet2 = sheet; if (self.FsmName != fsmName || !((Object)((Component)self).gameObject).name.NameMatches(goPrefix)) { return; } FsmState state = FsmUtil.GetState(self, stateName); if (state == null) { Log.LogInfo((object)("No state " + stateName + " on fsm " + self.FsmName + " on " + ((Object)((Component)self).gameObject).name)); } else { FsmUtil.InsertMethod(state, 0, (Action<FsmStateAction>)delegate(FsmStateAction a) { SavedItemTrackerMarker component = ((Component)a.Fsm.FsmComponent).gameObject.GetComponent<SavedItemTrackerMarker>(); string text = Language.Get(langKey2, sheet2); SendToDisplay(new NonSerializableSprite { RuntimeSprite = component.items[0].GetPopupIcon() }, text); }); } } private static void WatchSpoolsAndMaskShards(PlayMakerFSM self) { CheckTrackerMarker(self, "Heart Container Control", "Heart Piece", "Save Collected", "INV_NAME_HEART_PIECE_1"); CheckTrackerMarker(self, "Control", "Silk Spool", "Save", "INV_NAME_SPOOL_PIECE_HALF"); } private static void GetFakeCollectable(FakeCollectable self, ref bool showPopup) { string text = ((QuestTargetCounter)self).GetUIMsgName(); if (text.StartsWith("!!") && text.EndsWith("!!")) { string name = ((Object)self).name; if (!(name == "Heart Piece")) { if (name == "Silk Spool") { text = Language.Get("INV_NAME_SPOOL_PIECE_HALF", "UI"); } } else { text = Language.Get("INV_NAME_HEART_PIECE_1", "UI"); } } SendToDisplay(new NonSerializableSprite { RuntimeSprite = ((QuestTargetCounter)self).GetUIMsgSprite() }, text); } private static void OnBuyShopItem(ShopItem self, ref Action onComplete, ref int subItemIndex) { if (!((Object)(object)self.savedItem != (Object)null)) { SendToDisplay(new NonSerializableSprite { RuntimeSprite = self.ItemSprite }, self.DisplayName); } } private static void OnCollectCollectableRelic(CollectableRelic self, ref bool showPopup) { SendToDisplay(new CollectableRelicSprite(((Object)self).name), ((QuestTargetCounter)self).GetUIMsgName()); } private static void OnCollectMateriumItem(MateriumItem self, ref bool showPopup) { SendToDisplay(new MateriumSprite(((Object)self).name), ((SavedItem)self).GetPopupName()); } private static void OnCollectToolCrest(ToolCrest self) { SendToDisplay(new ToolCrestSprite(self.name), ((object)(LocalisedString)(ref self.displayName)).ToString()); } private static void OnCollectToolItem(ToolItem self, ref Action afterTutorialMsg, ref PopupFlags popupFlags) { SendToDisplay(new ToolItemSprite(self.name), ((QuestTargetCounter)self).GetUIMsgName()); } private static void OnCollectCollectableItem(CollectableItem self, ref int amount, ref bool showPopup) { DeliveryQuestItem val = (DeliveryQuestItem)(object)((self is DeliveryQuestItem) ? self : null); if (val == null || ((CollectableItem)val).CollectedAmount <= 0) { SendToDisplay(new CollectableItemSprite(((Object)self).name), ((QuestTargetCounter)self).GetUIMsgName()); } } } } namespace RecentItemsDisplay.Serialization { internal static class ConfigSettings { public static ConfigEntry<bool> DisplayEnabled; public static ConfigEntry<int> NumDisplayableItems; public static void Init(ConfigFile config) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown DisplayEnabled = config.Bind<bool>("General", "DisplayEnabled", true, new ConfigDescription("Whether or not to show the display", (AcceptableValueBase)null, Array.Empty<object>())); NumDisplayableItems = config.Bind<int>("General", "NumDisplayableItems", 5, new ConfigDescription("The max number of recent items to display", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, Display.MaxItems), new object[1] { MenuElementGenerators.CreateIntSliderGenerator() })); } } internal class DisplayItemData { public required ISpriteProvider Sprite { get; set; } public required string Message { get; set; } public Color? TextColor { get; set; } } internal static class MessageSerializationBridge { private static Queue<DisplayItemData> ItemData = new Queue<DisplayItemData>(); internal static void SetItemData(IEnumerable<DisplayItemData> datas) { ItemData = new Queue<DisplayItemData>(datas); } internal static List<DisplayItemData> GetItemData() { Queue<DisplayItemData> itemData = ItemData; List<DisplayItemData> list = new List<DisplayItemData>(itemData.Count); foreach (DisplayItemData item in itemData) { list.Add(item); } return list; } internal static void Hook() { Display.OnCreateDisplay += LoadItemsFromSave; } internal static void SendItemToDisplay(ISpriteProvider sprite, string message, Color? textColor = null) { if (ItemData.Count > Display.MaxItems) { ItemData.Dequeue(); } ItemData.Enqueue(new DisplayItemData { Sprite = sprite, Message = message, TextColor = textColor }); Display.AddItem(sprite.GetSpriteSafe(), message, textColor); } internal static void LoadItemsFromSave() { foreach (DisplayItemData itemDatum in ItemData) { Display.AddItem(itemDatum.Sprite.GetSpriteSafe(), itemDatum.Message, itemDatum.TextColor); } } } internal class SaveData { public List<DisplayItemData> Datas { get; set; } = new List<DisplayItemData>(); public static void SetData(SaveData? data) { if (data == null) { data = new SaveData(); } MessageSerializationBridge.SetItemData(data.Datas); } public static SaveData GetData() { return new SaveData { Datas = MessageSerializationBridge.GetItemData() }; } } public interface ISpriteProvider { Sprite GetSprite(); } public static class SpriteProviderExtensions { private static ManualLogSource Log = Logger.CreateLogSource("SpriteProviderExtensions"); public static Sprite GetSpriteSafe(this ISpriteProvider provider) { try { return provider.GetSprite(); } catch (Exception) { Log.LogWarning((object)("Failed to get sprite for provider of type " + (provider?.GetType().Name ?? string.Empty))); return NonSerializableSprite.NullSprite(); } } } public class NonSerializableSprite : ISpriteProvider { [JsonIgnore] public Sprite? RuntimeSprite { get; init; } public static Sprite NullSprite() { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) return Sprite.Create(new Rect(0f, 0f, 1f, 1f), Vector2.zero, 1f); } Sprite ISpriteProvider.GetSprite() { if ((Object)(object)RuntimeSprite != (Object)null) { return RuntimeSprite; } return NullSprite(); } } public class CollectableItemSprite : ISpriteProvider { public string ItemName { get; set; } public CollectableItemSprite(string itemName) { ItemName = itemName; base..ctor(); } Sprite ISpriteProvider.GetSprite() { return ((QuestTargetCounter)CollectableItemManager.GetItemByName(ItemName)).GetUIMsgSprite(); } } public class ToolItemSprite : ISpriteProvider { public string ToolName { get; set; } public ToolItemSprite(string toolName) { ToolName = toolName; base..ctor(); } Sprite ISpriteProvider.GetSprite() { return ((QuestTargetCounter)ToolItemManager.GetToolByName(ToolName)).GetUIMsgSprite(); } } public class ToolCrestSprite : ISpriteProvider { public string CrestName { get; set; } public ToolCrestSprite(string crestName) { CrestName = crestName; base..ctor(); } Sprite ISpriteProvider.GetSprite() { return ((QuestTargetCo