Inventory concurrency related adjustments.

This commit is contained in:
MobiusDevelopment
2021-04-21 08:53:10 +00:00
parent 90e0eb7a94
commit c94da8603f
83 changed files with 1081 additions and 1017 deletions

View File

@@ -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.
@@ -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);
}
/**

View File

@@ -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);
}
/**
* <b>Overloaded</b>, 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
*/

View File

@@ -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);