summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2022-06-16 22:14:44 -0400
committerJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2022-06-16 22:14:44 -0400
commit8e9237bdd7ec179975c9be5e28c811b42007e707 (patch)
tree665ca44f40e77e8f4a3af55ee442e2b3acba6434
parente10147e7bda94a8fbc58684246628a6520d2c6b8 (diff)
parent011aa4c9d07d6fc313d6d1ee107651778bb3c665 (diff)
downloadSMAPI-8e9237bdd7ec179975c9be5e28c811b42007e707.tar.gz
SMAPI-8e9237bdd7ec179975c9be5e28c811b42007e707.tar.bz2
SMAPI-8e9237bdd7ec179975c9be5e28c811b42007e707.zip
Merge branch 'develop' into stable
-rw-r--r--build/0Harmony.dllbin167424 -> 238592 bytes
-rw-r--r--build/0Harmony.xml594
-rw-r--r--build/common.targets2
-rw-r--r--docs/release-notes.md20
-rw-r--r--src/SMAPI.ModBuildConfig.Analyzer.Tests/SMAPI.ModBuildConfig.Analyzer.Tests.csproj6
-rw-r--r--src/SMAPI.ModBuildConfig/SMAPI.ModBuildConfig.csproj2
-rw-r--r--src/SMAPI.Mods.ConsoleCommands/manifest.json4
-rw-r--r--src/SMAPI.Mods.ErrorHandler/ModEntry.cs7
-rw-r--r--src/SMAPI.Mods.ErrorHandler/ModPatches/PyTkPatcher.cs79
-rw-r--r--src/SMAPI.Mods.ErrorHandler/SMAPI.Mods.ErrorHandler.csproj3
-rw-r--r--src/SMAPI.Mods.ErrorHandler/manifest.json4
-rw-r--r--src/SMAPI.Mods.SaveBackup/manifest.json4
-rw-r--r--src/SMAPI.Tests/Core/InterfaceProxyTests.cs7
-rw-r--r--src/SMAPI.Tests/SMAPI.Tests.csproj10
-rw-r--r--src/SMAPI.Toolkit/SMAPI.Toolkit.csproj4
-rw-r--r--src/SMAPI.Web/SMAPI.Web.csproj14
-rw-r--r--src/SMAPI.Web/wwwroot/SMAPI.metadata.json5
-rw-r--r--src/SMAPI.sln4
-rw-r--r--src/SMAPI/Constants.cs2
-rw-r--r--src/SMAPI/Framework/Content/AssetDataForImage.cs173
-rw-r--r--src/SMAPI/Framework/Content/ContentCache.cs33
-rw-r--r--src/SMAPI/Framework/Content/RawTextureData.cs10
-rw-r--r--src/SMAPI/Framework/ContentCoordinator.cs16
-rw-r--r--src/SMAPI/Framework/ContentManagers/GameContentManager.cs4
-rw-r--r--src/SMAPI/Framework/ContentManagers/ModContentManager.cs168
-rw-r--r--src/SMAPI/Framework/Logging/LogManager.cs19
-rw-r--r--src/SMAPI/Framework/Models/SConfig.cs34
-rw-r--r--src/SMAPI/Framework/Reflection/OriginalInterfaceProxyBuilder.cs118
-rw-r--r--src/SMAPI/Framework/Reflection/OriginalInterfaceProxyFactory.cs57
-rw-r--r--src/SMAPI/Framework/SCore.cs29
-rw-r--r--src/SMAPI/Framework/TemporaryHacks/MiniMonoModHotfix.cs25
-rw-r--r--src/SMAPI/IAssetDataForImage.cs10
-rw-r--r--src/SMAPI/IContentHelper.cs2
-rw-r--r--src/SMAPI/IContentPack.cs2
-rw-r--r--src/SMAPI/IModContentHelper.cs2
-rw-r--r--src/SMAPI/IRawTextureData.cs17
-rw-r--r--src/SMAPI/Metadata/CoreAssetPropagator.cs26
-rw-r--r--src/SMAPI/Properties/AssemblyInfo.cs1
-rw-r--r--src/SMAPI/SMAPI.config.json18
-rw-r--r--src/SMAPI/SMAPI.csproj7
40 files changed, 1119 insertions, 423 deletions
diff --git a/build/0Harmony.dll b/build/0Harmony.dll
index 91d36ea2..492255be 100644
--- a/build/0Harmony.dll
+++ b/build/0Harmony.dll
Binary files differ
diff --git a/build/0Harmony.xml b/build/0Harmony.xml
index ba2f340e..8499d20b 100644
--- a/build/0Harmony.xml
+++ b/build/0Harmony.xml
@@ -265,6 +265,9 @@
<member name="F:HarmonyLib.MethodType.StaticConstructor">
<summary>This is a static constructor</summary>
</member>
+ <member name="F:HarmonyLib.MethodType.Enumerator">
+ <summary>This targets the MoveNext method of the enumerator result</summary>
+ </member>
<member name="T:HarmonyLib.ArgumentType">
<summary>Specifies the type of argument</summary>
@@ -476,6 +479,13 @@
<param name="argumentVariations">An array of <see cref="T:HarmonyLib.ArgumentType"/></param>
</member>
+ <member name="M:HarmonyLib.HarmonyPatch.#ctor(System.String,System.String,HarmonyLib.MethodType)">
+ <summary>An annotation that specifies a method, property or constructor to patch</summary>
+ <param name="typeName">The full name of the declaring class/type</param>
+ <param name="methodName">The name of the method, property or constructor to patch</param>
+ <param name="methodType">The <see cref="T:HarmonyLib.MethodType"/></param>
+
+ </member>
<member name="T:HarmonyLib.HarmonyDelegate">
<summary>Annotation to define the original method for delegate injection</summary>
@@ -797,6 +807,13 @@
<returns></returns>
</member>
+ <member name="M:HarmonyLib.CodeInstruction.CallClosure``1(``0)">
+ <summary>Returns an instruction to call the specified closure</summary>
+ <typeparam name="T">The delegate type to emit</typeparam>
+ <param name="closure">The closure that defines the method to call</param>
+ <returns>A <see cref="T:HarmonyLib.CodeInstruction"/> that calls the closure as a method</returns>
+
+ </member>
<member name="M:HarmonyLib.CodeInstruction.LoadField(System.Type,System.String,System.Boolean)">
<summary>Creates a CodeInstruction loading a field (LD[S]FLD[A])</summary>
<param name="type">The class/type where the field is defined</param>
@@ -980,6 +997,11 @@
<returns>For normal frames, <c>frame.GetMethod()</c> is returned. For frames containing patched methods, the replacement method is returned or <c>null</c> if no method can be found</returns>
</member>
+ <member name="M:HarmonyLib.Harmony.GetOriginalMethodFromStackframe(System.Diagnostics.StackFrame)">
+ <summary>Gets the original method from the stackframe and uses original if method is a dynamic replacement</summary>
+ <param name="frame">The <see cref="T:System.Diagnostics.StackFrame"/></param>
+ <returns>The original method from that stackframe</returns>
+ </member>
<member name="M:HarmonyLib.Harmony.VersionInfo(System.Version@)">
<summary>Gets Harmony version for all active Harmony instances</summary>
<param name="currentVersion">[out] The current Harmony version</param>
@@ -1210,7 +1232,7 @@
</member>
<member name="T:HarmonyLib.PatchInfoSerialization">
- <summary>Patch serialization</summary>
+ <summary>Patch serialization</summary>
</member>
<member name="M:HarmonyLib.PatchInfoSerialization.Binder.BindToType(System.String,System.String)">
@@ -1241,27 +1263,27 @@
</member>
<member name="T:HarmonyLib.PatchInfo">
- <summary>Serializable patch information</summary>
+ <summary>Serializable patch information</summary>
</member>
<member name="F:HarmonyLib.PatchInfo.prefixes">
- <summary>Prefixes as an array of <see cref="T:HarmonyLib.Patch"/></summary>
+ <summary>Prefixes as an array of <see cref="T:HarmonyLib.Patch"/></summary>
</member>
<member name="F:HarmonyLib.PatchInfo.postfixes">
- <summary>Postfixes as an array of <see cref="T:HarmonyLib.Patch"/></summary>
+ <summary>Postfixes as an array of <see cref="T:HarmonyLib.Patch"/></summary>
</member>
<member name="F:HarmonyLib.PatchInfo.transpilers">
- <summary>Transpilers as an array of <see cref="T:HarmonyLib.Patch"/></summary>
+ <summary>Transpilers as an array of <see cref="T:HarmonyLib.Patch"/></summary>
</member>
<member name="F:HarmonyLib.PatchInfo.finalizers">
- <summary>Finalizers as an array of <see cref="T:HarmonyLib.Patch"/></summary>
+ <summary>Finalizers as an array of <see cref="T:HarmonyLib.Patch"/></summary>
</member>
<member name="P:HarmonyLib.PatchInfo.Debugging">
- <summary>Returns if any of the patches wants debugging turned on</summary>
+ <summary>Returns if any of the patches wants debugging turned on</summary>
</member>
<member name="M:HarmonyLib.PatchInfo.AddPrefixes(System.String,HarmonyLib.HarmonyMethod[])">
@@ -1339,35 +1361,35 @@
</member>
<member name="T:HarmonyLib.Patch">
- <summary>A serializable patch</summary>
+ <summary>A serializable patch</summary>
</member>
<member name="F:HarmonyLib.Patch.index">
- <summary>Zero-based index</summary>
+ <summary>Zero-based index</summary>
</member>
<member name="F:HarmonyLib.Patch.owner">
- <summary>The owner (Harmony ID)</summary>
+ <summary>The owner (Harmony ID)</summary>
</member>
<member name="F:HarmonyLib.Patch.priority">
- <summary>The priority, see <see cref="T:HarmonyLib.Priority"/></summary>
+ <summary>The priority, see <see cref="T:HarmonyLib.Priority"/></summary>
</member>
<member name="F:HarmonyLib.Patch.before">
- <summary>Keep this patch before the patches indicated in the list of Harmony IDs</summary>
+ <summary>Keep this patch before the patches indicated in the list of Harmony IDs</summary>
</member>
<member name="F:HarmonyLib.Patch.after">
- <summary>Keep this patch after the patches indicated in the list of Harmony IDs</summary>
+ <summary>Keep this patch after the patches indicated in the list of Harmony IDs</summary>
</member>
<member name="F:HarmonyLib.Patch.debug">
- <summary>A flag that will log the replacement method via <see cref="T:HarmonyLib.FileLog"/> every time this patch is used to build the replacement, even in the future</summary>
+ <summary>A flag that will log the replacement method via <see cref="T:HarmonyLib.FileLog"/> every time this patch is used to build the replacement, even in the future</summary>
</member>
<member name="P:HarmonyLib.Patch.PatchMethod">
- <summary>The method of the static patch method</summary>
+ <summary>The method of the static patch method</summary>
</member>
<member name="M:HarmonyLib.Patch.#ctor(System.Reflection.MethodInfo,System.Int32,System.String,System.Int32,System.String[],System.String[],System.Boolean)">
@@ -1761,6 +1783,12 @@
<returns>A field or null when type/name is null or when the field cannot be found</returns>
</member>
+ <member name="M:HarmonyLib.AccessTools.DeclaredField(System.String)">
+ <summary>Gets the reflection information for a directly declared field</summary>
+ <param name="typeColonName">The member in the form <c>TypeFullName:MemberName</c>, where TypeFullName matches the form recognized by <a href="https://docs.microsoft.com/en-us/dotnet/api/system.type.gettype">Type.GetType</a> like <c>Some.Namespace.Type</c>.</param>
+ <returns>A field or null when the field cannot be found</returns>
+
+ </member>
<member name="M:HarmonyLib.AccessTools.Field(System.Type,System.String)">
<summary>Gets the reflection information for a field by searching the type and all its super types</summary>
<param name="type">The class/type where the field is defined</param>
@@ -1768,6 +1796,12 @@
<returns>A field or null when type/name is null or when the field cannot be found</returns>
</member>
+ <member name="M:HarmonyLib.AccessTools.Field(System.String)">
+ <summary>Gets the reflection information for a field by searching the type and all its super types</summary>
+ <param name="typeColonName">The member in the form <c>TypeFullName:MemberName</c>, where TypeFullName matches the form recognized by <a href="https://docs.microsoft.com/en-us/dotnet/api/system.type.gettype">Type.GetType</a> like <c>Some.Namespace.Type</c>.</param>
+ <returns>A field or null when the field cannot be found</returns>
+
+ </member>
<member name="M:HarmonyLib.AccessTools.DeclaredField(System.Type,System.Int32)">
<summary>Gets the reflection information for a field</summary>
<param name="type">The class/type where the field is declared</param>
@@ -1782,6 +1816,12 @@
<returns>A property or null when type/name is null or when the property cannot be found</returns>
</member>
+ <member name="M:HarmonyLib.AccessTools.DeclaredProperty(System.String)">
+ <summary>Gets the reflection information for a directly declared property</summary>
+ <param name="typeColonName">The member in the form <c>TypeFullName:MemberName</c>, where TypeFullName matches the form recognized by <a href="https://docs.microsoft.com/en-us/dotnet/api/system.type.gettype">Type.GetType</a> like <c>Some.Namespace.Type</c>.</param>
+ <returns>A property or null when the property cannot be found</returns>
+
+ </member>
<member name="M:HarmonyLib.AccessTools.DeclaredPropertyGetter(System.Type,System.String)">
<summary>Gets the reflection information for the getter method of a directly declared property</summary>
<param name="type">The class/type where the property is declared</param>
@@ -1789,6 +1829,12 @@
<returns>A method or null when type/name is null or when the property cannot be found</returns>
</member>
+ <member name="M:HarmonyLib.AccessTools.DeclaredPropertyGetter(System.String)">
+ <summary>Gets the reflection information for the getter method of a directly declared property</summary>
+ <param name="typeColonName">The member in the form <c>TypeFullName:MemberName</c>, where TypeFullName matches the form recognized by <a href="https://docs.microsoft.com/en-us/dotnet/api/system.type.gettype">Type.GetType</a> like <c>Some.Namespace.Type</c>.</param>
+ <returns>A method or null when the property cannot be found</returns>
+
+ </member>
<member name="M:HarmonyLib.AccessTools.DeclaredPropertySetter(System.Type,System.String)">
<summary>Gets the reflection information for the setter method of a directly declared property</summary>
<param name="type">The class/type where the property is declared</param>
@@ -1796,6 +1842,12 @@
<returns>A method or null when type/name is null or when the property cannot be found</returns>
</member>
+ <member name="M:HarmonyLib.AccessTools.DeclaredPropertySetter(System.String)">
+ <summary>Gets the reflection information for the Setter method of a directly declared property</summary>
+ <param name="typeColonName">The member in the form <c>TypeFullName:MemberName</c>, where TypeFullName matches the form recognized by <a href="https://docs.microsoft.com/en-us/dotnet/api/system.type.gettype">Type.GetType</a> like <c>Some.Namespace.Type</c>.</param>
+ <returns>A method or null when the property cannot be found</returns>
+
+ </member>
<member name="M:HarmonyLib.AccessTools.Property(System.Type,System.String)">
<summary>Gets the reflection information for a property by searching the type and all its super types</summary>
<param name="type">The class/type</param>
@@ -1803,6 +1855,12 @@
<returns>A property or null when type/name is null or when the property cannot be found</returns>
</member>
+ <member name="M:HarmonyLib.AccessTools.Property(System.String)">
+ <summary>Gets the reflection information for a property by searching the type and all its super types</summary>
+ <param name="typeColonName">The member in the form <c>TypeFullName:MemberName</c>, where TypeFullName matches the form recognized by <a href="https://docs.microsoft.com/en-us/dotnet/api/system.type.gettype">Type.GetType</a> like <c>Some.Namespace.Type</c>.</param>
+ <returns>A property or null when the property cannot be found</returns>
+
+ </member>
<member name="M:HarmonyLib.AccessTools.PropertyGetter(System.Type,System.String)">
<summary>Gets the reflection information for the getter method of a property by searching the type and all its super types</summary>
<param name="type">The class/type</param>
@@ -1810,6 +1868,12 @@
<returns>A method or null when type/name is null or when the property cannot be found</returns>
</member>
+ <member name="M:HarmonyLib.AccessTools.PropertyGetter(System.String)">
+ <summary>Gets the reflection information for the getter method of a property by searching the type and all its super types</summary>
+ <param name="typeColonName">The member in the form <c>TypeFullName:MemberName</c>, where TypeFullName matches the form recognized by <a href="https://docs.microsoft.com/en-us/dotnet/api/system.type.gettype">Type.GetType</a> like <c>Some.Namespace.Type</c>.</param>
+ <returns>A method or null when type/name is null or when the property cannot be found</returns>
+
+ </member>
<member name="M:HarmonyLib.AccessTools.PropertySetter(System.Type,System.String)">
<summary>Gets the reflection information for the setter method of a property by searching the type and all its super types</summary>
<param name="type">The class/type</param>
@@ -1817,6 +1881,12 @@
<returns>A method or null when type/name is null or when the property cannot be found</returns>
</member>
+ <member name="M:HarmonyLib.AccessTools.PropertySetter(System.String)">
+ <summary>Gets the reflection information for the setter method of a property by searching the type and all its super types</summary>
+ <param name="typeColonName">The member in the form <c>TypeFullName:MemberName</c>, where TypeFullName matches the form recognized by <a href="https://docs.microsoft.com/en-us/dotnet/api/system.type.gettype">Type.GetType</a> like <c>Some.Namespace.Type</c>.</param>
+ <returns>A method or null when type/name is null or when the property cannot be found</returns>
+
+ </member>
<member name="M:HarmonyLib.AccessTools.DeclaredMethod(System.Type,System.String,System.Type[],System.Type[])">
<summary>Gets the reflection information for a directly declared method</summary>
<param name="type">The class/type where the method is declared</param>
@@ -1826,6 +1896,14 @@
<returns>A method or null when type/name is null or when the method cannot be found</returns>
</member>
+ <member name="M:HarmonyLib.AccessTools.DeclaredMethod(System.String,System.Type[],System.Type[])">
+ <summary>Gets the reflection information for a directly declared method</summary>
+ <param name="typeColonName">The member in the form <c>TypeFullName:MemberName</c>, where TypeFullName matches the form recognized by <a href="https://docs.microsoft.com/en-us/dotnet/api/system.type.gettype">Type.GetType</a> like <c>Some.Namespace.Type</c>.</param>
+ <param name="parameters">Optional parameters to target a specific overload of the method</param>
+ <param name="generics">Optional list of types that define the generic version of the method</param>
+ <returns>A method or null when the method cannot be found</returns>
+
+ </member>
<member name="M:HarmonyLib.AccessTools.Method(System.Type,System.String,System.Type[],System.Type[])">
<summary>Gets the reflection information for a method by searching the type and all its super types</summary>
<param name="type">The class/type where the method is declared</param>
@@ -1837,12 +1915,17 @@
</member>
<member name="M:HarmonyLib.AccessTools.Method(System.String,System.Type[],System.Type[])">
<summary>Gets the reflection information for a method by searching the type and all its super types</summary>
- <param name="typeColonMethodname">The target method in the form <c>TypeFullName:MethodName</c>, where the type name matches a form recognized by <a href="https://docs.microsoft.com/en-us/dotnet/api/system.type.gettype">Type.GetType</a> like <c>Some.Namespace.Type</c>.</param>
+ <param name="typeColonName">The member in the form <c>TypeFullName:MemberName</c>, where TypeFullName matches the form recognized by <a href="https://docs.microsoft.com/en-us/dotnet/api/system.type.gettype">Type.GetType</a> like <c>Some.Namespace.Type</c>.</param>
<param name="parameters">Optional parameters to target a specific overload of the method</param>
<param name="generics">Optional list of types that define the generic version of the method</param>
- <returns>A method or null when type/name is null or when the method cannot be found</returns>
+ <returns>A method or null when the method cannot be found</returns>
</member>
+ <member name="M:HarmonyLib.AccessTools.EnumeratorMoveNext(System.Reflection.MethodBase)">
+ <summary>Gets the <see cref="M:System.Collections.IEnumerator.MoveNext" /> method of an enumerator method</summary>
+ <param name="method">Enumerator method that creates the enumerator <see cref="T:System.Collections.IEnumerator" /></param>
+ <returns>The internal <see cref="M:System.Collections.IEnumerator.MoveNext" /> method of the enumerator or <b>null</b> if no valid enumerator is detected</returns>
+ </member>
<member name="M:HarmonyLib.AccessTools.GetMethodNames(System.Type)">
<summary>Gets the names of all method that are declared in a type</summary>
<param name="type">The declaring class/type</param>
@@ -2109,6 +2192,12 @@
</remarks>
</member>
+ <member name="M:HarmonyLib.AccessTools.FieldRefAccess``1(System.String)">
+ <summary>Creates a field reference delegate for an instance field of a class or static field (NOT an instance field of a struct)</summary>
+ <typeparam name="F"> type of the field</typeparam>
+ <param name="typeColonName">The member in the form <c>TypeFullName:MemberName</c>, where TypeFullName matches the form recognized by <a href="https://docs.microsoft.com/en-us/dotnet/api/system.type.gettype">Type.GetType</a> like <c>Some.Namespace.Type</c>.</param>
+ <returns>A readable/assignable <see cref="T:HarmonyLib.AccessTools.FieldRef`2"/> delegate with <c>T=object</c></returns>
+ </member>
<member name="M:HarmonyLib.AccessTools.FieldRefAccess``2(System.Reflection.FieldInfo)">
<summary>Creates a field reference delegate for an instance field of a class or static field (NOT an instance field of a struct)</summary>
<typeparam name="T">
@@ -2282,6 +2371,13 @@
<returns>A readable/assignable reference to the field</returns>
</member>
+ <member name="M:HarmonyLib.AccessTools.StaticFieldRefAccess``1(System.String)">
+ <summary>Creates a static field reference</summary>
+ <typeparam name="F">The type of the field</typeparam>
+ <param name="typeColonName">The member in the form <c>TypeFullName:MemberName</c>, where TypeFullName matches the form recognized by <a href="https://docs.microsoft.com/en-us/dotnet/api/system.type.gettype">Type.GetType</a> like <c>Some.Namespace.Type</c>.</param>
+ <returns>A readable/assignable reference to the field</returns>
+
+ </member>
<member name="M:HarmonyLib.AccessTools.StaticFieldRefAccess``2(System.Reflection.FieldInfo)">
<summary>Creates a static field reference</summary>
<typeparam name="T">An arbitrary type (by convention, the type the field is defined in)</typeparam>
@@ -2337,6 +2433,34 @@
</remarks>
</member>
+ <member name="M:HarmonyLib.AccessTools.MethodDelegate``1(System.String,System.Object,System.Boolean)">
+ <summary>Creates a delegate to a given method</summary>
+ <typeparam name="DelegateType">The delegate Type</typeparam>
+ <param name="typeColonName">The method in the form <c>TypeFullName:MemberName</c>, where TypeFullName matches the form recognized by <a href="https://docs.microsoft.com/en-us/dotnet/api/system.type.gettype">Type.GetType</a> like <c>Some.Namespace.Type</c>.</param>
+ <param name="instance">
+ Only applies for instance methods. If <c>null</c> (default), returned delegate is an open (a.k.a. unbound) instance delegate
+ where an instance is supplied as the first argument to the delegate invocation; else, delegate is a closed (a.k.a. bound)
+ instance delegate where the delegate invocation always applies to the given <paramref name="instance"/>.
+ </param>
+ <param name="virtualCall">
+ Only applies for instance methods. If <c>true</c> (default) and <paramref name="typeColonName"/> is virtual, invocation of the delegate
+ calls the instance method virtually (the instance type's most-derived/overriden implementation of the method is called);
+ else, invocation of the delegate calls the exact specified <paramref name="typeColonName"/> (this is useful for calling base class methods)
+ Note: if <c>false</c> and <paramref name="typeColonName"/> is an interface method, an ArgumentException is thrown.
+ </param>
+ <returns>A delegate of given <typeparamref name="DelegateType"/> to given <paramref name="typeColonName"/></returns>
+ <remarks>
+ <para>
+ Delegate invocation is more performant and more convenient to use than <see cref="M:System.Reflection.MethodBase.Invoke(System.Object,System.Object[])"/>
+ at a one-time setup cost.
+ </para>
+ <para>
+ Works for both type of static and instance methods, both open and closed (a.k.a. unbound and bound) instance methods,
+ and both class and struct methods.
+ </para>
+ </remarks>
+
+ </member>
<member name="M:HarmonyLib.AccessTools.HarmonyDelegate``1(System.Object)">
<summary>Creates a delegate for a given delegate definition, attributed with [<see cref="T:HarmonyLib.HarmonyDelegate"/>]</summary>
<typeparam name="DelegateType">The delegate Type, attributed with [<see cref="T:HarmonyLib.HarmonyDelegate"/>]</typeparam>
@@ -2509,6 +2633,412 @@
<returns>The hash code</returns>
</member>
+ <member name="T:HarmonyLib.CodeMatch">
+ <summary>A CodeInstruction match</summary>
+ </member>
+ <member name="F:HarmonyLib.CodeMatch.name">
+ <summary>The name of the match</summary>
+ </member>
+ <member name="F:HarmonyLib.CodeMatch.opcodes">
+ <summary>The matched opcodes</summary>
+ </member>
+ <member name="F:HarmonyLib.CodeMatch.operands">
+ <summary>The matched operands</summary>
+ </member>
+ <member name="F:HarmonyLib.CodeMatch.jumpsFrom">
+ <summary>The jumps from the match</summary>
+ </member>
+ <member name="F:HarmonyLib.CodeMatch.jumpsTo">
+ <summary>The jumps to the match</summary>
+ </member>
+ <member name="F:HarmonyLib.CodeMatch.predicate">
+ <summary>The match predicate</summary>
+ </member>
+ <member name="M:HarmonyLib.CodeMatch.#ctor(System.Nullable{System.Reflection.Emit.OpCode},System.Object,System.String)">
+ <summary>Creates a code match</summary>
+ <param name="opcode">The optional opcode</param>
+ <param name="operand">The optional operand</param>
+ <param name="name">The optional name</param>
+
+ </member>
+ <member name="M:HarmonyLib.CodeMatch.#ctor(HarmonyLib.CodeInstruction,System.String)">
+ <summary>Creates a code match</summary>
+ <param name="instruction">The CodeInstruction</param>
+ <param name="name">An optional name</param>
+
+ </member>
+ <member name="M:HarmonyLib.CodeMatch.#ctor(System.Func{HarmonyLib.CodeInstruction,System.Boolean},System.String)">
+ <summary>Creates a code match</summary>
+ <param name="predicate">The predicate</param>
+ <param name="name">An optional name</param>
+
+ </member>
+ <member name="M:HarmonyLib.CodeMatch.ToString">
+ <summary>Returns a string that represents the match</summary>
+ <returns>A string representation</returns>
+
+ </member>
+ <member name="T:HarmonyLib.CodeMatcher">
+ <summary>A CodeInstruction matcher</summary>
+ </member>
+ <member name="P:HarmonyLib.CodeMatcher.Pos">
+ <summary>The current position</summary>
+ <value>The index or -1 if out of bounds</value>
+
+ </member>
+ <member name="P:HarmonyLib.CodeMatcher.Length">
+ <summary>Gets the number of code instructions in this matcher</summary>
+ <value>The count</value>
+
+ </member>
+ <member name="P:HarmonyLib.CodeMatcher.IsValid">
+ <summary>Checks whether the position of this CodeMatcher is within bounds</summary>
+ <value>True if this CodeMatcher is valid</value>
+
+ </member>
+ <member name="P:HarmonyLib.CodeMatcher.IsInvalid">
+ <summary>Checks whether the position of this CodeMatcher is outside its bounds</summary>
+ <value>True if this CodeMatcher is invalid</value>
+
+ </member>
+ <member name="P:HarmonyLib.CodeMatcher.Remaining">
+ <summary>Gets the remaining code instructions</summary>
+ <value>The remaining count</value>
+
+ </member>
+ <member name="P:HarmonyLib.CodeMatcher.Opcode">
+ <summary>Gets the opcode at the current position</summary>
+ <value>The opcode</value>
+
+ </member&g