Inventory concurrency related adjustments.
This commit is contained in:
@@ -2648,8 +2648,7 @@ public class Attackable extends NpcInstance
|
||||
|
||||
crystalQTY = 0;
|
||||
|
||||
final ItemInstance[] inv = player.getInventory().getItems();
|
||||
for (ItemInstance item : inv)
|
||||
for (ItemInstance item : player.getInventory().getItems())
|
||||
{
|
||||
final int itemId = item.getItemId();
|
||||
for (int id : SoulCrystal.SOUL_CRYSTAL_TABLE)
|
||||
|
@@ -668,9 +668,7 @@ public class PetInstance extends Summon
|
||||
{
|
||||
try
|
||||
{
|
||||
final Inventory petInventory = _inventory;
|
||||
final ItemInstance[] items = petInventory.getItems();
|
||||
for (ItemInstance item : items)
|
||||
for (ItemInstance item : _inventory.getItems())
|
||||
{
|
||||
final ItemInstance giveit = item;
|
||||
if (((giveit.getItem().getWeight() * giveit.getCount()) + getOwner().getInventory().getTotalWeight()) < getOwner().getMaxLoad())
|
||||
@@ -763,8 +761,7 @@ public class PetInstance extends Summon
|
||||
{
|
||||
try
|
||||
{
|
||||
final ItemInstance[] items = _inventory.getItems();
|
||||
for (ItemInstance item : items)
|
||||
for (ItemInstance item : _inventory.getItems())
|
||||
{
|
||||
dropItemHere(item);
|
||||
}
|
||||
|
@@ -21,7 +21,10 @@ import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
@@ -42,12 +45,7 @@ public abstract class ItemContainer
|
||||
{
|
||||
protected static final Logger LOGGER = Logger.getLogger(ItemContainer.class.getName());
|
||||
|
||||
protected final List<ItemInstance> _items;
|
||||
|
||||
protected ItemContainer()
|
||||
{
|
||||
_items = new ArrayList<>();
|
||||
}
|
||||
protected final Set<ItemInstance> _items = ConcurrentHashMap.newKeySet(1);
|
||||
|
||||
protected abstract Creature getOwner();
|
||||
|
||||
@@ -75,12 +73,9 @@ public abstract class ItemContainer
|
||||
* Returns the list of items in inventory
|
||||
* @return ItemInstance : items in inventory
|
||||
*/
|
||||
public ItemInstance[] getItems()
|
||||
public Collection<ItemInstance> getItems()
|
||||
{
|
||||
synchronized (_items)
|
||||
{
|
||||
return _items.toArray(new ItemInstance[_items.size()]);
|
||||
}
|
||||
return _items;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -498,7 +493,7 @@ public abstract class ItemContainer
|
||||
* @param actor : PlayerInstance Player requesting the item destroy
|
||||
* @param reference : WorldObject Object referencing current action like NPC selling item or previous item in transformation
|
||||
*/
|
||||
public synchronized void destroyAllItems(String process, PlayerInstance actor, WorldObject reference)
|
||||
public void destroyAllItems(String process, PlayerInstance actor, WorldObject reference)
|
||||
{
|
||||
for (ItemInstance item : _items)
|
||||
{
|
||||
@@ -530,10 +525,7 @@ public abstract class ItemContainer
|
||||
*/
|
||||
protected void addItem(ItemInstance item)
|
||||
{
|
||||
synchronized (_items)
|
||||
{
|
||||
_items.add(item);
|
||||
}
|
||||
_items.add(item);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -542,10 +534,7 @@ public abstract class ItemContainer
|
||||
*/
|
||||
protected void removeItem(ItemInstance item)
|
||||
{
|
||||
synchronized (_items)
|
||||
{
|
||||
_items.remove(item);
|
||||
}
|
||||
_items.remove(item);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -580,17 +569,13 @@ public abstract class ItemContainer
|
||||
*/
|
||||
public void updateDatabase()
|
||||
{
|
||||
if (getOwner() != null)
|
||||
if ((getOwner() != null) && (_items != null))
|
||||
{
|
||||
final List<ItemInstance> items = _items;
|
||||
if (items != null)
|
||||
for (ItemInstance item : _items)
|
||||
{
|
||||
for (ItemInstance item : items)
|
||||
if (item != null)
|
||||
{
|
||||
if (item != null)
|
||||
{
|
||||
item.updateDatabase();
|
||||
}
|
||||
item.updateDatabase();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -17,6 +17,7 @@
|
||||
package org.l2jmobius.gameserver.model.itemcontainer;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
@@ -78,17 +79,17 @@ public class PlayerFreight extends ItemContainer
|
||||
* @return ItemInstance : items in inventory
|
||||
*/
|
||||
@Override
|
||||
public ItemInstance[] getItems()
|
||||
public Collection<ItemInstance> getItems()
|
||||
{
|
||||
final List<ItemInstance> list = new ArrayList<>();
|
||||
final List<ItemInstance> result = new ArrayList<>();
|
||||
for (ItemInstance item : _items)
|
||||
{
|
||||
if ((item.getEquipSlot() == 0) || (item.getEquipSlot() == _activeLocationId))
|
||||
{
|
||||
list.add(item);
|
||||
result.add(item);
|
||||
}
|
||||
}
|
||||
return list.toArray(new ItemInstance[list.size()]);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -16,6 +16,8 @@
|
||||
*/
|
||||
package org.l2jmobius.gameserver.network.serverpackets;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
@@ -26,7 +28,7 @@ import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
*/
|
||||
public class GMViewItemList implements IClientOutgoingPacket
|
||||
{
|
||||
private final ItemInstance[] _items;
|
||||
private final Collection<ItemInstance> _items;
|
||||
private final PlayerInstance _player;
|
||||
private final String _playerName;
|
||||
|
||||
@@ -44,7 +46,7 @@ public class GMViewItemList implements IClientOutgoingPacket
|
||||
packet.writeS(_playerName);
|
||||
packet.writeD(_player.getInventoryLimit()); // inventory limit
|
||||
packet.writeH(0x01); // show window ??
|
||||
packet.writeH(_items.length);
|
||||
packet.writeH(_items.size());
|
||||
|
||||
for (ItemInstance temp : _items)
|
||||
{
|
||||
|
@@ -16,6 +16,8 @@
|
||||
*/
|
||||
package org.l2jmobius.gameserver.network.serverpackets;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.items.Item;
|
||||
@@ -29,7 +31,7 @@ import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
*/
|
||||
public class GMViewWarehouseWithdrawList implements IClientOutgoingPacket
|
||||
{
|
||||
private final ItemInstance[] _items;
|
||||
private final Collection<ItemInstance> _items;
|
||||
private final String _playerName;
|
||||
private final PlayerInstance _player;
|
||||
private final int _money;
|
||||
@@ -48,7 +50,7 @@ public class GMViewWarehouseWithdrawList implements IClientOutgoingPacket
|
||||
OutgoingPackets.GM_VIEW_WAREHOUSE_WITHDRAW_LIST.writeId(packet);
|
||||
packet.writeS(_playerName);
|
||||
packet.writeD(_money);
|
||||
packet.writeH(_items.length);
|
||||
packet.writeH(_items.size());
|
||||
|
||||
for (ItemInstance item : _items)
|
||||
{
|
||||
|
@@ -16,6 +16,8 @@
|
||||
*/
|
||||
package org.l2jmobius.gameserver.network.serverpackets;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
@@ -29,7 +31,7 @@ import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
*/
|
||||
public class ItemList implements IClientOutgoingPacket
|
||||
{
|
||||
private final ItemInstance[] _items;
|
||||
private final Collection<ItemInstance> _items;
|
||||
private final boolean _showWindow;
|
||||
|
||||
public ItemList(PlayerInstance player, boolean showWindow)
|
||||
@@ -38,7 +40,7 @@ public class ItemList implements IClientOutgoingPacket
|
||||
_showWindow = showWindow;
|
||||
}
|
||||
|
||||
public ItemList(ItemInstance[] items, boolean showWindow)
|
||||
public ItemList(Collection<ItemInstance> items, boolean showWindow)
|
||||
{
|
||||
_items = items;
|
||||
_showWindow = showWindow;
|
||||
@@ -49,7 +51,7 @@ public class ItemList implements IClientOutgoingPacket
|
||||
{
|
||||
OutgoingPackets.ITEM_LIST.writeId(packet);
|
||||
packet.writeH(_showWindow ? 0x01 : 0x00);
|
||||
packet.writeH(_items.length);
|
||||
packet.writeH(_items.size());
|
||||
for (ItemInstance temp : _items)
|
||||
{
|
||||
if ((temp == null) || (temp.getItem() == null))
|
||||
|
@@ -16,6 +16,8 @@
|
||||
*/
|
||||
package org.l2jmobius.gameserver.network.serverpackets;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PetInstance;
|
||||
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
@@ -26,11 +28,11 @@ import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
*/
|
||||
public class PetItemList implements IClientOutgoingPacket
|
||||
{
|
||||
private final PetInstance _activeChar;
|
||||
private final Collection<ItemInstance> _items;
|
||||
|
||||
public PetItemList(PetInstance character)
|
||||
{
|
||||
_activeChar = character;
|
||||
_items = character.getInventory().getItems();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -38,11 +40,8 @@ public class PetItemList implements IClientOutgoingPacket
|
||||
{
|
||||
OutgoingPackets.PET_ITEM_LIST.writeId(packet);
|
||||
|
||||
final ItemInstance[] items = _activeChar.getInventory().getItems();
|
||||
final int count = items.length;
|
||||
packet.writeH(count);
|
||||
|
||||
for (ItemInstance temp : items)
|
||||
packet.writeH(_items.size());
|
||||
for (ItemInstance temp : _items)
|
||||
{
|
||||
packet.writeH(temp.getItem().getType1()); // item type1
|
||||
packet.writeD(temp.getObjectId());
|
||||
|
@@ -16,6 +16,8 @@
|
||||
*/
|
||||
package org.l2jmobius.gameserver.network.serverpackets;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.model.TradeList;
|
||||
import org.l2jmobius.gameserver.model.TradeList.TradeItem;
|
||||
@@ -28,7 +30,7 @@ import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
*/
|
||||
public class TradeUpdate implements IClientOutgoingPacket
|
||||
{
|
||||
private final ItemInstance[] _items;
|
||||
private final Collection<ItemInstance> _items;
|
||||
private final TradeItem[] _tradeItems;
|
||||
|
||||
public TradeUpdate(TradeList trade, PlayerInstance player)
|
||||
|
@@ -16,6 +16,8 @@
|
||||
*/
|
||||
package org.l2jmobius.gameserver.network.serverpackets;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
@@ -34,7 +36,7 @@ public class WareHouseWithdrawalList implements IClientOutgoingPacket
|
||||
|
||||
private PlayerInstance _player;
|
||||
private int _playerAdena;
|
||||
private ItemInstance[] _items;
|
||||
private Collection<ItemInstance> _items;
|
||||
private int _whType;
|
||||
|
||||
public WareHouseWithdrawalList(PlayerInstance player, int type)
|
||||
@@ -60,8 +62,7 @@ public class WareHouseWithdrawalList implements IClientOutgoingPacket
|
||||
*/
|
||||
packet.writeH(_whType);
|
||||
packet.writeD(_playerAdena);
|
||||
packet.writeH(_items.length);
|
||||
|
||||
packet.writeH(_items.size());
|
||||
for (ItemInstance item : _items)
|
||||
{
|
||||
packet.writeH(item.getItem().getType1()); // item type1 //unconfirmed, works
|
||||
|
Reference in New Issue
Block a user