Removal of enhanced inventory methods.
This commit is contained in:
parent
210717c77f
commit
1b68632161
@ -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++;
|
||||
}
|
||||
|
@ -331,7 +331,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;
|
||||
}
|
||||
|
@ -12949,7 +12949,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);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -12959,7 +12959,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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -881,7 +881,7 @@ public abstract class Inventory extends ItemContainer
|
||||
|
||||
synchronized (item)
|
||||
{
|
||||
if (!_items.containsKey(item.getObjectId()))
|
||||
if (!_items.contains(item))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
@ -916,7 +916,7 @@ public abstract class Inventory extends ItemContainer
|
||||
|
||||
synchronized (item)
|
||||
{
|
||||
if (!_items.containsKey(item.getObjectId()))
|
||||
if (!_items.contains(item))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
@ -1909,7 +1909,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))
|
||||
{
|
||||
@ -1940,9 +1940,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;
|
||||
@ -1961,9 +1961,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[33][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;
|
||||
@ -29,12 +30,18 @@ import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
public class ExQuestItemList extends AbstractItemPacket
|
||||
{
|
||||
private final PlayerInstance _player;
|
||||
private final Collection<ItemInstance> _items;
|
||||
private final List<ItemInstance> _items = new ArrayList<>();
|
||||
|
||||
public ExQuestItemList(PlayerInstance player)
|
||||
{
|
||||
_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;
|
||||
@ -27,14 +27,20 @@ import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
public class ItemList extends AbstractItemPacket
|
||||
{
|
||||
private final PlayerInstance _player;
|
||||
private final List<ItemInstance> _items;
|
||||
private final boolean _showWindow;
|
||||
private final List<ItemInstance> _items = new ArrayList<>();
|
||||
|
||||
public ItemList(PlayerInstance player, boolean showWindow)
|
||||
{
|
||||
_player = player;
|
||||
_showWindow = showWindow;
|
||||
_items = player.getInventory().getItems(item -> !item.isQuestItem()).stream().collect(Collectors.toList());
|
||||
for (ItemInstance item : player.getInventory().getItems())
|
||||
{
|
||||
if (!item.isQuestItem())
|
||||
{
|
||||
_items.add(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -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++;
|
||||
}
|
||||
|
@ -331,7 +331,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;
|
||||
}
|
||||
|
@ -12956,7 +12956,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);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -12966,7 +12966,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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -887,7 +887,7 @@ public abstract class Inventory extends ItemContainer
|
||||
|
||||
synchronized (item)
|
||||
{
|
||||
if (!_items.containsKey(item.getObjectId()))
|
||||
if (!_items.contains(item))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
@ -922,7 +922,7 @@ public abstract class Inventory extends ItemContainer
|
||||
|
||||
synchronized (item)
|
||||
{
|
||||
if (!_items.containsKey(item.getObjectId()))
|
||||
if (!_items.contains(item))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
@ -1915,7 +1915,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))
|
||||
{
|
||||
@ -1946,9 +1946,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;
|
||||
@ -1967,9 +1967,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[33][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;
|
||||
@ -29,12 +30,18 @@ import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
public class ExQuestItemList extends AbstractItemPacket
|
||||
{
|
||||
private final PlayerInstance _player;
|
||||
private final Collection<ItemInstance> _items;
|
||||
private final List<ItemInstance> _items = new ArrayList<>();
|
||||
|
||||
public ExQuestItemList(PlayerInstance player)
|
||||
{
|
||||
_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;
|
||||
@ -27,14 +27,20 @@ import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
public class ItemList extends AbstractItemPacket
|
||||
{
|
||||
private final PlayerInstance _player;
|
||||
private final List<ItemInstance> _items;
|
||||
private final boolean _showWindow;
|
||||
private final List<ItemInstance> _items = new ArrayList<>();
|
||||
|
||||
public ItemList(PlayerInstance player, boolean showWindow)
|
||||
{
|
||||
_player = player;
|
||||
_showWindow = showWindow;
|
||||
_items = player.getInventory().getItems(item -> !item.isQuestItem()).stream().collect(Collectors.toList());
|
||||
for (ItemInstance item : player.getInventory().getItems())
|
||||
{
|
||||
if (!item.isQuestItem())
|
||||
{
|
||||
_items.add(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -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++;
|
||||
}
|
||||
|
@ -331,7 +331,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;
|
||||
}
|
||||
|
@ -12958,7 +12958,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);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -12968,7 +12968,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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -887,7 +887,7 @@ public abstract class Inventory extends ItemContainer
|
||||
|
||||
synchronized (item)
|
||||
{
|
||||
if (!_items.containsKey(item.getObjectId()))
|
||||
if (!_items.contains(item))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
@ -922,7 +922,7 @@ public abstract class Inventory extends ItemContainer
|
||||
|
||||
synchronized (item)
|
||||
{
|
||||
if (!_items.containsKey(item.getObjectId()))
|
||||
if (!_items.contains(item))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
@ -1915,7 +1915,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))
|
||||
{
|
||||
@ -1946,9 +1946,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;
|
||||
@ -1967,9 +1967,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[33][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;
|
||||
@ -29,12 +30,18 @@ import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
public class ExQuestItemList extends AbstractItemPacket
|
||||
{
|
||||
private final PlayerInstance _player;
|
||||
private final Collection<ItemInstance> _items;
|
||||
private final List<ItemInstance> _items = new ArrayList<>();
|
||||
|
||||
public ExQuestItemList(PlayerInstance player)
|
||||
{
|
||||
_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;
|
||||
@ -27,14 +27,20 @@ import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
public class ItemList extends AbstractItemPacket
|
||||
{
|
||||
private final PlayerInstance _player;
|
||||
private final List<ItemInstance> _items;
|
||||
private final boolean _showWindow;
|
||||
private final List<ItemInstance> _items = new ArrayList<>();
|
||||
|
||||
public ItemList(PlayerInstance player, boolean showWindow)
|
||||
{
|
||||
_player = player;
|
||||
_showWindow = showWindow;
|
||||
_items = player.getInventory().getItems(item -> !item.isQuestItem()).stream().collect(Collectors.toList());
|
||||
for (ItemInstance item : player.getInventory().getItems())
|
||||
{
|
||||
if (!item.isQuestItem())
|
||||
{
|
||||
_items.add(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -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++;
|
||||
}
|
||||
|
@ -331,7 +331,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;
|
||||
}
|
||||
|
@ -12938,7 +12938,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);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -12948,7 +12948,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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -887,7 +887,7 @@ public abstract class Inventory extends ItemContainer
|
||||
|
||||
synchronized (item)
|
||||
{
|
||||
if (!_items.containsKey(item.getObjectId()))
|
||||
if (!_items.contains(item))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
@ -922,7 +922,7 @@ public abstract class Inventory extends ItemContainer
|
||||
|
||||
synchronized (item)
|
||||
{
|
||||
if (!_items.containsKey(item.getObjectId()))
|
||||
if (!_items.contains(item))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
@ -1915,7 +1915,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))
|
||||
{
|
||||
@ -1946,9 +1946,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;
|
||||
@ -1967,9 +1967,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[33][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;
|
||||
@ -29,12 +30,18 @@ import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
public class ExQuestItemList extends AbstractItemPacket
|
||||
{
|
||||
private final PlayerInstance _player;
|
||||
private final Collection<ItemInstance> _items;
|
||||
private final List<ItemInstance> _items = new ArrayList<>();
|
||||
|
||||
public ExQuestItemList(PlayerInstance player)
|
||||
{
|
||||
_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;
|
||||
@ -27,14 +27,20 @@ import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
public class ItemList extends AbstractItemPacket
|
||||
{
|
||||
private final PlayerInstance _player;
|
||||
private final List<ItemInstance> _items;
|
||||
private final boolean _showWindow;
|
||||
private final List<ItemInstance> _items = new ArrayList<>();
|
||||
|
||||
public ItemList(PlayerInstance player, boolean showWindow)
|
||||
{
|
||||
_player = player;
|
||||
_showWindow = showWindow;
|
||||
_items = player.getInventory().getItems(item -> !item.isQuestItem()).stream().collect(Collectors.toList());
|
||||
for (ItemInstance item : player.getInventory().getItems())
|
||||
{
|
||||
if (!item.isQuestItem())
|
||||
{
|
||||
_items.add(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -12925,7 +12925,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);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -12935,7 +12935,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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -932,7 +932,7 @@ public abstract class Inventory extends ItemContainer
|
||||
|
||||
synchronized (item)
|
||||
{
|
||||
if (!_items.containsKey(item.getObjectId()))
|
||||
if (!_items.contains(item))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
@ -967,7 +967,7 @@ public abstract class Inventory extends ItemContainer
|
||||
|
||||
synchronized (item)
|
||||
{
|
||||
if (!_items.containsKey(item.getObjectId()))
|
||||
if (!_items.contains(item))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
@ -1962,7 +1962,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))
|
||||
{
|
||||
@ -1993,9 +1993,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;
|
||||
@ -2014,9 +2014,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);
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user