using System; using HarmonyLib; namespace StardewModdingAPI.Internal.Patching { /// Simplifies applying instances to the game. internal static class HarmonyPatcher { /********* ** Public methods *********/ /// Apply the given Harmony patchers. /// The mod ID applying the patchers. /// The monitor with which to log any errors. /// The patchers to apply. public static Harmony Apply(string id, IMonitor monitor, params IPatcher[] patchers) { Harmony harmony = new(id); foreach (IPatcher patcher in patchers) { try { patcher.Apply(harmony, monitor); } catch (Exception ex) { monitor.Log($"Couldn't apply runtime patch '{patcher.GetType().Name}' to the game. Some SMAPI features may not work correctly. See log file for details.", LogLevel.Error); monitor.Log($"Technical details:\n{ex.GetLogSummary()}"); } } return harmony; } } }