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
	 MobiusDevelopment
					MobiusDevelopment