/*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see .
*/
package com.l2jserver.gameserver.model.multisell;
import static com.l2jserver.gameserver.model.itemcontainer.PcInventory.ADENA_ID;
import java.util.ArrayList;
import com.l2jserver.gameserver.model.L2ItemInstance;
/**
*
* @author DS
*
*/
public class PreparedEntry extends Entry
{
private long _taxAmount = 0;
public PreparedEntry(Entry template, L2ItemInstance item, boolean applyTaxes, boolean maintainEnchantment, double taxRate)
{
_entryId = template.getEntryId() * 100000;
if (maintainEnchantment && item != null)
_entryId += item.getEnchantLevel();
ItemInfo info = null;
long adenaAmount = 0;
_ingredients = new ArrayList(template.getIngredients().size());
for (Ingredient ing : template.getIngredients())
{
if (ing.getItemId() == ADENA_ID)
{
// Tax ingredients added only if taxes enabled
if (ing.isTaxIngredient())
{
// if taxes are to be applied, modify/add the adena count based on the template adena/ancient adena count
if (applyTaxes)
_taxAmount += Math.round(ing.getItemCount() * taxRate);
}
else
adenaAmount += ing.getItemCount();
continue; // do not yet add this adena amount to the list as non-taxIngredient adena might be entered later (order not guaranteed)
}
else if (maintainEnchantment
&& item != null
&& ing.isArmorOrWeapon())
{
info = new ItemInfo(item);
final Ingredient newIngredient = ing.clone();
newIngredient.setItemInfo(info);
_ingredients.add(newIngredient);
}
else
_ingredients.add(ing);
}
// now add the adena, if any.
adenaAmount += _taxAmount; // do not forget tax
if (adenaAmount > 0)
_ingredients.add(new Ingredient(ADENA_ID, adenaAmount, false, false));
// now copy products
_products = new ArrayList(template.getProducts().size());
for (Ingredient ing : template.getProducts())
{
if (!ing.isStackable())
_stackable = false;
if (maintainEnchantment && ing.isArmorOrWeapon())
{
final Ingredient newProduct = ing.clone();
newProduct.setItemInfo(info);
_products.add(newProduct);
}
else
_products.add(ing);
}
}
@Override
public final long getTaxAmount()
{
return _taxAmount;
}
}