using System; using System.Collections.Generic; using System.IO; using BepInEx.Bootstrap; namespace BepInEx.Preloader.Patching { /// <summary> /// A single assembly patcher. /// </summary> internal class PatcherPlugin : ICacheable { /// <summary> /// Target assemblies to patch. /// </summary> public Func<IEnumerable<string>> TargetDLLs { get; set; } = null; /// <summary> /// Initializer method that is run before any patching occurs. /// </summary> public Action Initializer { get; set; } = null; /// <summary> /// Finalizer method that is run after all patching is done. /// </summary> public Action Finalizer { get; set; } = null; /// <summary> /// The main patcher method that is called on every DLL defined in <see cref="TargetDLLs" />. /// </summary> public AssemblyPatcherDelegate Patcher { get; set; } = null; /// <summary> /// Type name of the patcher. /// </summary> public string TypeName { get; set; } = string.Empty; public void Save(BinaryWriter bw) { bw.Write(TypeName); } public void Load(BinaryReader br) { TypeName = br.ReadString(); } } }