Inventory concurrency related adjustments.
This commit is contained in:
@@ -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<ItemInstance> _items = new ArrayList<>(1);
|
||||
private int _questItemSize = 0;
|
||||
protected final Set<ItemInstance> _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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -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<Integer> _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);
|
||||
}
|
||||
|
||||
/**
|
||||
* <b>Overloaded</b>, 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
|
||||
*/
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user