Browse Source

BETA: Reworking `L2World`:
* Removing custom implementation for thread-safe Trove maps, `L2TIntObjectHashMap`.
* Replaced `TObjectProcedure` with `IL2Procedure`.
* Using proper lazy initialization for disabled skills.
* This should address the problem with `null` values in maps.
* Reported by: nBd, lucan
* Closing #6642

Reviewed by: Nos

Zoey76 11 years ago
parent
commit
b83aa01c44
22 changed files with 146 additions and 606 deletions
  1. 3 4
      L2J_Server_BETA/java/com/l2jserver/gameserver/LoginServerThread.java
  2. 4 5
      L2J_Server_BETA/java/com/l2jserver/gameserver/SevenSigns.java
  3. 2 3
      L2J_Server_BETA/java/com/l2jserver/gameserver/SevenSignsFestival.java
  4. 3 4
      L2J_Server_BETA/java/com/l2jserver/gameserver/Shutdown.java
  5. 27 28
      L2J_Server_BETA/java/com/l2jserver/gameserver/communitybbs/Manager/RegionBBSManager.java
  6. 1 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/datatables/OfflineTradersTable.java
  7. 2 3
      L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/BoatManager.java
  8. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/TerritoryWarManager.java
  9. 3 3
      L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/ZoneManager.java
  10. 69 85
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2World.java
  11. 2 3
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Attackable.java
  12. 10 4
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Character.java
  13. 2 3
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2SepulcherNpcInstance.java
  14. 2 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/Fort.java
  15. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/L2Event.java
  16. 2 4
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/clanhall/ClanHallSiegeEngine.java
  17. 2 3
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestStartPledgeWar.java
  18. 2 3
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestStopPledgeWar.java
  19. 2 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/gameserverpackets/PlayerInGame.java
  20. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/taskmanager/KnownListUpdateTaskManager.java
  21. 5 6
      L2J_Server_BETA/java/com/l2jserver/gameserver/util/Broadcast.java
  22. 0 436
      L2J_Server_BETA/java/com/l2jserver/gameserver/util/L2TIntObjectHashMap.java

+ 3 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/LoginServerThread.java

@@ -289,13 +289,12 @@ public class LoginServerThread extends Thread
 							sendPacket(st);
 							sendPacket(st);
 							if (L2World.getInstance().getAllPlayersCount() > 0)
 							if (L2World.getInstance().getAllPlayersCount() > 0)
 							{
 							{
-								FastList<String> playerList = new FastList<>();
-								for (L2PcInstance player : L2World.getInstance().getAllPlayersArray())
+								final List<String> playerList = new ArrayList<>();
+								for (L2PcInstance player : L2World.getInstance().getPlayers())
 								{
 								{
 									playerList.add(player.getAccountName());
 									playerList.add(player.getAccountName());
 								}
 								}
-								PlayerInGame pig = new PlayerInGame(playerList);
-								sendPacket(pig);
+								sendPacket(new PlayerInGame(playerList));
 							}
 							}
 							break;
 							break;
 						case 0x03:
 						case 0x03:

+ 4 - 5
L2J_Server_BETA/java/com/l2jserver/gameserver/SevenSigns.java

@@ -45,14 +45,13 @@ import com.l2jserver.gameserver.model.StatsSet;
 import com.l2jserver.gameserver.model.TeleportWhereType;
 import com.l2jserver.gameserver.model.TeleportWhereType;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.Castle;
 import com.l2jserver.gameserver.model.entity.Castle;
+import com.l2jserver.gameserver.model.interfaces.IL2Procedure;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.SSQInfo;
 import com.l2jserver.gameserver.network.serverpackets.SSQInfo;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.util.Broadcast;
 import com.l2jserver.gameserver.util.Broadcast;
 
 
-import gnu.trove.procedure.TObjectProcedure;
-
 /**
 /**
  * Seven Signs engine.
  * Seven Signs engine.
  * @author Tempy
  * @author Tempy
@@ -1436,7 +1435,7 @@ public class SevenSigns
 		L2World.getInstance().forEachPlayer(new TeleLosingCabalFromDungeons(compWinner));
 		L2World.getInstance().forEachPlayer(new TeleLosingCabalFromDungeons(compWinner));
 	}
 	}
 	
 	
-	private final class TeleLosingCabalFromDungeons implements TObjectProcedure<L2PcInstance>
+	private final class TeleLosingCabalFromDungeons implements IL2Procedure<L2PcInstance>
 	{
 	{
 		private final String _cmpWinner;
 		private final String _cmpWinner;
 		
 		
@@ -1667,7 +1666,7 @@ public class SevenSigns
 		L2World.getInstance().forEachPlayer(new GiveCPMult(StrifeOwner));
 		L2World.getInstance().forEachPlayer(new GiveCPMult(StrifeOwner));
 	}
 	}
 	
 	
-	private final class GiveCPMult implements TObjectProcedure<L2PcInstance>
+	private final class GiveCPMult implements IL2Procedure<L2PcInstance>
 	{
 	{
 		private final int _strifeOwner;
 		private final int _strifeOwner;
 		
 		
@@ -1705,7 +1704,7 @@ public class SevenSigns
 		L2World.getInstance().forEachPlayer(new RemoveCPMult());
 		L2World.getInstance().forEachPlayer(new RemoveCPMult());
 	}
 	}
 	
 	
-	protected final class RemoveCPMult implements TObjectProcedure<L2PcInstance>
+	protected final class RemoveCPMult implements IL2Procedure<L2PcInstance>
 	{
 	{
 		@Override
 		@Override
 		public final boolean execute(final L2PcInstance character)
 		public final boolean execute(final L2PcInstance character)

+ 2 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/SevenSignsFestival.java

@@ -54,6 +54,7 @@ import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2FestivalMonsterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2FestivalMonsterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
+import com.l2jserver.gameserver.model.interfaces.IL2Procedure;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.network.NpcStringId;
 import com.l2jserver.gameserver.network.NpcStringId;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.SystemMessageId;
@@ -64,8 +65,6 @@ import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.util.Util;
 import com.l2jserver.gameserver.util.Util;
 import com.l2jserver.util.Rnd;
 import com.l2jserver.util.Rnd;
 
 
-import gnu.trove.procedure.TObjectProcedure;
-
 /**
 /**
  * Seven Signs Festival of Darkness Engine.<br>
  * Seven Signs Festival of Darkness Engine.<br>
  * TODO:<br>
  * TODO:<br>
@@ -2472,7 +2471,7 @@ public class SevenSignsFestival implements SpawnListener
 		}
 		}
 	}
 	}
 	
 	
-	protected final class ForEachPlayerRemoveUnusedBloodOfferings implements TObjectProcedure<L2PcInstance>
+	protected final class ForEachPlayerRemoveUnusedBloodOfferings implements IL2Procedure<L2PcInstance>
 	{
 	{
 		@Override
 		@Override
 		public final boolean execute(final L2PcInstance onlinePlayer)
 		public final boolean execute(final L2PcInstance onlinePlayer)

+ 3 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/Shutdown.java

@@ -38,6 +38,7 @@ import com.l2jserver.gameserver.instancemanager.RaidBossSpawnManager;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.Hero;
 import com.l2jserver.gameserver.model.entity.Hero;
+import com.l2jserver.gameserver.model.interfaces.IL2Procedure;
 import com.l2jserver.gameserver.model.olympiad.Olympiad;
 import com.l2jserver.gameserver.model.olympiad.Olympiad;
 import com.l2jserver.gameserver.network.L2GameClient;
 import com.l2jserver.gameserver.network.L2GameClient;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.SystemMessageId;
@@ -47,8 +48,6 @@ import com.l2jserver.gameserver.network.serverpackets.ServerClose;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.util.Broadcast;
 import com.l2jserver.gameserver.util.Broadcast;
 
 
-import gnu.trove.procedure.TObjectProcedure;
-
 /**
 /**
  * This class provides the functions for shutting down and restarting the server.<br>
  * This class provides the functions for shutting down and restarting the server.<br>
  * It closes all open client connections and saves all data.
  * It closes all open client connections and saves all data.
@@ -580,10 +579,10 @@ public class Shutdown extends Thread
 	 */
 	 */
 	private void disconnectAllCharacters()
 	private void disconnectAllCharacters()
 	{
 	{
-		L2World.getInstance().getAllPlayers().safeForEachValue(new DisconnectAllCharacters());
+		L2World.getInstance().forEachPlayer(new DisconnectAllCharacters());
 	}
 	}
 	
 	
-	protected final class DisconnectAllCharacters implements TObjectProcedure<L2PcInstance>
+	protected final class DisconnectAllCharacters implements IL2Procedure<L2PcInstance>
 	{
 	{
 		private final Logger _log = Logger.getLogger(DisconnectAllCharacters.class.getName());
 		private final Logger _log = Logger.getLogger(DisconnectAllCharacters.class.getName());
 		
 		

+ 27 - 28
L2J_Server_BETA/java/com/l2jserver/gameserver/communitybbs/Manager/RegionBBSManager.java

@@ -18,14 +18,16 @@
  */
  */
 package com.l2jserver.gameserver.communitybbs.Manager;
 package com.l2jserver.gameserver.communitybbs.Manager;
 
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
 import java.util.StringTokenizer;
 import java.util.StringTokenizer;
 import java.util.logging.Level;
 import java.util.logging.Level;
 import java.util.logging.LogRecord;
 import java.util.logging.LogRecord;
 import java.util.logging.Logger;
 import java.util.logging.Logger;
 
 
-import javolution.util.FastList;
 import javolution.util.FastMap;
 import javolution.util.FastMap;
 
 
 import com.l2jserver.Config;
 import com.l2jserver.Config;
@@ -43,8 +45,6 @@ import com.l2jserver.gameserver.network.serverpackets.ShowBoard;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.util.StringUtil;
 import com.l2jserver.util.StringUtil;
 
 
-import gnu.trove.iterator.TIntObjectIterator;
-
 public class RegionBBSManager extends BaseBBSManager
 public class RegionBBSManager extends BaseBBSManager
 {
 {
 	private static Logger _logChat = Logger.getLogger("chat");
 	private static Logger _logChat = Logger.getLogger("chat");
@@ -58,6 +58,11 @@ public class RegionBBSManager extends BaseBBSManager
 		}
 		}
 	};
 	};
 	
 	
+	private int _onlineCount = 0;
+	private int _onlineCountGm = 0;
+	private static Map<Integer, List<L2PcInstance>> _onlinePlayers = new FastMap<Integer, List<L2PcInstance>>().shared();
+	private static Map<Integer, Map<String, String>> _communityPages = new FastMap<Integer, Map<String, String>>().shared();
+	
 	@Override
 	@Override
 	public void parsecmd(String command, L2PcInstance activeChar)
 	public void parsecmd(String command, L2PcInstance activeChar)
 	{
 	{
@@ -270,35 +275,20 @@ public class RegionBBSManager extends BaseBBSManager
 		
 		
 	}
 	}
 	
 	
-	private int _onlineCount = 0;
-	private int _onlineCountGm = 0;
-	private static FastMap<Integer, FastList<L2PcInstance>> _onlinePlayers = new FastMap<Integer, FastList<L2PcInstance>>().shared();
-	private static FastMap<Integer, FastMap<String, String>> _communityPages = new FastMap<Integer, FastMap<String, String>>().shared();
-	
-	/**
-	 * Gets the single instance of RegionBBSManager.
-	 * @return single instance of RegionBBSManager
-	 */
-	public static RegionBBSManager getInstance()
-	{
-		return SingletonHolder._instance;
-	}
-	
 	/**
 	/**
 	 * Change community board.
 	 * Change community board.
 	 */
 	 */
 	public void changeCommunityBoard()
 	public void changeCommunityBoard()
 	{
 	{
-		final FastList<L2PcInstance> sortedPlayers = new FastList<>();
-		final TIntObjectIterator<L2PcInstance> it = L2World.getInstance().getAllPlayers().iterator();
-		while (it.hasNext())
+		final List<L2PcInstance> sortedPlayers = new ArrayList<>();
+		for (L2PcInstance player : L2World.getInstance().getPlayers())
 		{
 		{
-			it.advance();
-			if (it.value() != null)
+			if (player != null)
 			{
 			{
-				sortedPlayers.add(it.value());
+				sortedPlayers.add(player);
 			}
 			}
 		}
 		}
+		
 		Collections.sort(sortedPlayers, PLAYER_NAME_COMPARATOR);
 		Collections.sort(sortedPlayers, PLAYER_NAME_COMPARATOR);
 		
 		
 		_onlinePlayers.clear();
 		_onlinePlayers.clear();
@@ -322,7 +312,7 @@ public class RegionBBSManager extends BaseBBSManager
 	{
 	{
 		boolean added = false;
 		boolean added = false;
 		
 		
-		for (FastList<L2PcInstance> page : _onlinePlayers.values())
+		for (List<L2PcInstance> page : _onlinePlayers.values())
 		{
 		{
 			if (page.size() < Config.NAME_PAGE_SIZE_COMMUNITYBOARD)
 			if (page.size() < Config.NAME_PAGE_SIZE_COMMUNITYBOARD)
 			{
 			{
@@ -347,7 +337,7 @@ public class RegionBBSManager extends BaseBBSManager
 		
 		
 		if (!added)
 		if (!added)
 		{
 		{
-			FastList<L2PcInstance> temp = new FastList<>();
+			List<L2PcInstance> temp = new ArrayList<>();
 			int page = _onlinePlayers.size() + 1;
 			int page = _onlinePlayers.size() + 1;
 			if (temp.add(player))
 			if (temp.add(player))
 			{
 			{
@@ -375,9 +365,9 @@ public class RegionBBSManager extends BaseBBSManager
 		
 		
 		for (int page : _onlinePlayers.keySet())
 		for (int page : _onlinePlayers.keySet())
 		{
 		{
-			FastMap<String, String> communityPage = new FastMap<>();
+			Map<String, String> communityPage = new FastMap<>();
 			htmlCode.setLength(0);
 			htmlCode.setLength(0);
-			StringUtil.append(htmlCode, "<html><body><br><table>" + trOpen + "<td align=left valign=top>Server Restarted: ", String.valueOf(GameServer.dateTimeServerStarted.getTime()), tdClose + trClose + "</table><table>" + trOpen + tdOpen + "XP Rate: x", String.valueOf(Config.RATE_XP), tdClose + colSpacer + tdOpen + "Party XP Rate: x", String.valueOf(Config.RATE_XP * Config.RATE_PARTY_XP), tdClose + colSpacer + tdOpen + "XP Exponent: ", String.valueOf(Config.ALT_GAME_EXPONENT_XP), tdClose + trClose + trOpen + tdOpen + "SP Rate: x", String.valueOf(Config.RATE_SP), tdClose + colSpacer + tdOpen + "Party SP Rate: x", String.valueOf(Config.RATE_SP * Config.RATE_PARTY_SP), tdClose + colSpacer + tdOpen + "SP Exponent: ", String.valueOf(Config.ALT_GAME_EXPONENT_SP), tdClose + trClose + trOpen + tdOpen + "Drop Rate: ", String.valueOf(Config.RATE_DROP_ITEMS), tdClose + colSpacer + tdOpen + "Spoil Rate: ", String.valueOf(Config.RATE_DROP_SPOIL), tdClose + colSpacer + tdOpen + "Adena Rate: ", String.valueOf(Config.RATE_DROP_ITEMS_ID.get(PcInventory.ADENA_ID)), tdClose + trClose + "</table><table>" + trOpen + "<td><img src=\"sek.cbui355\" width=600 height=1><br></td>" + trClose + trOpen + tdOpen, String.valueOf(L2World.getInstance().getAllVisibleObjectsCount()), " Object count</td>" + trClose + trOpen + tdOpen, String.valueOf(getOnlineCount("gm")), " Player(s) Online</td>" + trClose + "</table>");
+			StringUtil.append(htmlCode, "<html><body><br><table>" + trOpen + "<td align=left valign=top>Server Restarted: ", String.valueOf(GameServer.dateTimeServerStarted.getTime()), tdClose + trClose + "</table><table>" + trOpen + tdOpen + "XP Rate: x", String.valueOf(Config.RATE_XP), tdClose + colSpacer + tdOpen + "Party XP Rate: x", String.valueOf(Config.RATE_XP * Config.RATE_PARTY_XP), tdClose + colSpacer + tdOpen + "XP Exponent: ", String.valueOf(Config.ALT_GAME_EXPONENT_XP), tdClose + trClose + trOpen + tdOpen + "SP Rate: x", String.valueOf(Config.RATE_SP), tdClose + colSpacer + tdOpen + "Party SP Rate: x", String.valueOf(Config.RATE_SP * Config.RATE_PARTY_SP), tdClose + colSpacer + tdOpen + "SP Exponent: ", String.valueOf(Config.ALT_GAME_EXPONENT_SP), tdClose + trClose + trOpen + tdOpen + "Drop Rate: ", String.valueOf(Config.RATE_DROP_ITEMS), tdClose + colSpacer + tdOpen + "Spoil Rate: ", String.valueOf(Config.RATE_DROP_SPOIL), tdClose + colSpacer + tdOpen + "Adena Rate: ", String.valueOf(Config.RATE_DROP_ITEMS_ID.get(PcInventory.ADENA_ID)), tdClose + trClose + "</table><table>" + trOpen + "<td><img src=\"sek.cbui355\" width=600 height=1><br></td>" + trClose + trOpen + tdOpen, String.valueOf(L2World.getInstance().getVisibleObjectsCount()), " Object count</td>" + trClose + trOpen + tdOpen, String.valueOf(getOnlineCount("gm")), " Player(s) Online</td>" + trClose + "</table>");
 			
 			
 			int cell = 0;
 			int cell = 0;
 			if (Config.BBS_SHOW_PLAYERLIST)
 			if (Config.BBS_SHOW_PLAYERLIST)
@@ -562,7 +552,7 @@ public class RegionBBSManager extends BaseBBSManager
 	 * @param page the page
 	 * @param page the page
 	 * @return the online players
 	 * @return the online players
 	 */
 	 */
-	private FastList<L2PcInstance> getOnlinePlayers(int page)
+	private List<L2PcInstance> getOnlinePlayers(int page)
 	{
 	{
 		return _onlinePlayers.get(page);
 		return _onlinePlayers.get(page);
 	}
 	}
@@ -583,6 +573,15 @@ public class RegionBBSManager extends BaseBBSManager
 		return null;
 		return null;
 	}
 	}
 	
 	
+	/**
+	 * Gets the single instance of RegionBBSManager.
+	 * @return single instance of RegionBBSManager
+	 */
+	public static RegionBBSManager getInstance()
+	{
+		return SingletonHolder._instance;
+	}
+	
 	private static class SingletonHolder
 	private static class SingletonHolder
 	{
 	{
 		protected static final RegionBBSManager _instance = new RegionBBSManager();
 		protected static final RegionBBSManager _instance = new RegionBBSManager();

+ 1 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/datatables/OfflineTradersTable.java

@@ -60,8 +60,7 @@ public class OfflineTradersTable
 			stm2.execute();
 			stm2.execute();
 			con.setAutoCommit(false); // avoid halfway done
 			con.setAutoCommit(false); // avoid halfway done
 			
 			
-			// TextBuilder items = TextBuilder.newInstance();
-			for (L2PcInstance pc : L2World.getInstance().getAllPlayersArray())
+			for (L2PcInstance pc : L2World.getInstance().getPlayers())
 			{
 			{
 				try
 				try
 				{
 				{

+ 2 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/BoatManager.java

@@ -30,10 +30,9 @@ import com.l2jserver.gameserver.model.VehiclePathPoint;
 import com.l2jserver.gameserver.model.actor.instance.L2BoatInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2BoatInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.templates.L2CharTemplate;
 import com.l2jserver.gameserver.model.actor.templates.L2CharTemplate;
+import com.l2jserver.gameserver.model.interfaces.IL2Procedure;
 import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
 import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
 
 
-import gnu.trove.procedure.TObjectProcedure;
-
 public class BoatManager
 public class BoatManager
 {
 {
 	private final Map<Integer, L2BoatInstance> _boats = new FastMap<>();
 	private final Map<Integer, L2BoatInstance> _boats = new FastMap<>();
@@ -180,7 +179,7 @@ public class BoatManager
 		L2World.getInstance().forEachPlayer(new ForEachPlayerBroadcastPackets(point1, point2, packets));
 		L2World.getInstance().forEachPlayer(new ForEachPlayerBroadcastPackets(point1, point2, packets));
 	}
 	}
 	
 	
-	private final class ForEachPlayerBroadcastPackets implements TObjectProcedure<L2PcInstance>
+	private final class ForEachPlayerBroadcastPackets implements IL2Procedure<L2PcInstance>
 	{
 	{
 		VehiclePathPoint _point1, _point2;
 		VehiclePathPoint _point1, _point2;
 		L2GameServerPacket[] _packets;
 		L2GameServerPacket[] _packets;

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/TerritoryWarManager.java

@@ -1297,7 +1297,7 @@ public final class TerritoryWarManager implements Siegable
 		{
 		{
 			if (isTWInProgress())
 			if (isTWInProgress())
 			{
 			{
-				for (L2PcInstance player : L2World.getInstance().getAllPlayersArray())
+				for (L2PcInstance player : L2World.getInstance().getPlayers())
 				{
 				{
 					if ((player != null) && (player.getSiegeSide() > 0))
 					if ((player != null) && (player.getSiegeSide() > 0))
 					{
 					{

+ 3 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/ZoneManager.java

@@ -73,7 +73,7 @@ public final class ZoneManager extends DocumentParser
 	{
 	{
 		// Get the world regions
 		// Get the world regions
 		int count = 0;
 		int count = 0;
-		final L2WorldRegion[][] worldRegions = L2World.getInstance().getAllWorldRegions();
+		final L2WorldRegion[][] worldRegions = L2World.getInstance().getWorldRegions();
 		
 		
 		// Backup old zone settings
 		// Backup old zone settings
 		for (Map<Integer, ? extends L2ZoneType> map : _classZones.values())
 		for (Map<Integer, ? extends L2ZoneType> map : _classZones.values())
@@ -103,7 +103,7 @@ public final class ZoneManager extends DocumentParser
 		load();
 		load();
 		
 		
 		// Re-validate all characters in zones
 		// Re-validate all characters in zones
-		for (L2Object obj : L2World.getInstance().getAllVisibleObjectsArray())
+		for (L2Object obj : L2World.getInstance().getVisibleObjects())
 		{
 		{
 			if (obj instanceof L2Character)
 			if (obj instanceof L2Character)
 			{
 			{
@@ -117,7 +117,7 @@ public final class ZoneManager extends DocumentParser
 	protected void parseDocument()
 	protected void parseDocument()
 	{
 	{
 		// Get the world regions
 		// Get the world regions
-		final L2WorldRegion[][] worldRegions = L2World.getInstance().getAllWorldRegions();
+		final L2WorldRegion[][] worldRegions = L2World.getInstance().getWorldRegions();
 		NamedNodeMap attrs;
 		NamedNodeMap attrs;
 		Node attribute;
 		Node attribute;
 		String zoneName;
 		String zoneName;

+ 69 - 85
L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2World.java

@@ -22,6 +22,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collection;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.logging.Level;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import java.util.logging.Logger;
 
 
@@ -31,30 +32,19 @@ import com.l2jserver.gameserver.datatables.CharNameTable;
 import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
-import com.l2jserver.gameserver.util.L2TIntObjectHashMap;
+import com.l2jserver.gameserver.model.interfaces.IL2Procedure;
 import com.l2jserver.gameserver.util.Point3D;
 import com.l2jserver.gameserver.util.Point3D;
 import com.l2jserver.util.StringUtil;
 import com.l2jserver.util.StringUtil;
 
 
-import gnu.trove.procedure.TObjectProcedure;
-
-/**
- * This class ...
- * @version $Revision: 1.21.2.5.2.7 $ $Date: 2005/03/27 15:29:32 $
- */
 public final class L2World
 public final class L2World
 {
 {
-	private static Logger _log = Logger.getLogger(L2World.class.getName());
-	
-	/**
-	 * Gracia border Flying objects not allowed to the east of it.
-	 */
+	private static final Logger _log = Logger.getLogger(L2World.class.getName());
+	/** Gracia border Flying objects not allowed to the east of it. */
 	public static final int GRACIA_MAX_X = -166168;
 	public static final int GRACIA_MAX_X = -166168;
 	public static final int GRACIA_MAX_Z = 6105;
 	public static final int GRACIA_MAX_Z = 6105;
 	public static final int GRACIA_MIN_Z = -895;
 	public static final int GRACIA_MIN_Z = -895;
 	
 	
-	/*
-	 * biteshift, defines number of regions note, shifting by 15 will result in regions corresponding to map tiles shifting by 12 divides one tile to 8x8 regions
-	 */
+	/** Biteshift, defines number of regions note, shifting by 15 will result in regions corresponding to map tiles shifting by 12 divides one tile to 8x8 regions. */
 	public static final int SHIFT_BY = 12;
 	public static final int SHIFT_BY = 12;
 	
 	
 	private static final int TILE_SIZE = 32768;
 	private static final int TILE_SIZE = 32768;
@@ -73,43 +63,30 @@ public final class L2World
 	private static final int REGIONS_X = (MAP_MAX_X >> SHIFT_BY) + OFFSET_X;
 	private static final int REGIONS_X = (MAP_MAX_X >> SHIFT_BY) + OFFSET_X;
 	private static final int REGIONS_Y = (MAP_MAX_Y >> SHIFT_BY) + OFFSET_Y;
 	private static final int REGIONS_Y = (MAP_MAX_Y >> SHIFT_BY) + OFFSET_Y;
 	
 	
-	// private FastMap<String, L2PcInstance> _allGms;
-	
-	/** HashMap(Integer Player id, L2PcInstance) containing all the players in game */
-	private final L2TIntObjectHashMap<L2PcInstance> _allPlayers;
-	
-	/** L2ObjectHashMap(L2Object) containing all visible objects */
-	private final L2TIntObjectHashMap<L2Object> _allObjects;
-	private final L2TIntObjectHashMap<String> _allObjectsDebug;
-	
-	/** List with the pets instances and their owner id */
-	private final L2TIntObjectHashMap<L2PetInstance> _petsInstance;
+	/** Map containing all the players in game. */
+	private final Map<Integer, L2PcInstance> _allPlayers = new ConcurrentHashMap<>();
+	/** Map containing all visible objects. */
+	private final Map<Integer, L2Object> _allObjects = new ConcurrentHashMap<>();
+	/** Map used for debug. */
+	private final Map<Integer, String> _allObjectsDebug = new ConcurrentHashMap<>();
+	/** Map with the pets instances and their owner ID. */
+	private final Map<Integer, L2PetInstance> _petsInstance = new ConcurrentHashMap<>();
 	
 	
 	private L2WorldRegion[][] _worldRegions;
 	private L2WorldRegion[][] _worldRegions;
 	
 	
-	/**
-	 * Constructor of L2World.
-	 */
+	/** Constructor of L2World. */
 	protected L2World()
 	protected L2World()
 	{
 	{
-		_allPlayers = new L2TIntObjectHashMap<>();
-		_allObjects = new L2TIntObjectHashMap<>();
-		_allObjectsDebug = new L2TIntObjectHashMap<>();
-		_petsInstance = new L2TIntObjectHashMap<>();
-		
 		initRegions();
 		initRegions();
 	}
 	}
 	
 	
 	/**
 	/**
-	 * @return the current instance of L2World.
-	 */
-	public static L2World getInstance()
-	{
-		return SingletonHolder._instance;
-	}
-	
-	/**
-	 * Add L2Object object in _allObjects. <B><U> Example of use </U> :</B> <li>Withdraw an item from the warehouse, create an item</li> <li>Spawn a L2Character (PC, NPC, Pet)</li><BR>
+	 * Adds an object to the world.<br>
+	 * <B><U>Example of use</U>:</B>
+	 * <ul>
+	 * <li>Withdraw an item from the warehouse, create an item</li>
+	 * <li>Spawn a L2Character (PC, NPC, Pet)</li>
+	 * </ul>
 	 * @param object
 	 * @param object
 	 */
 	 */
 	public void storeObject(L2Object object)
 	public void storeObject(L2Object object)
@@ -129,8 +106,14 @@ public final class L2World
 	}
 	}
 	
 	
 	/**
 	/**
-	 * Remove L2Object object from _allObjects of L2World. <B><U> Example of use </U> :</B> <li>Delete item from inventory, tranfer Item from inventory to warehouse</li> <li>Crystallize item</li> <li>Remove NPC/PC/Pet from the world</li><BR>
-	 * @param object L2Object to remove from _allObjects of L2World
+	 * Removes an object from the world.<br>
+	 * <B><U>Example of use</U>:</B>
+	 * <ul>
+	 * <li>Delete item from inventory, transfer Item from inventory to warehouse</li>
+	 * <li>Crystallize item</li>
+	 * <li>Remove NPC/PC/Pet from the world</li>
+	 * </ul>
+	 * @param object the object to remove
 	 */
 	 */
 	public void removeObject(L2Object object)
 	public void removeObject(L2Object object)
 	{
 	{
@@ -160,7 +143,10 @@ public final class L2World
 	}
 	}
 	
 	
 	/**
 	/**
-	 * <B><U> Example of use </U> :</B> <li>Client packets : Action, AttackRequest, RequestJoinParty, RequestJoinPledge...</li>
+	 * <B><U> Example of use</U>:</B>
+	 * <ul>
+	 * <li>Client packets : Action, AttackRequest, RequestJoinParty, RequestJoinPledge...</li>
+	 * </ul>
 	 * @param oID Identifier of the L2Object
 	 * @param oID Identifier of the L2Object
 	 * @return the L2Object object that belongs to an ID or null if no object found.
 	 * @return the L2Object object that belongs to an ID or null if no object found.
 	 */
 	 */
@@ -169,46 +155,40 @@ public final class L2World
 		return _allObjects.get(oID);
 		return _allObjects.get(oID);
 	}
 	}
 	
 	
-	public final L2Object[] getAllVisibleObjectsArray()
-	{
-		return _allObjects.values(new L2Object[0]);
-	}
-	
-	public final boolean forEachObject(final TObjectProcedure<L2Object> proc)
+	public Collection<L2Object> getVisibleObjects()
 	{
 	{
-		return _allObjects.forEachValue(proc);
+		return _allObjects.values();
 	}
 	}
 	
 	
 	/**
 	/**
 	 * Get the count of all visible objects in world.
 	 * Get the count of all visible objects in world.
 	 * @return count off all L2World objects
 	 * @return count off all L2World objects
 	 */
 	 */
-	public final int getAllVisibleObjectsCount()
+	public int getVisibleObjectsCount()
 	{
 	{
 		return _allObjects.size();
 		return _allObjects.size();
 	}
 	}
 	
 	
-	/**
-	 * @return a table containing all GMs.
-	 */
 	public List<L2PcInstance> getAllGMs()
 	public List<L2PcInstance> getAllGMs()
 	{
 	{
 		return AdminTable.getInstance().getAllGms(true);
 		return AdminTable.getInstance().getAllGms(true);
 	}
 	}
 	
 	
-	public L2TIntObjectHashMap<L2PcInstance> getAllPlayers()
-	{
-		return _allPlayers;
-	}
-	
-	public final L2PcInstance[] getAllPlayersArray()
+	public Collection<L2PcInstance> getPlayers()
 	{
 	{
-		return _allPlayers.values(new L2PcInstance[0]);
+		return _allPlayers.values();
 	}
 	}
 	
 	
-	public final boolean forEachPlayer(final TObjectProcedure<L2PcInstance> proc)
+	public boolean forEachPlayer(IL2Procedure<L2PcInstance> procedure)
 	{
 	{
-		return _allPlayers.forEachValue(proc);
+		for (L2PcInstance player : _allPlayers.values())
+		{
+			if (!procedure.execute(player))
+			{
+				return false;
+			}
+		}
+		return true;
 	}
 	}
 	
 	
 	/**
 	/**
@@ -290,23 +270,21 @@ public final class L2World
 	 */
 	 */
 	public void addVisibleObject(L2Object object, L2WorldRegion newRegion)
 	public void addVisibleObject(L2Object object, L2WorldRegion newRegion)
 	{
 	{
-		// If selected L2Object is a L2PcIntance, add it in L2ObjectHashSet(L2PcInstance) _allPlayers of L2World
-		// XXX TODO: this code should be obsoleted by protection in putObject func...
+		// TODO: this code should be obsoleted by protection in putObject func...
 		if (object.isPlayer())
 		if (object.isPlayer())
 		{
 		{
 			L2PcInstance player = object.getActingPlayer();
 			L2PcInstance player = object.getActingPlayer();
-			
 			if (!player.isTeleporting())
 			if (!player.isTeleporting())
 			{
 			{
-				L2PcInstance tmp = getPlayer(player.getObjectId());
-				if (tmp != null)
+				final L2PcInstance old = getPlayer(player.getObjectId());
+				if (old != null)
 				{
 				{
 					_log.warning("Duplicate character!? Closing both characters (" + player.getName() + ")");
 					_log.warning("Duplicate character!? Closing both characters (" + player.getName() + ")");
 					player.logout();
 					player.logout();
-					tmp.logout();
+					old.logout();
 					return;
 					return;
 				}
 				}
-				addToAllPlayers(player);
+				addPlayerToWorld(player);
 			}
 			}
 		}
 		}
 		
 		
@@ -345,21 +323,21 @@ public final class L2World
 	}
 	}
 	
 	
 	/**
 	/**
-	 * Add the L2PcInstance to _allPlayers of L2World.
-	 * @param cha
+	 * Adds the player to the world.
+	 * @param player the player to add
 	 */
 	 */
-	public void addToAllPlayers(L2PcInstance cha)
+	public void addPlayerToWorld(L2PcInstance player)
 	{
 	{
-		_allPlayers.put(cha.getObjectId(), cha);
+		_allPlayers.put(player.getObjectId(), player);
 	}
 	}
 	
 	
 	/**
 	/**
-	 * Remove the L2PcInstance from _allPlayers of L2World. <B><U> Example of use </U> :</B> <li>Remove a player from the visible objects</li><BR>
-	 * @param cha
+	 * Remove the player from the world.
+	 * @param player the player to remove
 	 */
 	 */
-	public void removeFromAllPlayers(L2PcInstance cha)
+	public void removeFromAllPlayers(L2PcInstance player)
 	{
 	{
-		_allPlayers.remove(cha.getObjectId());
+		_allPlayers.remove(player.getObjectId());
 	}
 	}
 	
 	
 	/**
 	/**
@@ -564,7 +542,6 @@ public final class L2World
 	public List<L2Playable> getVisiblePlayable(L2Object object)
 	public List<L2Playable> getVisiblePlayable(L2Object object)
 	{
 	{
 		L2WorldRegion reg = object.getWorldRegion();
 		L2WorldRegion reg = object.getWorldRegion();
-		
 		if (reg == null)
 		if (reg == null)
 		{
 		{
 			return null;
 			return null;
@@ -618,7 +595,7 @@ public final class L2World
 	 * Returns the whole 2d array containing the world regions used by ZoneData.java to setup zones inside the world regions
 	 * Returns the whole 2d array containing the world regions used by ZoneData.java to setup zones inside the world regions
 	 * @return
 	 * @return
 	 */
 	 */
-	public L2WorldRegion[][] getAllWorldRegions()
+	public L2WorldRegion[][] getWorldRegions()
 	{
 	{
 		return _worldRegions;
 		return _worldRegions;
 	}
 	}
@@ -635,8 +612,7 @@ public final class L2World
 	}
 	}
 	
 	
 	/**
 	/**
-	 * Init each L2WorldRegion and their surrounding table. <B><U> Concept</U> :</B> All surrounding L2WorldRegion are identified in <B>_surroundingRegions</B> of the selected L2WorldRegion in order to scan a large area around a L2Object <B><U> Example of use </U> :</B> <li>Constructor of L2World</li>
-	 * <BR>
+	 * Initialize the world regions.
 	 */
 	 */
 	private void initRegions()
 	private void initRegions()
 	{
 	{
@@ -687,6 +663,14 @@ public final class L2World
 		_log.info("All visible NPC's deleted.");
 		_log.info("All visible NPC's deleted.");
 	}
 	}
 	
 	
+	/**
+	 * @return the current instance of L2World
+	 */
+	public static L2World getInstance()
+	{
+		return SingletonHolder._instance;
+	}
+	
 	private static class SingletonHolder
 	private static class SingletonHolder
 	{
 	{
 		protected static final L2World _instance = new L2World();
 		protected static final L2World _instance = new L2World();

+ 2 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Attackable.java

@@ -69,7 +69,6 @@ import com.l2jserver.gameserver.network.clientpackets.Say2;
 import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
 import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.taskmanager.DecayTaskManager;
 import com.l2jserver.gameserver.taskmanager.DecayTaskManager;
-import com.l2jserver.gameserver.util.L2TIntObjectHashMap;
 import com.l2jserver.gameserver.util.Util;
 import com.l2jserver.gameserver.util.Util;
 import com.l2jserver.util.Rnd;
 import com.l2jserver.util.Rnd;
 
 
@@ -100,7 +99,7 @@ public class L2Attackable extends L2Npc
 	
 	
 	private boolean _absorbed;
 	private boolean _absorbed;
 	
 	
-	private final L2TIntObjectHashMap<AbsorberInfo> _absorbersList = new L2TIntObjectHashMap<>();
+	private final Map<Integer, AbsorberInfo> _absorbersList = new ConcurrentHashMap<>();
 	
 	
 	private boolean _mustGiveExpSp;
 	private boolean _mustGiveExpSp;
 	
 	
@@ -2161,7 +2160,7 @@ public class L2Attackable extends L2Npc
 		_absorbersList.clear();
 		_absorbersList.clear();
 	}
 	}
 	
 	
-	public L2TIntObjectHashMap<AbsorberInfo> getAbsorbersList()
+	public Map<Integer, AbsorberInfo> getAbsorbersList()
 	{
 	{
 		return _absorbersList;
 		return _absorbersList;
 	}
 	}

+ 10 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Character.java

@@ -26,6 +26,7 @@ import java.util.Collection;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 import java.util.Set;
 import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.Future;
 import java.util.concurrent.Future;
 import java.util.concurrent.locks.ReentrantLock;
 import java.util.concurrent.locks.ReentrantLock;
 import java.util.logging.Level;
 import java.util.logging.Level;
@@ -135,7 +136,6 @@ import com.l2jserver.gameserver.network.serverpackets.TeleportToLocation;
 import com.l2jserver.gameserver.pathfinding.AbstractNodeLoc;
 import com.l2jserver.gameserver.pathfinding.AbstractNodeLoc;
 import com.l2jserver.gameserver.pathfinding.PathFinding;
 import com.l2jserver.gameserver.pathfinding.PathFinding;
 import com.l2jserver.gameserver.taskmanager.AttackStanceTaskManager;
 import com.l2jserver.gameserver.taskmanager.AttackStanceTaskManager;
-import com.l2jserver.gameserver.util.L2TIntObjectHashMap;
 import com.l2jserver.gameserver.util.Point3D;
 import com.l2jserver.gameserver.util.Point3D;
 import com.l2jserver.gameserver.util.Util;
 import com.l2jserver.gameserver.util.Util;
 import com.l2jserver.util.Rnd;
 import com.l2jserver.util.Rnd;
@@ -3488,7 +3488,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 	}
 	}
 	
 	
 	/** Table containing all skillId that are disabled */
 	/** Table containing all skillId that are disabled */
-	protected L2TIntObjectHashMap<Long> _disabledSkills;
+	protected Map<Integer, Long> _disabledSkills;
 	private boolean _allSkillsDisabled;
 	private boolean _allSkillsDisabled;
 	
 	
 	// private int _flyingRunSpeed;
 	// private int _flyingRunSpeed;
@@ -6178,7 +6178,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 		
 		
 	}
 	}
 	
 	
-	public L2TIntObjectHashMap<Long> getDisabledSkills()
+	public Map<Integer, Long> getDisabledSkills()
 	{
 	{
 		return _disabledSkills;
 		return _disabledSkills;
 	}
 	}
@@ -6213,7 +6213,13 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 		
 		
 		if (_disabledSkills == null)
 		if (_disabledSkills == null)
 		{
 		{
-			_disabledSkills = new L2TIntObjectHashMap<>();
+			synchronized (this)
+			{
+				if (_disabledSkills == null)
+				{
+					_disabledSkills = new ConcurrentHashMap<>();
+				}
+			}
 		}
 		}
 		
 		
 		_disabledSkills.put(Integer.valueOf(skill.getReuseHashCode()), delay > 10 ? System.currentTimeMillis() + delay : Long.MAX_VALUE);
 		_disabledSkills.put(Integer.valueOf(skill.getReuseHashCode()), delay > 10 ? System.currentTimeMillis() + delay : Long.MAX_VALUE);

+ 2 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2SepulcherNpcInstance.java

@@ -30,6 +30,7 @@ import com.l2jserver.gameserver.instancemanager.FourSepulchersManager;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
+import com.l2jserver.gameserver.model.interfaces.IL2Procedure;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.network.NpcStringId;
 import com.l2jserver.gameserver.network.NpcStringId;
@@ -41,8 +42,6 @@ import com.l2jserver.gameserver.network.serverpackets.SocialAction;
 import com.l2jserver.gameserver.util.Util;
 import com.l2jserver.gameserver.util.Util;
 import com.l2jserver.util.Rnd;
 import com.l2jserver.util.Rnd;
 
 
-import gnu.trove.procedure.TObjectProcedure;
-
 /**
 /**
  * @author sandman
  * @author sandman
  */
  */
@@ -440,7 +439,7 @@ public class L2SepulcherNpcInstance extends L2Npc
 		L2World.getInstance().forEachPlayer(new SayInShout(this, new CreatureSay(0, Say2.NPC_SHOUT, getName(), msg)));
 		L2World.getInstance().forEachPlayer(new SayInShout(this, new CreatureSay(0, Say2.NPC_SHOUT, getName(), msg)));
 	}
 	}
 	
 	
-	private final class SayInShout implements TObjectProcedure<L2PcInstance>
+	private final class SayInShout implements IL2Procedure<L2PcInstance>
 	{
 	{
 		L2SepulcherNpcInstance _npc;
 		L2SepulcherNpcInstance _npc;
 		CreatureSay _sm;
 		CreatureSay _sm;

+ 2 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/Fort.java

@@ -59,6 +59,7 @@ import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2StaticObjectInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2StaticObjectInstance;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
+import com.l2jserver.gameserver.model.interfaces.IL2Procedure;
 import com.l2jserver.gameserver.model.itemcontainer.PcInventory;
 import com.l2jserver.gameserver.model.itemcontainer.PcInventory;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.model.zone.type.L2FortZone;
 import com.l2jserver.gameserver.model.zone.type.L2FortZone;
@@ -69,7 +70,6 @@ import com.l2jserver.gameserver.network.serverpackets.PledgeShowInfoUpdate;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 
 
 import gnu.trove.map.hash.TIntIntHashMap;
 import gnu.trove.map.hash.TIntIntHashMap;
-import gnu.trove.procedure.TObjectProcedure;
 
 
 public class Fort
 public class Fort
 {
 {
@@ -1427,7 +1427,7 @@ public class Fort
 		}
 		}
 	}
 	}
 	
 	
-	private final class ForEachPlayerSendMessage implements TObjectProcedure<L2PcInstance>
+	private final class ForEachPlayerSendMessage implements IL2Procedure<L2PcInstance>
 	{
 	{
 		SystemMessage _sm;
 		SystemMessage _sm;
 		
 		

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/L2Event.java

@@ -394,7 +394,7 @@ public class L2Event
 			}
 			}
 			
 			
 			List<L2PcInstance> temp = new FastList<>();
 			List<L2PcInstance> temp = new FastList<>();
-			for (L2PcInstance player : L2World.getInstance().getAllPlayersArray())
+			for (L2PcInstance player : L2World.getInstance().getPlayers())
 			{
 			{
 				if (!player.isOnline())
 				if (!player.isOnline())
 				{
 				{

+ 2 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/clanhall/ClanHallSiegeEngine.java

@@ -480,10 +480,8 @@ public abstract class ClanHallSiegeEngine extends Quest implements Siegable
 	public final void broadcastNpcSay(final L2Npc npc, final int type, final NpcStringId messageId)
 	public final void broadcastNpcSay(final L2Npc npc, final int type, final NpcStringId messageId)
 	{
 	{
 		final NpcSay npcSay = new NpcSay(npc.getObjectId(), type, npc.getId(), messageId);
 		final NpcSay npcSay = new NpcSay(npc.getObjectId(), type, npc.getId(), messageId);
-		int sourceRegion = MapRegionManager.getInstance().getMapRegionLocId(npc);
-		final L2PcInstance[] charsInside = L2World.getInstance().getAllPlayersArray();
-		
-		for (L2PcInstance pc : charsInside)
+		final int sourceRegion = MapRegionManager.getInstance().getMapRegionLocId(npc);
+		for (L2PcInstance pc : L2World.getInstance().getPlayers())
 		{
 		{
 			if ((pc != null) && (MapRegionManager.getInstance().getMapRegionLocId(pc) == sourceRegion))
 			if ((pc != null) && (MapRegionManager.getInstance().getMapRegionLocId(pc) == sourceRegion))
 			{
 			{

+ 2 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestStartPledgeWar.java

@@ -23,12 +23,11 @@ import com.l2jserver.gameserver.datatables.ClanTable;
 import com.l2jserver.gameserver.model.L2Clan;
 import com.l2jserver.gameserver.model.L2Clan;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.interfaces.IL2Procedure;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 
 
-import gnu.trove.procedure.TObjectProcedure;
-
 public final class RequestStartPledgeWar extends L2GameClientPacket
 public final class RequestStartPledgeWar extends L2GameClientPacket
 {
 {
 	private static final String _C__03_REQUESTSTARTPLEDGEWAR = "[C] 03 RequestStartPledgewar";
 	private static final String _C__03_REQUESTSTARTPLEDGEWAR = "[C] 03 RequestStartPledgewar";
@@ -146,7 +145,7 @@ public final class RequestStartPledgeWar extends L2GameClientPacket
 		L2World.getInstance().forEachPlayer(new ForEachPlayerBroadcastUserInfo(player, clan));
 		L2World.getInstance().forEachPlayer(new ForEachPlayerBroadcastUserInfo(player, clan));
 	}
 	}
 	
 	
-	private final class ForEachPlayerBroadcastUserInfo implements TObjectProcedure<L2PcInstance>
+	private final class ForEachPlayerBroadcastUserInfo implements IL2Procedure<L2PcInstance>
 	{
 	{
 		private final L2Clan _cln;
 		private final L2Clan _cln;
 		private final L2PcInstance _ply;
 		private final L2PcInstance _ply;

+ 2 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestStopPledgeWar.java

@@ -23,12 +23,11 @@ import com.l2jserver.gameserver.model.L2Clan;
 import com.l2jserver.gameserver.model.L2ClanMember;
 import com.l2jserver.gameserver.model.L2ClanMember;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.interfaces.IL2Procedure;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.taskmanager.AttackStanceTaskManager;
 import com.l2jserver.gameserver.taskmanager.AttackStanceTaskManager;
 
 
-import gnu.trove.procedure.TObjectProcedure;
-
 public final class RequestStopPledgeWar extends L2GameClientPacket
 public final class RequestStopPledgeWar extends L2GameClientPacket
 {
 {
 	private static final String _C__05_REQUESTSTOPPLEDGEWAR = "[C] 05 RequestStopPledgeWar";
 	private static final String _C__05_REQUESTSTOPPLEDGEWAR = "[C] 05 RequestStopPledgeWar";
@@ -114,7 +113,7 @@ public final class RequestStopPledgeWar extends L2GameClientPacket
 		L2World.getInstance().forEachPlayer(new ForEachPlayerBroadcastUserInfo(clan, player));
 		L2World.getInstance().forEachPlayer(new ForEachPlayerBroadcastUserInfo(clan, player));
 	}
 	}
 	
 	
-	private final class ForEachPlayerBroadcastUserInfo implements TObjectProcedure<L2PcInstance>
+	private final class ForEachPlayerBroadcastUserInfo implements IL2Procedure<L2PcInstance>
 	{
 	{
 		private final L2PcInstance _player;
 		private final L2PcInstance _player;
 		private final L2Clan _cln;
 		private final L2Clan _cln;

+ 2 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/network/gameserverpackets/PlayerInGame.java

@@ -18,7 +18,7 @@
  */
  */
 package com.l2jserver.gameserver.network.gameserverpackets;
 package com.l2jserver.gameserver.network.gameserverpackets;
 
 
-import javolution.util.FastList;
+import java.util.List;
 
 
 import com.l2jserver.util.network.BaseSendablePacket;
 import com.l2jserver.util.network.BaseSendablePacket;
 
 
@@ -34,7 +34,7 @@ public class PlayerInGame extends BaseSendablePacket
 		writeS(player);
 		writeS(player);
 	}
 	}
 	
 	
-	public PlayerInGame(FastList<String> players)
+	public PlayerInGame(List<String> players)
 	{
 	{
 		writeC(0x02);
 		writeC(0x02);
 		writeH(players.size());
 		writeH(players.size());

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/taskmanager/KnownListUpdateTaskManager.java

@@ -63,7 +63,7 @@ public class KnownListUpdateTaskManager
 			try
 			try
 			{
 			{
 				boolean failed;
 				boolean failed;
-				for (L2WorldRegion regions[] : L2World.getInstance().getAllWorldRegions())
+				for (L2WorldRegion regions[] : L2World.getInstance().getWorldRegions())
 				{
 				{
 					for (L2WorldRegion r : regions) // go through all world regions
 					for (L2WorldRegion r : regions) // go through all world regions
 					{
 					{

+ 5 - 6
L2J_Server_BETA/java/com/l2jserver/gameserver/util/Broadcast.java

@@ -25,14 +25,13 @@ import java.util.logging.Logger;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.interfaces.IL2Procedure;
 import com.l2jserver.gameserver.network.clientpackets.Say2;
 import com.l2jserver.gameserver.network.clientpackets.Say2;
 import com.l2jserver.gameserver.network.serverpackets.CharInfo;
 import com.l2jserver.gameserver.network.serverpackets.CharInfo;
 import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
 import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
 import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
 import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
 import com.l2jserver.gameserver.network.serverpackets.RelationChanged;
 import com.l2jserver.gameserver.network.serverpackets.RelationChanged;
 
 
-import gnu.trove.procedure.TObjectProcedure;
-
 /**
 /**
  * This class ...
  * This class ...
  * @version $Revision: 1.2 $ $Date: 2004/06/27 08:12:59 $
  * @version $Revision: 1.2 $ $Date: 2004/06/27 08:12:59 $
@@ -209,7 +208,7 @@ public final class Broadcast
 		L2World.getInstance().forEachPlayer(new ForEachPlayerInInstanceBroadcast(mov, instanceId));
 		L2World.getInstance().forEachPlayer(new ForEachPlayerInInstanceBroadcast(mov, instanceId));
 	}
 	}
 	
 	
-	private static final class ForEachPlayerBroadcast implements TObjectProcedure<L2PcInstance>
+	private static final class ForEachPlayerBroadcast implements IL2Procedure<L2PcInstance>
 	{
 	{
 		L2GameServerPacket _packet;
 		L2GameServerPacket _packet;
 		
 		
@@ -229,10 +228,10 @@ public final class Broadcast
 		}
 		}
 	}
 	}
 	
 	
-	private static final class ForEachPlayerInInstanceBroadcast implements TObjectProcedure<L2PcInstance>
+	private static final class ForEachPlayerInInstanceBroadcast implements IL2Procedure<L2PcInstance>
 	{
 	{
-		L2GameServerPacket _packet;
-		int _instanceId;
+		private final L2GameServerPacket _packet;
+		private final int _instanceId;
 		
 		
 		protected ForEachPlayerInInstanceBroadcast(L2GameServerPacket packet, int instanceId)
 		protected ForEachPlayerInInstanceBroadcast(L2GameServerPacket packet, int instanceId)
 		{
 		{

+ 0 - 436
L2J_Server_BETA/java/com/l2jserver/gameserver/util/L2TIntObjectHashMap.java

@@ -1,436 +0,0 @@
-/*
- * Copyright (C) 2004-2013 L2J Server
- * 
- * This file is part of L2J Server.
- * 
- * L2J Server is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- * 
- * L2J Server is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-package com.l2jserver.gameserver.util;
-
-import java.util.Collection;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-import gnu.trove.function.TObjectFunction;
-import gnu.trove.map.hash.TIntObjectHashMap;
-import gnu.trove.procedure.TIntObjectProcedure;
-import gnu.trove.procedure.TIntProcedure;
-import gnu.trove.procedure.TObjectProcedure;
-
-/**
- * Custom extension of TIntObjectHashMap that is synchronized via ReentrantReadWriteLock.<br>
- * The purpose of this map is to replace the use of FastMap<K,V>.shared() which requires a lot of resources.
- * @author Nik
- * @param <V> value object.
- */
-public class L2TIntObjectHashMap<V extends Object> extends TIntObjectHashMap<V>
-{
-	private static final long serialVersionUID = 1L;
-	
-	private final Lock _readLock;
-	private final Lock _writeLock;
-	private boolean _tempLocksDisable;
-	
-	public L2TIntObjectHashMap()
-	{
-		super();
-		ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
-		_readLock = lock.readLock();
-		_writeLock = lock.writeLock();
-		_tempLocksDisable = false;
-	}
-	
-	@Override
-	public V put(int key, V value)
-	{
-		_writeLock.lock();
-		try
-		{
-			return super.put(key, value);
-		}
-		finally
-		{
-			_writeLock.unlock();
-		}
-	}
-	
-	/**
-	 * Unsynchronized operation, its free from any locks.<br>
-	 * Its useful while the readLock is taken by a thread<br>
-	 * (forEach operation for example)<br>
-	 * and you need to put something in the map without causing a deadlock<br>
-	 * by taking the writeLock before the readLock is unlocked.
-	 * @param key
-	 * @param value
-	 * @return
-	 */
-	public V unsynchronizedPut(int key, V value)
-	{
-		return super.put(key, value);
-	}
-	
-	@Override
-	public V get(int key)
-	{
-		if (!_tempLocksDisable)
-		{
-			_readLock.lock();
-		}
-		
-		try
-		{
-			return super.get(key);
-		}
-		finally
-		{
-			if (!_tempLocksDisable)
-			{
-				_readLock.unlock();
-			}
-		}
-	}
-	
-	@Override
-	public void clear()
-	{
-		if (!_tempLocksDisable)
-		{
-			_writeLock.lock();
-		}
-		try
-		{
-			super.clear();
-		}
-		finally
-		{
-			if (!_tempLocksDisable)
-			{
-				_writeLock.unlock();
-			}
-		}
-	}
-	
-	@Override
-	public V remove(int key)
-	{
-		if (!_tempLocksDisable)
-		{
-			_writeLock.lock();
-		}
-		try
-		{
-			return super.remove(key);
-		}
-		finally
-		{
-			if (!_tempLocksDisable)
-			{
-				_writeLock.unlock();
-			}
-		}
-	}
-	
-	/**
-	 * Unsynchronized operation, its free from any locks.<br>
-	 * Its useful while the readLock is taken by a thread (forEach operation for example)<br>
-	 * and you need to remove something in the map without causing a deadlock<br>
-	 * by taking the writeLock before the readLock is unlocked.
-	 * @param key
-	 * @return
-	 */
-	public V unsynchronizedRemove(int key)
-	{
-		return super.remove(key);
-	}
-	
-	@Override
-	public boolean equals(Object other)
-	{
-		_readLock.lock();
-		try
-		{
-			return super.equals(other);
-		}
-		finally
-		{
-			_readLock.unlock();
-		}
-	}
-	
-	@Override
-	public Object[] values()
-	{
-		if (!_tempLocksDisable)
-		{
-			_readLock.lock();
-		}
-		try
-		{
-			return super.values();
-		}
-		finally
-		{
-			if (!_tempLocksDisable)
-			{
-				_readLock.unlock();
-			}
-		}
-	}
-	
-	@Override
-	public V[] values(V[] arg0)
-	{
-		if (!_tempLocksDisable)
-		{
-			_readLock.lock();
-		}
-		try
-		{
-			return super.values(arg0);
-		}
-		finally
-		{
-			if (!_tempLocksDisable)
-			{
-				_readLock.unlock();
-			}
-		}
-	}
-	
-	@Override
-	public Collection<V> valueCollection()
-	{
-		_readLock.lock();
-		try
-		{
-			return super.valueCollection();
-		}
-		finally
-		{
-			_readLock.unlock();
-		}
-	}
-	
-	@Override
-	public int[] keys()
-	{
-		_readLock.lock();
-		try
-		{
-			return super.keys();
-		}
-		finally
-		{
-			_readLock.unlock();
-		}
-	}
-	
-	@Override
-	public int[] keys(int[] arg0)
-	{
-		_readLock.lock();
-		try
-		{
-			return super.keys(arg0);
-		}
-		finally
-		{
-			_readLock.unlock();
-		}
-	}
-	
-	@Override
-	public boolean contains(int val)
-	{
-		_readLock.lock();
-		try
-		{
-			return super.contains(val);
-		}
-		finally
-		{
-			_readLock.unlock();
-		}
-	}
-	
-	@Override
-	public boolean containsValue(Object arg0)
-	{
-		_readLock.lock();
-		try
-		{
-			return super.containsValue(arg0);
-		}
-		finally
-		{
-			_readLock.unlock();
-		}
-	}
-	
-	@Override
-	public boolean containsKey(int key)
-	{
-		_readLock.lock();
-		try
-		{
-			return super.containsKey(key);
-		}
-		finally
-		{
-			_readLock.unlock();
-		}
-	}
-	
-	@Override
-	public boolean forEachKey(TIntProcedure procedure)
-	{
-		_readLock.lock();
-		try
-		{
-			return super.forEachKey(procedure);
-		}
-		finally
-		{
-			_readLock.unlock();
-		}
-	}
-	
-	/**
-	 * A safe from deadlock loop.<br>
-	 * put and remove synchronizers are disabled while this loop is running.<br>
-	 * Keep in mind that this uses writeLock instead of readLock,<br>
-	 * and its intended only if you are trying to put/remove something while looping<br>
-	 * the values of this map.
-	 * @param procedure
-	 * @return
-	 */
-	public boolean safeForEachKey(TIntProcedure procedure)
-	{
-		_writeLock.lock();
-		try
-		{
-			_tempLocksDisable = true;
-			return super.forEachKey(procedure);
-		}
-		finally
-		{
-			_tempLocksDisable = false;
-			_writeLock.unlock();
-		}
-	}
-	
-	@Override
-	public boolean forEachValue(TObjectProcedure<? super V> arg0)
-	{
-		_readLock.lock();
-		try
-		{
-			return super.forEachValue(arg0);
-		}
-		finally
-		{
-			_readLock.unlock();
-		}
-	}
-	
-	/**
-	 * A safe from deadlock loop.<br>
-	 * put and remove synchronizers are disabled while this loop is running.<br>
-	 * Keep in mind that this uses writeLock instead of readLock,<br>
-	 * and its intended only if you are trying to put/remove something while looping<br>
-	 * the values of this map.
-	 * @param arg0
-	 * @return
-	 */
-	public boolean safeForEachValue(TObjectProcedure<V> arg0)
-	{
-		_writeLock.lock();
-		try
-		{
-			_tempLocksDisable = true;
-			return super.forEachValue(arg0);
-		}
-		finally
-		{
-			_tempLocksDisable = false;
-			_writeLock.unlock();
-		}
-	}
-	
-	@Override
-	public boolean forEachEntry(TIntObjectProcedure<? super V> arg0)
-	{
-		_readLock.lock();
-		try
-		{
-			return super.forEachEntry(arg0);
-		}
-		finally
-		{
-			_readLock.unlock();
-		}
-	}
-	
-	/**
-	 * A safe from deadlock loop.<br>
-	 * put and remove synchronizers are disabled while this loop is running.<br>
-	 * Keep in mind that this uses writeLock instead of readLock, <br>
-	 * and its intended only if you are trying to put/remove something while looping<br>
-	 * the values of this map.
-	 * @param arg0
-	 * @return
-	 */
-	public boolean safeForEachEntry(TIntObjectProcedure<V> arg0)
-	{
-		_writeLock.lock();
-		try
-		{
-			_tempLocksDisable = true;
-			return super.forEachEntry(arg0);
-		}
-		finally
-		{
-			_tempLocksDisable = false;
-			_writeLock.unlock();
-		}
-	}
-	
-	@Override
-	public boolean retainEntries(TIntObjectProcedure<? super V> arg0)
-	{
-		_writeLock.lock();
-		try
-		{
-			return super.retainEntries(arg0);
-		}
-		finally
-		{
-			_writeLock.unlock();
-		}
-	}
-	
-	@Override
-	public void transformValues(TObjectFunction<V, V> arg0)
-	{
-		_writeLock.lock();
-		try
-		{
-			super.transformValues(arg0);
-		}
-		finally
-		{
-			_writeLock.unlock();
-		}
-	}
-}