package org.bukkit.inventory; import com.google.common.base.Preconditions; import java.util.ArrayList; import java.util.List; /** * Represents a merchant's trade. * * Trades can take one or two ingredients, and provide one result. The * ingredients' Itemstack amounts are respected in the trade. *
* A trade has a limited number of uses, after which the trade can no longer be * used, unless the player uses a different trade, which will cause its maximum * uses to increase. *
* A trade may or may not reward experience for being completed. * * @see org.bukkit.event.entity.VillagerReplenishTradeEvent */ public class MerchantRecipe implements Recipe { private ItemStack result; private List ingredients = new ArrayList(); private int uses; private int maxUses; private boolean experienceReward; public MerchantRecipe(ItemStack result, int maxUses) { this(result, 0, maxUses, false); } public MerchantRecipe(ItemStack result, int uses, int maxUses, boolean experienceReward) { this.result = result; this.uses = uses; this.maxUses = maxUses; this.experienceReward = experienceReward; } @Override public ItemStack getResult() { return result; } public void addIngredient(ItemStack item) { Preconditions.checkState(ingredients.size() < 2, "MerchantRecipe can only have 2 ingredients"); ingredients.add(item.clone()); } public void removeIngredient(int index) { ingredients.remove(index); } public void setIngredients(List ingredients) { this.ingredients = new ArrayList(); for (ItemStack item : ingredients) { this.ingredients.add(item.clone()); } } public List getIngredients() { List copy = new ArrayList(); for (ItemStack item : ingredients) { copy.add(item.clone()); } return copy; } /** * Get the number of times this trade has been used. * * @return the number of uses */ public int getUses() { return uses; } /** * Set the number of times this trade has been used. * * @param uses the number of uses */ public void setUses(int uses) { this.uses = uses; } /** * Get the maximum number of uses this trade has. *
* The maximum uses of this trade may increase when a player trades with the * owning merchant. * * @return the maximum number of uses */ public int getMaxUses() { return maxUses; } /** * Set the maximum number of uses this trade has. * * @param maxUses the maximum number of time this trade can be used */ public void setMaxUses(int maxUses) { this.maxUses = maxUses; } /** * Whether to reward experience for the trade. * * @return whether to reward experience for completing this trade */ public boolean hasExperienceReward() { return experienceReward; } /** * Set whether to reward experience for the trade. * * @param flag whether to reward experience for completing this trade */ public void setExperienceReward(boolean flag) { this.experienceReward = flag; } }