/// <summary> /// Registers a class containing methods for [PLibPatch] and [PLibMethod] handlers. /// All methods, public and private, of the type will be searched for annotations. /// However, nested and derived types will not be searched, nor will inherited methods. /// /// This method cannot be used to register a class from another mod, as the annotations /// on those methods would have a different assembly qualified name and would thus /// not be recognized. /// </summary> /// <param name="type">The type to register.</param> public static void RegisterPatchClass(Type type) { if (type == null) { throw new ArgumentNullException("type"); } // Some others used this call before the library was initialized if (!PLibInit) { InitLibrary(false); LogWarning("PUtil.InitLibrary was not called before using RegisterPatchClass!"); } int count = 0; foreach (var method in type.GetMethods(PPatchManager.FLAGS | BindingFlags.Static)) { foreach (var attrib in method.GetCustomAttributes(true)) { if (attrib is IPLibAnnotation pm) { PPatchManager.AddHandler(pm.Runtime, pm.CreateInstance(method)); count++; } } } if (count > 0) { PRegistry.LogPatchDebug("Registered {0:D} handler(s) for {1}".F(count, Assembly.GetCallingAssembly().GetNameSafe() ?? "?")); } else { PRegistry.LogPatchWarning("RegisterPatchClass could not find any handlers!"); } }
public static void RegisterPostload(PostLoadHandler callback) { if (callback == null) { throw new ArgumentNullException("callback"); } // Some others used this call before the library was initialized if (!PLibInit) { InitLibrary(false); LogWarning("PUtil.InitLibrary was not called before using RegisterPostload!"); } PPatchManager.AddHandler(RunAt.AfterModsLoad, new LegacyPostloadMethod( callback)); string name = Assembly.GetCallingAssembly().GetNameSafe(); if (name != null) { PRegistry.LogPatchDebug("Registered post-load handler for " + name); } }