Pārlūkot izejas kodu

BETA: Minor reworks and memory leak fixes:
* Removed L2ManufactureList, replaced with a list of L2ManufactureItem and shop name moved to L2PcInstance.
* Using lazy initialization, with double checked locking to avoid synchronization overhead and CopyOnWriteArrayList to support concurrent modifications.
* Removed dependence on Trove.
* Fixed resource leaks related to off-line shops and database persistence.
* Reduced object creation and complexity.
* Removed dependence on Javolution.
* Moved ArrivedTask to own package.
* Reworked "silence mode excluded" list.
* It should't be instantiated for every player, since it's used only by Game Masters.
* Added all missing related JavaDocs.

Reviewed by: UnAfraid
Tested by: Zoey76

Zoey76 12 gadi atpakaļ
vecāks
revīzija
eaa8015984

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/RecipeController.java

@@ -246,7 +246,7 @@ public class RecipeController
 			// check that customer can afford to pay for creation services
 			if (_player != _target)
 			{
-				for (L2ManufactureItem temp : _player.getCreateList().getList())
+				for (L2ManufactureItem temp : _player.getCreateList())
 				{
 					if (temp.getRecipeId() == _recipeList.getId()) // find recipe for item we want manufactured
 					{

+ 4 - 7
L2J_Server_BETA/java/com/l2jserver/gameserver/datatables/OfflineTradersTable.java

@@ -30,7 +30,6 @@ import com.l2jserver.Config;
 import com.l2jserver.L2DatabaseFactory;
 import com.l2jserver.gameserver.LoginServerThread;
 import com.l2jserver.gameserver.model.L2ManufactureItem;
-import com.l2jserver.gameserver.model.L2ManufactureList;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.TradeItem;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -113,8 +112,8 @@ public class OfflineTradersTable
 								{
 									continue;
 								}
-								title = pc.getCreateList().getStoreName();
-								for (L2ManufactureItem i : pc.getCreateList().getList())
+								title = pc.getStoreName();
+								for (L2ManufactureItem i : pc.getCreateList())
 								{
 									stm_items.setInt(1, pc.getObjectId());
 									stm_items.setInt(2, i.getRecipeId());
@@ -216,13 +215,11 @@ public class OfflineTradersTable
 									player.getSellList().setPackaged(type == L2PcInstance.STORE_PRIVATE_PACKAGE_SELL);
 									break;
 								case L2PcInstance.STORE_PRIVATE_MANUFACTURE:
-									L2ManufactureList createList = new L2ManufactureList();
 									while (items.next())
 									{
-										createList.add(new L2ManufactureItem(items.getInt(2), items.getLong(4)));
+										player.getCreateList().add(new L2ManufactureItem(items.getInt(2), items.getLong(4)));
 									}
-									player.setCreateList(createList);
-									player.getCreateList().setStoreName(rs.getString("title"));
+									player.setStoreName(rs.getString("title"));
 									break;
 							}
 						}

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

@@ -29,7 +29,6 @@ import org.w3c.dom.Node;
 import com.l2jserver.gameserver.ThreadPoolManager;
 import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.engines.DocumentParser;
-import com.l2jserver.gameserver.model.ArrivedTask;
 import com.l2jserver.gameserver.model.L2CharPosition;
 import com.l2jserver.gameserver.model.L2NpcWalkerNode;
 import com.l2jserver.gameserver.model.L2WalkRoute;
@@ -37,6 +36,7 @@ import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.WalkInfo;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
+import com.l2jserver.gameserver.model.actor.tasks.npc.walker.ArrivedTask;
 import com.l2jserver.gameserver.model.holders.NpcRoutesHolder;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.network.NpcStringId;

+ 0 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2ManufactureItem.java

@@ -20,10 +20,6 @@ package com.l2jserver.gameserver.model;
 
 import com.l2jserver.gameserver.datatables.RecipeData;
 
-/**
- * This class ...
- * @version $Revision: 1.1.2.2.2.1 $ $Date: 2005/03/27 15:29:32 $
- */
 public class L2ManufactureItem
 {
 	private final int _recipeId;

+ 0 - 87
L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2ManufactureList.java

@@ -1,87 +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.model;
-
-import java.util.List;
-
-import javolution.util.FastList;
-
-/**
- * This class ...
- * @version $Revision: 1.1.2.1.2.2 $ $Date: 2005/03/27 15:29:33 $
- */
-public class L2ManufactureList
-{
-	private List<L2ManufactureItem> _list;
-	private boolean _confirmed;
-	private String _manufactureStoreName;
-	
-	public L2ManufactureList()
-	{
-		_list = new FastList<>();
-		_confirmed = false;
-	}
-	
-	public int size()
-	{
-		return _list.size();
-	}
-	
-	public void setConfirmedTrade(boolean x)
-	{
-		_confirmed = x;
-	}
-	
-	public boolean hasConfirmed()
-	{
-		return _confirmed;
-	}
-	
-	/**
-	 * @param manufactureStoreName The _manufactureStoreName to set.
-	 */
-	public void setStoreName(String manufactureStoreName)
-	{
-		_manufactureStoreName = manufactureStoreName;
-	}
-	
-	/**
-	 * @return Returns the _manufactureStoreName.
-	 */
-	public String getStoreName()
-	{
-		return _manufactureStoreName;
-	}
-	
-	public void add(L2ManufactureItem item)
-	{
-		_list.add(item);
-	}
-	
-	public List<L2ManufactureItem> getList()
-	{
-		return _list;
-	}
-	
-	public void setList(List<L2ManufactureItem> list)
-	{
-		_list = list;
-	}
-	
-}

+ 81 - 57
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java

@@ -111,7 +111,6 @@ import com.l2jserver.gameserver.model.L2ContactList;
 import com.l2jserver.gameserver.model.L2EnchantSkillLearn;
 import com.l2jserver.gameserver.model.L2Macro;
 import com.l2jserver.gameserver.model.L2ManufactureItem;
-import com.l2jserver.gameserver.model.L2ManufactureList;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.L2Party;
 import com.l2jserver.gameserver.model.L2Party.messageType;
@@ -324,8 +323,6 @@ import com.l2jserver.gameserver.util.Util;
 import com.l2jserver.util.L2FastList;
 import com.l2jserver.util.Rnd;
 
-import gnu.trove.list.array.TIntArrayList;
-
 /**
  * This class represents all player characters in the world.<br>
  * There is always a client-thread connected to this (except if a player-store is activated upon logout).
@@ -631,7 +628,8 @@ public final class L2PcInstance extends L2Playable
 	
 	private TradeList _activeTradeList;
 	private ItemContainer _activeWarehouse;
-	private L2ManufactureList _createList;
+	private List<L2ManufactureItem> _createList;
+	private String _storeName = "";
 	private TradeList _sellList;
 	private TradeList _buyList;
 	
@@ -741,7 +739,7 @@ public final class L2PcInstance extends L2Playable
 	private boolean _messageRefusal = false; // message refusal mode
 	
 	private boolean _silenceMode = false; // silence mode
-	private final TIntArrayList _silenceModeExcluded = new TIntArrayList(); // silence mode
+	private List<Integer> _silenceModeExcluded; // silence mode
 	private boolean _dietMode = false; // ignore weight penalty
 	private boolean _tradeRefusal = false; // Trade refusal
 	private boolean _exchangeRefusal = false; // Exchange refusal
@@ -6506,20 +6504,40 @@ public final class L2PcInstance extends L2Playable
 	}
 	
 	/**
-	 * @return the _createList object of the L2PcInstance.
+	 * Get the create list of this player.
+	 * @return the the create list
 	 */
-	public L2ManufactureList getCreateList()
+	public List<L2ManufactureItem> getCreateList()
 	{
+		if (_createList == null)
+		{
+			synchronized (this)
+			{
+				if (_createList == null)
+				{
+					_createList = new CopyOnWriteArrayList<>();
+				}
+			}
+		}
 		return _createList;
 	}
 	
 	/**
-	 * Set the _createList object of the L2PcInstance.
-	 * @param x
+	 * Get the store name, if any.
+	 * @return the store name
+	 */
+	public String getStoreName()
+	{
+		return _storeName;
+	}
+	
+	/**
+	 * Set the store name.
+	 * @param name the store name to set
 	 */
-	public void setCreateList(L2ManufactureList x)
+	public void setStoreName(String name)
 	{
-		_createList = x;
+		_storeName = name == null ? "" : name;
 	}
 	
 	/**
@@ -14346,9 +14364,6 @@ public final class L2PcInstance extends L2Playable
 		}
 	}
 	
-	/**
-	 * 
-	 */
 	private void notifyFriends()
 	{
 		FriendStatusPacket pkt = new FriendStatusPacket(getObjectId());
@@ -14363,7 +14378,8 @@ public final class L2PcInstance extends L2Playable
 	}
 	
 	/**
-	 * @return the _silenceMode
+	 * Verify if this player is in silence mode.
+	 * @return the {@code true} if this player is in silence mode, {@code false} otherwise
 	 */
 	public boolean isSilenceMode()
 	{
@@ -14371,85 +14387,93 @@ public final class L2PcInstance extends L2Playable
 	}
 	
 	/**
-	 * While at silenceMode, checks if this PC Instance blocks PMs for this user
-	 * @param objId
-	 * @return
+	 * While at silenceMode, checks if this player blocks PMs for this user
+	 * @param playerObjId the player object Id
+	 * @return {@code true} if the given Id is not excluded and this player is in silence mode, {@code false} otherwise
 	 */
-	public boolean isSilenceMode(int objId)
+	public boolean isSilenceMode(int playerObjId)
 	{
-		if (Config.SILENCE_MODE_EXCLUDE && _silenceMode)
+		if (Config.SILENCE_MODE_EXCLUDE && _silenceMode && (_silenceModeExcluded != null))
 		{
-			return !_silenceModeExcluded.contains(objId);
+			return !_silenceModeExcluded.contains(playerObjId);
 		}
-		
 		return _silenceMode;
 	}
 	
 	/**
-	 * @param mode the _silenceMode to set
+	 * Set the silence mode.
+	 * @param mode the value
 	 */
 	public void setSilenceMode(boolean mode)
 	{
 		_silenceMode = mode;
-		_silenceModeExcluded.clear(); // Clear the excluded list on each setSilenceMode
+		if (_silenceModeExcluded != null)
+		{
+			_silenceModeExcluded.clear(); // Clear the excluded list on each setSilenceMode
+		}
 		sendPacket(new EtcStatusUpdate(this));
 	}
 	
+	/**
+	 * Add a player to the "excluded silence mode" list.
+	 * @param playerObjId the player's object Id
+	 */
 	public void addSilenceModeExcluded(int playerObjId)
 	{
+		if (_silenceModeExcluded == null)
+		{
+			_silenceModeExcluded = new ArrayList<>(1);
+		}
 		_silenceModeExcluded.add(playerObjId);
 	}
 	
 	private void storeRecipeShopList()
 	{
-		try (Connection con = L2DatabaseFactory.getInstance().getConnection())
+		if ((_createList != null) && !_createList.isEmpty())
 		{
-			PreparedStatement statement;
-			L2ManufactureList list = getCreateList();
-			
-			if ((list != null) && (list.size() > 0))
+			try (Connection con = L2DatabaseFactory.getInstance().getConnection();
+				PreparedStatement delete = con.prepareStatement("DELETE FROM character_recipeshoplist WHERE charId=? ");
+				PreparedStatement insert = con.prepareStatement("INSERT INTO character_recipeshoplist (charId, Recipeid, Price, Pos) VALUES (?, ?, ?, ?)"))
 			{
+				delete.setInt(1, getObjectId());
+				delete.execute();
 				int _position = 1;
-				statement = con.prepareStatement("DELETE FROM character_recipeshoplist WHERE charId=? ");
-				statement.setInt(1, getObjectId());
-				statement.execute();
-				statement.close();
-				
-				PreparedStatement statement2 = con.prepareStatement("INSERT INTO character_recipeshoplist (charId, Recipeid, Price, Pos) VALUES (?, ?, ?, ?)");
-				for (L2ManufactureItem item : list.getList())
-				{
-					statement2.setInt(1, getObjectId());
-					statement2.setInt(2, item.getRecipeId());
-					statement2.setLong(3, item.getCost());
-					statement2.setInt(4, _position);
-					statement2.execute();
-					statement2.clearParameters();
+				for (L2ManufactureItem item : _createList)
+				{
+					insert.setInt(1, getObjectId());
+					insert.setInt(2, item.getRecipeId());
+					insert.setLong(3, item.getCost());
+					insert.setInt(4, _position);
+					insert.addBatch();
 					_position++;
 				}
-				statement2.close();
+				insert.executeBatch();
+			}
+			catch (Exception e)
+			{
+				_log.log(Level.SEVERE, "Could not store recipe shop for playerID " + getObjectId() + ": ", e);
 			}
-		}
-		catch (Exception e)
-		{
-			_log.log(Level.SEVERE, "Could not store recipe shop for playerID " + getObjectId() + ": ", e);
 		}
 	}
 	
 	private void restoreRecipeShopList()
 	{
-		try (Connection con = L2DatabaseFactory.getInstance().getConnection())
+		if (_createList != null)
+		{
+			_createList.clear();
+		}
+		
+		try (Connection con = L2DatabaseFactory.getInstance().getConnection();
+			PreparedStatement statement = con.prepareStatement("SELECT Recipeid,Price FROM character_recipeshoplist WHERE charId=? ORDER BY Pos ASC"))
 		{
-			PreparedStatement statement = con.prepareStatement("SELECT Recipeid,Price FROM character_recipeshoplist WHERE charId=? ORDER BY Pos ASC");
 			statement.setInt(1, getObjectId());
-			ResultSet rset = statement.executeQuery();
-			L2ManufactureList createList = new L2ManufactureList();
-			while (rset.next())
+			try (ResultSet rset = statement.executeQuery())
 			{
-				createList.add(new L2ManufactureItem(rset.getInt("Recipeid"), rset.getLong("Price")));
+				while (rset.next())
+				{
+					getCreateList().add(new L2ManufactureItem(rset.getInt("Recipeid"), rset.getLong("Price")));
+				}
 			}
-			setCreateList(createList);
-			rset.close();
-			statement.close();
 		}
 		catch (Exception e)
 		{

+ 3 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/ArrivedTask.java → L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/tasks/npc/walker/ArrivedTask.java

@@ -16,12 +16,14 @@
  * 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;
+package com.l2jserver.gameserver.model.actor.tasks.npc.walker;
 
 import com.l2jserver.gameserver.instancemanager.WalkingManager;
+import com.l2jserver.gameserver.model.WalkInfo;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 
 /**
+ * Walker arrive task.
  * @author GKR
  */
 public class ArrivedTask implements Runnable

+ 0 - 11
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestActionUse.java

@@ -31,7 +31,6 @@ import com.l2jserver.gameserver.datatables.SkillTable;
 import com.l2jserver.gameserver.datatables.SummonSkillsTable;
 import com.l2jserver.gameserver.instancemanager.AirShipManager;
 import com.l2jserver.gameserver.model.L2CharPosition;
-import com.l2jserver.gameserver.model.L2ManufactureList;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Summon;
 import com.l2jserver.gameserver.model.actor.instance.L2BabyPetInstance;
@@ -252,11 +251,6 @@ public final class RequestActionUse extends L2GameClientPacket
 					activeChar.standUp();
 				}
 				
-				if (activeChar.getCreateList() == null)
-				{
-					activeChar.setCreateList(new L2ManufactureList());
-				}
-				
 				sendPacket(new RecipeShopManageList(activeChar, true));
 				break;
 			case 38: // Mount/Dismount
@@ -316,11 +310,6 @@ public final class RequestActionUse extends L2GameClientPacket
 					activeChar.standUp();
 				}
 				
-				if (activeChar.getCreateList() == null)
-				{
-					activeChar.setCreateList(new L2ManufactureList());
-				}
-				
 				sendPacket(new RecipeShopManageList(activeChar, false));
 				break;
 			case 52: // Unsummon Servitor

+ 3 - 8
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestRecipeShopListSet.java

@@ -26,7 +26,6 @@ import java.util.List;
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.datatables.RecipeData;
 import com.l2jserver.gameserver.model.L2ManufactureItem;
-import com.l2jserver.gameserver.model.L2ManufactureList;
 import com.l2jserver.gameserver.model.L2RecipeList;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.zone.ZoneId;
@@ -100,8 +99,6 @@ public final class RequestRecipeShopListSet extends L2GameClientPacket
 			return;
 		}
 		
-		L2ManufactureList createList = new L2ManufactureList();
-		
 		List<L2RecipeList> dwarfRecipes = Arrays.asList(player.getDwarvenRecipeBook());
 		List<L2RecipeList> commonRecipes = Arrays.asList(player.getCommonRecipeBook());
 		final RecipeData rd = RecipeData.getInstance();
@@ -114,16 +111,14 @@ public final class RequestRecipeShopListSet extends L2GameClientPacket
 				return;
 			}
 			
-			if (!i.addToList(createList))
+			if (!i.addToList(player.getCreateList()))
 			{
 				Util.handleIllegalPlayerAction(player, "Warning!! Character " + player.getName() + " of account " + player.getAccountName() + " tried to set price more than " + MAX_ADENA + " adena in Private Manufacture.", Config.DEFAULT_PUNISH);
 				return;
 			}
 		}
 		
-		createList.setStoreName(player.getCreateList() != null ? player.getCreateList().getStoreName() : "");
-		player.setCreateList(createList);
-		
+		player.setStoreName(player.getCreateList().isEmpty() ? "" : player.getStoreName());
 		player.setPrivateStoreType(L2PcInstance.STORE_PRIVATE_MANUFACTURE);
 		player.sitDown();
 		player.broadcastUserInfo();
@@ -142,7 +137,7 @@ public final class RequestRecipeShopListSet extends L2GameClientPacket
 			_cost = c;
 		}
 		
-		public boolean addToList(L2ManufactureList list)
+		public boolean addToList(List<L2ManufactureItem> list)
 		{
 			if (_cost > MAX_ADENA)
 			{

+ 0 - 9
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestRecipeShopManageList.java

@@ -18,15 +18,10 @@
  */
 package com.l2jserver.gameserver.network.clientpackets;
 
-import com.l2jserver.gameserver.model.L2ManufactureList;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.RecipeShopManageList;
 
-/**
- * This class ...
- * @version $Revision: 1.1.2.1.2.2 $ $Date: 2005/03/27 15:29:30 $
- */
 public final class RequestRecipeShopManageList extends L2GameClientPacket
 {
 	private static final String _C__B9_RequestRecipeShopManageList = "[C] B9 RequestRecipeShopManageList";
@@ -61,10 +56,6 @@ public final class RequestRecipeShopManageList extends L2GameClientPacket
 				player.standUp();
 			}
 		}
-		if (player.getCreateList() == null)
-		{
-			player.setCreateList(new L2ManufactureList());
-		}
 		
 		player.sendPacket(new RecipeShopManageList(player, true));
 	}

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

@@ -55,9 +55,9 @@ public class RequestRecipeShopMessageSet extends L2GameClientPacket
 			return;
 		}
 		
-		if (player.getCreateList() != null)
+		if (!player.getCreateList().isEmpty())
 		{
-			player.getCreateList().setStoreName(_name);
+			player.setStoreName(_name);
 		}
 	}
 	

+ 8 - 23
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/RecipeShopManageList.java

@@ -19,7 +19,6 @@
 package com.l2jserver.gameserver.network.serverpackets;
 
 import com.l2jserver.gameserver.model.L2ManufactureItem;
-import com.l2jserver.gameserver.model.L2ManufactureList;
 import com.l2jserver.gameserver.model.L2RecipeList;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 
@@ -43,16 +42,11 @@ public class RecipeShopManageList extends L2GameServerPacket
 			_recipes = _seller.getCommonRecipeBook();
 		}
 		
-		// clean previous recipes
-		if (_seller.getCreateList() != null)
+		for (L2ManufactureItem item : _seller.getCreateList())
 		{
-			L2ManufactureList list = _seller.getCreateList();
-			for (L2ManufactureItem item : list.getList())
+			if ((item.isDwarven() != _isDwarven) || !seller.hasRecipeList(item.getRecipeId()))
 			{
-				if ((item.isDwarven() != _isDwarven) || !seller.hasRecipeList(item.getRecipeId()))
-				{
-					list.getList().remove(item);
-				}
+				_seller.getCreateList().remove(item);
 			}
 		}
 	}
@@ -81,21 +75,12 @@ public class RecipeShopManageList extends L2GameServerPacket
 			}
 		}
 		
-		if (_seller.getCreateList() == null)
+		writeD(_seller.getCreateList().size());
+		for (L2ManufactureItem item : _seller.getCreateList())
 		{
-			writeD(0);
-		}
-		else
-		{
-			L2ManufactureList list = _seller.getCreateList();
-			writeD(list.size());
-			
-			for (L2ManufactureItem item : list.getList())
-			{
-				writeD(item.getRecipeId());
-				writeD(0x00);
-				writeQ(item.getCost());
-			}
+			writeD(item.getRecipeId());
+			writeD(0x00);
+			writeQ(item.getCost());
 		}
 	}
 }

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/RecipeShopMsg.java

@@ -34,6 +34,6 @@ public class RecipeShopMsg extends L2GameServerPacket
 	{
 		writeC(0xE1);
 		writeD(_activeChar.getObjectId());
-		writeS(_activeChar.getCreateList().getStoreName());
+		writeS(_activeChar.getStoreName());
 	}
 }

+ 3 - 10
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/RecipeShopSellList.java

@@ -19,7 +19,6 @@
 package com.l2jserver.gameserver.network.serverpackets;
 
 import com.l2jserver.gameserver.model.L2ManufactureItem;
-import com.l2jserver.gameserver.model.L2ManufactureList;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 
 public class RecipeShopSellList extends L2GameServerPacket
@@ -35,9 +34,7 @@ public class RecipeShopSellList extends L2GameServerPacket
 	@Override
 	protected final void writeImpl()
 	{
-		L2ManufactureList createList = _manufacturer.getCreateList();
-		
-		if (createList != null)
+		if (!_manufacturer.getCreateList().isEmpty())
 		{
 			writeC(0xDF);
 			writeD(_manufacturer.getObjectId());
@@ -45,13 +42,9 @@ public class RecipeShopSellList extends L2GameServerPacket
 			writeD(_manufacturer.getMaxMp());// Creator's MP
 			writeQ(_buyer.getAdena());// Buyer Adena
 			
-			int count = createList.size();
-			writeD(count);
-			L2ManufactureItem temp;
-			
-			for (int i = 0; i < count; i++)
+			writeD(_manufacturer.getCreateList().size());
+			for (L2ManufactureItem temp : _manufacturer.getCreateList())
 			{
-				temp = createList.getList().get(i);
 				writeD(temp.getRecipeId());
 				writeD(0x00); // unknown
 				writeQ(temp.getCost());