/// <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; }