/// <summary> /// Patches patch. /// <param name="harmony">Harmony class to apply patch.</param> /// <param name="patchType">Harmony class to apply patch.</param> /// </summary> public static void SafePatch(this HarmonyLib.Harmony harmony, Type patchType) { var metadata = patchType.GetCustomAttribute <SafePatchAttribute>(); if (metadata == null) { ADOLib.Log($"Type {patchType} doesn't have SafePatch attribute.", LogType.Error); return; } ADOLib.Log($"Patching {metadata.PatchId}"); if (metadata.IsEnabled) { ADOLib.Log($"{metadata.PatchId} is already patched!", LogType.Warning); return; } if (!IsValidPatch(patchType)) { ADOLib.Log($"Type {patchType} is not valid for this ADOFAI version", LogType.Warning); return; } Type declaringType = metadata.Assembly.GetType(metadata.ClassName); if (declaringType == null) { ADOLib.Log($"Type {metadata.ClassName} not found", LogType.Warning); return; } try { harmony.CreateClassProcessor(patchType).Patch(); } catch (Exception) { ADOLib.Log($"Wrong patch method {metadata.MethodName}", LogType.Warning); return; } metadata.IsEnabled = true; var metadata2 = patchType.GetCustomAttribute <SafePatchAttribute>(); ADOLib.Log($"Successfully patched {metadata.PatchId}", LogType.Success); }