Example #1
0
        /// <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);
        }