Kaynağa Gözat

BETA: Clean up.
* Removed `IProcedure` class and replaced it with `Function` from Java 8.
* Replaced some classes with lambdas.
* Removed useless '''forEach''' methods where it was possible to call `Collection#forEach`.

Reviewed by: !UnAfraid

Nos 11 yıl önce
ebeveyn
işleme
432d947d42
18 değiştirilmiş dosya ile 173 ekleme ve 488 silme
  1. 31 77
      L2J_Server_BETA/java/com/l2jserver/gameserver/SevenSigns.java
  2. 8 23
      L2J_Server_BETA/java/com/l2jserver/gameserver/SevenSignsFestival.java
  3. 13 26
      L2J_Server_BETA/java/com/l2jserver/gameserver/Shutdown.java
  4. 4 4
      L2J_Server_BETA/java/com/l2jserver/gameserver/datatables/SpawnTable.java
  5. 17 35
      L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/BoatManager.java
  6. 14 26
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/AbstractPlayerGroup.java
  7. 8 8
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/CharEffectList.java
  8. 4 4
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2CommandChannel.java
  9. 0 13
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2World.java
  10. 4 23
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2SepulcherNpcInstance.java
  11. 1 19
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/Fort.java
  12. 39 75
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/Instance.java
  13. 0 35
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/interfaces/IProcedure.java
  14. 4 19
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestStartPledgeWar.java
  15. 4 19
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestStopPledgeWar.java
  16. 13 44
      L2J_Server_BETA/java/com/l2jserver/gameserver/util/Broadcast.java
  17. 8 8
      L2J_Server_BETA/java/com/l2jserver/gameserver/util/HtmlUtil.java
  18. 1 30
      L2J_Server_BETA/java/com/l2jserver/util/L2FastList.java

+ 31 - 77
L2J_Server_BETA/java/com/l2jserver/gameserver/SevenSigns.java

@@ -42,7 +42,6 @@ import com.l2jserver.gameserver.model.StatsSet;
 import com.l2jserver.gameserver.model.TeleportWhereType;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.Castle;
-import com.l2jserver.gameserver.model.interfaces.IProcedure;
 import com.l2jserver.gameserver.model.skills.CommonSkill;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.SSQInfo;
@@ -1429,46 +1428,28 @@ public class SevenSigns
 	 */
 	protected void teleLosingCabalFromDungeons(String compWinner)
 	{
-		L2World.getInstance().forEachPlayer(new TeleLosingCabalFromDungeons(compWinner));
-	}
-	
-	private final class TeleLosingCabalFromDungeons implements IProcedure<L2PcInstance, Boolean>
-	{
-		private final String _cmpWinner;
-		
-		protected TeleLosingCabalFromDungeons(final String compWinner)
+		for (L2PcInstance player : L2World.getInstance().getPlayers())
 		{
-			_cmpWinner = compWinner;
-		}
-		
-		@Override
-		public final Boolean execute(final L2PcInstance onlinePlayer)
-		{
-			if (onlinePlayer != null)
+			StatsSet currPlayer = _signsPlayerData.get(player.getObjectId());
+			
+			if (isSealValidationPeriod() || isCompResultsPeriod())
 			{
-				StatsSet currPlayer = _signsPlayerData.get(onlinePlayer.getObjectId());
-				
-				if (isSealValidationPeriod() || isCompResultsPeriod())
+				if (!player.isGM() && player.isIn7sDungeon() && ((currPlayer == null) || !currPlayer.getString("cabal").equals(compWinner)))
 				{
-					if (!onlinePlayer.isGM() && onlinePlayer.isIn7sDungeon() && ((currPlayer == null) || !currPlayer.getString("cabal").equals(_cmpWinner)))
-					{
-						onlinePlayer.teleToLocation(TeleportWhereType.TOWN);
-						onlinePlayer.setIsIn7sDungeon(false);
-						onlinePlayer.sendMessage("You have been teleported to the nearest town due to the beginning of the Seal Validation period.");
-					}
+					player.teleToLocation(TeleportWhereType.TOWN);
+					player.setIsIn7sDungeon(false);
+					player.sendMessage("You have been teleported to the nearest town due to the beginning of the Seal Validation period.");
 				}
-				else
+			}
+			else
+			{
+				if (!player.isGM() && player.isIn7sDungeon() && ((currPlayer == null) || !currPlayer.getString("cabal").isEmpty()))
 				{
-					if (!onlinePlayer.isGM() && onlinePlayer.isIn7sDungeon() && ((currPlayer == null) || !currPlayer.getString("cabal").isEmpty()))
-					{
-						onlinePlayer.teleToLocation(TeleportWhereType.TOWN);
-						onlinePlayer.setIsIn7sDungeon(false);
-						onlinePlayer.sendMessage("You have been teleported to the nearest town because you have not signed for any cabal.");
-					}
+					player.teleToLocation(TeleportWhereType.TOWN);
+					player.setIsIn7sDungeon(false);
+					player.sendMessage("You have been teleported to the nearest town because you have not signed for any cabal.");
 				}
 			}
-			
-			return true;
 		}
 	}
 	
@@ -1646,61 +1627,34 @@ public class SevenSigns
 		return false;
 	}
 	
-	public void giveCPMult(int StrifeOwner)
+	public void giveCPMult(int strifeOwner)
 	{
-		L2World.getInstance().forEachPlayer(new GiveCPMult(StrifeOwner));
-	}
-	
-	private final class GiveCPMult implements IProcedure<L2PcInstance, Boolean>
-	{
-		private final int _strifeOwner;
-		
-		protected GiveCPMult(int strifeOwner)
-		{
-			_strifeOwner = strifeOwner;
-		}
-		
-		@Override
-		public final Boolean execute(final L2PcInstance character)
+		for (L2PcInstance player : L2World.getInstance().getPlayers())
 		{
-			if (character != null)
+			// Gives "Victor of War" passive skill to all online characters with Cabal, which controls Seal of Strife
+			int cabal = getPlayerCabal(player.getObjectId());
+			if (cabal != SevenSigns.CABAL_NULL)
 			{
-				// Gives "Victor of War" passive skill to all online characters with Cabal, which controls Seal of Strife
-				int cabal = getPlayerCabal(character.getObjectId());
-				if (cabal != SevenSigns.CABAL_NULL)
+				if (cabal == strifeOwner)
 				{
-					if (cabal == _strifeOwner)
-					{
-						character.addSkill(CommonSkill.THE_VICTOR_OF_WAR.getSkill());
-					}
-					else
-					{
-						// Gives "The Vanquished of War" passive skill to all online characters with Cabal, which does not control Seal of Strife
-						character.addSkill(CommonSkill.THE_VANQUISHED_OF_WAR.getSkill());
-					}
+					player.addSkill(CommonSkill.THE_VICTOR_OF_WAR.getSkill());
+				}
+				else
+				{
+					// Gives "The Vanquished of War" passive skill to all online characters with Cabal, which does not control Seal of Strife
+					player.addSkill(CommonSkill.THE_VANQUISHED_OF_WAR.getSkill());
 				}
 			}
-			return true;
 		}
 	}
 	
 	public void removeCPMult()
 	{
-		L2World.getInstance().forEachPlayer(new RemoveCPMult());
-	}
-	
-	protected final class RemoveCPMult implements IProcedure<L2PcInstance, Boolean>
-	{
-		@Override
-		public final Boolean execute(final L2PcInstance character)
+		// Remove SevenSigns' buffs/debuffs.
+		for (L2PcInstance player : L2World.getInstance().getPlayers())
 		{
-			if (character != null)
-			{
-				// Remove SevenSigns' buffs/debuffs.
-				character.removeSkill(CommonSkill.THE_VICTOR_OF_WAR.getSkill());
-				character.removeSkill(CommonSkill.THE_VANQUISHED_OF_WAR.getSkill());
-			}
-			return true;
+			player.removeSkill(CommonSkill.THE_VICTOR_OF_WAR.getSkill());
+			player.removeSkill(CommonSkill.THE_VANQUISHED_OF_WAR.getSkill());
 		}
 	}
 	

+ 8 - 23
L2J_Server_BETA/java/com/l2jserver/gameserver/SevenSignsFestival.java

@@ -54,7 +54,6 @@ import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2FestivalMonsterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
-import com.l2jserver.gameserver.model.interfaces.IProcedure;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.network.NpcStringId;
 import com.l2jserver.gameserver.network.SystemMessageId;
@@ -1236,7 +1235,14 @@ public class SevenSignsFestival implements SpawnListener
 		saveFestivalData(updateSettings);
 		
 		// Remove any unused blood offerings from online players.
-		L2World.getInstance().forEachPlayer(new ForEachPlayerRemoveUnusedBloodOfferings());
+		for (L2PcInstance player : L2World.getInstance().getPlayers())
+		{
+			final L2ItemInstance bloodOfferings = player.getInventory().getItemByItemId(FESTIVAL_OFFERING_ID);
+			if (bloodOfferings != null)
+			{
+				player.destroyItem("SevenSigns", bloodOfferings, null, false);
+			}
+		}
 		
 		_log.info("SevenSignsFestival: Reinitialized engine for next competition period.");
 	}
@@ -2471,27 +2477,6 @@ public class SevenSignsFestival implements SpawnListener
 		}
 	}
 	
-	protected final class ForEachPlayerRemoveUnusedBloodOfferings implements IProcedure<L2PcInstance, Boolean>
-	{
-		@Override
-		public final Boolean execute(final L2PcInstance onlinePlayer)
-		{
-			try
-			{
-				L2ItemInstance bloodOfferings = onlinePlayer.getInventory().getItemByItemId(FESTIVAL_OFFERING_ID);
-				
-				if (bloodOfferings != null)
-				{
-					onlinePlayer.destroyItem("SevenSigns", bloodOfferings, null, false);
-				}
-			}
-			catch (NullPointerException e)
-			{
-			}
-			return true;
-		}
-	}
-	
 	private static class SingletonHolder
 	{
 		protected static final SevenSignsFestival _instance = new SevenSignsFestival();

+ 13 - 26
L2J_Server_BETA/java/com/l2jserver/gameserver/Shutdown.java

@@ -39,7 +39,6 @@ import com.l2jserver.gameserver.instancemanager.RaidBossSpawnManager;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.Hero;
-import com.l2jserver.gameserver.model.interfaces.IProcedure;
 import com.l2jserver.gameserver.model.olympiad.Olympiad;
 import com.l2jserver.gameserver.network.L2GameClient;
 import com.l2jserver.gameserver.network.SystemMessageId;
@@ -596,36 +595,24 @@ public class Shutdown extends Thread
 	 */
 	private void disconnectAllCharacters()
 	{
-		L2World.getInstance().forEachPlayer(new DisconnectAllCharacters());
-	}
-	
-	protected final class DisconnectAllCharacters implements IProcedure<L2PcInstance, Boolean>
-	{
-		private final Logger _log = Logger.getLogger(DisconnectAllCharacters.class.getName());
-		
-		@Override
-		public final Boolean execute(final L2PcInstance player)
+		for (L2PcInstance player : L2World.getInstance().getPlayers())
 		{
-			if (player != null)
+			// Logout Character
+			try
 			{
-				// Logout Character
-				try
+				L2GameClient client = player.getClient();
+				if ((client != null) && !client.isDetached())
 				{
-					L2GameClient client = player.getClient();
-					if ((client != null) && !client.isDetached())
-					{
-						client.close(ServerClose.STATIC_PACKET);
-						client.setActiveChar(null);
-						player.setClient(null);
-					}
-					player.deleteMe();
-				}
-				catch (Throwable t)
-				{
-					_log.log(Level.WARNING, "Failed logour char " + player, t);
+					client.close(ServerClose.STATIC_PACKET);
+					client.setActiveChar(null);
+					player.setClient(null);
 				}
+				player.deleteMe();
+			}
+			catch (Throwable t)
+			{
+				_log.log(Level.WARNING, "Failed logour char " + player, t);
 			}
-			return true;
 		}
 	}
 	

+ 4 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/datatables/SpawnTable.java

@@ -26,6 +26,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
+import java.util.function.Function;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -43,7 +44,6 @@ import com.l2jserver.gameserver.instancemanager.ZoneManager;
 import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.StatsSet;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
-import com.l2jserver.gameserver.model.interfaces.IProcedure;
 
 /**
  * Spawn data retriever.
@@ -494,16 +494,16 @@ public final class SpawnTable extends DocumentParser
 	/**
 	 * Execute a procedure over all spawns.<br>
 	 * <font size="4" color="red">Do not use it!</font>
-	 * @param procedure the procedure to execute
+	 * @param function the function to execute
 	 * @return {@code true} if all procedures were executed, {@code false} otherwise
 	 */
-	public boolean forEachSpawn(IProcedure<L2Spawn, Boolean> procedure)
+	public boolean forEachSpawn(Function<L2Spawn, Boolean> function)
 	{
 		for (Set<L2Spawn> set : _spawnTable.values())
 		{
 			for (L2Spawn spawn : set)
 			{
-				if (!procedure.execute(spawn))
+				if (!function.apply(spawn))
 				{
 					return false;
 				}

+ 17 - 35
L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/BoatManager.java

@@ -30,7 +30,6 @@ import com.l2jserver.gameserver.model.VehiclePathPoint;
 import com.l2jserver.gameserver.model.actor.instance.L2BoatInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.templates.L2CharTemplate;
-import com.l2jserver.gameserver.model.interfaces.IProcedure;
 import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
 
 public class BoatManager
@@ -164,8 +163,7 @@ public class BoatManager
 	 */
 	public void broadcastPacket(VehiclePathPoint point1, VehiclePathPoint point2, L2GameServerPacket packet)
 	{
-		
-		L2World.getInstance().forEachPlayer(new ForEachPlayerBroadcastPackets(point1, point2, packet));
+		broadcastPacketsToPlayers(point1, point2, packet);
 	}
 	
 	/**
@@ -176,50 +174,34 @@ public class BoatManager
 	 */
 	public void broadcastPackets(VehiclePathPoint point1, VehiclePathPoint point2, L2GameServerPacket... packets)
 	{
-		L2World.getInstance().forEachPlayer(new ForEachPlayerBroadcastPackets(point1, point2, packets));
+		broadcastPacketsToPlayers(point1, point2, packets);
 	}
 	
-	private final class ForEachPlayerBroadcastPackets implements IProcedure<L2PcInstance, Boolean>
+	private void broadcastPacketsToPlayers(VehiclePathPoint point1, VehiclePathPoint point2, L2GameServerPacket... packets)
 	{
-		VehiclePathPoint _point1, _point2;
-		L2GameServerPacket[] _packets;
-		
-		protected ForEachPlayerBroadcastPackets(VehiclePathPoint point1, VehiclePathPoint point2, L2GameServerPacket... packets)
+		for (L2PcInstance player : L2World.getInstance().getPlayers())
 		{
-			_point1 = point1;
-			_point2 = point2;
-			_packets = packets;
-		}
-		
-		@Override
-		public final Boolean execute(final L2PcInstance player)
-		{
-			if (player != null)
+			double dx = (double) player.getX() - point1.getX();
+			double dy = (double) player.getY() - point1.getY();
+			if (Math.sqrt((dx * dx) + (dy * dy)) < Config.BOAT_BROADCAST_RADIUS)
 			{
-				double dx = (double) player.getX() - _point1.getX();
-				double dy = (double) player.getY() - _point1.getY();
-				if (Math.sqrt((dx * dx) + (dy * dy)) < Config.BOAT_BROADCAST_RADIUS)
+				for (L2GameServerPacket p : packets)
 				{
-					for (L2GameServerPacket p : _packets)
-					{
-						player.sendPacket(p);
-					}
+					player.sendPacket(p);
 				}
-				else
+			}
+			else
+			{
+				dx = (double) player.getX() - point2.getX();
+				dy = (double) player.getY() - point2.getY();
+				if (Math.sqrt((dx * dx) + (dy * dy)) < Config.BOAT_BROADCAST_RADIUS)
 				{
-					dx = (double) player.getX() - _point2.getX();
-					dy = (double) player.getY() - _point2.getY();
-					if (Math.sqrt((dx * dx) + (dy * dy)) < Config.BOAT_BROADCAST_RADIUS)
+					for (L2GameServerPacket p : packets)
 					{
-						for (L2GameServerPacket p : _packets)
-						{
-							player.sendPacket(p);
-						}
+						player.sendPacket(p);
 					}
 				}
 			}
-			
-			return true;
 		}
 	}
 	

+ 14 - 26
L2J_Server_BETA/java/com/l2jserver/gameserver/model/AbstractPlayerGroup.java

@@ -20,9 +20,9 @@ package com.l2jserver.gameserver.model;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.function.Function;
 
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.interfaces.IProcedure;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
 import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
@@ -45,14 +45,10 @@ public abstract class AbstractPlayerGroup
 	public List<Integer> getMembersObjectId()
 	{
 		final List<Integer> ids = new ArrayList<>();
-		forEachMember(new IProcedure<L2PcInstance, Boolean>()
+		forEachMember(m ->
 		{
-			@Override
-			public Boolean execute(L2PcInstance member)
-			{
-				ids.add(member.getObjectId());
-				return true;
-			}
+			ids.add(m.getObjectId());
+			return true;
 		});
 		return ids;
 	}
@@ -105,17 +101,13 @@ public abstract class AbstractPlayerGroup
 	 */
 	public void broadcastPacket(final L2GameServerPacket packet)
 	{
-		forEachMember(new IProcedure<L2PcInstance, Boolean>()
+		forEachMember(m ->
 		{
-			@Override
-			public Boolean execute(L2PcInstance member)
+			if (m != null)
 			{
-				if (member != null)
-				{
-					member.sendPacket(packet);
-				}
-				return true;
+				m.sendPacket(packet);
 			}
+			return true;
 		});
 	}
 	
@@ -139,17 +131,13 @@ public abstract class AbstractPlayerGroup
 	
 	public void broadcastCreatureSay(final CreatureSay msg, final L2PcInstance broadcaster)
 	{
-		forEachMember(new IProcedure<L2PcInstance, Boolean>()
+		forEachMember(m ->
 		{
-			@Override
-			public Boolean execute(L2PcInstance member)
+			if ((m != null) && !BlockList.isBlocked(m, broadcaster))
 			{
-				if ((member != null) && !BlockList.isBlocked(member, broadcaster))
-				{
-					member.sendPacket(msg);
-				}
-				return true;
+				m.sendPacket(msg);
 			}
+			return true;
 		});
 	}
 	
@@ -177,11 +165,11 @@ public abstract class AbstractPlayerGroup
 	 *            If executing the procedure on a member returns {@code true}, the loop continues to the next member, otherwise it breaks the loop
 	 * @return {@code true} if the procedure executed correctly, {@code false} if the loop was broken prematurely
 	 */
-	public boolean forEachMember(IProcedure<L2PcInstance, Boolean> procedure)
+	public boolean forEachMember(Function<L2PcInstance, Boolean> procedure)
 	{
 		for (L2PcInstance player : getMembers())
 		{
-			if (!procedure.execute(player))
+			if (!procedure.apply(player))
 			{
 				return false;
 			}

+ 8 - 8
L2J_Server_BETA/java/com/l2jserver/gameserver/model/CharEffectList.java

@@ -27,6 +27,7 @@ import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArraySet;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.Function;
 import java.util.logging.Logger;
 
 import javolution.util.FastMap;
@@ -38,7 +39,6 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.effects.AbstractEffect;
 import com.l2jserver.gameserver.model.effects.EffectFlag;
 import com.l2jserver.gameserver.model.effects.L2EffectType;
-import com.l2jserver.gameserver.model.interfaces.IProcedure;
 import com.l2jserver.gameserver.model.olympiad.OlympiadGameManager;
 import com.l2jserver.gameserver.model.olympiad.OlympiadGameTask;
 import com.l2jserver.gameserver.model.skills.AbnormalType;
@@ -1284,17 +1284,17 @@ public final class CharEffectList
 	/**
 	 * Executes a procedure for all effects.<br>
 	 * Prevents initialization.
-	 * @param procedure the procedure to execute
+	 * @param function the function to execute
 	 * @param dances if {@code true} dances/songs will be included
 	 * @return {@code true} if the procedure is executed successfully for every element, {@code false} otherwise
 	 */
-	public boolean forEach(IProcedure<BuffInfo, Boolean> procedure, boolean dances)
+	public boolean forEach(Function<BuffInfo, Boolean> function, boolean dances)
 	{
 		if (hasBuffs())
 		{
 			for (BuffInfo info : getBuffs().values())
 			{
-				if (!procedure.execute(info))
+				if (!function.apply(info))
 				{
 					return false;
 				}
@@ -1305,7 +1305,7 @@ public final class CharEffectList
 		{
 			for (BuffInfo info : getTriggered().values())
 			{
-				if (!procedure.execute(info))
+				if (!function.apply(info))
 				{
 					return false;
 				}
@@ -1316,7 +1316,7 @@ public final class CharEffectList
 		{
 			for (BuffInfo info : getDances().values())
 			{
-				if (!procedure.execute(info))
+				if (!function.apply(info))
 				{
 					return false;
 				}
@@ -1327,7 +1327,7 @@ public final class CharEffectList
 		{
 			for (BuffInfo info : getToggles().values())
 			{
-				if (!procedure.execute(info))
+				if (!function.apply(info))
 				{
 					return false;
 				}
@@ -1338,7 +1338,7 @@ public final class CharEffectList
 		{
 			for (BuffInfo info : getDebuffs().values())
 			{
-				if (!procedure.execute(info))
+				if (!function.apply(info))
 				{
 					return false;
 				}

+ 4 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2CommandChannel.java

@@ -19,13 +19,13 @@
 package com.l2jserver.gameserver.model;
 
 import java.util.List;
+import java.util.function.Function;
 
 import javolution.util.FastList;
 
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.interfaces.IProcedure;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ExCloseMPCC;
 import com.l2jserver.gameserver.network.serverpackets.ExMPCCPartyInfoUpdate;
@@ -236,16 +236,16 @@ public class L2CommandChannel extends AbstractPlayerGroup
 	
 	/**
 	 * Iterates over all command channel members without the need to allocate a new list
-	 * @see com.l2jserver.gameserver.model.AbstractPlayerGroup#forEachMember(IProcedure)
+	 * @see com.l2jserver.gameserver.model.AbstractPlayerGroup#forEachMember(Function)
 	 */
 	@Override
-	public boolean forEachMember(IProcedure<L2PcInstance, Boolean> procedure)
+	public boolean forEachMember(Function<L2PcInstance, Boolean> function)
 	{
 		if ((_parties != null) && !_parties.isEmpty())
 		{
 			for (L2Party party : _parties)
 			{
-				if (!party.forEachMember(procedure))
+				if (!party.forEachMember(function))
 				{
 					return false;
 				}

+ 0 - 13
L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2World.java

@@ -34,7 +34,6 @@ import com.l2jserver.gameserver.datatables.CharNameTable;
 import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
-import com.l2jserver.gameserver.model.interfaces.IProcedure;
 import com.l2jserver.util.StringUtil;
 
 public final class L2World
@@ -178,18 +177,6 @@ public final class L2World
 		return players;
 	}
 	
-	public boolean forEachPlayer(IProcedure<L2PcInstance, Boolean> procedure)
-	{
-		for (L2PcInstance player : _allPlayers.values())
-		{
-			if (!procedure.execute(player))
-			{
-				return false;
-			}
-		}
-		return true;
-	}
-	
 	/**
 	 * Return how many players are online.
 	 * @return number of online players.

+ 4 - 23
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2SepulcherNpcInstance.java

@@ -31,7 +31,6 @@ import com.l2jserver.gameserver.instancemanager.FourSepulchersManager;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
-import com.l2jserver.gameserver.model.interfaces.IProcedure;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.network.NpcStringId;
@@ -437,31 +436,13 @@ public class L2SepulcherNpcInstance extends L2Npc
 			return;// wrong usage
 		}
 		
-		L2World.getInstance().forEachPlayer(new SayInShout(this, new CreatureSay(0, Say2.NPC_SHOUT, getName(), msg)));
-	}
-	
-	private final class SayInShout implements IProcedure<L2PcInstance, Boolean>
-	{
-		L2SepulcherNpcInstance _npc;
-		CreatureSay _sm;
-		
-		protected SayInShout(L2SepulcherNpcInstance npc, CreatureSay sm)
-		{
-			_npc = npc;
-			_sm = sm;
-		}
-		
-		@Override
-		public final Boolean execute(final L2PcInstance player)
+		final CreatureSay creatureSay = new CreatureSay(0, Say2.NPC_SHOUT, getName(), msg);
+		for (L2PcInstance player : L2World.getInstance().getPlayers())
 		{
-			if (player != null)
+			if (Util.checkIfInRange(15000, player, this, true))
 			{
-				if (Util.checkIfInRange(15000, player, _npc, true))
-				{
-					player.sendPacket(_sm);
-				}
+				player.sendPacket(creatureSay);
 			}
-			return true;
 		}
 	}
 	

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

@@ -58,7 +58,6 @@ import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2StaticObjectInstance;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
-import com.l2jserver.gameserver.model.interfaces.IProcedure;
 import com.l2jserver.gameserver.model.itemcontainer.Inventory;
 import com.l2jserver.gameserver.model.zone.type.L2FortZone;
 import com.l2jserver.gameserver.model.zone.type.L2SiegeZone;
@@ -839,7 +838,7 @@ public final class Fort extends AbstractResidence
 				sm = SystemMessage.getSystemMessage(SystemMessageId.S1_CLAN_IS_VICTORIOUS_IN_THE_FORTRESS_BATTLE_OF_S2);
 				sm.addString(clan.getName());
 				sm.addCastleId(getResidenceId());
-				L2World.getInstance().forEachPlayer(new ForEachPlayerSendMessage(sm));
+				L2World.getInstance().getPlayers().forEach(p -> p.sendPacket(sm));
 				clan.broadcastToOnlineMembers(new PledgeShowInfoUpdate(clan));
 				clan.broadcastToOnlineMembers(new PlaySound(1, "Siege_Victory", 0, 0, 0, 0, 0));
 				if (_FortUpdater[0] != null)
@@ -1328,23 +1327,6 @@ public final class Fort extends AbstractResidence
 		}
 	}
 	
-	private final class ForEachPlayerSendMessage implements IProcedure<L2PcInstance, Boolean>
-	{
-		SystemMessage _sm;
-		
-		protected ForEachPlayerSendMessage(SystemMessage sm)
-		{
-			_sm = sm;
-		}
-		
-		@Override
-		public final Boolean execute(final L2PcInstance character)
-		{
-			character.sendPacket(_sm);
-			return true;
-		}
-	}
-	
 	@Override
 	protected void initResidenceZone()
 	{

+ 39 - 75
L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/Instance.java

@@ -59,11 +59,9 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.templates.L2DoorTemplate;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
 import com.l2jserver.gameserver.model.instancezone.InstanceWorld;
-import com.l2jserver.gameserver.model.interfaces.IProcedure;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.clientpackets.Say2;
 import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
-import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.util.L2FastList;
 
@@ -338,7 +336,22 @@ public final class Instance
 	
 	public void removePlayers()
 	{
-		_players.executeForEach(new EjectProcedure());
+		for (Integer objectId : _players)
+		{
+			final L2PcInstance player = L2World.getInstance().getPlayer(objectId);
+			if ((player != null) && (player.getInstanceId() == getId()))
+			{
+				player.setInstanceId(0);
+				if (getSpawnLoc() != null)
+				{
+					player.teleToLocation(getSpawnLoc(), true);
+				}
+				else
+				{
+					player.teleToLocation(TeleportWhereType.TOWN);
+				}
+			}
+		}
 		_players.clear();
 	}
 	
@@ -720,7 +733,14 @@ public final class Instance
 		}
 		if (cs != null)
 		{
-			_players.executeForEach(new BroadcastPacket(cs));
+			for (Integer objectId : _players)
+			{
+				final L2PcInstance player = L2World.getInstance().getPlayer(objectId);
+				if ((player != null) && (player.getInstanceId() == getId()))
+				{
+					player.sendPacket(cs);
+				}
+			}
 		}
 		cancelTimer();
 		if (remaining >= 10000)
@@ -757,7 +777,21 @@ public final class Instance
 	{
 		if ((player != null))
 		{
-			_ejectDeadTasks.put(player.getObjectId(), ThreadPoolManager.getInstance().scheduleGeneral(new EjectPlayer(player), _ejectTime));
+			_ejectDeadTasks.put(player.getObjectId(), ThreadPoolManager.getInstance().scheduleGeneral(() ->
+			{
+				if (player.isDead() && (player.getInstanceId() == getId()))
+				{
+					player.setInstanceId(0);
+					if (getSpawnLoc() != null)
+					{
+						player.teleToLocation(getSpawnLoc(), true);
+					}
+					else
+					{
+						player.teleToLocation(TeleportWhereType.TOWN);
+					}
+				}
+			}, _ejectTime));
 		}
 	}
 	
@@ -798,74 +832,4 @@ public final class Instance
 			InstanceManager.getInstance().destroyInstance(getId());
 		}
 	}
-	
-	protected class EjectPlayer implements Runnable
-	{
-		private final L2PcInstance _player;
-		
-		public EjectPlayer(L2PcInstance player)
-		{
-			_player = player;
-		}
-		
-		@Override
-		public void run()
-		{
-			if ((_player != null) && _player.isDead() && (_player.getInstanceId() == getId()))
-			{
-				_player.setInstanceId(0);
-				if (getSpawnLoc() != null)
-				{
-					_player.teleToLocation(getSpawnLoc(), true);
-				}
-				else
-				{
-					_player.teleToLocation(TeleportWhereType.TOWN);
-				}
-			}
-		}
-	}
-	
-	public final class EjectProcedure implements IProcedure<Integer, Boolean>
-	{
-		@Override
-		public Boolean execute(Integer objectId)
-		{
-			final L2PcInstance player = L2World.getInstance().getPlayer(objectId);
-			if ((player != null) && (player.getInstanceId() == getId()))
-			{
-				player.setInstanceId(0);
-				if (getSpawnLoc() != null)
-				{
-					player.teleToLocation(getSpawnLoc(), true);
-				}
-				else
-				{
-					player.teleToLocation(TeleportWhereType.TOWN);
-				}
-			}
-			return true;
-		}
-	}
-	
-	public final class BroadcastPacket implements IProcedure<Integer, Boolean>
-	{
-		private final L2GameServerPacket _packet;
-		
-		public BroadcastPacket(L2GameServerPacket packet)
-		{
-			_packet = packet;
-		}
-		
-		@Override
-		public Boolean execute(Integer objectId)
-		{
-			final L2PcInstance player = L2World.getInstance().getPlayer(objectId);
-			if ((player != null) && (player.getInstanceId() == getId()))
-			{
-				player.sendPacket(_packet);
-			}
-			return true;
-		}
-	}
 }

+ 0 - 35
L2J_Server_BETA/java/com/l2jserver/gameserver/model/interfaces/IProcedure.java

@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2004-2014 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.model.interfaces;
-
-/**
- * Interface for procedures with one Object parameter.
- * @author Battlecruiser
- * @param <T> the type of object on which the procedure will be executed
- * @param <R> the return type
- */
-public interface IProcedure<T, R>
-{
-	/**
-	 * Executes this procedure. A false return value indicates that the application executing this procedure should not invoke this procedure again.
-	 * @param arg the object on which the procedure will be executed
-	 * @return {@code true} if additional invocations of the procedure are allowed.
-	 */
-	public R execute(T arg);
-}

+ 4 - 19
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestStartPledgeWar.java

@@ -22,9 +22,7 @@ import com.l2jserver.Config;
 import com.l2jserver.gameserver.datatables.ClanTable;
 import com.l2jserver.gameserver.model.ClanPrivilege;
 import com.l2jserver.gameserver.model.L2Clan;
-import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.interfaces.IProcedure;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
@@ -143,28 +141,15 @@ public final class RequestStartPledgeWar extends L2GameClientPacket
 		// leader.sendPacket(new StartPledgeWar(_clan.getName(),player.getName()));
 		
 		ClanTable.getInstance().storeclanswars(player.getClanId(), clan.getId());
-		L2World.getInstance().forEachPlayer(new ForEachPlayerBroadcastUserInfo(player, clan));
-	}
-	
-	private final class ForEachPlayerBroadcastUserInfo implements IProcedure<L2PcInstance, Boolean>
-	{
-		private final L2Clan _cln;
-		private final L2PcInstance _ply;
 		
-		protected ForEachPlayerBroadcastUserInfo(L2PcInstance player, L2Clan clan)
+		for (L2PcInstance member : _clan.getOnlineMembers(0))
 		{
-			_ply = player;
-			_cln = clan;
+			member.broadcastUserInfo();
 		}
 		
-		@Override
-		public final Boolean execute(final L2PcInstance cha)
+		for (L2PcInstance member : clan.getOnlineMembers(0))
 		{
-			if ((cha.getClan() == _ply.getClan()) || (cha.getClan() == _cln))
-			{
-				cha.broadcastUserInfo();
-			}
-			return true;
+			member.broadcastUserInfo();
 		}
 	}
 	

+ 4 - 19
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestStopPledgeWar.java

@@ -22,9 +22,7 @@ import com.l2jserver.gameserver.datatables.ClanTable;
 import com.l2jserver.gameserver.model.ClanPrivilege;
 import com.l2jserver.gameserver.model.L2Clan;
 import com.l2jserver.gameserver.model.L2ClanMember;
-import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.interfaces.IProcedure;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.taskmanager.AttackStanceTaskManager;
@@ -111,28 +109,15 @@ public final class RequestStopPledgeWar extends L2GameClientPacket
 		}
 		
 		ClanTable.getInstance().deleteclanswars(playerClan.getId(), clan.getId());
-		L2World.getInstance().forEachPlayer(new ForEachPlayerBroadcastUserInfo(clan, player));
-	}
-	
-	private final class ForEachPlayerBroadcastUserInfo implements IProcedure<L2PcInstance, Boolean>
-	{
-		private final L2PcInstance _player;
-		private final L2Clan _cln;
 		
-		protected ForEachPlayerBroadcastUserInfo(L2Clan clan, L2PcInstance player)
+		for (L2PcInstance member : playerClan.getOnlineMembers(0))
 		{
-			_cln = clan;
-			_player = player;
+			member.broadcastUserInfo();
 		}
 		
-		@Override
-		public final Boolean execute(final L2PcInstance cha)
+		for (L2PcInstance member : clan.getOnlineMembers(0))
 		{
-			if ((cha.getClan() == _player.getClan()) || (cha.getClan() == _cln))
-			{
-				cha.broadcastUserInfo();
-			}
-			return true;
+			member.broadcastUserInfo();
 		}
 	}
 	

+ 13 - 44
L2J_Server_BETA/java/com/l2jserver/gameserver/util/Broadcast.java

@@ -25,7 +25,6 @@ import java.util.logging.Logger;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.interfaces.IProcedure;
 import com.l2jserver.gameserver.network.clientpackets.Say2;
 import com.l2jserver.gameserver.network.serverpackets.CharInfo;
 import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
@@ -180,11 +179,17 @@ public final class Broadcast
 	 * <B><U> Concept</U> :</B><BR>
 	 * In order to inform other players of state modification on the L2Character, server just need to go through _allPlayers to send Server->Client Packet<BR>
 	 * <FONT COLOR=#FF0000><B> <U>Caution</U> : This method DOESN'T SEND Server->Client packet to this L2Character (to do this use method toSelfAndKnownPlayers)</B></FONT><BR>
-	 * @param mov
+	 * @param packet
 	 */
-	public static void toAllOnlinePlayers(L2GameServerPacket mov)
+	public static void toAllOnlinePlayers(L2GameServerPacket packet)
 	{
-		L2World.getInstance().forEachPlayer(new ForEachPlayerBroadcast(mov));
+		for (L2PcInstance player : L2World.getInstance().getPlayers())
+		{
+			if (player.isOnline())
+			{
+				player.sendPacket(packet);
+			}
+		}
 	}
 	
 	public static void announceToOnlinePlayers(String text, boolean isCritical)
@@ -203,50 +208,14 @@ public final class Broadcast
 		toAllOnlinePlayers(cs);
 	}
 	
-	public static void toPlayersInInstance(L2GameServerPacket mov, int instanceId)
-	{
-		L2World.getInstance().forEachPlayer(new ForEachPlayerInInstanceBroadcast(mov, instanceId));
-	}
-	
-	private static final class ForEachPlayerBroadcast implements IProcedure<L2PcInstance, Boolean>
+	public static void toPlayersInInstance(L2GameServerPacket packet, int instanceId)
 	{
-		L2GameServerPacket _packet;
-		
-		protected ForEachPlayerBroadcast(L2GameServerPacket packet)
-		{
-			_packet = packet;
-		}
-		
-		@Override
-		public final Boolean execute(final L2PcInstance onlinePlayer)
-		{
-			if ((onlinePlayer != null) && onlinePlayer.isOnline())
-			{
-				onlinePlayer.sendPacket(_packet);
-			}
-			return true;
-		}
-	}
-	
-	private static final class ForEachPlayerInInstanceBroadcast implements IProcedure<L2PcInstance, Boolean>
-	{
-		private final L2GameServerPacket _packet;
-		private final int _instanceId;
-		
-		protected ForEachPlayerInInstanceBroadcast(L2GameServerPacket packet, int instanceId)
-		{
-			_packet = packet;
-			_instanceId = instanceId;
-		}
-		
-		@Override
-		public final Boolean execute(final L2PcInstance onlinePlayer)
+		for (L2PcInstance player : L2World.getInstance().getPlayers())
 		{
-			if ((onlinePlayer != null) && onlinePlayer.isOnline() && (onlinePlayer.getInstanceId() == _instanceId))
+			if (player.isOnline() && (player.getInstanceId() == instanceId))
 			{
-				onlinePlayer.sendPacket(_packet);
+				player.sendPacket(packet);
 			}
-			return true;
 		}
 	}
 }

+ 8 - 8
L2J_Server_BETA/java/com/l2jserver/gameserver/util/HtmlUtil.java

@@ -20,9 +20,9 @@ package com.l2jserver.gameserver.util;
 
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.function.Function;
 
 import com.l2jserver.gameserver.model.PageResult;
-import com.l2jserver.gameserver.model.interfaces.IProcedure;
 
 /**
  * A class containing useful methods for constructing HTML
@@ -223,17 +223,17 @@ public class HtmlUtil
 		return sb.toString();
 	}
 	
-	public static <T> PageResult createPage(Collection<T> elements, int page, int elementsPerPage, IProcedure<Integer, String> pagerProcedure, IProcedure<T, String> bodyProcedure)
+	public static <T> PageResult createPage(Collection<T> elements, int page, int elementsPerPage, Function<Integer, String> pagerFunction, Function<T, String> bodyFunction)
 	{
-		return createPage(elements, elements.size(), page, elementsPerPage, pagerProcedure, bodyProcedure);
+		return createPage(elements, elements.size(), page, elementsPerPage, pagerFunction, bodyFunction);
 	}
 	
-	public static <T> PageResult createPage(T[] elements, int page, int elementsPerPage, IProcedure<Integer, String> pagerProcedure, IProcedure<T, String> bodyProcedure)
+	public static <T> PageResult createPage(T[] elements, int page, int elementsPerPage, Function<Integer, String> pagerFunction, Function<T, String> bodyFunction)
 	{
-		return createPage(Arrays.asList(elements), elements.length, page, elementsPerPage, pagerProcedure, bodyProcedure);
+		return createPage(Arrays.asList(elements), elements.length, page, elementsPerPage, pagerFunction, bodyFunction);
 	}
 	
-	public static <T> PageResult createPage(Iterable<T> elements, int size, int page, int elementsPerPage, IProcedure<Integer, String> pagerProcedure, IProcedure<T, String> bodyProcedure)
+	public static <T> PageResult createPage(Iterable<T> elements, int size, int page, int elementsPerPage, Function<Integer, String> pagerFunction, Function<T, String> bodyFunction)
 	{
 		int pages = size / elementsPerPage;
 		if ((elementsPerPage * pages) < size)
@@ -246,7 +246,7 @@ public class HtmlUtil
 		{
 			for (int i = 0; i < pages; i++)
 			{
-				pagerTemplate.append(pagerProcedure.execute(i));
+				pagerTemplate.append(pagerFunction.apply(i));
 			}
 		}
 		
@@ -270,7 +270,7 @@ public class HtmlUtil
 				continue;
 			}
 			
-			sb.append(bodyProcedure.execute(element));
+			sb.append(bodyFunction.apply(element));
 			
 			if (i >= (elementsPerPage + start))
 			{

+ 1 - 30
L2J_Server_BETA/java/com/l2jserver/util/L2FastList.java

@@ -22,19 +22,9 @@ import java.util.Collection;
 
 import javolution.util.FastList;
 
-import com.l2jserver.gameserver.model.interfaces.IProcedure;
-
 /**
- * A custom version of FastList with extension for iterating without using temporary collection<br>
- * It's provide synchronization lock when iterating if needed<br>
- * <br>
+ * A custom version of {@code FastList} with constructors that allow the constructed {@code FastList} to be shared without calling {@link FastList#shared()} method. <br>
  * @author Julian
- * @version 1.0.1 (2008-02-07)<br>
- *          1.0.0 - Initial version.<br>
- *          1.0.1 - Made forEachP() final.<br>
- * @author UnAfraid
- * @version 1.0.2 (20012-08-19)<br>
- *          1.0.2 - Using IL2Procedure instead of IForEach.
  * @param <T>
  */
 public class L2FastList<T> extends FastList<T>
@@ -82,23 +72,4 @@ public class L2FastList<T> extends FastList<T>
 			shared();
 		}
 	}
-	
-	/**
-	 * Public method that iterate entire collection.<br>
-	 * <br>
-	 * @param proc - a class method that must be executed on every element of collection.<br>
-	 * @return - returns true if entire collection is iterated, false if it`s been interrupted by<br>
-	 *         check method (IL2Procedure.execute(T))<br>
-	 */
-	public boolean executeForEach(IProcedure<T, Boolean> proc)
-	{
-		for (T e : this)
-		{
-			if (!proc.execute(e))
-			{
-				return false;
-			}
-		}
-		return true;
-	}
 }