/// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="settings"></param> public static void AddGlobalHandler <T>(string GUID, CustomExpSettings setting) where T : CustomExpHandlerBase, new() { var type = typeof(T); if (type.IsAbstract) { throw new ArgumentException("You can't use base handler class directly, Use derived class instead."); } if (IsTypeRegistered(type, out var exception)) { throw exception; } if (IsGUIDRegistered(GUID, out exception)) { throw exception; } _GlobalHandlers.Add(new HandlerTypeContainer() { BaseType = type, Setting = setting, GUID = GUID }); //Sort Global Handlers to make sure it have same execution order for each player _GlobalHandlers.OrderBy(x => x.GUID); Logger.Verbose("Global Handler Added: {0}", type.Name); }
/// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="typeID"></param> /// <param name="setting"></param> public static void AddHandler <T>(byte typeID, CustomExpSettings setting) where T : CustomExpHandlerBase, new() { var type = typeof(T); if (type.IsAbstract) { throw new ArgumentException("You can't use base handler class directly, Use derived class instead."); } if (Enum.IsDefined(typeof(eWardenObjectiveType), typeID)) { throw new ArgumentException($"typeID: {typeID} is already defined inside default eWardenObjectiveType"); } if (IsTypeRegistered(type, out var exception)) { throw exception; } if (_Handlers.ContainsKey(typeID)) { var dupType = _Handlers[typeID].GetType(); throw new ArgumentException($"typeID: {typeID} is already defined by other plugin\nInfo:\n\t- Name: {dupType.Name}\n- Assembly: {dupType.Assembly.FullName}"); } _Handlers.Add(typeID, new HandlerTypeContainer() { BaseType = type, Setting = setting }); Logger.Verbose("Handler Added: {0} (TypeID: {1})", type.Name, typeID); }