Decompiled source of RecentItemsDisplay v0.2.0

RecentItemsDisplay.dll

Decompiled a week ago
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