Exemplo n.º 1
0
		/// <summary>
		///   <para>Patches an original method so that the given patch method will be called right after the original.</para>
		///   <para>Automatically catches and logs all errors. Returns true if the patch was successful, returns false if an error occured.</para>
		/// </summary>
		public static bool PatchPostfix(this BaseUnityPlugin me, Type type, string methodName, Type patchType, string patchMethodName, Type[] types = null)
		{
			MethodInfo original, patch;
			try
			{
				original = AccessTools.Method(type, methodName, types);
			}
			catch (Exception e)
			{
				me.LogError("Could not find original method " + type.Name + "." + methodName + "(..)!", e);
				return false;
			}
			try
			{
				patch = AccessTools.Method(patchType, patchMethodName);
			}
			catch (Exception e)
			{
				me.LogError("Could not find postfix-method " + patchType.Name + "." + patchMethodName + "(..)!", e);
				return false;
			}
			try
			{
				new Harmony(me.Info.Metadata.GUID).Patch(original, null, new HarmonyMethod(patch));
			}
			catch (Exception e)
			{
				me.LogError("Failed to postfix-patch " + type.Name + "." + methodName + "(..) with " + patchType.Name + "." + patchMethodName + "(..)!", e);
				return false;
			}
			return true;
		}