From c94da8603fc1cda59034f310f3bb5d044dae478a Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Wed, 21 Apr 2021 08:53:10 +0000 Subject: [PATCH] Inventory concurrency related adjustments. --- .../model/itemcontainer/ItemContainer.java | 48 +++---------------- .../model/itemcontainer/PlayerInventory.java | 38 +++++++++++++++ .../model/itemcontainer/PlayerRefund.java | 4 +- .../model/itemcontainer/ItemContainer.java | 48 +++---------------- .../model/itemcontainer/PlayerInventory.java | 38 +++++++++++++++ .../model/itemcontainer/PlayerRefund.java | 4 +- .../model/itemcontainer/ItemContainer.java | 48 +++---------------- .../model/itemcontainer/PlayerInventory.java | 38 +++++++++++++++ .../model/itemcontainer/PlayerRefund.java | 4 +- .../model/itemcontainer/ItemContainer.java | 48 +++---------------- .../model/itemcontainer/PlayerInventory.java | 38 +++++++++++++++ .../model/itemcontainer/PlayerRefund.java | 4 +- .../model/itemcontainer/ItemContainer.java | 48 +++---------------- .../model/itemcontainer/PlayerInventory.java | 38 +++++++++++++++ .../model/itemcontainer/PlayerRefund.java | 4 +- .../model/itemcontainer/ItemContainer.java | 48 +++---------------- .../model/itemcontainer/PlayerInventory.java | 38 +++++++++++++++ .../model/itemcontainer/PlayerRefund.java | 4 +- .../model/itemcontainer/ItemContainer.java | 48 +++---------------- .../model/itemcontainer/PlayerInventory.java | 38 +++++++++++++++ .../model/itemcontainer/PlayerRefund.java | 4 +- .../model/itemcontainer/ItemContainer.java | 48 +++---------------- .../model/itemcontainer/PlayerInventory.java | 38 +++++++++++++++ .../model/itemcontainer/PlayerRefund.java | 4 +- .../model/itemcontainer/ItemContainer.java | 48 +++---------------- .../model/itemcontainer/PlayerInventory.java | 38 +++++++++++++++ .../model/itemcontainer/PlayerRefund.java | 4 +- .../model/itemcontainer/ItemContainer.java | 48 +++---------------- .../model/itemcontainer/PlayerInventory.java | 38 +++++++++++++++ .../model/itemcontainer/PlayerRefund.java | 4 +- .../gameserver/model/actor/Attackable.java | 3 +- .../model/actor/instance/PetInstance.java | 7 +-- .../model/itemcontainer/ItemContainer.java | 41 +++++----------- .../model/itemcontainer/PlayerFreight.java | 9 ++-- .../network/serverpackets/GMViewItemList.java | 6 ++- .../GMViewWarehouseWithdrawList.java | 6 ++- .../network/serverpackets/ItemList.java | 8 ++-- .../network/serverpackets/PetItemList.java | 13 +++-- .../network/serverpackets/TradeUpdate.java | 4 +- .../WareHouseWithdrawalList.java | 7 +-- .../gameserver/model/actor/Attackable.java | 3 +- .../model/actor/instance/PetInstance.java | 7 +-- .../model/itemcontainer/ItemContainer.java | 41 +++++----------- .../model/itemcontainer/PlayerFreight.java | 9 ++-- .../network/serverpackets/GMViewItemList.java | 6 ++- .../GMViewWarehouseWithdrawList.java | 6 ++- .../network/serverpackets/ItemList.java | 8 ++-- .../network/serverpackets/PetItemList.java | 13 +++-- .../network/serverpackets/TradeUpdate.java | 4 +- .../WareHouseWithdrawalList.java | 7 +-- .../model/itemcontainer/ItemContainer.java | 48 +++---------------- .../model/itemcontainer/PlayerInventory.java | 38 +++++++++++++++ .../model/itemcontainer/PlayerRefund.java | 4 +- .../model/itemcontainer/ItemContainer.java | 48 +++---------------- .../model/itemcontainer/PlayerInventory.java | 38 +++++++++++++++ .../model/itemcontainer/PlayerRefund.java | 4 +- .../model/itemcontainer/ItemContainer.java | 48 +++---------------- .../model/itemcontainer/PlayerInventory.java | 38 +++++++++++++++ .../model/itemcontainer/PlayerRefund.java | 4 +- .../model/itemcontainer/ItemContainer.java | 48 +++---------------- .../model/itemcontainer/PlayerInventory.java | 38 +++++++++++++++ .../model/itemcontainer/PlayerRefund.java | 4 +- .../model/itemcontainer/ItemContainer.java | 48 +++---------------- .../model/itemcontainer/PlayerInventory.java | 38 +++++++++++++++ .../model/itemcontainer/PlayerRefund.java | 4 +- .../model/itemcontainer/ItemContainer.java | 48 +++---------------- .../model/itemcontainer/PlayerInventory.java | 38 +++++++++++++++ .../model/itemcontainer/PlayerRefund.java | 4 +- .../model/itemcontainer/ItemContainer.java | 48 +++---------------- .../model/itemcontainer/PlayerInventory.java | 38 +++++++++++++++ .../model/itemcontainer/PlayerRefund.java | 4 +- .../model/itemcontainer/ItemContainer.java | 48 +++---------------- .../model/itemcontainer/PlayerInventory.java | 38 +++++++++++++++ .../model/itemcontainer/PlayerRefund.java | 4 +- .../model/itemcontainer/ItemContainer.java | 48 +++---------------- .../model/itemcontainer/PlayerInventory.java | 38 +++++++++++++++ .../model/itemcontainer/PlayerRefund.java | 4 +- .../model/itemcontainer/ItemContainer.java | 48 +++---------------- .../model/itemcontainer/PlayerInventory.java | 38 +++++++++++++++ .../model/itemcontainer/PlayerRefund.java | 4 +- .../model/itemcontainer/ItemContainer.java | 48 +++---------------- .../model/itemcontainer/PlayerInventory.java | 38 +++++++++++++++ .../model/itemcontainer/PlayerRefund.java | 4 +- 83 files changed, 1081 insertions(+), 1017 deletions(-) diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java index fde0f69f19..c1a259b7e8 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java @@ -22,6 +22,8 @@ import java.sql.ResultSet; 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.Level; import java.util.logging.Logger; @@ -42,8 +44,7 @@ public abstract class ItemContainer { protected static final Logger LOGGER = Logger.getLogger(ItemContainer.class.getName()); - protected final List _items = new ArrayList<>(1); - private int _questItemSize = 0; + protected final Set _items = ConcurrentHashMap.newKeySet(1); protected ItemContainer() { @@ -74,22 +75,6 @@ public abstract class ItemContainer return _items.size(); } - /** - * @return the quantity of quest items in the inventory - */ - public int getQuestSize() - { - return _questItemSize; - } - - /** - * @return the quantity of items in the inventory - */ - public int getNonQuestSize() - { - return _items.size() - _questItemSize; - } - /** * Gets the items in inventory. * @return the items in inventory. @@ -538,12 +523,9 @@ public abstract class ItemContainer */ public void destroyAllItems(String process, PlayerInstance actor, Object reference) { - synchronized (_items) + for (ItemInstance item : _items) { - for (ItemInstance item : _items) - { - destroyItem(process, item, actor, reference); - } + destroyItem(process, item, actor, reference); } } @@ -580,15 +562,7 @@ public abstract class ItemContainer */ protected void addItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize++; - } - - _items.add(item); - } + _items.add(item); } /** @@ -598,15 +572,7 @@ public abstract class ItemContainer */ protected boolean removeItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize--; - } - - return _items.remove(item); - } + return _items.remove(item); } /** diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java index e3e5ab8e4d..5196174020 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; @@ -56,6 +57,7 @@ public class PlayerInventory extends Inventory private ItemInstance _beautyTickets; private Collection _blockItems = null; private InventoryBlockType _blockMode = InventoryBlockType.NONE; + private final AtomicInteger _questItemSize = new AtomicInteger(); public PlayerInventory(PlayerInstance owner) { @@ -683,6 +685,21 @@ public class PlayerInventory extends Inventory return item; } + /** + * Adds item to inventory for further adjustments. + * @param item : ItemInstance to be added from inventory + */ + @Override + protected void addItem(ItemInstance item) + { + if (item.isQuestItem()) + { + _questItemSize.incrementAndGet(); + } + + super.addItem(item); + } + /** * Overloaded, when removes item from inventory, remove also owner shortcuts. * @param item : ItemInstance to be removed from inventory @@ -712,9 +729,30 @@ public class PlayerInventory extends Inventory _beautyTickets = null; } + if (item.isQuestItem()) + { + _questItemSize.decrementAndGet(); + } + return super.removeItem(item); } + /** + * @return the quantity of quest items in the inventory + */ + public int getQuestSize() + { + return _questItemSize.get(); + } + + /** + * @return the quantity of items in the inventory + */ + public int getNonQuestSize() + { + return _items.size() - _questItemSize.get(); + } + /** * Refresh the weight of equipment loaded */ diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java index 9008e27e8a..cdabbb2078 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java @@ -61,8 +61,8 @@ public class PlayerRefund extends ItemContainer { if (getSize() > 12) { - final ItemInstance removedItem = _items.remove(0); - if (removedItem != null) + final ItemInstance removedItem = _items.stream().findFirst().get(); + if (_items.remove(removedItem)) { ItemTable.getInstance().destroyItem("ClearRefund", removedItem, getOwner(), null); removedItem.updateDatabase(true); diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java index fde0f69f19..c1a259b7e8 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java @@ -22,6 +22,8 @@ import java.sql.ResultSet; 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.Level; import java.util.logging.Logger; @@ -42,8 +44,7 @@ public abstract class ItemContainer { protected static final Logger LOGGER = Logger.getLogger(ItemContainer.class.getName()); - protected final List _items = new ArrayList<>(1); - private int _questItemSize = 0; + protected final Set _items = ConcurrentHashMap.newKeySet(1); protected ItemContainer() { @@ -74,22 +75,6 @@ public abstract class ItemContainer return _items.size(); } - /** - * @return the quantity of quest items in the inventory - */ - public int getQuestSize() - { - return _questItemSize; - } - - /** - * @return the quantity of items in the inventory - */ - public int getNonQuestSize() - { - return _items.size() - _questItemSize; - } - /** * Gets the items in inventory. * @return the items in inventory. @@ -538,12 +523,9 @@ public abstract class ItemContainer */ public void destroyAllItems(String process, PlayerInstance actor, Object reference) { - synchronized (_items) + for (ItemInstance item : _items) { - for (ItemInstance item : _items) - { - destroyItem(process, item, actor, reference); - } + destroyItem(process, item, actor, reference); } } @@ -580,15 +562,7 @@ public abstract class ItemContainer */ protected void addItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize++; - } - - _items.add(item); - } + _items.add(item); } /** @@ -598,15 +572,7 @@ public abstract class ItemContainer */ protected boolean removeItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize--; - } - - return _items.remove(item); - } + return _items.remove(item); } /** diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java index c96d3f248a..6792706c97 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; @@ -56,6 +57,7 @@ public class PlayerInventory extends Inventory private ItemInstance _beautyTickets; private Collection _blockItems = null; private InventoryBlockType _blockMode = InventoryBlockType.NONE; + private final AtomicInteger _questItemSize = new AtomicInteger(); public PlayerInventory(PlayerInstance owner) { @@ -683,6 +685,21 @@ public class PlayerInventory extends Inventory return item; } + /** + * Adds item to inventory for further adjustments. + * @param item : ItemInstance to be added from inventory + */ + @Override + protected void addItem(ItemInstance item) + { + if (item.isQuestItem()) + { + _questItemSize.incrementAndGet(); + } + + super.addItem(item); + } + /** * Overloaded, when removes item from inventory, remove also owner shortcuts. * @param item : ItemInstance to be removed from inventory @@ -712,9 +729,30 @@ public class PlayerInventory extends Inventory _beautyTickets = null; } + if (item.isQuestItem()) + { + _questItemSize.decrementAndGet(); + } + return super.removeItem(item); } + /** + * @return the quantity of quest items in the inventory + */ + public int getQuestSize() + { + return _questItemSize.get(); + } + + /** + * @return the quantity of items in the inventory + */ + public int getNonQuestSize() + { + return _items.size() - _questItemSize.get(); + } + /** * Refresh the weight of equipment loaded */ diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java index 9008e27e8a..cdabbb2078 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java @@ -61,8 +61,8 @@ public class PlayerRefund extends ItemContainer { if (getSize() > 12) { - final ItemInstance removedItem = _items.remove(0); - if (removedItem != null) + final ItemInstance removedItem = _items.stream().findFirst().get(); + if (_items.remove(removedItem)) { ItemTable.getInstance().destroyItem("ClearRefund", removedItem, getOwner(), null); removedItem.updateDatabase(true); diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java index fde0f69f19..c1a259b7e8 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java @@ -22,6 +22,8 @@ import java.sql.ResultSet; 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.Level; import java.util.logging.Logger; @@ -42,8 +44,7 @@ public abstract class ItemContainer { protected static final Logger LOGGER = Logger.getLogger(ItemContainer.class.getName()); - protected final List _items = new ArrayList<>(1); - private int _questItemSize = 0; + protected final Set _items = ConcurrentHashMap.newKeySet(1); protected ItemContainer() { @@ -74,22 +75,6 @@ public abstract class ItemContainer return _items.size(); } - /** - * @return the quantity of quest items in the inventory - */ - public int getQuestSize() - { - return _questItemSize; - } - - /** - * @return the quantity of items in the inventory - */ - public int getNonQuestSize() - { - return _items.size() - _questItemSize; - } - /** * Gets the items in inventory. * @return the items in inventory. @@ -538,12 +523,9 @@ public abstract class ItemContainer */ public void destroyAllItems(String process, PlayerInstance actor, Object reference) { - synchronized (_items) + for (ItemInstance item : _items) { - for (ItemInstance item : _items) - { - destroyItem(process, item, actor, reference); - } + destroyItem(process, item, actor, reference); } } @@ -580,15 +562,7 @@ public abstract class ItemContainer */ protected void addItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize++; - } - - _items.add(item); - } + _items.add(item); } /** @@ -598,15 +572,7 @@ public abstract class ItemContainer */ protected boolean removeItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize--; - } - - return _items.remove(item); - } + return _items.remove(item); } /** diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java index c96d3f248a..6792706c97 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; @@ -56,6 +57,7 @@ public class PlayerInventory extends Inventory private ItemInstance _beautyTickets; private Collection _blockItems = null; private InventoryBlockType _blockMode = InventoryBlockType.NONE; + private final AtomicInteger _questItemSize = new AtomicInteger(); public PlayerInventory(PlayerInstance owner) { @@ -683,6 +685,21 @@ public class PlayerInventory extends Inventory return item; } + /** + * Adds item to inventory for further adjustments. + * @param item : ItemInstance to be added from inventory + */ + @Override + protected void addItem(ItemInstance item) + { + if (item.isQuestItem()) + { + _questItemSize.incrementAndGet(); + } + + super.addItem(item); + } + /** * Overloaded, when removes item from inventory, remove also owner shortcuts. * @param item : ItemInstance to be removed from inventory @@ -712,9 +729,30 @@ public class PlayerInventory extends Inventory _beautyTickets = null; } + if (item.isQuestItem()) + { + _questItemSize.decrementAndGet(); + } + return super.removeItem(item); } + /** + * @return the quantity of quest items in the inventory + */ + public int getQuestSize() + { + return _questItemSize.get(); + } + + /** + * @return the quantity of items in the inventory + */ + public int getNonQuestSize() + { + return _items.size() - _questItemSize.get(); + } + /** * Refresh the weight of equipment loaded */ diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java index 9008e27e8a..cdabbb2078 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java @@ -61,8 +61,8 @@ public class PlayerRefund extends ItemContainer { if (getSize() > 12) { - final ItemInstance removedItem = _items.remove(0); - if (removedItem != null) + final ItemInstance removedItem = _items.stream().findFirst().get(); + if (_items.remove(removedItem)) { ItemTable.getInstance().destroyItem("ClearRefund", removedItem, getOwner(), null); removedItem.updateDatabase(true); diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java index fde0f69f19..c1a259b7e8 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java @@ -22,6 +22,8 @@ import java.sql.ResultSet; 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.Level; import java.util.logging.Logger; @@ -42,8 +44,7 @@ public abstract class ItemContainer { protected static final Logger LOGGER = Logger.getLogger(ItemContainer.class.getName()); - protected final List _items = new ArrayList<>(1); - private int _questItemSize = 0; + protected final Set _items = ConcurrentHashMap.newKeySet(1); protected ItemContainer() { @@ -74,22 +75,6 @@ public abstract class ItemContainer return _items.size(); } - /** - * @return the quantity of quest items in the inventory - */ - public int getQuestSize() - { - return _questItemSize; - } - - /** - * @return the quantity of items in the inventory - */ - public int getNonQuestSize() - { - return _items.size() - _questItemSize; - } - /** * Gets the items in inventory. * @return the items in inventory. @@ -538,12 +523,9 @@ public abstract class ItemContainer */ public void destroyAllItems(String process, PlayerInstance actor, Object reference) { - synchronized (_items) + for (ItemInstance item : _items) { - for (ItemInstance item : _items) - { - destroyItem(process, item, actor, reference); - } + destroyItem(process, item, actor, reference); } } @@ -580,15 +562,7 @@ public abstract class ItemContainer */ protected void addItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize++; - } - - _items.add(item); - } + _items.add(item); } /** @@ -598,15 +572,7 @@ public abstract class ItemContainer */ protected boolean removeItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize--; - } - - return _items.remove(item); - } + return _items.remove(item); } /** diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java index c96d3f248a..6792706c97 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; @@ -56,6 +57,7 @@ public class PlayerInventory extends Inventory private ItemInstance _beautyTickets; private Collection _blockItems = null; private InventoryBlockType _blockMode = InventoryBlockType.NONE; + private final AtomicInteger _questItemSize = new AtomicInteger(); public PlayerInventory(PlayerInstance owner) { @@ -683,6 +685,21 @@ public class PlayerInventory extends Inventory return item; } + /** + * Adds item to inventory for further adjustments. + * @param item : ItemInstance to be added from inventory + */ + @Override + protected void addItem(ItemInstance item) + { + if (item.isQuestItem()) + { + _questItemSize.incrementAndGet(); + } + + super.addItem(item); + } + /** * Overloaded, when removes item from inventory, remove also owner shortcuts. * @param item : ItemInstance to be removed from inventory @@ -712,9 +729,30 @@ public class PlayerInventory extends Inventory _beautyTickets = null; } + if (item.isQuestItem()) + { + _questItemSize.decrementAndGet(); + } + return super.removeItem(item); } + /** + * @return the quantity of quest items in the inventory + */ + public int getQuestSize() + { + return _questItemSize.get(); + } + + /** + * @return the quantity of items in the inventory + */ + public int getNonQuestSize() + { + return _items.size() - _questItemSize.get(); + } + /** * Refresh the weight of equipment loaded */ diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java index 9008e27e8a..cdabbb2078 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java @@ -61,8 +61,8 @@ public class PlayerRefund extends ItemContainer { if (getSize() > 12) { - final ItemInstance removedItem = _items.remove(0); - if (removedItem != null) + final ItemInstance removedItem = _items.stream().findFirst().get(); + if (_items.remove(removedItem)) { ItemTable.getInstance().destroyItem("ClearRefund", removedItem, getOwner(), null); removedItem.updateDatabase(true); diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java index fde0f69f19..c1a259b7e8 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java @@ -22,6 +22,8 @@ import java.sql.ResultSet; 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.Level; import java.util.logging.Logger; @@ -42,8 +44,7 @@ public abstract class ItemContainer { protected static final Logger LOGGER = Logger.getLogger(ItemContainer.class.getName()); - protected final List _items = new ArrayList<>(1); - private int _questItemSize = 0; + protected final Set _items = ConcurrentHashMap.newKeySet(1); protected ItemContainer() { @@ -74,22 +75,6 @@ public abstract class ItemContainer return _items.size(); } - /** - * @return the quantity of quest items in the inventory - */ - public int getQuestSize() - { - return _questItemSize; - } - - /** - * @return the quantity of items in the inventory - */ - public int getNonQuestSize() - { - return _items.size() - _questItemSize; - } - /** * Gets the items in inventory. * @return the items in inventory. @@ -538,12 +523,9 @@ public abstract class ItemContainer */ public void destroyAllItems(String process, PlayerInstance actor, Object reference) { - synchronized (_items) + for (ItemInstance item : _items) { - for (ItemInstance item : _items) - { - destroyItem(process, item, actor, reference); - } + destroyItem(process, item, actor, reference); } } @@ -580,15 +562,7 @@ public abstract class ItemContainer */ protected void addItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize++; - } - - _items.add(item); - } + _items.add(item); } /** @@ -598,15 +572,7 @@ public abstract class ItemContainer */ protected boolean removeItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize--; - } - - return _items.remove(item); - } + return _items.remove(item); } /** diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java index c105cf9828..0236dae45b 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; @@ -56,6 +57,7 @@ public class PlayerInventory extends Inventory private ItemInstance _beautyTickets; private Collection _blockItems = null; private InventoryBlockType _blockMode = InventoryBlockType.NONE; + private final AtomicInteger _questItemSize = new AtomicInteger(); public PlayerInventory(PlayerInstance owner) { @@ -683,6 +685,21 @@ public class PlayerInventory extends Inventory return item; } + /** + * Adds item to inventory for further adjustments. + * @param item : ItemInstance to be added from inventory + */ + @Override + protected void addItem(ItemInstance item) + { + if (item.isQuestItem()) + { + _questItemSize.incrementAndGet(); + } + + super.addItem(item); + } + /** * Overloaded, when removes item from inventory, remove also owner shortcuts. * @param item : ItemInstance to be removed from inventory @@ -712,9 +729,30 @@ public class PlayerInventory extends Inventory _beautyTickets = null; } + if (item.isQuestItem()) + { + _questItemSize.decrementAndGet(); + } + return super.removeItem(item); } + /** + * @return the quantity of quest items in the inventory + */ + public int getQuestSize() + { + return _questItemSize.get(); + } + + /** + * @return the quantity of items in the inventory + */ + public int getNonQuestSize() + { + return _items.size() - _questItemSize.get(); + } + /** * Refresh the weight of equipment loaded */ diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java index 9008e27e8a..cdabbb2078 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java @@ -61,8 +61,8 @@ public class PlayerRefund extends ItemContainer { if (getSize() > 12) { - final ItemInstance removedItem = _items.remove(0); - if (removedItem != null) + final ItemInstance removedItem = _items.stream().findFirst().get(); + if (_items.remove(removedItem)) { ItemTable.getInstance().destroyItem("ClearRefund", removedItem, getOwner(), null); removedItem.updateDatabase(true); diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java index fde0f69f19..c1a259b7e8 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java @@ -22,6 +22,8 @@ import java.sql.ResultSet; 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.Level; import java.util.logging.Logger; @@ -42,8 +44,7 @@ public abstract class ItemContainer { protected static final Logger LOGGER = Logger.getLogger(ItemContainer.class.getName()); - protected final List _items = new ArrayList<>(1); - private int _questItemSize = 0; + protected final Set _items = ConcurrentHashMap.newKeySet(1); protected ItemContainer() { @@ -74,22 +75,6 @@ public abstract class ItemContainer return _items.size(); } - /** - * @return the quantity of quest items in the inventory - */ - public int getQuestSize() - { - return _questItemSize; - } - - /** - * @return the quantity of items in the inventory - */ - public int getNonQuestSize() - { - return _items.size() - _questItemSize; - } - /** * Gets the items in inventory. * @return the items in inventory. @@ -538,12 +523,9 @@ public abstract class ItemContainer */ public void destroyAllItems(String process, PlayerInstance actor, Object reference) { - synchronized (_items) + for (ItemInstance item : _items) { - for (ItemInstance item : _items) - { - destroyItem(process, item, actor, reference); - } + destroyItem(process, item, actor, reference); } } @@ -580,15 +562,7 @@ public abstract class ItemContainer */ protected void addItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize++; - } - - _items.add(item); - } + _items.add(item); } /** @@ -598,15 +572,7 @@ public abstract class ItemContainer */ protected boolean removeItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize--; - } - - return _items.remove(item); - } + return _items.remove(item); } /** diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java index c105cf9828..0236dae45b 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; @@ -56,6 +57,7 @@ public class PlayerInventory extends Inventory private ItemInstance _beautyTickets; private Collection _blockItems = null; private InventoryBlockType _blockMode = InventoryBlockType.NONE; + private final AtomicInteger _questItemSize = new AtomicInteger(); public PlayerInventory(PlayerInstance owner) { @@ -683,6 +685,21 @@ public class PlayerInventory extends Inventory return item; } + /** + * Adds item to inventory for further adjustments. + * @param item : ItemInstance to be added from inventory + */ + @Override + protected void addItem(ItemInstance item) + { + if (item.isQuestItem()) + { + _questItemSize.incrementAndGet(); + } + + super.addItem(item); + } + /** * Overloaded, when removes item from inventory, remove also owner shortcuts. * @param item : ItemInstance to be removed from inventory @@ -712,9 +729,30 @@ public class PlayerInventory extends Inventory _beautyTickets = null; } + if (item.isQuestItem()) + { + _questItemSize.decrementAndGet(); + } + return super.removeItem(item); } + /** + * @return the quantity of quest items in the inventory + */ + public int getQuestSize() + { + return _questItemSize.get(); + } + + /** + * @return the quantity of items in the inventory + */ + public int getNonQuestSize() + { + return _items.size() - _questItemSize.get(); + } + /** * Refresh the weight of equipment loaded */ diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java index 9008e27e8a..cdabbb2078 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java @@ -61,8 +61,8 @@ public class PlayerRefund extends ItemContainer { if (getSize() > 12) { - final ItemInstance removedItem = _items.remove(0); - if (removedItem != null) + final ItemInstance removedItem = _items.stream().findFirst().get(); + if (_items.remove(removedItem)) { ItemTable.getInstance().destroyItem("ClearRefund", removedItem, getOwner(), null); removedItem.updateDatabase(true); diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java index fde0f69f19..c1a259b7e8 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java @@ -22,6 +22,8 @@ import java.sql.ResultSet; 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.Level; import java.util.logging.Logger; @@ -42,8 +44,7 @@ public abstract class ItemContainer { protected static final Logger LOGGER = Logger.getLogger(ItemContainer.class.getName()); - protected final List _items = new ArrayList<>(1); - private int _questItemSize = 0; + protected final Set _items = ConcurrentHashMap.newKeySet(1); protected ItemContainer() { @@ -74,22 +75,6 @@ public abstract class ItemContainer return _items.size(); } - /** - * @return the quantity of quest items in the inventory - */ - public int getQuestSize() - { - return _questItemSize; - } - - /** - * @return the quantity of items in the inventory - */ - public int getNonQuestSize() - { - return _items.size() - _questItemSize; - } - /** * Gets the items in inventory. * @return the items in inventory. @@ -538,12 +523,9 @@ public abstract class ItemContainer */ public void destroyAllItems(String process, PlayerInstance actor, Object reference) { - synchronized (_items) + for (ItemInstance item : _items) { - for (ItemInstance item : _items) - { - destroyItem(process, item, actor, reference); - } + destroyItem(process, item, actor, reference); } } @@ -580,15 +562,7 @@ public abstract class ItemContainer */ protected void addItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize++; - } - - _items.add(item); - } + _items.add(item); } /** @@ -598,15 +572,7 @@ public abstract class ItemContainer */ protected boolean removeItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize--; - } - - return _items.remove(item); - } + return _items.remove(item); } /** diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java index c105cf9828..0236dae45b 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; @@ -56,6 +57,7 @@ public class PlayerInventory extends Inventory private ItemInstance _beautyTickets; private Collection _blockItems = null; private InventoryBlockType _blockMode = InventoryBlockType.NONE; + private final AtomicInteger _questItemSize = new AtomicInteger(); public PlayerInventory(PlayerInstance owner) { @@ -683,6 +685,21 @@ public class PlayerInventory extends Inventory return item; } + /** + * Adds item to inventory for further adjustments. + * @param item : ItemInstance to be added from inventory + */ + @Override + protected void addItem(ItemInstance item) + { + if (item.isQuestItem()) + { + _questItemSize.incrementAndGet(); + } + + super.addItem(item); + } + /** * Overloaded, when removes item from inventory, remove also owner shortcuts. * @param item : ItemInstance to be removed from inventory @@ -712,9 +729,30 @@ public class PlayerInventory extends Inventory _beautyTickets = null; } + if (item.isQuestItem()) + { + _questItemSize.decrementAndGet(); + } + return super.removeItem(item); } + /** + * @return the quantity of quest items in the inventory + */ + public int getQuestSize() + { + return _questItemSize.get(); + } + + /** + * @return the quantity of items in the inventory + */ + public int getNonQuestSize() + { + return _items.size() - _questItemSize.get(); + } + /** * Refresh the weight of equipment loaded */ diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java index 9008e27e8a..cdabbb2078 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java @@ -61,8 +61,8 @@ public class PlayerRefund extends ItemContainer { if (getSize() > 12) { - final ItemInstance removedItem = _items.remove(0); - if (removedItem != null) + final ItemInstance removedItem = _items.stream().findFirst().get(); + if (_items.remove(removedItem)) { ItemTable.getInstance().destroyItem("ClearRefund", removedItem, getOwner(), null); removedItem.updateDatabase(true); diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java index fde0f69f19..c1a259b7e8 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java @@ -22,6 +22,8 @@ import java.sql.ResultSet; 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.Level; import java.util.logging.Logger; @@ -42,8 +44,7 @@ public abstract class ItemContainer { protected static final Logger LOGGER = Logger.getLogger(ItemContainer.class.getName()); - protected final List _items = new ArrayList<>(1); - private int _questItemSize = 0; + protected final Set _items = ConcurrentHashMap.newKeySet(1); protected ItemContainer() { @@ -74,22 +75,6 @@ public abstract class ItemContainer return _items.size(); } - /** - * @return the quantity of quest items in the inventory - */ - public int getQuestSize() - { - return _questItemSize; - } - - /** - * @return the quantity of items in the inventory - */ - public int getNonQuestSize() - { - return _items.size() - _questItemSize; - } - /** * Gets the items in inventory. * @return the items in inventory. @@ -538,12 +523,9 @@ public abstract class ItemContainer */ public void destroyAllItems(String process, PlayerInstance actor, Object reference) { - synchronized (_items) + for (ItemInstance item : _items) { - for (ItemInstance item : _items) - { - destroyItem(process, item, actor, reference); - } + destroyItem(process, item, actor, reference); } } @@ -580,15 +562,7 @@ public abstract class ItemContainer */ protected void addItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize++; - } - - _items.add(item); - } + _items.add(item); } /** @@ -598,15 +572,7 @@ public abstract class ItemContainer */ protected boolean removeItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize--; - } - - return _items.remove(item); - } + return _items.remove(item); } /** diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java index c105cf9828..0236dae45b 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; @@ -56,6 +57,7 @@ public class PlayerInventory extends Inventory private ItemInstance _beautyTickets; private Collection _blockItems = null; private InventoryBlockType _blockMode = InventoryBlockType.NONE; + private final AtomicInteger _questItemSize = new AtomicInteger(); public PlayerInventory(PlayerInstance owner) { @@ -683,6 +685,21 @@ public class PlayerInventory extends Inventory return item; } + /** + * Adds item to inventory for further adjustments. + * @param item : ItemInstance to be added from inventory + */ + @Override + protected void addItem(ItemInstance item) + { + if (item.isQuestItem()) + { + _questItemSize.incrementAndGet(); + } + + super.addItem(item); + } + /** * Overloaded, when removes item from inventory, remove also owner shortcuts. * @param item : ItemInstance to be removed from inventory @@ -712,9 +729,30 @@ public class PlayerInventory extends Inventory _beautyTickets = null; } + if (item.isQuestItem()) + { + _questItemSize.decrementAndGet(); + } + return super.removeItem(item); } + /** + * @return the quantity of quest items in the inventory + */ + public int getQuestSize() + { + return _questItemSize.get(); + } + + /** + * @return the quantity of items in the inventory + */ + public int getNonQuestSize() + { + return _items.size() - _questItemSize.get(); + } + /** * Refresh the weight of equipment loaded */ diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java index 9008e27e8a..cdabbb2078 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java @@ -61,8 +61,8 @@ public class PlayerRefund extends ItemContainer { if (getSize() > 12) { - final ItemInstance removedItem = _items.remove(0); - if (removedItem != null) + final ItemInstance removedItem = _items.stream().findFirst().get(); + if (_items.remove(removedItem)) { ItemTable.getInstance().destroyItem("ClearRefund", removedItem, getOwner(), null); removedItem.updateDatabase(true); diff --git a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java index fde0f69f19..c1a259b7e8 100644 --- a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java +++ b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java @@ -22,6 +22,8 @@ import java.sql.ResultSet; 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.Level; import java.util.logging.Logger; @@ -42,8 +44,7 @@ public abstract class ItemContainer { protected static final Logger LOGGER = Logger.getLogger(ItemContainer.class.getName()); - protected final List _items = new ArrayList<>(1); - private int _questItemSize = 0; + protected final Set _items = ConcurrentHashMap.newKeySet(1); protected ItemContainer() { @@ -74,22 +75,6 @@ public abstract class ItemContainer return _items.size(); } - /** - * @return the quantity of quest items in the inventory - */ - public int getQuestSize() - { - return _questItemSize; - } - - /** - * @return the quantity of items in the inventory - */ - public int getNonQuestSize() - { - return _items.size() - _questItemSize; - } - /** * Gets the items in inventory. * @return the items in inventory. @@ -538,12 +523,9 @@ public abstract class ItemContainer */ public void destroyAllItems(String process, PlayerInstance actor, Object reference) { - synchronized (_items) + for (ItemInstance item : _items) { - for (ItemInstance item : _items) - { - destroyItem(process, item, actor, reference); - } + destroyItem(process, item, actor, reference); } } @@ -580,15 +562,7 @@ public abstract class ItemContainer */ protected void addItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize++; - } - - _items.add(item); - } + _items.add(item); } /** @@ -598,15 +572,7 @@ public abstract class ItemContainer */ protected boolean removeItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize--; - } - - return _items.remove(item); - } + return _items.remove(item); } /** diff --git a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java index 3d4c063996..3581c1058c 100644 --- a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java +++ b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; @@ -57,6 +58,7 @@ public class PlayerInventory extends Inventory private ItemInstance _beautyTickets; private Collection _blockItems = null; private InventoryBlockType _blockMode = InventoryBlockType.NONE; + private final AtomicInteger _questItemSize = new AtomicInteger(); public PlayerInventory(PlayerInstance owner) { @@ -684,6 +686,21 @@ public class PlayerInventory extends Inventory return item; } + /** + * Adds item to inventory for further adjustments. + * @param item : ItemInstance to be added from inventory + */ + @Override + protected void addItem(ItemInstance item) + { + if (item.isQuestItem()) + { + _questItemSize.incrementAndGet(); + } + + super.addItem(item); + } + /** * Overloaded, when removes item from inventory, remove also owner shortcuts. * @param item : ItemInstance to be removed from inventory @@ -713,9 +730,30 @@ public class PlayerInventory extends Inventory _beautyTickets = null; } + if (item.isQuestItem()) + { + _questItemSize.decrementAndGet(); + } + return super.removeItem(item); } + /** + * @return the quantity of quest items in the inventory + */ + public int getQuestSize() + { + return _questItemSize.get(); + } + + /** + * @return the quantity of items in the inventory + */ + public int getNonQuestSize() + { + return _items.size() - _questItemSize.get(); + } + /** * Refresh the weight of equipment loaded */ diff --git a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java index 9008e27e8a..cdabbb2078 100644 --- a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java +++ b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java @@ -61,8 +61,8 @@ public class PlayerRefund extends ItemContainer { if (getSize() > 12) { - final ItemInstance removedItem = _items.remove(0); - if (removedItem != null) + final ItemInstance removedItem = _items.stream().findFirst().get(); + if (_items.remove(removedItem)) { ItemTable.getInstance().destroyItem("ClearRefund", removedItem, getOwner(), null); removedItem.updateDatabase(true); diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java index fde0f69f19..c1a259b7e8 100644 --- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java +++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java @@ -22,6 +22,8 @@ import java.sql.ResultSet; 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.Level; import java.util.logging.Logger; @@ -42,8 +44,7 @@ public abstract class ItemContainer { protected static final Logger LOGGER = Logger.getLogger(ItemContainer.class.getName()); - protected final List _items = new ArrayList<>(1); - private int _questItemSize = 0; + protected final Set _items = ConcurrentHashMap.newKeySet(1); protected ItemContainer() { @@ -74,22 +75,6 @@ public abstract class ItemContainer return _items.size(); } - /** - * @return the quantity of quest items in the inventory - */ - public int getQuestSize() - { - return _questItemSize; - } - - /** - * @return the quantity of items in the inventory - */ - public int getNonQuestSize() - { - return _items.size() - _questItemSize; - } - /** * Gets the items in inventory. * @return the items in inventory. @@ -538,12 +523,9 @@ public abstract class ItemContainer */ public void destroyAllItems(String process, PlayerInstance actor, Object reference) { - synchronized (_items) + for (ItemInstance item : _items) { - for (ItemInstance item : _items) - { - destroyItem(process, item, actor, reference); - } + destroyItem(process, item, actor, reference); } } @@ -580,15 +562,7 @@ public abstract class ItemContainer */ protected void addItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize++; - } - - _items.add(item); - } + _items.add(item); } /** @@ -598,15 +572,7 @@ public abstract class ItemContainer */ protected boolean removeItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize--; - } - - return _items.remove(item); - } + return _items.remove(item); } /** diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java index 3d4c063996..3581c1058c 100644 --- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java +++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; @@ -57,6 +58,7 @@ public class PlayerInventory extends Inventory private ItemInstance _beautyTickets; private Collection _blockItems = null; private InventoryBlockType _blockMode = InventoryBlockType.NONE; + private final AtomicInteger _questItemSize = new AtomicInteger(); public PlayerInventory(PlayerInstance owner) { @@ -684,6 +686,21 @@ public class PlayerInventory extends Inventory return item; } + /** + * Adds item to inventory for further adjustments. + * @param item : ItemInstance to be added from inventory + */ + @Override + protected void addItem(ItemInstance item) + { + if (item.isQuestItem()) + { + _questItemSize.incrementAndGet(); + } + + super.addItem(item); + } + /** * Overloaded, when removes item from inventory, remove also owner shortcuts. * @param item : ItemInstance to be removed from inventory @@ -713,9 +730,30 @@ public class PlayerInventory extends Inventory _beautyTickets = null; } + if (item.isQuestItem()) + { + _questItemSize.decrementAndGet(); + } + return super.removeItem(item); } + /** + * @return the quantity of quest items in the inventory + */ + public int getQuestSize() + { + return _questItemSize.get(); + } + + /** + * @return the quantity of items in the inventory + */ + public int getNonQuestSize() + { + return _items.size() - _questItemSize.get(); + } + /** * Refresh the weight of equipment loaded */ diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java index 9008e27e8a..cdabbb2078 100644 --- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java +++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java @@ -61,8 +61,8 @@ public class PlayerRefund extends ItemContainer { if (getSize() > 12) { - final ItemInstance removedItem = _items.remove(0); - if (removedItem != null) + final ItemInstance removedItem = _items.stream().findFirst().get(); + if (_items.remove(removedItem)) { ItemTable.getInstance().destroyItem("ClearRefund", removedItem, getOwner(), null); removedItem.updateDatabase(true); diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/Attackable.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/Attackable.java index dee6a7ce4a..f3b2685373 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/Attackable.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/Attackable.java @@ -2296,8 +2296,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) diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/instance/PetInstance.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/instance/PetInstance.java index 9b0e13de64..8e125f6b64 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/instance/PetInstance.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/instance/PetInstance.java @@ -659,9 +659,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()) @@ -754,8 +752,7 @@ public class PetInstance extends Summon { try { - final ItemInstance[] items = _inventory.getItems(); - for (ItemInstance item : items) + for (ItemInstance item : _inventory.getItems()) { dropItemHere(item); } diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java index 68bdf2bce7..5f272db9a6 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java @@ -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 _items; - - protected ItemContainer() - { - _items = new ArrayList<>(); - } + protected final Set _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 getItems() { - synchronized (_items) - { - return _items.toArray(new ItemInstance[_items.size()]); - } + return _items; } /** @@ -495,7 +490,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) { @@ -527,10 +522,7 @@ public abstract class ItemContainer */ protected void addItem(ItemInstance item) { - synchronized (_items) - { - _items.add(item); - } + _items.add(item); } /** @@ -539,10 +531,7 @@ public abstract class ItemContainer */ protected void removeItem(ItemInstance item) { - synchronized (_items) - { - _items.remove(item); - } + _items.remove(item); } /** @@ -577,17 +566,13 @@ public abstract class ItemContainer */ public void updateDatabase() { - if (getOwner() != null) + if ((getOwner() != null) && (_items != null)) { - final List items = _items; - if (items != null) + for (ItemInstance item : _items) { - for (ItemInstance item : items) + if (item != null) { - if (item != null) - { - item.updateDatabase(); - } + item.updateDatabase(); } } } diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerFreight.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerFreight.java index 4687be73c4..4a9d933c13 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerFreight.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerFreight.java @@ -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 getItems() { - final List list = new ArrayList<>(); + final List 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; } /** diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/serverpackets/GMViewItemList.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/serverpackets/GMViewItemList.java index 675d7f9de3..e91b660f05 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/serverpackets/GMViewItemList.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/serverpackets/GMViewItemList.java @@ -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 _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) { diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/serverpackets/GMViewWarehouseWithdrawList.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/serverpackets/GMViewWarehouseWithdrawList.java index da00578baf..d3260d122b 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/serverpackets/GMViewWarehouseWithdrawList.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/serverpackets/GMViewWarehouseWithdrawList.java @@ -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 _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) { diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/serverpackets/ItemList.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/serverpackets/ItemList.java index 217e07b552..0652a089fd 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/serverpackets/ItemList.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/serverpackets/ItemList.java @@ -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 _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 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)) diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/serverpackets/PetItemList.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/serverpackets/PetItemList.java index 1692cbe819..dbe258f66c 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/serverpackets/PetItemList.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/serverpackets/PetItemList.java @@ -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 _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()); diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/serverpackets/TradeUpdate.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/serverpackets/TradeUpdate.java index 262a0c3fc9..0f245895c8 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/serverpackets/TradeUpdate.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/serverpackets/TradeUpdate.java @@ -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 _items; private final TradeItem[] _tradeItems; public TradeUpdate(TradeList trade, PlayerInstance player) diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/serverpackets/WareHouseWithdrawalList.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/serverpackets/WareHouseWithdrawalList.java index b813f2c1a1..a09d2218b7 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/serverpackets/WareHouseWithdrawalList.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/serverpackets/WareHouseWithdrawalList.java @@ -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 _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 diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/Attackable.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/Attackable.java index 67abfef347..5c364e1f94 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/Attackable.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/Attackable.java @@ -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) diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PetInstance.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PetInstance.java index e54d93fff0..91cc2d6e88 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PetInstance.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PetInstance.java @@ -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); } diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java index 62b86d2771..0f270966b2 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java @@ -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 _items; - - protected ItemContainer() - { - _items = new ArrayList<>(); - } + protected final Set _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 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 items = _items; - if (items != null) + for (ItemInstance item : _items) { - for (ItemInstance item : items) + if (item != null) { - if (item != null) - { - item.updateDatabase(); - } + item.updateDatabase(); } } } diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerFreight.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerFreight.java index 4687be73c4..4a9d933c13 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerFreight.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerFreight.java @@ -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 getItems() { - final List list = new ArrayList<>(); + final List 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; } /** diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/GMViewItemList.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/GMViewItemList.java index d6757cebcf..46e783762d 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/GMViewItemList.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/GMViewItemList.java @@ -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 _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) { diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/GMViewWarehouseWithdrawList.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/GMViewWarehouseWithdrawList.java index 8ca840b5ec..841aaf007e 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/GMViewWarehouseWithdrawList.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/GMViewWarehouseWithdrawList.java @@ -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 _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) { diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/ItemList.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/ItemList.java index 5b9e0525e7..72154b5b21 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/ItemList.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/ItemList.java @@ -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 _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 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)) diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/PetItemList.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/PetItemList.java index 1692cbe819..dbe258f66c 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/PetItemList.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/PetItemList.java @@ -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 _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()); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/TradeUpdate.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/TradeUpdate.java index 262a0c3fc9..0f245895c8 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/TradeUpdate.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/TradeUpdate.java @@ -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 _items; private final TradeItem[] _tradeItems; public TradeUpdate(TradeList trade, PlayerInstance player) diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/WareHouseWithdrawalList.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/WareHouseWithdrawalList.java index c8a4192abc..af27943dc2 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/WareHouseWithdrawalList.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/WareHouseWithdrawalList.java @@ -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 _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 diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java index 1de4877d77..02d7593f96 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java @@ -22,6 +22,8 @@ import java.sql.ResultSet; 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.Level; import java.util.logging.Logger; @@ -42,8 +44,7 @@ public abstract class ItemContainer { protected static final Logger LOGGER = Logger.getLogger(ItemContainer.class.getName()); - protected final List _items = new ArrayList<>(1); - private int _questItemSize = 0; + protected final Set _items = ConcurrentHashMap.newKeySet(1); protected ItemContainer() { @@ -74,22 +75,6 @@ public abstract class ItemContainer return _items.size(); } - /** - * @return the quantity of quest items in the inventory - */ - public int getQuestSize() - { - return _questItemSize; - } - - /** - * @return the quantity of items in the inventory - */ - public int getNonQuestSize() - { - return _items.size() - _questItemSize; - } - /** * Gets the items in inventory. * @return the items in inventory. @@ -483,12 +468,9 @@ public abstract class ItemContainer */ public void destroyAllItems(String process, PlayerInstance actor, Object reference) { - synchronized (_items) + for (ItemInstance item : _items) { - for (ItemInstance item : _items) - { - destroyItem(process, item, actor, reference); - } + destroyItem(process, item, actor, reference); } } @@ -513,15 +495,7 @@ public abstract class ItemContainer */ protected void addItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize++; - } - - _items.add(item); - } + _items.add(item); } /** @@ -531,15 +505,7 @@ public abstract class ItemContainer */ protected boolean removeItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize--; - } - - return _items.remove(item); - } + return _items.remove(item); } /** diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java index c3ab5c99b0..437fc74789 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java @@ -22,6 +22,7 @@ import java.sql.ResultSet; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; @@ -52,6 +53,7 @@ public class PlayerInventory extends Inventory private final PlayerInstance _owner; private ItemInstance _adena; private ItemInstance _ancientAdena; + private final AtomicInteger _questItemSize = new AtomicInteger(); private int[] _blockItems = null; @@ -674,6 +676,21 @@ public class PlayerInventory extends Inventory return item; } + /** + * Adds item to inventory for further adjustments. + * @param item : ItemInstance to be added from inventory + */ + @Override + protected void addItem(ItemInstance item) + { + if (item.isQuestItem()) + { + _questItemSize.incrementAndGet(); + } + + super.addItem(item); + } + /** * Overloaded, when removes item from inventory, remove also owner shortcuts. * @param item : ItemInstance to be removed from inventory @@ -699,9 +716,30 @@ public class PlayerInventory extends Inventory _ancientAdena = null; } + if (item.isQuestItem()) + { + _questItemSize.decrementAndGet(); + } + return super.removeItem(item); } + /** + * @return the quantity of quest items in the inventory + */ + public int getQuestSize() + { + return _questItemSize.get(); + } + + /** + * @return the quantity of items in the inventory + */ + public int getNonQuestSize() + { + return _items.size() - _questItemSize.get(); + } + /** * Refresh the weight of equipment loaded */ diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java index a6f9098a0e..6b02bc2c29 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java @@ -61,8 +61,8 @@ public class PlayerRefund extends ItemContainer { if (getSize() > 12) { - final ItemInstance removedItem = _items.remove(0); - if (removedItem != null) + final ItemInstance removedItem = _items.stream().findFirst().get(); + if (_items.remove(removedItem)) { ItemTable.getInstance().destroyItem("ClearRefund", removedItem, getOwner(), null); removedItem.updateDatabase(true); diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java index 1de4877d77..02d7593f96 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java @@ -22,6 +22,8 @@ import java.sql.ResultSet; 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.Level; import java.util.logging.Logger; @@ -42,8 +44,7 @@ public abstract class ItemContainer { protected static final Logger LOGGER = Logger.getLogger(ItemContainer.class.getName()); - protected final List _items = new ArrayList<>(1); - private int _questItemSize = 0; + protected final Set _items = ConcurrentHashMap.newKeySet(1); protected ItemContainer() { @@ -74,22 +75,6 @@ public abstract class ItemContainer return _items.size(); } - /** - * @return the quantity of quest items in the inventory - */ - public int getQuestSize() - { - return _questItemSize; - } - - /** - * @return the quantity of items in the inventory - */ - public int getNonQuestSize() - { - return _items.size() - _questItemSize; - } - /** * Gets the items in inventory. * @return the items in inventory. @@ -483,12 +468,9 @@ public abstract class ItemContainer */ public void destroyAllItems(String process, PlayerInstance actor, Object reference) { - synchronized (_items) + for (ItemInstance item : _items) { - for (ItemInstance item : _items) - { - destroyItem(process, item, actor, reference); - } + destroyItem(process, item, actor, reference); } } @@ -513,15 +495,7 @@ public abstract class ItemContainer */ protected void addItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize++; - } - - _items.add(item); - } + _items.add(item); } /** @@ -531,15 +505,7 @@ public abstract class ItemContainer */ protected boolean removeItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize--; - } - - return _items.remove(item); - } + return _items.remove(item); } /** diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java index c3ab5c99b0..437fc74789 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java @@ -22,6 +22,7 @@ import java.sql.ResultSet; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; @@ -52,6 +53,7 @@ public class PlayerInventory extends Inventory private final PlayerInstance _owner; private ItemInstance _adena; private ItemInstance _ancientAdena; + private final AtomicInteger _questItemSize = new AtomicInteger(); private int[] _blockItems = null; @@ -674,6 +676,21 @@ public class PlayerInventory extends Inventory return item; } + /** + * Adds item to inventory for further adjustments. + * @param item : ItemInstance to be added from inventory + */ + @Override + protected void addItem(ItemInstance item) + { + if (item.isQuestItem()) + { + _questItemSize.incrementAndGet(); + } + + super.addItem(item); + } + /** * Overloaded, when removes item from inventory, remove also owner shortcuts. * @param item : ItemInstance to be removed from inventory @@ -699,9 +716,30 @@ public class PlayerInventory extends Inventory _ancientAdena = null; } + if (item.isQuestItem()) + { + _questItemSize.decrementAndGet(); + } + return super.removeItem(item); } + /** + * @return the quantity of quest items in the inventory + */ + public int getQuestSize() + { + return _questItemSize.get(); + } + + /** + * @return the quantity of items in the inventory + */ + public int getNonQuestSize() + { + return _items.size() - _questItemSize.get(); + } + /** * Refresh the weight of equipment loaded */ diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java index a6f9098a0e..6b02bc2c29 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java @@ -61,8 +61,8 @@ public class PlayerRefund extends ItemContainer { if (getSize() > 12) { - final ItemInstance removedItem = _items.remove(0); - if (removedItem != null) + final ItemInstance removedItem = _items.stream().findFirst().get(); + if (_items.remove(removedItem)) { ItemTable.getInstance().destroyItem("ClearRefund", removedItem, getOwner(), null); removedItem.updateDatabase(true); diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java index fde0f69f19..c1a259b7e8 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java @@ -22,6 +22,8 @@ import java.sql.ResultSet; 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.Level; import java.util.logging.Logger; @@ -42,8 +44,7 @@ public abstract class ItemContainer { protected static final Logger LOGGER = Logger.getLogger(ItemContainer.class.getName()); - protected final List _items = new ArrayList<>(1); - private int _questItemSize = 0; + protected final Set _items = ConcurrentHashMap.newKeySet(1); protected ItemContainer() { @@ -74,22 +75,6 @@ public abstract class ItemContainer return _items.size(); } - /** - * @return the quantity of quest items in the inventory - */ - public int getQuestSize() - { - return _questItemSize; - } - - /** - * @return the quantity of items in the inventory - */ - public int getNonQuestSize() - { - return _items.size() - _questItemSize; - } - /** * Gets the items in inventory. * @return the items in inventory. @@ -538,12 +523,9 @@ public abstract class ItemContainer */ public void destroyAllItems(String process, PlayerInstance actor, Object reference) { - synchronized (_items) + for (ItemInstance item : _items) { - for (ItemInstance item : _items) - { - destroyItem(process, item, actor, reference); - } + destroyItem(process, item, actor, reference); } } @@ -580,15 +562,7 @@ public abstract class ItemContainer */ protected void addItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize++; - } - - _items.add(item); - } + _items.add(item); } /** @@ -598,15 +572,7 @@ public abstract class ItemContainer */ protected boolean removeItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize--; - } - - return _items.remove(item); - } + return _items.remove(item); } /** diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java index c96d3f248a..6792706c97 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; @@ -56,6 +57,7 @@ public class PlayerInventory extends Inventory private ItemInstance _beautyTickets; private Collection _blockItems = null; private InventoryBlockType _blockMode = InventoryBlockType.NONE; + private final AtomicInteger _questItemSize = new AtomicInteger(); public PlayerInventory(PlayerInstance owner) { @@ -683,6 +685,21 @@ public class PlayerInventory extends Inventory return item; } + /** + * Adds item to inventory for further adjustments. + * @param item : ItemInstance to be added from inventory + */ + @Override + protected void addItem(ItemInstance item) + { + if (item.isQuestItem()) + { + _questItemSize.incrementAndGet(); + } + + super.addItem(item); + } + /** * Overloaded, when removes item from inventory, remove also owner shortcuts. * @param item : ItemInstance to be removed from inventory @@ -712,9 +729,30 @@ public class PlayerInventory extends Inventory _beautyTickets = null; } + if (item.isQuestItem()) + { + _questItemSize.decrementAndGet(); + } + return super.removeItem(item); } + /** + * @return the quantity of quest items in the inventory + */ + public int getQuestSize() + { + return _questItemSize.get(); + } + + /** + * @return the quantity of items in the inventory + */ + public int getNonQuestSize() + { + return _items.size() - _questItemSize.get(); + } + /** * Refresh the weight of equipment loaded */ diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java index 9008e27e8a..cdabbb2078 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java @@ -61,8 +61,8 @@ public class PlayerRefund extends ItemContainer { if (getSize() > 12) { - final ItemInstance removedItem = _items.remove(0); - if (removedItem != null) + final ItemInstance removedItem = _items.stream().findFirst().get(); + if (_items.remove(removedItem)) { ItemTable.getInstance().destroyItem("ClearRefund", removedItem, getOwner(), null); removedItem.updateDatabase(true); diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java index fde0f69f19..c1a259b7e8 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java @@ -22,6 +22,8 @@ import java.sql.ResultSet; 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.Level; import java.util.logging.Logger; @@ -42,8 +44,7 @@ public abstract class ItemContainer { protected static final Logger LOGGER = Logger.getLogger(ItemContainer.class.getName()); - protected final List _items = new ArrayList<>(1); - private int _questItemSize = 0; + protected final Set _items = ConcurrentHashMap.newKeySet(1); protected ItemContainer() { @@ -74,22 +75,6 @@ public abstract class ItemContainer return _items.size(); } - /** - * @return the quantity of quest items in the inventory - */ - public int getQuestSize() - { - return _questItemSize; - } - - /** - * @return the quantity of items in the inventory - */ - public int getNonQuestSize() - { - return _items.size() - _questItemSize; - } - /** * Gets the items in inventory. * @return the items in inventory. @@ -538,12 +523,9 @@ public abstract class ItemContainer */ public void destroyAllItems(String process, PlayerInstance actor, Object reference) { - synchronized (_items) + for (ItemInstance item : _items) { - for (ItemInstance item : _items) - { - destroyItem(process, item, actor, reference); - } + destroyItem(process, item, actor, reference); } } @@ -580,15 +562,7 @@ public abstract class ItemContainer */ protected void addItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize++; - } - - _items.add(item); - } + _items.add(item); } /** @@ -598,15 +572,7 @@ public abstract class ItemContainer */ protected boolean removeItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize--; - } - - return _items.remove(item); - } + return _items.remove(item); } /** diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java index c96d3f248a..6792706c97 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; @@ -56,6 +57,7 @@ public class PlayerInventory extends Inventory private ItemInstance _beautyTickets; private Collection _blockItems = null; private InventoryBlockType _blockMode = InventoryBlockType.NONE; + private final AtomicInteger _questItemSize = new AtomicInteger(); public PlayerInventory(PlayerInstance owner) { @@ -683,6 +685,21 @@ public class PlayerInventory extends Inventory return item; } + /** + * Adds item to inventory for further adjustments. + * @param item : ItemInstance to be added from inventory + */ + @Override + protected void addItem(ItemInstance item) + { + if (item.isQuestItem()) + { + _questItemSize.incrementAndGet(); + } + + super.addItem(item); + } + /** * Overloaded, when removes item from inventory, remove also owner shortcuts. * @param item : ItemInstance to be removed from inventory @@ -712,9 +729,30 @@ public class PlayerInventory extends Inventory _beautyTickets = null; } + if (item.isQuestItem()) + { + _questItemSize.decrementAndGet(); + } + return super.removeItem(item); } + /** + * @return the quantity of quest items in the inventory + */ + public int getQuestSize() + { + return _questItemSize.get(); + } + + /** + * @return the quantity of items in the inventory + */ + public int getNonQuestSize() + { + return _items.size() - _questItemSize.get(); + } + /** * Refresh the weight of equipment loaded */ diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java index 9008e27e8a..cdabbb2078 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java @@ -61,8 +61,8 @@ public class PlayerRefund extends ItemContainer { if (getSize() > 12) { - final ItemInstance removedItem = _items.remove(0); - if (removedItem != null) + final ItemInstance removedItem = _items.stream().findFirst().get(); + if (_items.remove(removedItem)) { ItemTable.getInstance().destroyItem("ClearRefund", removedItem, getOwner(), null); removedItem.updateDatabase(true); diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java index fde0f69f19..c1a259b7e8 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java @@ -22,6 +22,8 @@ import java.sql.ResultSet; 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.Level; import java.util.logging.Logger; @@ -42,8 +44,7 @@ public abstract class ItemContainer { protected static final Logger LOGGER = Logger.getLogger(ItemContainer.class.getName()); - protected final List _items = new ArrayList<>(1); - private int _questItemSize = 0; + protected final Set _items = ConcurrentHashMap.newKeySet(1); protected ItemContainer() { @@ -74,22 +75,6 @@ public abstract class ItemContainer return _items.size(); } - /** - * @return the quantity of quest items in the inventory - */ - public int getQuestSize() - { - return _questItemSize; - } - - /** - * @return the quantity of items in the inventory - */ - public int getNonQuestSize() - { - return _items.size() - _questItemSize; - } - /** * Gets the items in inventory. * @return the items in inventory. @@ -538,12 +523,9 @@ public abstract class ItemContainer */ public void destroyAllItems(String process, PlayerInstance actor, Object reference) { - synchronized (_items) + for (ItemInstance item : _items) { - for (ItemInstance item : _items) - { - destroyItem(process, item, actor, reference); - } + destroyItem(process, item, actor, reference); } } @@ -580,15 +562,7 @@ public abstract class ItemContainer */ protected void addItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize++; - } - - _items.add(item); - } + _items.add(item); } /** @@ -598,15 +572,7 @@ public abstract class ItemContainer */ protected boolean removeItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize--; - } - - return _items.remove(item); - } + return _items.remove(item); } /** diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java index c105cf9828..0236dae45b 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; @@ -56,6 +57,7 @@ public class PlayerInventory extends Inventory private ItemInstance _beautyTickets; private Collection _blockItems = null; private InventoryBlockType _blockMode = InventoryBlockType.NONE; + private final AtomicInteger _questItemSize = new AtomicInteger(); public PlayerInventory(PlayerInstance owner) { @@ -683,6 +685,21 @@ public class PlayerInventory extends Inventory return item; } + /** + * Adds item to inventory for further adjustments. + * @param item : ItemInstance to be added from inventory + */ + @Override + protected void addItem(ItemInstance item) + { + if (item.isQuestItem()) + { + _questItemSize.incrementAndGet(); + } + + super.addItem(item); + } + /** * Overloaded, when removes item from inventory, remove also owner shortcuts. * @param item : ItemInstance to be removed from inventory @@ -712,9 +729,30 @@ public class PlayerInventory extends Inventory _beautyTickets = null; } + if (item.isQuestItem()) + { + _questItemSize.decrementAndGet(); + } + return super.removeItem(item); } + /** + * @return the quantity of quest items in the inventory + */ + public int getQuestSize() + { + return _questItemSize.get(); + } + + /** + * @return the quantity of items in the inventory + */ + public int getNonQuestSize() + { + return _items.size() - _questItemSize.get(); + } + /** * Refresh the weight of equipment loaded */ diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java index 9008e27e8a..cdabbb2078 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java @@ -61,8 +61,8 @@ public class PlayerRefund extends ItemContainer { if (getSize() > 12) { - final ItemInstance removedItem = _items.remove(0); - if (removedItem != null) + final ItemInstance removedItem = _items.stream().findFirst().get(); + if (_items.remove(removedItem)) { ItemTable.getInstance().destroyItem("ClearRefund", removedItem, getOwner(), null); removedItem.updateDatabase(true); diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java index fde0f69f19..c1a259b7e8 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java @@ -22,6 +22,8 @@ import java.sql.ResultSet; 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.Level; import java.util.logging.Logger; @@ -42,8 +44,7 @@ public abstract class ItemContainer { protected static final Logger LOGGER = Logger.getLogger(ItemContainer.class.getName()); - protected final List _items = new ArrayList<>(1); - private int _questItemSize = 0; + protected final Set _items = ConcurrentHashMap.newKeySet(1); protected ItemContainer() { @@ -74,22 +75,6 @@ public abstract class ItemContainer return _items.size(); } - /** - * @return the quantity of quest items in the inventory - */ - public int getQuestSize() - { - return _questItemSize; - } - - /** - * @return the quantity of items in the inventory - */ - public int getNonQuestSize() - { - return _items.size() - _questItemSize; - } - /** * Gets the items in inventory. * @return the items in inventory. @@ -538,12 +523,9 @@ public abstract class ItemContainer */ public void destroyAllItems(String process, PlayerInstance actor, Object reference) { - synchronized (_items) + for (ItemInstance item : _items) { - for (ItemInstance item : _items) - { - destroyItem(process, item, actor, reference); - } + destroyItem(process, item, actor, reference); } } @@ -580,15 +562,7 @@ public abstract class ItemContainer */ protected void addItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize++; - } - - _items.add(item); - } + _items.add(item); } /** @@ -598,15 +572,7 @@ public abstract class ItemContainer */ protected boolean removeItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize--; - } - - return _items.remove(item); - } + return _items.remove(item); } /** diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java index c105cf9828..0236dae45b 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; @@ -56,6 +57,7 @@ public class PlayerInventory extends Inventory private ItemInstance _beautyTickets; private Collection _blockItems = null; private InventoryBlockType _blockMode = InventoryBlockType.NONE; + private final AtomicInteger _questItemSize = new AtomicInteger(); public PlayerInventory(PlayerInstance owner) { @@ -683,6 +685,21 @@ public class PlayerInventory extends Inventory return item; } + /** + * Adds item to inventory for further adjustments. + * @param item : ItemInstance to be added from inventory + */ + @Override + protected void addItem(ItemInstance item) + { + if (item.isQuestItem()) + { + _questItemSize.incrementAndGet(); + } + + super.addItem(item); + } + /** * Overloaded, when removes item from inventory, remove also owner shortcuts. * @param item : ItemInstance to be removed from inventory @@ -712,9 +729,30 @@ public class PlayerInventory extends Inventory _beautyTickets = null; } + if (item.isQuestItem()) + { + _questItemSize.decrementAndGet(); + } + return super.removeItem(item); } + /** + * @return the quantity of quest items in the inventory + */ + public int getQuestSize() + { + return _questItemSize.get(); + } + + /** + * @return the quantity of items in the inventory + */ + public int getNonQuestSize() + { + return _items.size() - _questItemSize.get(); + } + /** * Refresh the weight of equipment loaded */ diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java index 9008e27e8a..cdabbb2078 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java @@ -61,8 +61,8 @@ public class PlayerRefund extends ItemContainer { if (getSize() > 12) { - final ItemInstance removedItem = _items.remove(0); - if (removedItem != null) + final ItemInstance removedItem = _items.stream().findFirst().get(); + if (_items.remove(removedItem)) { ItemTable.getInstance().destroyItem("ClearRefund", removedItem, getOwner(), null); removedItem.updateDatabase(true); diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java index fde0f69f19..c1a259b7e8 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java @@ -22,6 +22,8 @@ import java.sql.ResultSet; 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.Level; import java.util.logging.Logger; @@ -42,8 +44,7 @@ public abstract class ItemContainer { protected static final Logger LOGGER = Logger.getLogger(ItemContainer.class.getName()); - protected final List _items = new ArrayList<>(1); - private int _questItemSize = 0; + protected final Set _items = ConcurrentHashMap.newKeySet(1); protected ItemContainer() { @@ -74,22 +75,6 @@ public abstract class ItemContainer return _items.size(); } - /** - * @return the quantity of quest items in the inventory - */ - public int getQuestSize() - { - return _questItemSize; - } - - /** - * @return the quantity of items in the inventory - */ - public int getNonQuestSize() - { - return _items.size() - _questItemSize; - } - /** * Gets the items in inventory. * @return the items in inventory. @@ -538,12 +523,9 @@ public abstract class ItemContainer */ public void destroyAllItems(String process, PlayerInstance actor, Object reference) { - synchronized (_items) + for (ItemInstance item : _items) { - for (ItemInstance item : _items) - { - destroyItem(process, item, actor, reference); - } + destroyItem(process, item, actor, reference); } } @@ -580,15 +562,7 @@ public abstract class ItemContainer */ protected void addItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize++; - } - - _items.add(item); - } + _items.add(item); } /** @@ -598,15 +572,7 @@ public abstract class ItemContainer */ protected boolean removeItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize--; - } - - return _items.remove(item); - } + return _items.remove(item); } /** diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java index c105cf9828..0236dae45b 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; @@ -56,6 +57,7 @@ public class PlayerInventory extends Inventory private ItemInstance _beautyTickets; private Collection _blockItems = null; private InventoryBlockType _blockMode = InventoryBlockType.NONE; + private final AtomicInteger _questItemSize = new AtomicInteger(); public PlayerInventory(PlayerInstance owner) { @@ -683,6 +685,21 @@ public class PlayerInventory extends Inventory return item; } + /** + * Adds item to inventory for further adjustments. + * @param item : ItemInstance to be added from inventory + */ + @Override + protected void addItem(ItemInstance item) + { + if (item.isQuestItem()) + { + _questItemSize.incrementAndGet(); + } + + super.addItem(item); + } + /** * Overloaded, when removes item from inventory, remove also owner shortcuts. * @param item : ItemInstance to be removed from inventory @@ -712,9 +729,30 @@ public class PlayerInventory extends Inventory _beautyTickets = null; } + if (item.isQuestItem()) + { + _questItemSize.decrementAndGet(); + } + return super.removeItem(item); } + /** + * @return the quantity of quest items in the inventory + */ + public int getQuestSize() + { + return _questItemSize.get(); + } + + /** + * @return the quantity of items in the inventory + */ + public int getNonQuestSize() + { + return _items.size() - _questItemSize.get(); + } + /** * Refresh the weight of equipment loaded */ diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java index 9008e27e8a..cdabbb2078 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java @@ -61,8 +61,8 @@ public class PlayerRefund extends ItemContainer { if (getSize() > 12) { - final ItemInstance removedItem = _items.remove(0); - if (removedItem != null) + final ItemInstance removedItem = _items.stream().findFirst().get(); + if (_items.remove(removedItem)) { ItemTable.getInstance().destroyItem("ClearRefund", removedItem, getOwner(), null); removedItem.updateDatabase(true); diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java index fde0f69f19..c1a259b7e8 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java @@ -22,6 +22,8 @@ import java.sql.ResultSet; 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.Level; import java.util.logging.Logger; @@ -42,8 +44,7 @@ public abstract class ItemContainer { protected static final Logger LOGGER = Logger.getLogger(ItemContainer.class.getName()); - protected final List _items = new ArrayList<>(1); - private int _questItemSize = 0; + protected final Set _items = ConcurrentHashMap.newKeySet(1); protected ItemContainer() { @@ -74,22 +75,6 @@ public abstract class ItemContainer return _items.size(); } - /** - * @return the quantity of quest items in the inventory - */ - public int getQuestSize() - { - return _questItemSize; - } - - /** - * @return the quantity of items in the inventory - */ - public int getNonQuestSize() - { - return _items.size() - _questItemSize; - } - /** * Gets the items in inventory. * @return the items in inventory. @@ -538,12 +523,9 @@ public abstract class ItemContainer */ public void destroyAllItems(String process, PlayerInstance actor, Object reference) { - synchronized (_items) + for (ItemInstance item : _items) { - for (ItemInstance item : _items) - { - destroyItem(process, item, actor, reference); - } + destroyItem(process, item, actor, reference); } } @@ -580,15 +562,7 @@ public abstract class ItemContainer */ protected void addItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize++; - } - - _items.add(item); - } + _items.add(item); } /** @@ -598,15 +572,7 @@ public abstract class ItemContainer */ protected boolean removeItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize--; - } - - return _items.remove(item); - } + return _items.remove(item); } /** diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java index c105cf9828..0236dae45b 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; @@ -56,6 +57,7 @@ public class PlayerInventory extends Inventory private ItemInstance _beautyTickets; private Collection _blockItems = null; private InventoryBlockType _blockMode = InventoryBlockType.NONE; + private final AtomicInteger _questItemSize = new AtomicInteger(); public PlayerInventory(PlayerInstance owner) { @@ -683,6 +685,21 @@ public class PlayerInventory extends Inventory return item; } + /** + * Adds item to inventory for further adjustments. + * @param item : ItemInstance to be added from inventory + */ + @Override + protected void addItem(ItemInstance item) + { + if (item.isQuestItem()) + { + _questItemSize.incrementAndGet(); + } + + super.addItem(item); + } + /** * Overloaded, when removes item from inventory, remove also owner shortcuts. * @param item : ItemInstance to be removed from inventory @@ -712,9 +729,30 @@ public class PlayerInventory extends Inventory _beautyTickets = null; } + if (item.isQuestItem()) + { + _questItemSize.decrementAndGet(); + } + return super.removeItem(item); } + /** + * @return the quantity of quest items in the inventory + */ + public int getQuestSize() + { + return _questItemSize.get(); + } + + /** + * @return the quantity of items in the inventory + */ + public int getNonQuestSize() + { + return _items.size() - _questItemSize.get(); + } + /** * Refresh the weight of equipment loaded */ diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java index 9008e27e8a..cdabbb2078 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java @@ -61,8 +61,8 @@ public class PlayerRefund extends ItemContainer { if (getSize() > 12) { - final ItemInstance removedItem = _items.remove(0); - if (removedItem != null) + final ItemInstance removedItem = _items.stream().findFirst().get(); + if (_items.remove(removedItem)) { ItemTable.getInstance().destroyItem("ClearRefund", removedItem, getOwner(), null); removedItem.updateDatabase(true); diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java index fde0f69f19..c1a259b7e8 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java @@ -22,6 +22,8 @@ import java.sql.ResultSet; 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.Level; import java.util.logging.Logger; @@ -42,8 +44,7 @@ public abstract class ItemContainer { protected static final Logger LOGGER = Logger.getLogger(ItemContainer.class.getName()); - protected final List _items = new ArrayList<>(1); - private int _questItemSize = 0; + protected final Set _items = ConcurrentHashMap.newKeySet(1); protected ItemContainer() { @@ -74,22 +75,6 @@ public abstract class ItemContainer return _items.size(); } - /** - * @return the quantity of quest items in the inventory - */ - public int getQuestSize() - { - return _questItemSize; - } - - /** - * @return the quantity of items in the inventory - */ - public int getNonQuestSize() - { - return _items.size() - _questItemSize; - } - /** * Gets the items in inventory. * @return the items in inventory. @@ -538,12 +523,9 @@ public abstract class ItemContainer */ public void destroyAllItems(String process, PlayerInstance actor, Object reference) { - synchronized (_items) + for (ItemInstance item : _items) { - for (ItemInstance item : _items) - { - destroyItem(process, item, actor, reference); - } + destroyItem(process, item, actor, reference); } } @@ -580,15 +562,7 @@ public abstract class ItemContainer */ protected void addItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize++; - } - - _items.add(item); - } + _items.add(item); } /** @@ -598,15 +572,7 @@ public abstract class ItemContainer */ protected boolean removeItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize--; - } - - return _items.remove(item); - } + return _items.remove(item); } /** diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java index e3e5ab8e4d..5196174020 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; @@ -56,6 +57,7 @@ public class PlayerInventory extends Inventory private ItemInstance _beautyTickets; private Collection _blockItems = null; private InventoryBlockType _blockMode = InventoryBlockType.NONE; + private final AtomicInteger _questItemSize = new AtomicInteger(); public PlayerInventory(PlayerInstance owner) { @@ -683,6 +685,21 @@ public class PlayerInventory extends Inventory return item; } + /** + * Adds item to inventory for further adjustments. + * @param item : ItemInstance to be added from inventory + */ + @Override + protected void addItem(ItemInstance item) + { + if (item.isQuestItem()) + { + _questItemSize.incrementAndGet(); + } + + super.addItem(item); + } + /** * Overloaded, when removes item from inventory, remove also owner shortcuts. * @param item : ItemInstance to be removed from inventory @@ -712,9 +729,30 @@ public class PlayerInventory extends Inventory _beautyTickets = null; } + if (item.isQuestItem()) + { + _questItemSize.decrementAndGet(); + } + return super.removeItem(item); } + /** + * @return the quantity of quest items in the inventory + */ + public int getQuestSize() + { + return _questItemSize.get(); + } + + /** + * @return the quantity of items in the inventory + */ + public int getNonQuestSize() + { + return _items.size() - _questItemSize.get(); + } + /** * Refresh the weight of equipment loaded */ diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java index 9008e27e8a..cdabbb2078 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java @@ -61,8 +61,8 @@ public class PlayerRefund extends ItemContainer { if (getSize() > 12) { - final ItemInstance removedItem = _items.remove(0); - if (removedItem != null) + final ItemInstance removedItem = _items.stream().findFirst().get(); + if (_items.remove(removedItem)) { ItemTable.getInstance().destroyItem("ClearRefund", removedItem, getOwner(), null); removedItem.updateDatabase(true); diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java index fde0f69f19..c1a259b7e8 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java @@ -22,6 +22,8 @@ import java.sql.ResultSet; 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.Level; import java.util.logging.Logger; @@ -42,8 +44,7 @@ public abstract class ItemContainer { protected static final Logger LOGGER = Logger.getLogger(ItemContainer.class.getName()); - protected final List _items = new ArrayList<>(1); - private int _questItemSize = 0; + protected final Set _items = ConcurrentHashMap.newKeySet(1); protected ItemContainer() { @@ -74,22 +75,6 @@ public abstract class ItemContainer return _items.size(); } - /** - * @return the quantity of quest items in the inventory - */ - public int getQuestSize() - { - return _questItemSize; - } - - /** - * @return the quantity of items in the inventory - */ - public int getNonQuestSize() - { - return _items.size() - _questItemSize; - } - /** * Gets the items in inventory. * @return the items in inventory. @@ -538,12 +523,9 @@ public abstract class ItemContainer */ public void destroyAllItems(String process, PlayerInstance actor, Object reference) { - synchronized (_items) + for (ItemInstance item : _items) { - for (ItemInstance item : _items) - { - destroyItem(process, item, actor, reference); - } + destroyItem(process, item, actor, reference); } } @@ -580,15 +562,7 @@ public abstract class ItemContainer */ protected void addItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize++; - } - - _items.add(item); - } + _items.add(item); } /** @@ -598,15 +572,7 @@ public abstract class ItemContainer */ protected boolean removeItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize--; - } - - return _items.remove(item); - } + return _items.remove(item); } /** diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java index cdd5cda933..d8ec3a00bc 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; @@ -58,6 +59,7 @@ public class PlayerInventory extends Inventory private ItemInstance _beautyTickets; private Collection _blockItems = null; private InventoryBlockType _blockMode = InventoryBlockType.NONE; + private final AtomicInteger _questItemSize = new AtomicInteger(); public PlayerInventory(PlayerInstance owner) { @@ -691,6 +693,21 @@ public class PlayerInventory extends Inventory return item; } + /** + * Adds item to inventory for further adjustments. + * @param item : ItemInstance to be added from inventory + */ + @Override + protected void addItem(ItemInstance item) + { + if (item.isQuestItem()) + { + _questItemSize.incrementAndGet(); + } + + super.addItem(item); + } + /** * Overloaded, when removes item from inventory, remove also owner shortcuts. * @param item : ItemInstance to be removed from inventory @@ -720,9 +737,30 @@ public class PlayerInventory extends Inventory _beautyTickets = null; } + if (item.isQuestItem()) + { + _questItemSize.decrementAndGet(); + } + return super.removeItem(item); } + /** + * @return the quantity of quest items in the inventory + */ + public int getQuestSize() + { + return _questItemSize.get(); + } + + /** + * @return the quantity of items in the inventory + */ + public int getNonQuestSize() + { + return _items.size() - _questItemSize.get(); + } + /** * Refresh the weight of equipment loaded */ diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java index 9008e27e8a..cdabbb2078 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java @@ -61,8 +61,8 @@ public class PlayerRefund extends ItemContainer { if (getSize() > 12) { - final ItemInstance removedItem = _items.remove(0); - if (removedItem != null) + final ItemInstance removedItem = _items.stream().findFirst().get(); + if (_items.remove(removedItem)) { ItemTable.getInstance().destroyItem("ClearRefund", removedItem, getOwner(), null); removedItem.updateDatabase(true); diff --git a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java index fde0f69f19..c1a259b7e8 100644 --- a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java +++ b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/itemcontainer/ItemContainer.java @@ -22,6 +22,8 @@ import java.sql.ResultSet; 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.Level; import java.util.logging.Logger; @@ -42,8 +44,7 @@ public abstract class ItemContainer { protected static final Logger LOGGER = Logger.getLogger(ItemContainer.class.getName()); - protected final List _items = new ArrayList<>(1); - private int _questItemSize = 0; + protected final Set _items = ConcurrentHashMap.newKeySet(1); protected ItemContainer() { @@ -74,22 +75,6 @@ public abstract class ItemContainer return _items.size(); } - /** - * @return the quantity of quest items in the inventory - */ - public int getQuestSize() - { - return _questItemSize; - } - - /** - * @return the quantity of items in the inventory - */ - public int getNonQuestSize() - { - return _items.size() - _questItemSize; - } - /** * Gets the items in inventory. * @return the items in inventory. @@ -538,12 +523,9 @@ public abstract class ItemContainer */ public void destroyAllItems(String process, PlayerInstance actor, Object reference) { - synchronized (_items) + for (ItemInstance item : _items) { - for (ItemInstance item : _items) - { - destroyItem(process, item, actor, reference); - } + destroyItem(process, item, actor, reference); } } @@ -580,15 +562,7 @@ public abstract class ItemContainer */ protected void addItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize++; - } - - _items.add(item); - } + _items.add(item); } /** @@ -598,15 +572,7 @@ public abstract class ItemContainer */ protected boolean removeItem(ItemInstance item) { - synchronized (_items) - { - if (item.isQuestItem()) - { - _questItemSize--; - } - - return _items.remove(item); - } + return _items.remove(item); } /** diff --git a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java index cdd5cda933..d8ec3a00bc 100644 --- a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java +++ b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerInventory.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; @@ -58,6 +59,7 @@ public class PlayerInventory extends Inventory private ItemInstance _beautyTickets; private Collection _blockItems = null; private InventoryBlockType _blockMode = InventoryBlockType.NONE; + private final AtomicInteger _questItemSize = new AtomicInteger(); public PlayerInventory(PlayerInstance owner) { @@ -691,6 +693,21 @@ public class PlayerInventory extends Inventory return item; } + /** + * Adds item to inventory for further adjustments. + * @param item : ItemInstance to be added from inventory + */ + @Override + protected void addItem(ItemInstance item) + { + if (item.isQuestItem()) + { + _questItemSize.incrementAndGet(); + } + + super.addItem(item); + } + /** * Overloaded, when removes item from inventory, remove also owner shortcuts. * @param item : ItemInstance to be removed from inventory @@ -720,9 +737,30 @@ public class PlayerInventory extends Inventory _beautyTickets = null; } + if (item.isQuestItem()) + { + _questItemSize.decrementAndGet(); + } + return super.removeItem(item); } + /** + * @return the quantity of quest items in the inventory + */ + public int getQuestSize() + { + return _questItemSize.get(); + } + + /** + * @return the quantity of items in the inventory + */ + public int getNonQuestSize() + { + return _items.size() - _questItemSize.get(); + } + /** * Refresh the weight of equipment loaded */ diff --git a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java index 9008e27e8a..cdabbb2078 100644 --- a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java +++ b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/itemcontainer/PlayerRefund.java @@ -61,8 +61,8 @@ public class PlayerRefund extends ItemContainer { if (getSize() > 12) { - final ItemInstance removedItem = _items.remove(0); - if (removedItem != null) + final ItemInstance removedItem = _items.stream().findFirst().get(); + if (_items.remove(removedItem)) { ItemTable.getInstance().destroyItem("ClearRefund", removedItem, getOwner(), null); removedItem.updateDatabase(true);