package forge.quest.data.item;
import forge.AllZone;
import forge.quest.data.bazaar.QuestStallPurchasable;
/**
* <p>Abstract QuestItemAbstract class.</p>
*
* @author Forge
* @version $Id: $
*/
public abstract class QuestItemAbstract implements QuestStallPurchasable {
private int level = 0;
private String name;
private String shopName;
private int maxLevel = 1;
/**
* <p>Constructor for QuestItemAbstract.</p>
*
* @param name a {@link java.lang.String} object.
* @param shopName a {@link java.lang.String} object.
*/
protected QuestItemAbstract(String name, String shopName) {
this.name = name;
this.shopName = shopName;
}
/**
* <p>Constructor for QuestItemAbstract.</p>
*
* @param name a {@link java.lang.String} object.
* @param shopName a {@link java.lang.String} object.
* @param maxLevel a int.
*/
protected QuestItemAbstract(String name, String shopName, int maxLevel) {
this.name = name;
this.shopName = shopName;
this.maxLevel = maxLevel;
}
/**
* This is the name shared across all item levels e.g., "Estates"
*
* @return a {@link java.lang.String} object.
*/
public final String getName() {
return name;
}
/**
* This is the name used in purchasing the item e.g.,"Estates Training 1"
*
* @return a {@link java.lang.String} object.
*/
public String getPurchaseName() {
return name;
}
/**
* <p>getStallName.</p>
*
* @return a {@link java.lang.String} object.
*/
public String getStallName() {
return shopName;
}
/**
* This method will be invoked when an item is bought in a shop.
*/
public void onPurchase() {
int currentLevel = AllZone.getQuestData().getInventory().getItemLevel(name);
AllZone.getQuestData().getInventory().setItemLevel(name, currentLevel + 1);
}
/**
* <p>isAvailableForPurchase.</p>
*
* @return a boolean.
*/
public boolean isAvailableForPurchase() {
return AllZone.getQuestData().getInventory().getItemLevel(name) < maxLevel;
}
/**
* <p>Getter for the field <code>level</code>.</p>
*
* @return a int.
*/
public int getLevel() {
return level;
}
/**
* <p>Setter for the field <code>level</code>.</p>
*
* @param level a int.
*/
public void setLevel(int level) {
this.level = level;
}
/**
* <p>Getter for the field <code>maxLevel</code>.</p>
*
* @return a int.
*/
public int getMaxLevel() {
return maxLevel;
}
/**
* <p>isLeveledItem.</p>
*
* @return a boolean.
*/
public boolean isLeveledItem() {
return maxLevel == 1;
}
/**
* <p>getPurchaseDescription.</p>
*
* @return a {@link java.lang.String} object.
*/
public abstract String getPurchaseDescription();
/**
* <p>getImageName.</p>
*
* @return a {@link java.lang.String} object.
*/
public abstract String getImageName();
/**
* <p>getPrice.</p>
*
* @return a int.
*/
public abstract int getPrice();
/** {@inheritDoc} */
public int compareTo(Object o) {
QuestStallPurchasable q = (QuestStallPurchasable) o;
return this.getPurchaseName().compareTo(q.getPurchaseName());
}
}