public void processHook(Hooks Hook, Event Event)
 {
     foreach (Plugin plugin in pluginList)
     {
         try
         {
             if (plugin.containsHook(Hook))
             {
                 switch (Hook)
                 {
                     case Hooks.CONSOLE_COMMAND:
                         {
                             plugin.onPlayerCommandProcess((ConsoleCommandEvent)Event);
                             break;
                         }
                     case Hooks.PLAYER_COMMAND:
                         {
                             plugin.onPlayerCommand((PlayerCommandEvent)Event);
                             break;
                         }
                     case Hooks.PLAYER_CHAT:
                         {
                             plugin.onPlayerChat((PlayerChatEvent)Event);
                             break;
                         }
                     case Hooks.PLAYER_PRELOGIN:
                         {
                             plugin.onPlayerPreLogin((LoginEvent)Event);
                             break;
                         }
                     case Hooks.PLAYER_LOGIN:
                         {
                             plugin.onPlayerJoin((LoginEvent)Event);
                             break;
                         }
                     case Hooks.PLAYER_LOGOUT:
                         {
                             plugin.onPlayerLogout((LogoutEvent)Event);
                             break;
                         }
                     case Hooks.PLAYER_PARTYCHANGE:
                         {
                             plugin.onPlayerPartyChange((PartyChangeEvent)Event);
                             break;
                         }
                     case Hooks.TILE_BREAK:
                         {
                             plugin.onTileBreak((TileBreakEvent)Event);
                             break;
                         }
                     case Hooks.PLAYER_HURT:
                         {
                             plugin.onPlayerHurt((PlayerHurtEvent)Event);
                             break;
                         }
                     case Hooks.PLAYER_CHEST:
                         {
                             plugin.onPlayerOpenChest((ChestOpenEvent)Event);
                             break;
                         }
                 }
             }
         }
         catch (Exception exception)
         {
             Console.WriteLine("Error Passing Event " + Hook.ToString() + " to " + plugin.Name);
             Console.WriteLine(exception.ToString());
         }
     }
 }
        /// <summary>
        /// Determines whether a plugins has registered a hook, then fires the appropriate method if so
        /// </summary>
        /// <param name="hook">Hook to process</param>
        /// <param name="hookEvent">Event instance to pass to any hooked methods</param>
        public void processHook(Hooks hook, Event hookEvent)
        {
            foreach (Plugin plugin in plugins.Values)
            {
                try
                {
                    if (plugin.containsHook(hook))
                    {
                        switch (hook)
                        {
                            case Hooks.CONSOLE_COMMAND:
                                plugin.onConsoleCommand((ConsoleCommandEvent)hookEvent);
                                break;

                            case Hooks.PLAYER_COMMAND:
                                plugin.onPlayerCommand((PlayerCommandEvent)hookEvent);
                                break;

                            case Hooks.PLAYER_CHAT:
                                plugin.onPlayerChat((MessageEvent)hookEvent);
                                break;

                            case Hooks.PLAYER_PRELOGIN:
                                plugin.onPlayerPreLogin((PlayerLoginEvent)hookEvent);
                                break;

                            case Hooks.PLAYER_LOGIN:
                                plugin.onPlayerJoin((PlayerLoginEvent)hookEvent);
                                break;

                            case Hooks.PLAYER_LOGOUT:
                                plugin.onPlayerLogout((PlayerLogoutEvent)hookEvent);
                                break;

                            case Hooks.PLAYER_PARTYCHANGE:
                                plugin.onPlayerPartyChange((PartyChangeEvent)hookEvent);
                                break;

                            case Hooks.PLAYER_TILECHANGE:
                                plugin.onPlayerTileChange((PlayerTileChangeEvent)hookEvent);
                                break;

                            case Hooks.PLAYER_HURT:
                                plugin.onPlayerHurt((PlayerHurtEvent)hookEvent);
                                break;

                            case Hooks.PLAYER_CHEST:
                                plugin.onPlayerOpenChest((PlayerChestOpenEvent)hookEvent);
                                break;

                            case Hooks.PLAYER_DEATH:
                                plugin.onPlayerDeath((PlayerDeathEvent)hookEvent);
                                break;

                            case Hooks.DOOR_STATECHANGE:
                                plugin.onDoorStateChange((DoorStateChangeEvent)hookEvent);
                                break;

                            case Hooks.PLAYER_EDITSIGN:
                                plugin.onPlayerEditSign((PlayerEditSignEvent)hookEvent);
                                break;

                            case Hooks.PLAYER_PROJECTILE:
                                plugin.onPlayerProjectileUse((PlayerProjectileEvent)hookEvent);
                                break;

                            case Hooks.NPC_DEATH:
                                plugin.onNPCDeath((NPCDeathEvent)hookEvent);
                                break;

                            case Hooks.NPC_SPAWN:
                                plugin.onNPCSpawn((NPCSpawnEvent)hookEvent);
                                break;

                            case Hooks.PLAYER_TELEPORT:
                                plugin.onPlayerTeleport((PlayerTeleportEvent)hookEvent);
                                break;

                            case Hooks.PLAYER_MOVE:
                                plugin.onPlayerMove((PlayerMoveEvent)hookEvent);
                                break;

                            case Hooks.PLAYER_KEYPRESS:
                                plugin.onPlayerKeyPress((PlayerKeyPressEvent)hookEvent);
                                break;

                            case Hooks.PLAYER_PVPCHANGE:
                                plugin.onPlayerPvPChange((PlayerPvPChangeEvent)hookEvent);
                                break;

                            case Hooks.PLAYER_AUTH_QUERY:
                                plugin.onPlayerAuthQuery ((PlayerLoginEvent) hookEvent);
                                break;

                            case Hooks.PLAYER_AUTH_REPLY:
                                plugin.onPlayerAuthReply ((PlayerLoginEvent) hookEvent);
                                break;

                            case Hooks.NPC_BOSSDEATH:
                                plugin.onNPCBossDeath((NPCBossDeathEvent)hookEvent);
                                break;

                            case Hooks.NPC_BOSSSUMMON:
                                plugin.onNPCBossSummon((NPCBossSummonEvent)hookEvent);
                                break;

                            case Hooks.PLAYER_FLOWLIQUID:
                                plugin.onPlayerFlowLiquid ((PlayerFlowLiquidEvent)hookEvent);
                                break;

                            case Hooks.PLAYER_CHESTBREAK:
                                plugin.onPlayerChestBreak((PlayerChestBreakEvent)hookEvent);
                                break;

                            case Hooks.TIME_CHANGED:
                                plugin.onTimeChange((TimeChangedEvent)hookEvent);
                                break;
                        }
                    }
                }
                catch (Exception exception)
                {
                    ProgramLog.Log (exception, "Error passing event " + hook.ToString() + " to " + plugin.Name);
                }
            }
        }
 public void processHook(Hooks hook, Event hookEvent)
 {
     foreach (Plugin plugin in plugins.Values)
     {
         try
         {
             if (plugin.containsHook(hook))
             {
                 switch (hook)
                 {
                     case Hooks.CONSOLE_COMMAND:
                         {
                             plugin.onPlayerCommandProcess((ConsoleCommandEvent)hookEvent);
                             break;
                         }
                     case Hooks.PLAYER_COMMAND:
                         {
                             plugin.onPlayerCommand((PlayerCommandEvent)hookEvent);
                             break;
                         }
                     case Hooks.PLAYER_CHAT:
                         {
                             plugin.onPlayerChat((MessageEvent)hookEvent);
                             break;
                         }
                     case Hooks.PLAYER_PRELOGIN:
                         {
                             plugin.onPlayerPreLogin((PlayerLoginEvent)hookEvent);
                             break;
                         }
                     case Hooks.PLAYER_LOGIN:
                         {
                             plugin.onPlayerJoin((PlayerLoginEvent)hookEvent);
                             break;
                         }
                     case Hooks.PLAYER_LOGOUT:
                         {
                             plugin.onPlayerLogout((PlayerLogoutEvent)hookEvent);
                             break;
                         }
                     case Hooks.PLAYER_PARTYCHANGE:
                         {
                             plugin.onPlayerPartyChange((PartyChangeEvent)hookEvent);
                             break;
                         }
                     case Hooks.TILE_CHANGE:
                         {
                             plugin.onTileChange((PlayerTileChangeEvent)hookEvent);
                             break;
                         }
                     case Hooks.PLAYER_HURT:
                         {
                             plugin.onPlayerHurt((PlayerHurtEvent)hookEvent);
                             break;
                         }
                     case Hooks.PLAYER_CHEST:
                         {
                             plugin.onPlayerOpenChest((PlayerChestOpenEvent)hookEvent);
                             break;
                         }
                     case Hooks.PLAYER_STATEUPDATE:
                         {
                             plugin.onPlayerStateUpdate((PlayerStateUpdateEvent)hookEvent);
                             break;
                         }
                     case Hooks.PLAYER_DEATH:
                         {
                             plugin.onPlayerDeath((PlayerDeathEvent)hookEvent);
                             break;
                         }
                     case Hooks.DOOR_STATECHANGE:
                         {
                             plugin.onDoorStateChange((DoorStateChangeEvent)hookEvent);
                             break;
                         }
                     case Hooks.PLAYER_EDITSIGN:
                         {
                             plugin.onPlayerEditSign((PlayerEditSignEvent)hookEvent);
                             break;
                         }
                     case Hooks.PLAYER_PROJECTILE:
                         {
                             plugin.onPlayerProjectileUse((PlayerProjectileEvent)hookEvent);
                             break;
                         }
                 }
             }
         }
         catch (Exception exception)
         {
             Program.tConsole.WriteLine("Error Passing Event " + hook.ToString() + " to " + plugin.Name);
             Program.tConsole.WriteLine(exception.ToString());
         }
     }
 }