public void HookBase(HookPoint hookPoint, HookOrder order, Delegate callback) { if (initialized) { hookPoint.HookBase(this, callback); } else { lock (desiredHooks) desiredHooks.Add(new HookEntry { hookPoint = hookPoint, callback = callback, order = order }); } }
static HookPoints() { UnkownReceivedPacket = new HookPoint <HookArgs.UnkownReceivedPacket>("unkown-receive-packet"); UnkownSendPacket = new HookPoint <HookArgs.UnkownSendPacket>("unkown-send-packet"); PlayerTeleport = new HookPoint <HookArgs.PlayerTeleport> ("player-teleport"); ConsoleMessageReceived = new HookPoint <HookArgs.ConsoleMessageReceived>("console-message-received"); ServerStateChange = new HookPoint <HookArgs.ServerStateChange> ("server-state-change"); NewConnection = new HookPoint <HookArgs.NewConnection> ("new-connection"); PluginLoadRequest = new HookPoint <HookArgs.PluginLoadRequest> ("plugin-load-request"); ConnectionRequestReceived = new HookPoint <HookArgs.ConnectionRequestReceived> ("connection-request-received"); DisconnectReceived = new HookPoint <HookArgs.DisconnectReceived> ("disconnect-received"); ServerPassReceived = new HookPoint <HookArgs.ServerPassReceived> ("server-pass-received"); PlayerPassReceived = new HookPoint <HookArgs.PlayerPassReceived> ("player-pass-received"); PlayerDataReceived = new HookPoint <HookArgs.PlayerDataReceived> ("player-data-received"); StateUpdateReceived = new HookPoint <HookArgs.StateUpdateReceived> ("state-update-received"); InventoryItemReceived = new HookPoint <HookArgs.InventoryItemReceived> ("inventory-item-received"); ObituaryReceived = new HookPoint <HookArgs.ObituaryReceived> ("obituary-received"); PlayerWorldAlteration = new HookPoint <HookArgs.PlayerWorldAlteration> ("player-world-alteration"); DoorStateChanged = new HookPoint <HookArgs.DoorStateChanged> ("door-state-changed"); LiquidFlowReceived = new HookPoint <HookArgs.LiquidFlowReceived> ("liquid-flow-received"); ProjectileReceived = new HookPoint <HookArgs.ProjectileReceived> ("projectile-received"); KillProjectileReceived = new HookPoint <HookArgs.KillProjectileReceived> ("kill-projectile-received"); TileSquareReceived = new HookPoint <HookArgs.TileSquareReceived> ("tile-square-received"); ChestBreakReceived = new HookPoint <HookArgs.ChestBreakReceived> ("cheat-break-received"); ChestOpenReceived = new HookPoint <HookArgs.ChestOpenReceived> ("cheat-open-received"); PvpSettingReceived = new HookPoint <HookArgs.PvpSettingReceived> ("pvp-setting-received"); PartySettingReceived = new HookPoint <HookArgs.PartySettingReceived> ("party-setting-received"); PlayerEnteringGame = new HookPoint <HookArgs.PlayerEnteringGame> ("player-entering-game"); PlayerEnteredGame = new HookPoint <HookArgs.PlayerEnteredGame> ("player-entered-game"); PlayerLeftGame = new HookPoint <HookArgs.PlayerLeftGame> ("player-left-game"); Explosion = new HookPoint <HookArgs.Explosion> ("explosion"); SignTextSet = new HookPoint <HookArgs.SignTextSet> ("sign-text-set"); SignTextGet = new HookPoint <HookArgs.SignTextGet> ("sign-text-get"); PluginsLoaded = new HookPoint <HookArgs.PluginsLoaded> ("plugins-loaded"); WorldLoaded = new HookPoint <HookArgs.WorldLoaded> ("world-loaded"); PlayerHurt = new HookPoint <HookArgs.PlayerHurt> ("player-hurt"); NpcHurt = new HookPoint <HookArgs.NpcHurt> ("npc-hurt"); NpcCreation = new HookPoint <HookArgs.NpcCreation> ("npc-creation"); PlayerTriggeredEvent = new HookPoint <HookArgs.PlayerTriggeredEvent> ("player-triggered-event"); PlayerChat = new HookPoint <HookArgs.PlayerChat> ("player-chat"); Command = new HookPoint <HookArgs.Command> ("command"); WorldGeneration = new HookPoint <HookArgs.WorldGeneration> ("world-generation"); WorldRequestMessage = new HookPoint <HookArgs.WorldRequestMessage>("world-request-message"); }
internal bool Dispose(object state = null) { if (Interlocked.CompareExchange(ref disposed, 1, 0) == 1) { return(true); } var result = Disable(); try { Disposed(state); } catch (Exception e) { ProgramLog.Log(e, "Exception in disposal handler of plugin " + Name); result = false; } commands.Clear(); var hooks = new HookPoint [this.hooks.Count]; this.hooks.CopyTo(hooks, 0, hooks.Length); foreach (var hook in hooks) { hook.Unhook(this); } if (this.hooks.Count > 0) { ProgramLog.Error.Log("Warning: failed to clean up {0} hooks of plugin {1}.", this.hooks.Count, Name); this.hooks.Clear(); } return(result); }
public void Unhook(HookPoint hookPoint) { if (initialized) { hookPoint.Unhook(this); } else { lock (desiredHooks) { int i = 0; foreach (var h in desiredHooks) { if (h.hookPoint == hookPoint) { desiredHooks.RemoveAt(i); break; } i++; } } } }
public void Hook <T> (HookPoint <T> hookPoint, HookOrder order, HookAction <T> callback) { HookBase(hookPoint, order, callback); }
public void Hook <T> (HookPoint <T> hookPoint, HookAction <T> callback) { Hook <T> (hookPoint, HookOrder.NORMAL, callback); }
static HookPoints() { UnkownReceivedPacket = new HookPoint<HookArgs.UnkownReceivedPacket>("unkown-receive-packet"); UnkownSendPacket = new HookPoint<HookArgs.UnkownSendPacket>("unkown-send-packet"); PlayerTeleport = new HookPoint<HookArgs.PlayerTeleport> ("player-teleport"); ConsoleMessageReceived = new HookPoint<HookArgs.ConsoleMessageReceived>("console-message-received"); ServerStateChange = new HookPoint<HookArgs.ServerStateChange> ("server-state-change"); NewConnection = new HookPoint<HookArgs.NewConnection> ("new-connection"); PluginLoadRequest = new HookPoint<HookArgs.PluginLoadRequest> ("plugin-load-request"); ConnectionRequestReceived = new HookPoint<HookArgs.ConnectionRequestReceived> ("connection-request-received"); DisconnectReceived = new HookPoint<HookArgs.DisconnectReceived> ("disconnect-received"); ServerPassReceived = new HookPoint<HookArgs.ServerPassReceived> ("server-pass-received"); PlayerPassReceived = new HookPoint<HookArgs.PlayerPassReceived> ("player-pass-received"); PlayerDataReceived = new HookPoint<HookArgs.PlayerDataReceived> ("player-data-received"); StateUpdateReceived = new HookPoint<HookArgs.StateUpdateReceived> ("state-update-received"); InventoryItemReceived = new HookPoint<HookArgs.InventoryItemReceived> ("inventory-item-received"); ObituaryReceived = new HookPoint<HookArgs.ObituaryReceived> ("obituary-received"); PlayerWorldAlteration = new HookPoint<HookArgs.PlayerWorldAlteration> ("player-world-alteration"); DoorStateChanged = new HookPoint<HookArgs.DoorStateChanged> ("door-state-changed"); LiquidFlowReceived = new HookPoint<HookArgs.LiquidFlowReceived> ("liquid-flow-received"); ProjectileReceived = new HookPoint<HookArgs.ProjectileReceived> ("projectile-received"); KillProjectileReceived = new HookPoint<HookArgs.KillProjectileReceived> ("kill-projectile-received"); TileSquareReceived = new HookPoint<HookArgs.TileSquareReceived> ("tile-square-received"); ChestBreakReceived = new HookPoint<HookArgs.ChestBreakReceived> ("cheat-break-received"); ChestOpenReceived = new HookPoint<HookArgs.ChestOpenReceived> ("cheat-open-received"); PvpSettingReceived = new HookPoint<HookArgs.PvpSettingReceived> ("pvp-setting-received"); PartySettingReceived = new HookPoint<HookArgs.PartySettingReceived> ("party-setting-received"); PlayerEnteringGame = new HookPoint<HookArgs.PlayerEnteringGame> ("player-entering-game"); PlayerEnteredGame = new HookPoint<HookArgs.PlayerEnteredGame> ("player-entered-game"); PlayerLeftGame = new HookPoint<HookArgs.PlayerLeftGame> ("player-left-game"); Explosion = new HookPoint<HookArgs.Explosion> ("explosion"); SignTextSet = new HookPoint<HookArgs.SignTextSet> ("sign-text-set"); SignTextGet = new HookPoint<HookArgs.SignTextGet> ("sign-text-get"); PluginsLoaded = new HookPoint<HookArgs.PluginsLoaded> ("plugins-loaded"); WorldLoaded = new HookPoint<HookArgs.WorldLoaded> ("world-loaded"); PlayerHurt = new HookPoint<HookArgs.PlayerHurt> ("player-hurt"); NpcHurt = new HookPoint<HookArgs.NpcHurt> ("npc-hurt"); NpcCreation = new HookPoint<HookArgs.NpcCreation> ("npc-creation"); PlayerTriggeredEvent = new HookPoint<HookArgs.PlayerTriggeredEvent> ("player-triggered-event"); PlayerChat = new HookPoint<HookArgs.PlayerChat> ("player-chat"); Command = new HookPoint<HookArgs.Command> ("command"); WorldGeneration = new HookPoint<HookArgs.WorldGeneration> ("world-generation"); WorldRequestMessage = new HookPoint<HookArgs.WorldRequestMessage>("world-request-message"); }