i have this error: 
can any help for this. thanks 
java.lang.IndexOutOfBoundsException: index: 0
        at javolution.util.FastList.get(FastList.java:196)
        at net.sf.l2j.gameserver.event.Event.getRandomPlayerFromTeam(Event.java:
365)
        at net.sf.l2j.gameserver.event.VIPTvT.selectNewVipOfTeam(VIPTvT.java:125
)
        at net.sf.l2j.gameserver.event.VIPTvT$Core.run(VIPTvT.java:36)
        at net.sf.l2j.gameserver.ThreadPoolManager$RunnableWrapper.run(ThreadPoo
lManager.java:85)
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
        at java.util.concurrent.FutureTask.run(Unknown Source)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.
access$201(Unknown Source)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.
run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
package net.sf.l2j.gameserver.event.Event 
 
    import java.util.ArrayList;
    import java.util.Set;
    
    import javolution.util.FastList;
    import javolution.util.FastMap;
    
    import net.sf.l2j.gameserver.ThreadPoolManager;
    import net.sf.l2j.gameserver.datatables.NpcTable;
    import net.sf.l2j.gameserver.datatables.SpawnTable;
    import net.sf.l2j.gameserver.model.L2Effect;
    import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
    import net.sf.l2j.gameserver.model.L2Object;
    import net.sf.l2j.gameserver.model.L2Party;
    import net.sf.l2j.gameserver.model.L2Skill;
    import net.sf.l2j.gameserver.model.L2Spawn;
    import net.sf.l2j.gameserver.model.actor.L2Character;
    import net.sf.l2j.gameserver.model.actor.L2Npc;
    import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
    import net.sf.l2j.gameserver.network.serverpackets.CreatureSay;
    import net.sf.l2j.gameserver.network.serverpackets.ExShowScreenMessage;
    import net.sf.l2j.gameserver.skills.AbnormalEffect;
    import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;
    import net.sf.l2j.gameserver.model.item.type.EtcItemType;
    import net.sf.l2j.gameserver.templates.skills.L2SkillType;
    import net.sf.l2j.util.Rnd;
    
    public abstract class Event
    {
     protected static final int[] ITEMS = {6707, 6709, 6708, 6710, 6704, 6701, 6702, 6703, 6706, 6705, 6713, 6714, 6712, 6711, 6697, 6688, 6696, 6691, 7579, 6695, 6694, 6689, 6693, 6690};
     protected int eventId;
     protected EventConfig config = EventConfig.getInstance();
     protected FastMap<Integer, EventTeam> teams;
     protected ThreadPoolManager tpm;
     protected ResurrectorTask resurrectorTask;
     protected Clock clock;
     protected String scorebartext;
     protected int time;
     protected int winnerTeam;
     protected int loserTeam;
     private FastMap<L2PcInstance, ArrayList<L2Skill>> summons;
     
     // TEAM-STATUS-SCORE
     protected FastMap<L2PcInstance, int[]> players;
     
     protected class Clock implements Runnable
     {
     private int totalTime;
     
     protected String getTime()
     {
     String mins = "" + time / 60;
     String secs = (time % 60 < 10 ? "0" + time % 60 : "" + time % 60);
     return mins + ":" + secs + "";
     }
     
     @Override
     public void run()
     {
     clockTick();
     
     if (time < totalTime)
     {
     scorebartext = getScorebar();
     if (scorebartext != "")
     {
     for (L2PcInstance player : getPlayerList())
     player.sendPacket(new ExShowScreenMessage(1, -1, 3, false, 1, 0, 0, false, 2000, false, scorebartext));
     }
     }
     
     if (time <= 0)
     schedule(1);
     else
     {
     time--;
     tpm.scheduleGeneral(clock, 1000);
     }
     }
     
     protected void setTime(int t)
     {
     time = t;
     }
     
     protected void startClock(int mt)
     {
     totalTime = mt - 2;
     time = mt;
     tpm.scheduleGeneral(clock, 1);
     }
     }
     
     protected class ResurrectorTask implements Runnable
     {
     private L2PcInstance player;
     
     public ResurrectorTask(L2PcInstance p)
     {
     player = p;
     ThreadPoolManager.getInstance().scheduleGeneral(this, 7000);
     }
     
     @Override
     public void run()
     {
     if (EventManager.getInstance().isRegistered(player))
     {
     player.doRevive();
     
     player.setCurrentCp(player.getMaxCp());
     player.setCurrentHp(player.getMaxHp());
     player.setCurrentMp(player.getMaxMp());
     teleportToTeamPos(player);
     }
     }
     }
     
     public Event()
     {
     teams = new FastMap<>();
     clock = new Clock();
     tpm = ThreadPoolManager.getInstance();
     players = new FastMap<>();
     summons = new FastMap<>();
     time = 0;
     }
     
     protected void clockTick()
     {
     
     }
     
     public void dropBomb(L2PcInstance player)
     {
     
     }
     
     public void onHit(L2PcInstance actor, L2PcInstance target)
     {
     
     }
     
     public void useCapture(L2PcInstance player, L2Npc base)
     {
     
     }
     
     protected void addToResurrector(L2PcInstance player)
     {
     new ResurrectorTask(player);
     }
     
     protected void announce(Set<L2PcInstance> list, String text)
     {
     for (L2PcInstance player : list)
     player.sendPacket(new CreatureSay(0, 18, "", "[Event] " + text));
     }
     
     public boolean canAttack(L2PcInstance player, L2Object target)
     {
     return true;
     }
     
     protected int countOfPositiveStatus()
     {
     int count = 0;
     for (L2PcInstance player : getPlayerList())
     if (getStatus(player) >= 0)
     count++;
     
     return count;
     }
     
     protected void createNewTeam(int id, String name, int[] color, int[] startPos)
     {
     teams.put(id, new EventTeam(id, name, color, startPos));
     }
     
     protected void createPartyOfTeam(int teamId)
     {
     int count = 0;
     L2Party party = null;
     
     FastList<L2PcInstance> list = new FastList<>();
     
     for (L2PcInstance p : players.keySet())
     if (getTeam(p) == teamId)
     list.add(p);
     
     for (L2PcInstance player : list)
     {
     if (count % 9 == 0 && list.size() - count != 1)
     party = new L2Party(player, 1);
     if (count % 9 < 9)
     player.joinParty(party);
     count++;
     }
     }
     
     protected void divideIntoTeams(int number)
     {
     int i = 0;
     
     while (EventManager.getInstance().players.size() != 0)
     {
     i++;
     L2PcInstance player = EventManager.getInstance().players.get(Rnd.get(EventManager.getInstance().players.size()));
     
     // skip healers
     if (player.getClassId().getId() == 16 || player.getClassId().getId() == 97)
     continue;
     
     players.put(player, new int[] { i, 0, 0 });
     EventManager.getInstance().players.remove(player);
     if (i == number)
     i = 0;
     }
     
     i = getPlayersOfTeam(1).size() > getPlayersOfTeam(2).size() ? 1 : 0;
     
     // healers here
     while (EventManager.getInstance().players.size() != 0)
     {
     i++;
     L2PcInstance player = EventManager.getInstance().players.get(Rnd.get(EventManager.getInstance().players.size()));
     
     players.put(player, new int[] { i, 0, 0 });
     EventManager.getInstance().players.remove(player);
     if (i == number)
     i = 0;
     }
     }
     
     protected void forceSitAll()
     {
     for (L2PcInstance player : players.keySet())
     {
     player.abortAttack();
     player.abortCast();
     player.setIsParalyzed(true);
     player.setIsInvul(true);
     player.startAbnormalEffect(AbnormalEffect.HOLD_2);
     }
     }
     
     protected void forceStandAll()
     {
     for (L2PcInstance player : players.keySet())
     {
     player.stopAbnormalEffect(AbnormalEffect.HOLD_2);
     player.setIsInvul(false);
     player.setIsParalyzed(false);
     }
     }
     
     protected void InvisAll()
     {
     for (L2PcInstance player : players.keySet())
     {
     player.abortAttack();
     player.abortCast();
     player.getAppearance().setInvisible();
     }
     }
     
     protected void unInvisAll()
     {
     for (L2PcInstance player : players.keySet())
     {
     player.getAppearance().setVisible();
     player.broadcastCharInfo();
     }
     }
     
     public boolean getBoolean(String propName)
     {
     return config.getBoolean(eventId, propName);
     }
     
     public int[] getColor(String owner)
     {
     return config.getColor(eventId, owner);
     }
     
     public int getInt(String propName)
     {
     return config.getInt(eventId, propName);
     }
     
     protected Set<L2PcInstance> getPlayerList()
     {
     return players.keySet();
     }
     
     protected FastList<L2PcInstance> getPlayersOfTeam(int team)
     {
     FastList<L2PcInstance> list = new FastList<>();
     
     for (L2PcInstance player : getPlayerList())
     if (getTeam(player) == team)
     list.add(player);
     
     return list;
     }
     
     protected EventTeam getPlayersTeam(L2PcInstance player)
     {
     return teams.get(players.get(player)[0]);
     }
     
     protected FastList<L2PcInstance> getPlayersWithStatus(int status)
     {
     FastList<L2PcInstance> list = new FastList<>();
     
     for (L2PcInstance player : getPlayerList())
     if (getStatus(player) == status)
     list.add(player);
     
     return list;
     }
     
     protected L2PcInstance getPlayerWithMaxScore()
     {
     L2PcInstance max = players.head().getNext().getKey();
     
     for (L2PcInstance player : players.keySet())
     if (players.get(player)[2] > players.get(max)[2])
     max = player;
     
     return max;
     }
     
     protected void unequip()
     {
     for (L2PcInstance player : players.keySet())
     {
     player.getInventory().unEquipItemInSlot(7);
     player.getInventory().unEquipItemInSlot(;
     }
     }
     
     public int[] getPosition(String owner, int num)
     {
     return config.getPosition(eventId, owner, num);
     }
     
     protected L2PcInstance getRandomPlayer()
     {
     FastList<L2PcInstance> temp = new FastList<>();
     for (L2PcInstance player : players.keySet())
     temp.add(player);
     
     return temp.get(Rnd.get(temp.size()));
     }
     
     protected L2PcInstance getRandomPlayerFromTeam(int team)
     {
     FastList<L2PcInstance> temp = new FastList<>();
     for (L2PcInstance player : players.keySet())
     if (getTeam(player) == team)
     temp.add(player);
     
     return temp.get(Rnd.get(temp.size()));
     }
     
     protected FastList<L2PcInstance> getPlayersFromTeamWithStatus(int team, int status)
     {
     FastList<L2PcInstance> players = getPlayersWithStatus(status);
     FastList<L2PcInstance> temp = new FastList<>();
     
     for (L2PcInstance player : players)
     if (getTeam(player) == team)
     temp.add(player);
     
     return temp;
     }
     
     protected L2PcInstance getRandomPlayerFromTeamWithStatus(int team, int status)
     {
     FastList<L2PcInstance> temp = getPlayersFromTeamWithStatus(team, status);
     return temp.get(Rnd.get(temp.size()));
     }
     
     public FastList<Integer> getRestriction(String type)
     {
     return config.getRestriction(eventId, type);
     }
     
     protected int getScore(L2PcInstance player)
     {
     return players.get(player)[2];
     }
     
     protected int getStatus(L2PcInstance player)
     {
     return players.get(player)[1];
     }
     
     public String getString(String propName)
     {
     return config.getString(eventId, propName);
     }
     
     public int getTeam(L2PcInstance player)
     {
     return players.get(player)[0];
     }
     
     protected int getWinnerTeam()
     {
     FastList<EventTeam> t = new FastList<>();
     
     for (EventTeam team : teams.values())
     {
     if (t.size() == 0)
     {
     t.add(team);
     continue;
     }
     
     if (team.getScore() > t.getFirst().getScore())
     {
     t.clear();
     t.add(team);
     continue;
     }
     
     if (team.getScore() == t.getFirst().getScore())
     t.add(team);
     }
     
     if (t.size() > 1)
     return 0;
     
     return t.getFirst().getId();
     }
     
     protected void giveReward(FastList<L2PcInstance> players, int id, int ammount)
     {
     for (L2PcInstance player : players)
     {
     if (player == null)
     continue;
     
     player.addItem("Event", id, ammount, player, true);
     EventStats.getInstance().tempTable.get(player.getObjectId())[0] = 1;
     }
     }
     
     protected void giveReward(L2PcInstance player, int id, int ammount)
     {
     EventStats.getInstance().tempTable.get(player.getObjectId())[0] = 1;
     player.addItem("Event", id, ammount, player, true);
     }
     
     protected void increasePlayersScore(L2PcInstance player)
     {
     int old = getScore(player);
     setScore(player, old + 1);
     EventStats.getInstance().tempTable.get(player.getObjectId())[3] = EventStats.getInstance().tempTable.get(player.getObjectId())[3] + 1;
     }
     
     protected void msgToAll(String text)
     {
     for (L2PcInstance player : players.keySet())
     player.sendMessage(text);
     }
     
     public void onDie(L2PcInstance victim, L2Character killer)
     {
     EventStats.getInstance().tempTable.get(victim.getObjectId())[2] = EventStats.getInstance().tempTable.get(victim.getObjectId())[2] + 1;
     }
     
     public void onKill(L2Character victim, L2PcInstance killer)
     {
     EventStats.getInstance().tempTable.get(killer.getObjectId())[1] = EventStats.getInstance().tempTable.get(killer.getObjectId())[1] + 1;
     }
     
     public void onLogout(L2PcInstance player)
     {
     if (players.containsKey(player))
     removePlayer(player);
     
     player.setXYZ(EventManager.getInstance().positions.get(player)[0], EventManager.getInstance().positions.get(player)[1], EventManager.getInstance().positions.get(player)[2]);
     player.setTitle(EventManager.getInstance().titles.get(player));
     
     if (teams.size() == 1)
     {
     if (getPlayerList().size() == 1)
     endEvent();
     }
     else
     {
     int t = players.head().getNext().getValue()[0];
     for (L2PcInstance p : getPlayerList())
     if (getTeam(p) != t)
     return;
     
     endEvent();
     }
     }
     
     public boolean onSay(int type, L2PcInstance player, String text)
     {
     return true;
     }
     
     public boolean onTalkNpc(L2Npc npc, L2PcInstance player)
     {
     return false;
     }
     
     public boolean onUseItem(L2PcInstance player, ItemInstance item)
     {
     if (EventManager.getInstance().getRestriction("item").contains(item.getItemId()) || getRestriction("item").contains(item.getItemId()))
     return false;
     
     if (item.getItemType() == EtcItemType.POTION && !getBoolean("allowPotions"))
     return false;
     
     if (item.getItemType() == EtcItemType.SCROLL)
     return false;
     
     if (item.getItemType() == EtcItemType.PET_COLLAR)
     return false;
     
     return true;
     }
     
     public boolean onUseMagic(L2Skill skill)
     {
     if (EventManager.getInstance().getRestriction("skill").contains(skill.getId()) || getRestriction("skill").contains(skill.getId()))
     return false;
     
     if (skill.getSkillType() == L2SkillType.RESURRECT && !(this instanceof RaidBoss))
     return false;
     
     if (skill.getSkillType() == L2SkillType.SUMMON_FRIEND)
     return false;
     
     if (skill.getSkillType() == L2SkillType.RECALL)
     return false;
     
     if (skill.getSkillType() == L2SkillType.FAKE_DEATH)
     return false;
     
     return true;
     }
     
     protected void prepare(L2PcInstance player)
     {
     if (player.isDead())
     player.doRevive();
     
     if (player.isCastingNow())
     player.abortCast();
     
     player.getAppearance().setVisible();
     
     if (player.hasPet())
     player.getPet().unSummon(player);
     
     if (player.isMounted())
     player.dismount();
     
     if (getBoolean("removeBuffs"))
     {
     player.stopAllEffects();
     if (player.hasServitor())
     player.getPet().unSummon(player);
     }
     else
     {
     for (L2Effect e : player.getAllEffects())
     if (e.getStackType().equals("hero_buff"))
     e.exit();
     
     if (player.hasServitor())
     {
     ArrayList<L2Skill> summonBuffs = new ArrayList<>();
     
     for (L2Effect e : player.getPet().getAllEffects())
     {
     if (e.getStackType().equals("hero_buff"))
     e.exit();
     else
     summonBuffs.add(e.getSkill());
     }
     
     summons.put(player, summonBuffs);
     }
     }
     
     ItemInstance wpn = player.getActiveWeaponInstance();
     if (wpn != null && wpn.isHeroItem())
     player.useEquippableItem(wpn, false);
     
     if (player.getParty() != null)
     {
     L2Party party = player.getParty();
     party.removePartyMember(player);
     }
     
     int[] nameColor = getPlayersTeam(player).getTeamColor();
     player.getAppearance().setNameColor(nameColor[0], nameColor[1], nameColor[2]);
     player.setTitle("<- 0 ->");
     
     if (EventManager.getInstance().getBoolean("eventBufferEnabled")) 
     EventBuffer.getInstance().buffPlayer(player);
     
     player.setCurrentHpMp(player.getMaxHp(), player.getMaxMp());
     player.setCurrentCp(player.getMaxCp());
     
     player.broadcastUserInfo();
     }
     
     public ArrayList<L2Skill> getSummonBuffs(L2PcInstance player)
     {
     return summons.get(player);
     }
     
     protected void preparePlayers()
     {
     for (L2PcInstance player : players.keySet())
     prepare(player);
     }
     
     protected void removePlayer(L2PcInstance player)
     {
     players.remove(player);
     }
     
     public void reset()
     {
     players.clear();
     summons.clear();
     tpm.purge();
     winnerTeam = 0;
     
     for (EventTeam team : teams.values())
     team.setScore(0);
     }
     
     protected void selectPlayers(int teamId, int playerCount)
     {
     for (int i = 0; i < playerCount; i++)
     {
     L2PcInstance player = EventManager.getInstance().players.get(Rnd.get(EventManager.getInstance().players.size()));
     players.put(player, new int[] { teamId, 0, 0 });
     EventManager.getInstance().players.remove(player);
     }
     }
     
     protected void setScore(L2PcInstance player, int score)
     {
     players.get(player)[2] = score;
     player.setTitle("<- " + score + " ->");
     player.broadcastUserInfo();
     }
     
     protected void setStatus(L2PcInstance player, int status)
     {
     if (players.containsKey(player))
     players.get(player)[1] = status;
     }
     
     protected void setTeam(L2PcInstance player, int team)
     {
     players.get(player)[0] = team;
     }
     
     protected L2Spawn spawnNPC(int xPos, int yPos, int zPos, int npcId)
     {
     final NpcTemplate template = NpcTable.getInstance().getTemplate(npcId);
     
     try
     {
     final L2Spawn spawn = new L2Spawn(template);
     spawn.setLocx(xPos);
     spawn.setLocy(yPos);
     spawn.setLocz(zPos);
     spawn.setHeading(0);
     spawn.setRespawnDelay(1);
     SpawnTable.getInstance().addNewSpawn(spawn, false);
     spawn.init();
     return spawn;
     }
     catch (Exception e)
     {
     return null;
     }
     }
     
     protected void teleportPlayer(L2PcInstance player, int[] coordinates)
     {
     player.teleToLocation(coordinates[0] + (Rnd.get(coordinates[3] * 2) - coordinates[3]), coordinates[1] + (Rnd.get(coordinates[3] * 2) - coordinates[3]), coordinates[2], 0);
     }
     
     protected void teleportToTeamPos()
     {
     for (L2PcInstance player : players.keySet())
     teleportToTeamPos(player);
     }
     
     protected void teleportToTeamPos(L2PcInstance player)
     {
     int[] pos = getPosition(teams.get(getTeam(player)).getName(), 0);
     teleportPlayer(player, pos);
     }
     
     protected void unspawnNPC(L2Spawn npcSpawn)
     {
     if (npcSpawn == null)
     return;
     
     npcSpawn.getLastSpawn().deleteMe();
     npcSpawn.stopRespawn();
     SpawnTable.getInstance().deleteSpawn(npcSpawn, true);
     }
     
     public int numberOfTeams()
     {
     return teams.size();
     }
     
     protected void sendMsg()
     {
     for (L2PcInstance player : getPlayerList())
     player.sendPacket(new ExShowScreenMessage(1, -1, 2, false, 0, 0, 0, false, 3000, false, getStartingMsg()));
     }
     
     protected abstract void endEvent();
     protected abstract String getStartingMsg();
     protected abstract String getScorebar();
     protected abstract void start();
     protected abstract void showHtml(L2PcInstance player, int obj);
     protected abstract void schedule(int time);
    }