Removal of enhanced inventory methods.
This commit is contained in:
		@@ -138,7 +138,7 @@ public class RestorationRandom extends AbstractEffect
 | 
			
		||||
				}
 | 
			
		||||
				else
 | 
			
		||||
				{
 | 
			
		||||
					for (ItemInstance itemInstance : player.getInventory().getItemsByItemId(entry.getKey().getId()))
 | 
			
		||||
					for (ItemInstance itemInstance : player.getInventory().getAllItemsByItemId(entry.getKey().getId()))
 | 
			
		||||
					{
 | 
			
		||||
						playerIU.addModifiedItem(itemInstance);
 | 
			
		||||
					}
 | 
			
		||||
 
 | 
			
		||||
@@ -47,7 +47,7 @@ public class OpEncumberedSkillCondition implements ISkillCondition
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		final PlayerInstance player = caster.getActingPlayer();
 | 
			
		||||
		final int currentSlotsPercent = calcPercent(player.getInventoryLimit(), player.getInventory().getSize(item -> !item.isQuestItem()));
 | 
			
		||||
		final int currentSlotsPercent = calcPercent(player.getInventoryLimit(), player.getInventory().getNonQuestSize());
 | 
			
		||||
		final int currentWeightPercent = calcPercent(player.getMaxLoad(), player.getCurrentLoad());
 | 
			
		||||
		return (currentSlotsPercent >= _slotsPercent) && (currentWeightPercent >= _weightPercent);
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -393,7 +393,7 @@ public class CastleManorManager implements IXmlReader, IStorable
 | 
			
		||||
					final ItemContainer cwh = owner.getWarehouse();
 | 
			
		||||
					for (CropProcure crop : _procureNext.get(castleId))
 | 
			
		||||
					{
 | 
			
		||||
						if ((crop.getStartAmount() > 0) && (cwh.getItemsByItemId(getSeedByCrop(crop.getId()).getMatureId()) == null))
 | 
			
		||||
						if ((crop.getStartAmount() > 0) && (cwh.getAllItemsByItemId(getSeedByCrop(crop.getId()).getMatureId()) == null))
 | 
			
		||||
						{
 | 
			
		||||
							slots++;
 | 
			
		||||
						}
 | 
			
		||||
 
 | 
			
		||||
@@ -332,7 +332,13 @@ public class PetInstance extends Summon
 | 
			
		||||
	{
 | 
			
		||||
		if (_inventory != null)
 | 
			
		||||
		{
 | 
			
		||||
			return _inventory.getItems(item -> (item.getItemLocation() == ItemLocation.PET_EQUIP) && (item.getItem().getBodyPart() == Item.SLOT_R_HAND)).stream().findAny().orElse(null);
 | 
			
		||||
			for (ItemInstance item : _inventory.getItems())
 | 
			
		||||
			{
 | 
			
		||||
				if ((item.getItemLocation() == ItemLocation.PET_EQUIP) && (item.getItem().getBodyPart() == Item.SLOT_R_HAND))
 | 
			
		||||
				{
 | 
			
		||||
					return item;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return null;
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -12934,7 +12934,7 @@ public class PlayerInstance extends Playable
 | 
			
		||||
	 */
 | 
			
		||||
	public boolean isInventoryUnder90(boolean includeQuestInv)
 | 
			
		||||
	{
 | 
			
		||||
		return (_inventory.getSize(item -> !item.isQuestItem() || includeQuestInv) <= (getInventoryLimit() * 0.9));
 | 
			
		||||
		return (includeQuestInv ? _inventory.getSize() : _inventory.getNonQuestSize()) <= (getInventoryLimit() * 0.9);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	/**
 | 
			
		||||
@@ -12944,7 +12944,7 @@ public class PlayerInstance extends Playable
 | 
			
		||||
	 */
 | 
			
		||||
	public boolean isInventoryUnder80(boolean includeQuestInv)
 | 
			
		||||
	{
 | 
			
		||||
		return (_inventory.getSize(item -> !item.isQuestItem() || includeQuestInv) <= (getInventoryLimit() * 0.8));
 | 
			
		||||
		return (includeQuestInv ? _inventory.getSize() : _inventory.getNonQuestSize()) <= (getInventoryLimit() * 0.8);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public boolean havePetInvItems()
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ public class ConditionPlayerInvSize extends Condition
 | 
			
		||||
	{
 | 
			
		||||
		if (effector.getActingPlayer() != null)
 | 
			
		||||
		{
 | 
			
		||||
			return effector.getActingPlayer().getInventory().getSize(i -> !i.isQuestItem()) <= (effector.getActingPlayer().getInventoryLimit() - _size);
 | 
			
		||||
			return effector.getActingPlayer().getInventory().getNonQuestSize() <= (effector.getActingPlayer().getInventoryLimit() - _size);
 | 
			
		||||
		}
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -44,7 +44,7 @@ public class ConditionTargetInvSize extends Condition
 | 
			
		||||
		if ((effected != null) && effected.isPlayer())
 | 
			
		||||
		{
 | 
			
		||||
			final PlayerInstance target = effected.getActingPlayer();
 | 
			
		||||
			return target.getInventory().getSize(i -> !i.isQuestItem()) <= (target.getInventoryLimit() - _size);
 | 
			
		||||
			return target.getInventory().getNonQuestSize() <= (target.getInventoryLimit() - _size);
 | 
			
		||||
		}
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -24,6 +24,7 @@ import org.l2jmobius.gameserver.model.ItemInfo;
 | 
			
		||||
import org.l2jmobius.gameserver.model.actor.Npc;
 | 
			
		||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
 | 
			
		||||
import org.l2jmobius.gameserver.model.itemcontainer.ItemContainer;
 | 
			
		||||
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * A modified version of {@link MultisellListHolder} that may include altered data of the original and other dynamic data resulted from players' interraction.
 | 
			
		||||
@@ -54,21 +55,24 @@ public class PreparedMultisellListHolder extends MultisellListHolder
 | 
			
		||||
			_itemInfos = new ArrayList<>();
 | 
			
		||||
			
 | 
			
		||||
			// Only do the match up on equippable items that are not currently equipped. For each appropriate item, produce a set of entries for the multisell list.
 | 
			
		||||
			inventory.getItems(item -> !item.isEquipped() && (item.isArmor() || item.isWeapon())).forEach(item ->
 | 
			
		||||
			for (ItemInstance item : inventory.getItems())
 | 
			
		||||
			{
 | 
			
		||||
				// Check ingredients of each entry to see if it's an entry we'd like to include.
 | 
			
		||||
				for (MultisellEntryHolder entry : list.getEntries())
 | 
			
		||||
				if (!item.isEquipped() && (item.isArmor() || item.isWeapon()))
 | 
			
		||||
				{
 | 
			
		||||
					for (ItemChanceHolder holder : entry.getIngredients())
 | 
			
		||||
					// Check ingredients of each entry to see if it's an entry we'd like to include.
 | 
			
		||||
					for (MultisellEntryHolder entry : list.getEntries())
 | 
			
		||||
					{
 | 
			
		||||
						if (holder.getId() == item.getId())
 | 
			
		||||
						for (ItemChanceHolder holder : entry.getIngredients())
 | 
			
		||||
						{
 | 
			
		||||
							_entries.add(entry);
 | 
			
		||||
							_itemInfos.add(new ItemInfo(item));
 | 
			
		||||
							if (holder.getId() == item.getId())
 | 
			
		||||
							{
 | 
			
		||||
								_entries.add(entry);
 | 
			
		||||
								_itemInfos.add(new ItemInfo(item));
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			});
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 
 | 
			
		||||
@@ -1000,7 +1000,7 @@ public abstract class Inventory extends ItemContainer
 | 
			
		||||
		
 | 
			
		||||
		synchronized (item)
 | 
			
		||||
		{
 | 
			
		||||
			if (!_items.containsKey(item.getObjectId()))
 | 
			
		||||
			if (!_items.contains(item))
 | 
			
		||||
			{
 | 
			
		||||
				return null;
 | 
			
		||||
			}
 | 
			
		||||
@@ -1035,7 +1035,7 @@ public abstract class Inventory extends ItemContainer
 | 
			
		||||
		
 | 
			
		||||
		synchronized (item)
 | 
			
		||||
		{
 | 
			
		||||
			if (!_items.containsKey(item.getObjectId()))
 | 
			
		||||
			if (!_items.contains(item))
 | 
			
		||||
			{
 | 
			
		||||
				return null;
 | 
			
		||||
			}
 | 
			
		||||
@@ -2083,7 +2083,7 @@ public abstract class Inventory extends ItemContainer
 | 
			
		||||
	protected void refreshWeight()
 | 
			
		||||
	{
 | 
			
		||||
		long weight = 0;
 | 
			
		||||
		for (ItemInstance item : _items.values())
 | 
			
		||||
		for (ItemInstance item : _items)
 | 
			
		||||
		{
 | 
			
		||||
			if ((item != null) && (item.getItem() != null))
 | 
			
		||||
			{
 | 
			
		||||
@@ -2114,9 +2114,9 @@ public abstract class Inventory extends ItemContainer
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		ItemInstance arrow = null;
 | 
			
		||||
		for (ItemInstance item : getItems())
 | 
			
		||||
		for (ItemInstance item : _items)
 | 
			
		||||
		{
 | 
			
		||||
			if (item.isEtcItem() && (item.getItem().getCrystalTypePlus() == bow.getCrystalTypePlus()) && (item.getEtcItem().getItemType() == EtcItemType.ARROW))
 | 
			
		||||
			if (item.isEtcItem() && (item.getEtcItem().getItemType() == EtcItemType.ARROW) && (item.getItem().getCrystalTypePlus() == bow.getCrystalTypePlus()))
 | 
			
		||||
			{
 | 
			
		||||
				arrow = item;
 | 
			
		||||
				break;
 | 
			
		||||
@@ -2135,9 +2135,9 @@ public abstract class Inventory extends ItemContainer
 | 
			
		||||
	public ItemInstance findBoltForCrossBow(Item crossbow)
 | 
			
		||||
	{
 | 
			
		||||
		ItemInstance bolt = null;
 | 
			
		||||
		for (ItemInstance item : getItems())
 | 
			
		||||
		for (ItemInstance item : _items)
 | 
			
		||||
		{
 | 
			
		||||
			if (item.isEtcItem() && (item.getItem().getCrystalTypePlus() == crossbow.getCrystalTypePlus()) && (item.getEtcItem().getItemType() == EtcItemType.BOLT))
 | 
			
		||||
			if (item.isEtcItem() && (item.getEtcItem().getItemType() == EtcItemType.BOLT) && (item.getItem().getCrystalTypePlus() == crossbow.getCrystalTypePlus()))
 | 
			
		||||
			{
 | 
			
		||||
				bolt = item;
 | 
			
		||||
				break;
 | 
			
		||||
 
 | 
			
		||||
@@ -22,9 +22,6 @@ import java.sql.ResultSet;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.concurrent.ConcurrentHashMap;
 | 
			
		||||
import java.util.function.Predicate;
 | 
			
		||||
import java.util.logging.Level;
 | 
			
		||||
import java.util.logging.Logger;
 | 
			
		||||
 | 
			
		||||
@@ -45,7 +42,8 @@ public abstract class ItemContainer
 | 
			
		||||
{
 | 
			
		||||
	protected static final Logger LOGGER = Logger.getLogger(ItemContainer.class.getName());
 | 
			
		||||
	
 | 
			
		||||
	protected final Map<Integer, ItemInstance> _items = new ConcurrentHashMap<>();
 | 
			
		||||
	protected final List<ItemInstance> _items = new ArrayList<>(1);
 | 
			
		||||
	private int _questItemSize = 0;
 | 
			
		||||
	
 | 
			
		||||
	protected ItemContainer()
 | 
			
		||||
	{
 | 
			
		||||
@@ -77,28 +75,19 @@ public abstract class ItemContainer
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	/**
 | 
			
		||||
	 * @param filterValue
 | 
			
		||||
	 * @param filters
 | 
			
		||||
	 * @return the quantity of quest items in the inventory
 | 
			
		||||
	 */
 | 
			
		||||
	public int getQuestSize()
 | 
			
		||||
	{
 | 
			
		||||
		return _questItemSize;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	/**
 | 
			
		||||
	 * @return the quantity of items in the inventory
 | 
			
		||||
	 */
 | 
			
		||||
	@SafeVarargs
 | 
			
		||||
	public final int getSize(Predicate<ItemInstance> filterValue, Predicate<ItemInstance>... filters)
 | 
			
		||||
	public int getNonQuestSize()
 | 
			
		||||
	{
 | 
			
		||||
		Predicate<ItemInstance> filter = filterValue;
 | 
			
		||||
		for (Predicate<ItemInstance> additionalFilter : filters)
 | 
			
		||||
		{
 | 
			
		||||
			filter = filter.and(additionalFilter);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		int count = 0;
 | 
			
		||||
		for (ItemInstance item : _items.values())
 | 
			
		||||
		{
 | 
			
		||||
			if (filter.test(item))
 | 
			
		||||
			{
 | 
			
		||||
				count++;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return count;
 | 
			
		||||
		return _items.size() - _questItemSize;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	/**
 | 
			
		||||
@@ -107,33 +96,7 @@ public abstract class ItemContainer
 | 
			
		||||
	 */
 | 
			
		||||
	public Collection<ItemInstance> getItems()
 | 
			
		||||
	{
 | 
			
		||||
		return getItems(i -> true);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	/**
 | 
			
		||||
	 * Gets the items in inventory filtered by filter.
 | 
			
		||||
	 * @param filterValue the filter
 | 
			
		||||
	 * @param filters multiple filters
 | 
			
		||||
	 * @return the filtered items in inventory
 | 
			
		||||
	 */
 | 
			
		||||
	@SafeVarargs
 | 
			
		||||
	public final Collection<ItemInstance> getItems(Predicate<ItemInstance> filterValue, Predicate<ItemInstance>... filters)
 | 
			
		||||
	{
 | 
			
		||||
		Predicate<ItemInstance> filter = filterValue;
 | 
			
		||||
		for (Predicate<ItemInstance> additionalFilter : filters)
 | 
			
		||||
		{
 | 
			
		||||
			filter = filter.and(additionalFilter);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		final List<ItemInstance> result = new ArrayList<>();
 | 
			
		||||
		for (ItemInstance item : _items.values())
 | 
			
		||||
		{
 | 
			
		||||
			if (filter.test(item))
 | 
			
		||||
			{
 | 
			
		||||
				result.add(item);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return result;
 | 
			
		||||
		return _items;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	/**
 | 
			
		||||
@@ -142,7 +105,7 @@ public abstract class ItemContainer
 | 
			
		||||
	 */
 | 
			
		||||
	public ItemInstance getItemByItemId(int itemId)
 | 
			
		||||
	{
 | 
			
		||||
		for (ItemInstance item : _items.values())
 | 
			
		||||
		for (ItemInstance item : _items)
 | 
			
		||||
		{
 | 
			
		||||
			if (item.getId() == itemId)
 | 
			
		||||
			{
 | 
			
		||||
@@ -156,9 +119,17 @@ public abstract class ItemContainer
 | 
			
		||||
	 * @param itemId the item Id
 | 
			
		||||
	 * @return the items list from inventory by using its itemId
 | 
			
		||||
	 */
 | 
			
		||||
	public Collection<ItemInstance> getItemsByItemId(int itemId)
 | 
			
		||||
	public Collection<ItemInstance> getAllItemsByItemId(int itemId)
 | 
			
		||||
	{
 | 
			
		||||
		return getItems(i -> i.getId() == itemId);
 | 
			
		||||
		final List<ItemInstance> result = new ArrayList<>();
 | 
			
		||||
		for (ItemInstance item : _items)
 | 
			
		||||
		{
 | 
			
		||||
			if (itemId == item.getId())
 | 
			
		||||
			{
 | 
			
		||||
				result.add(item);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return result;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	/**
 | 
			
		||||
@@ -167,7 +138,14 @@ public abstract class ItemContainer
 | 
			
		||||
	 */
 | 
			
		||||
	public ItemInstance getItemByObjectId(int objectId)
 | 
			
		||||
	{
 | 
			
		||||
		return _items.get(objectId);
 | 
			
		||||
		for (ItemInstance item : _items)
 | 
			
		||||
		{
 | 
			
		||||
			if (objectId == item.getObjectId())
 | 
			
		||||
			{
 | 
			
		||||
				return item;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return null;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	/**
 | 
			
		||||
@@ -191,7 +169,7 @@ public abstract class ItemContainer
 | 
			
		||||
	public long getInventoryItemCount(int itemId, int enchantLevel, boolean includeEquipped)
 | 
			
		||||
	{
 | 
			
		||||
		long count = 0;
 | 
			
		||||
		for (ItemInstance item : _items.values())
 | 
			
		||||
		for (ItemInstance item : _items)
 | 
			
		||||
		{
 | 
			
		||||
			if ((item.getId() == itemId) && ((item.getEnchantLevel() == enchantLevel) || (enchantLevel < 0)) && (includeEquipped || !item.isEquipped()))
 | 
			
		||||
			{
 | 
			
		||||
@@ -210,7 +188,7 @@ public abstract class ItemContainer
 | 
			
		||||
	 */
 | 
			
		||||
	public boolean haveItemForSelfResurrection()
 | 
			
		||||
	{
 | 
			
		||||
		for (ItemInstance item : _items.values())
 | 
			
		||||
		for (ItemInstance item : _items)
 | 
			
		||||
		{
 | 
			
		||||
			if (item.getItem().isAllowSelfResurrection())
 | 
			
		||||
			{
 | 
			
		||||
@@ -412,7 +390,7 @@ public abstract class ItemContainer
 | 
			
		||||
		
 | 
			
		||||
		synchronized (item)
 | 
			
		||||
		{
 | 
			
		||||
			if (!_items.containsKey(item.getObjectId()))
 | 
			
		||||
			if (!_items.contains(item))
 | 
			
		||||
			{
 | 
			
		||||
				return null;
 | 
			
		||||
			}
 | 
			
		||||
@@ -560,9 +538,12 @@ public abstract class ItemContainer
 | 
			
		||||
	 */
 | 
			
		||||
	public void destroyAllItems(String process, PlayerInstance actor, Object reference)
 | 
			
		||||
	{
 | 
			
		||||
		for (ItemInstance item : _items.values())
 | 
			
		||||
		synchronized (_items)
 | 
			
		||||
		{
 | 
			
		||||
			destroyItem(process, item, actor, reference);
 | 
			
		||||
			for (ItemInstance item : _items)
 | 
			
		||||
			{
 | 
			
		||||
				destroyItem(process, item, actor, reference);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
@@ -571,7 +552,7 @@ public abstract class ItemContainer
 | 
			
		||||
	 */
 | 
			
		||||
	public long getAdena()
 | 
			
		||||
	{
 | 
			
		||||
		for (ItemInstance item : _items.values())
 | 
			
		||||
		for (ItemInstance item : _items)
 | 
			
		||||
		{
 | 
			
		||||
			if (item.getId() == Inventory.ADENA_ID)
 | 
			
		||||
			{
 | 
			
		||||
@@ -583,7 +564,7 @@ public abstract class ItemContainer
 | 
			
		||||
	
 | 
			
		||||
	public long getBeautyTickets()
 | 
			
		||||
	{
 | 
			
		||||
		for (ItemInstance item : _items.values())
 | 
			
		||||
		for (ItemInstance item : _items)
 | 
			
		||||
		{
 | 
			
		||||
			if (item.getId() == Inventory.BEAUTY_TICKET_ID)
 | 
			
		||||
			{
 | 
			
		||||
@@ -599,7 +580,15 @@ public abstract class ItemContainer
 | 
			
		||||
	 */
 | 
			
		||||
	protected void addItem(ItemInstance item)
 | 
			
		||||
	{
 | 
			
		||||
		_items.put(item.getObjectId(), item);
 | 
			
		||||
		synchronized (_items)
 | 
			
		||||
		{
 | 
			
		||||
			if (item.isQuestItem())
 | 
			
		||||
			{
 | 
			
		||||
				_questItemSize++;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			_items.add(item);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	/**
 | 
			
		||||
@@ -609,7 +598,15 @@ public abstract class ItemContainer
 | 
			
		||||
	 */
 | 
			
		||||
	protected boolean removeItem(ItemInstance item)
 | 
			
		||||
	{
 | 
			
		||||
		return _items.remove(item.getObjectId()) != null;
 | 
			
		||||
		synchronized (_items)
 | 
			
		||||
		{
 | 
			
		||||
			if (item.isQuestItem())
 | 
			
		||||
			{
 | 
			
		||||
				_questItemSize--;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			return _items.remove(item);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	/**
 | 
			
		||||
@@ -626,7 +623,7 @@ public abstract class ItemContainer
 | 
			
		||||
	{
 | 
			
		||||
		if (getOwner() != null)
 | 
			
		||||
		{
 | 
			
		||||
			for (ItemInstance item : _items.values())
 | 
			
		||||
			for (ItemInstance item : _items)
 | 
			
		||||
			{
 | 
			
		||||
				item.updateDatabase(true);
 | 
			
		||||
				item.stopAllTasks();
 | 
			
		||||
@@ -643,7 +640,7 @@ public abstract class ItemContainer
 | 
			
		||||
	{
 | 
			
		||||
		if (getOwner() != null)
 | 
			
		||||
		{
 | 
			
		||||
			for (ItemInstance item : _items.values())
 | 
			
		||||
			for (ItemInstance item : _items)
 | 
			
		||||
			{
 | 
			
		||||
				item.updateDatabase(true);
 | 
			
		||||
			}
 | 
			
		||||
 
 | 
			
		||||
@@ -67,7 +67,7 @@ public class Mail extends ItemContainer
 | 
			
		||||
	public void setNewMessageId(int messageId)
 | 
			
		||||
	{
 | 
			
		||||
		_messageId = messageId;
 | 
			
		||||
		for (ItemInstance item : _items.values())
 | 
			
		||||
		for (ItemInstance item : _items)
 | 
			
		||||
		{
 | 
			
		||||
			item.setItemLocation(getBaseLocation(), messageId);
 | 
			
		||||
		}
 | 
			
		||||
@@ -76,7 +76,7 @@ public class Mail extends ItemContainer
 | 
			
		||||
	
 | 
			
		||||
	public void returnToWh(ItemContainer wh)
 | 
			
		||||
	{
 | 
			
		||||
		for (ItemInstance item : _items.values())
 | 
			
		||||
		for (ItemInstance item : _items)
 | 
			
		||||
		{
 | 
			
		||||
			if (wh == null)
 | 
			
		||||
			{
 | 
			
		||||
@@ -103,7 +103,7 @@ public class Mail extends ItemContainer
 | 
			
		||||
	@Override
 | 
			
		||||
	public void updateDatabase()
 | 
			
		||||
	{
 | 
			
		||||
		for (ItemInstance item : _items.values())
 | 
			
		||||
		for (ItemInstance item : _items)
 | 
			
		||||
		{
 | 
			
		||||
			item.updateDatabase(true);
 | 
			
		||||
		}
 | 
			
		||||
@@ -146,7 +146,7 @@ public class Mail extends ItemContainer
 | 
			
		||||
	@Override
 | 
			
		||||
	public void deleteMe()
 | 
			
		||||
	{
 | 
			
		||||
		for (ItemInstance item : _items.values())
 | 
			
		||||
		for (ItemInstance item : _items)
 | 
			
		||||
		{
 | 
			
		||||
			item.updateDatabase(true);
 | 
			
		||||
			item.stopAllTasks();
 | 
			
		||||
 
 | 
			
		||||
@@ -114,7 +114,7 @@ public class PetInventory extends Inventory
 | 
			
		||||
	{
 | 
			
		||||
		super.restore();
 | 
			
		||||
		// check for equipped items from other pets
 | 
			
		||||
		for (ItemInstance item : _items.values())
 | 
			
		||||
		for (ItemInstance item : _items)
 | 
			
		||||
		{
 | 
			
		||||
			if (item.isEquipped() && !item.getItem().checkCondition(_owner, _owner, false))
 | 
			
		||||
			{
 | 
			
		||||
@@ -125,7 +125,7 @@ public class PetInventory extends Inventory
 | 
			
		||||
	
 | 
			
		||||
	public void transferItemsToOwner()
 | 
			
		||||
	{
 | 
			
		||||
		for (ItemInstance item : _items.values())
 | 
			
		||||
		for (ItemInstance item : _items)
 | 
			
		||||
		{
 | 
			
		||||
			getOwner().transferItem("return", item.getObjectId(), item.getCount(), getOwner().getOwner().getInventory(), getOwner().getOwner(), getOwner());
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -23,10 +23,8 @@ import java.util.ArrayList;
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Objects;
 | 
			
		||||
import java.util.logging.Level;
 | 
			
		||||
import java.util.logging.Logger;
 | 
			
		||||
import java.util.stream.Collectors;
 | 
			
		||||
 | 
			
		||||
import org.l2jmobius.Config;
 | 
			
		||||
import org.l2jmobius.commons.database.DatabaseFactory;
 | 
			
		||||
@@ -56,9 +54,7 @@ public class PlayerInventory extends Inventory
 | 
			
		||||
	private ItemInstance _adena;
 | 
			
		||||
	private ItemInstance _ancientAdena;
 | 
			
		||||
	private ItemInstance _beautyTickets;
 | 
			
		||||
	
 | 
			
		||||
	private Collection<Integer> _blockItems = null;
 | 
			
		||||
	
 | 
			
		||||
	private InventoryBlockType _blockMode = InventoryBlockType.NONE;
 | 
			
		||||
	
 | 
			
		||||
	public PlayerInventory(PlayerInstance owner)
 | 
			
		||||
@@ -130,7 +126,7 @@ public class PlayerInventory extends Inventory
 | 
			
		||||
	public Collection<ItemInstance> getUniqueItems(boolean allowAdena, boolean allowAncientAdena, boolean onlyAvailable)
 | 
			
		||||
	{
 | 
			
		||||
		final List<ItemInstance> list = new ArrayList<>();
 | 
			
		||||
		for (ItemInstance item : _items.values())
 | 
			
		||||
		for (ItemInstance item : _items)
 | 
			
		||||
		{
 | 
			
		||||
			if (!allowAdena && (item.getId() == ADENA_ID))
 | 
			
		||||
			{
 | 
			
		||||
@@ -157,15 +153,6 @@ public class PlayerInventory extends Inventory
 | 
			
		||||
		return list;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	/**
 | 
			
		||||
	 * @param itemId
 | 
			
		||||
	 * @return
 | 
			
		||||
	 */
 | 
			
		||||
	public Collection<ItemInstance> getAllItemsByItemId(int itemId)
 | 
			
		||||
	{
 | 
			
		||||
		return getAllItemsByItemId(itemId, true);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	/**
 | 
			
		||||
	 * Returns the list of all items in inventory that have a given item id.
 | 
			
		||||
	 * @param itemId : ID of item
 | 
			
		||||
@@ -174,7 +161,15 @@ public class PlayerInventory extends Inventory
 | 
			
		||||
	 */
 | 
			
		||||
	public Collection<ItemInstance> getAllItemsByItemId(int itemId, boolean includeEquipped)
 | 
			
		||||
	{
 | 
			
		||||
		return getItems(i -> (i.getId() == itemId) && (includeEquipped || !i.isEquipped()));
 | 
			
		||||
		final List<ItemInstance> result = new ArrayList<>();
 | 
			
		||||
		for (ItemInstance item : _items)
 | 
			
		||||
		{
 | 
			
		||||
			if ((itemId == item.getId()) && (includeEquipped || !item.isEquipped()))
 | 
			
		||||
			{
 | 
			
		||||
				result.add(item);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return result;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	/**
 | 
			
		||||
@@ -196,7 +191,15 @@ public class PlayerInventory extends Inventory
 | 
			
		||||
	 */
 | 
			
		||||
	public Collection<ItemInstance> getAllItemsByItemId(int itemId, int enchantment, boolean includeEquipped)
 | 
			
		||||
	{
 | 
			
		||||
		return getItems(i -> (i.getId() == itemId) && (i.getEnchantLevel() == enchantment) && (includeEquipped || !i.isEquipped()));
 | 
			
		||||
		final List<ItemInstance> result = new ArrayList<>();
 | 
			
		||||
		for (ItemInstance item : _items)
 | 
			
		||||
		{
 | 
			
		||||
			if ((itemId == item.getId()) && (item.getEnchantLevel() == enchantment) && (includeEquipped || !item.isEquipped()))
 | 
			
		||||
			{
 | 
			
		||||
				result.add(item);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return result;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	/**
 | 
			
		||||
@@ -207,18 +210,24 @@ public class PlayerInventory extends Inventory
 | 
			
		||||
	 */
 | 
			
		||||
	public Collection<ItemInstance> getAvailableItems(boolean allowAdena, boolean allowNonTradeable, boolean feightable)
 | 
			
		||||
	{
 | 
			
		||||
		return getItems(i ->
 | 
			
		||||
		final List<ItemInstance> result = new ArrayList<>();
 | 
			
		||||
		for (ItemInstance item : _items)
 | 
			
		||||
		{
 | 
			
		||||
			if (!i.isAvailable(_owner, allowAdena, allowNonTradeable) || !canManipulateWithItemId(i.getId()))
 | 
			
		||||
			if (!item.isAvailable(_owner, allowAdena, allowNonTradeable) || !canManipulateWithItemId(item.getId()))
 | 
			
		||||
			{
 | 
			
		||||
				return false;
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
			else if (feightable)
 | 
			
		||||
			{
 | 
			
		||||
				return (i.getItemLocation() == ItemLocation.INVENTORY) && i.isFreightable();
 | 
			
		||||
				if ((item.getItemLocation() == ItemLocation.INVENTORY) && item.isFreightable())
 | 
			
		||||
				{
 | 
			
		||||
					result.add(item);
 | 
			
		||||
				}
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
			return true;
 | 
			
		||||
		});
 | 
			
		||||
			result.add(item);
 | 
			
		||||
		}
 | 
			
		||||
		return result;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	/**
 | 
			
		||||
@@ -228,13 +237,19 @@ public class PlayerInventory extends Inventory
 | 
			
		||||
	 */
 | 
			
		||||
	public Collection<TradeItem> getAvailableItems(TradeList tradeList)
 | 
			
		||||
	{
 | 
			
		||||
		//@formatter:off
 | 
			
		||||
		return _items.values().stream()
 | 
			
		||||
			.filter(i -> i.isAvailable(_owner, false, false))
 | 
			
		||||
			.map(tradeList::adjustAvailableItem)
 | 
			
		||||
			.filter(Objects::nonNull)
 | 
			
		||||
			.collect(Collectors.toCollection(ArrayList::new));
 | 
			
		||||
		//@formatter:on
 | 
			
		||||
		final List<TradeItem> result = new ArrayList<>();
 | 
			
		||||
		for (ItemInstance item : _items)
 | 
			
		||||
		{
 | 
			
		||||
			if ((item != null) && item.isAvailable(_owner, false, false))
 | 
			
		||||
			{
 | 
			
		||||
				final TradeItem adjItem = tradeList.adjustAvailableItem(item);
 | 
			
		||||
				if (adjItem != null)
 | 
			
		||||
				{
 | 
			
		||||
					result.add(adjItem);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return result;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	/**
 | 
			
		||||
@@ -244,7 +259,7 @@ public class PlayerInventory extends Inventory
 | 
			
		||||
	public void adjustAvailableItem(TradeItem item)
 | 
			
		||||
	{
 | 
			
		||||
		boolean notAllEquipped = false;
 | 
			
		||||
		for (ItemInstance adjItem : getItemsByItemId(item.getItem().getId()))
 | 
			
		||||
		for (ItemInstance adjItem : getAllItemsByItemId(item.getItem().getId()))
 | 
			
		||||
		{
 | 
			
		||||
			if (adjItem.isEquipable())
 | 
			
		||||
			{
 | 
			
		||||
@@ -726,10 +741,10 @@ public class PlayerInventory extends Inventory
 | 
			
		||||
	{
 | 
			
		||||
		final int[][] paperdoll = new int[Inventory.PAPERDOLL_TOTALSLOTS][4];
 | 
			
		||||
		try (Connection con = DatabaseFactory.getConnection();
 | 
			
		||||
			PreparedStatement statement2 = con.prepareStatement("SELECT object_id,item_id,loc_data,enchant_level FROM items WHERE owner_id=? AND loc='PAPERDOLL'"))
 | 
			
		||||
			PreparedStatement ps = con.prepareStatement("SELECT object_id,item_id,loc_data,enchant_level FROM items WHERE owner_id=? AND loc='PAPERDOLL'"))
 | 
			
		||||
		{
 | 
			
		||||
			statement2.setInt(1, objectId);
 | 
			
		||||
			try (ResultSet invdata = statement2.executeQuery())
 | 
			
		||||
			ps.setInt(1, objectId);
 | 
			
		||||
			try (ResultSet invdata = ps.executeQuery())
 | 
			
		||||
			{
 | 
			
		||||
				while (invdata.next())
 | 
			
		||||
				{
 | 
			
		||||
@@ -827,7 +842,7 @@ public class PlayerInventory extends Inventory
 | 
			
		||||
	
 | 
			
		||||
	public boolean validateCapacity(long slots, boolean questItem)
 | 
			
		||||
	{
 | 
			
		||||
		return ((slots == 0) && !Config.AUTO_LOOT_SLOT_LIMIT) || questItem ? (getSize(item -> item.isQuestItem()) + slots) <= _owner.getQuestInventoryLimit() : (getSize(item -> !item.isQuestItem()) + slots) <= _owner.getInventoryLimit();
 | 
			
		||||
		return ((slots == 0) && !Config.AUTO_LOOT_SLOT_LIMIT) || questItem ? (getQuestSize() + slots) <= _owner.getQuestInventoryLimit() : (getNonQuestSize() + slots) <= _owner.getInventoryLimit();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
@@ -939,7 +954,7 @@ public class PlayerInventory extends Inventory
 | 
			
		||||
	 */
 | 
			
		||||
	public void applyItemSkills()
 | 
			
		||||
	{
 | 
			
		||||
		for (ItemInstance item : _items.values())
 | 
			
		||||
		for (ItemInstance item : _items)
 | 
			
		||||
		{
 | 
			
		||||
			item.giveSkillsToOwner();
 | 
			
		||||
			item.applyEnchantStats();
 | 
			
		||||
 
 | 
			
		||||
@@ -85,7 +85,7 @@ public class PlayerRefund extends ItemContainer
 | 
			
		||||
	{
 | 
			
		||||
		try
 | 
			
		||||
		{
 | 
			
		||||
			for (ItemInstance item : _items.values())
 | 
			
		||||
			for (ItemInstance item : _items)
 | 
			
		||||
			{
 | 
			
		||||
				ItemTable.getInstance().destroyItem("ClearRefund", item, getOwner(), null);
 | 
			
		||||
				item.updateDatabase(true);
 | 
			
		||||
 
 | 
			
		||||
@@ -290,10 +290,13 @@ public class SkillCaster implements Runnable
 | 
			
		||||
		// Reduce talisman mana on skill use
 | 
			
		||||
		if ((_skill.getReferenceItemId() > 0) && (ItemTable.getInstance().getTemplate(_skill.getReferenceItemId()).getBodyPart() == Item.SLOT_DECO))
 | 
			
		||||
		{
 | 
			
		||||
			final ItemInstance talisman = caster.getInventory().getItems(i -> i.getId() == _skill.getReferenceItemId(), ItemInstance::isEquipped).stream().findAny().orElse(null);
 | 
			
		||||
			if (talisman != null)
 | 
			
		||||
			for (ItemInstance item : caster.getInventory().getItems())
 | 
			
		||||
			{
 | 
			
		||||
				talisman.decreaseMana(false, talisman.useSkillDisTime());
 | 
			
		||||
				if (item.isEquipped() && (item.getId() == _skill.getReferenceItemId()))
 | 
			
		||||
				{
 | 
			
		||||
					item.decreaseMana(false, item.useSkillDisTime());
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
 
 | 
			
		||||
@@ -85,7 +85,7 @@ public class RequestChangeAttributeItem implements IClientIncomingPacket
 | 
			
		||||
		player.sendPacket(msg);
 | 
			
		||||
		final InventoryUpdate iu = new InventoryUpdate();
 | 
			
		||||
		iu.addModifiedItem(item);
 | 
			
		||||
		for (ItemInstance i : player.getInventory().getItemsByItemId(_consumeItemId))
 | 
			
		||||
		for (ItemInstance i : player.getInventory().getAllItemsByItemId(_consumeItemId))
 | 
			
		||||
		{
 | 
			
		||||
			iu.addItem(i);
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@ public class BuyList extends AbstractItemPacket
 | 
			
		||||
		_listId = list.getListId();
 | 
			
		||||
		_list = list.getProducts();
 | 
			
		||||
		_money = player.getAdena();
 | 
			
		||||
		_inventorySlots = player.getInventory().getItems(item -> !item.isQuestItem()).size();
 | 
			
		||||
		_inventorySlots = player.getInventory().getNonQuestSize();
 | 
			
		||||
		_castleTaxRate = castleTaxRate;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 
 | 
			
		||||
@@ -16,7 +16,9 @@
 | 
			
		||||
 */
 | 
			
		||||
package org.l2jmobius.gameserver.network.serverpackets;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import org.l2jmobius.Config;
 | 
			
		||||
import org.l2jmobius.commons.network.PacketWriter;
 | 
			
		||||
@@ -30,7 +32,7 @@ import org.l2jmobius.gameserver.network.OutgoingPackets;
 | 
			
		||||
 */
 | 
			
		||||
public class ExBuySellList extends AbstractItemPacket
 | 
			
		||||
{
 | 
			
		||||
	private final Collection<ItemInstance> _sellList;
 | 
			
		||||
	private final List<ItemInstance> _sellList = new ArrayList<>();
 | 
			
		||||
	private Collection<ItemInstance> _refundList = null;
 | 
			
		||||
	private final boolean _done;
 | 
			
		||||
	private final int _inventorySlots;
 | 
			
		||||
@@ -38,8 +40,14 @@ public class ExBuySellList extends AbstractItemPacket
 | 
			
		||||
	public ExBuySellList(PlayerInstance player, boolean done)
 | 
			
		||||
	{
 | 
			
		||||
		final Summon pet = player.getPet();
 | 
			
		||||
		_sellList = player.getInventory().getItems(item -> !item.isEquipped() && item.isSellable() && ((pet == null) || (item.getObjectId() != pet.getControlObjectId())));
 | 
			
		||||
		_inventorySlots = player.getInventory().getItems(item -> !item.isQuestItem()).size();
 | 
			
		||||
		for (ItemInstance item : player.getInventory().getItems())
 | 
			
		||||
		{
 | 
			
		||||
			if (!item.isEquipped() && item.isSellable() && ((pet == null) || (item.getObjectId() != pet.getControlObjectId())))
 | 
			
		||||
			{
 | 
			
		||||
				_sellList.add(item);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		_inventorySlots = player.getInventory().getNonQuestSize();
 | 
			
		||||
		if (player.hasRefund())
 | 
			
		||||
		{
 | 
			
		||||
			_refundList = player.getRefund().getItems();
 | 
			
		||||
 
 | 
			
		||||
@@ -16,7 +16,8 @@
 | 
			
		||||
 */
 | 
			
		||||
package org.l2jmobius.gameserver.network.serverpackets;
 | 
			
		||||
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import org.l2jmobius.commons.network.PacketWriter;
 | 
			
		||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
 | 
			
		||||
@@ -30,13 +31,19 @@ public class ExQuestItemList extends AbstractItemPacket
 | 
			
		||||
{
 | 
			
		||||
	private final int _sendType;
 | 
			
		||||
	private final PlayerInstance _player;
 | 
			
		||||
	private final Collection<ItemInstance> _items;
 | 
			
		||||
	private final List<ItemInstance> _items = new ArrayList<>();
 | 
			
		||||
	
 | 
			
		||||
	public ExQuestItemList(int sendType, PlayerInstance player)
 | 
			
		||||
	{
 | 
			
		||||
		_sendType = sendType;
 | 
			
		||||
		_player = player;
 | 
			
		||||
		_items = player.getInventory().getItems(ItemInstance::isQuestItem);
 | 
			
		||||
		for (ItemInstance item : player.getInventory().getItems())
 | 
			
		||||
		{
 | 
			
		||||
			if (item.isQuestItem())
 | 
			
		||||
			{
 | 
			
		||||
				_items.add(item);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
 
 | 
			
		||||
@@ -16,7 +16,8 @@
 | 
			
		||||
 */
 | 
			
		||||
package org.l2jmobius.gameserver.network.serverpackets;
 | 
			
		||||
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import org.l2jmobius.commons.network.PacketWriter;
 | 
			
		||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
 | 
			
		||||
@@ -25,12 +26,18 @@ import org.l2jmobius.gameserver.network.OutgoingPackets;
 | 
			
		||||
 | 
			
		||||
public class ExShowBaseAttributeCancelWindow implements IClientOutgoingPacket
 | 
			
		||||
{
 | 
			
		||||
	private final Collection<ItemInstance> _items;
 | 
			
		||||
	private final List<ItemInstance> _items = new ArrayList<>();
 | 
			
		||||
	private long _price;
 | 
			
		||||
	
 | 
			
		||||
	public ExShowBaseAttributeCancelWindow(PlayerInstance player)
 | 
			
		||||
	{
 | 
			
		||||
		_items = player.getInventory().getItems(ItemInstance::hasAttributes);
 | 
			
		||||
		for (ItemInstance item : player.getInventory().getItems())
 | 
			
		||||
		{
 | 
			
		||||
			if (item.hasAttributes())
 | 
			
		||||
			{
 | 
			
		||||
				_items.add(item);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
 
 | 
			
		||||
@@ -16,8 +16,8 @@
 | 
			
		||||
 */
 | 
			
		||||
package org.l2jmobius.gameserver.network.serverpackets;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.stream.Collectors;
 | 
			
		||||
 | 
			
		||||
import org.l2jmobius.commons.network.PacketWriter;
 | 
			
		||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
 | 
			
		||||
@@ -28,13 +28,19 @@ public class ItemList extends AbstractItemPacket
 | 
			
		||||
{
 | 
			
		||||
	private final int _sendType;
 | 
			
		||||
	private final PlayerInstance _player;
 | 
			
		||||
	private final List<ItemInstance> _items;
 | 
			
		||||
	private final List<ItemInstance> _items = new ArrayList<>();
 | 
			
		||||
	
 | 
			
		||||
	public ItemList(int sendType, PlayerInstance player)
 | 
			
		||||
	{
 | 
			
		||||
		_sendType = sendType;
 | 
			
		||||
		_player = player;
 | 
			
		||||
		_items = player.getInventory().getItems(item -> !item.isQuestItem()).stream().collect(Collectors.toList());
 | 
			
		||||
		for (ItemInstance item : player.getInventory().getItems())
 | 
			
		||||
		{
 | 
			
		||||
			if (!item.isQuestItem())
 | 
			
		||||
			{
 | 
			
		||||
				_items.add(item);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user