using System; using Harmony; namespace StardewModdingAPI.Framework.Patching { /// Encapsulates applying Harmony patches to the game. internal class GamePatcher { /********* ** Properties *********/ /// Encapsulates monitoring and logging. private readonly IMonitor Monitor; /********* ** Public methods *********/ /// Construct an instance. /// Encapsulates monitoring and logging. public GamePatcher(IMonitor monitor) { this.Monitor = monitor; } /// Apply all loaded patches to the game. /// The patches to apply. public void Apply(params IHarmonyPatch[] patches) { HarmonyInstance harmony = HarmonyInstance.Create("io.smapi"); foreach (IHarmonyPatch patch in patches) { try { patch.Apply(harmony); } catch (Exception ex) { this.Monitor.Log($"Couldn't apply runtime patch '{patch.Name}' to the game. Some SMAPI features may not work correctly. See log file for details.", LogLevel.Error); this.Monitor.Log(ex.GetLogSummary(), LogLevel.Trace); } } } } }