package com.comphenix.xp.rewards;
import java.util.Collection;
import java.util.Random;
import com.comphenix.xp.expressions.NamedParameter;
import com.comphenix.xp.lookup.Multipliable;
/**
* Represents a resource holder factory.
* <p>
* Note that equals() and hashCode() MUST be overwritten for the message sub-system
* to function correctly.
*
* @author Kristian
*/
public interface ResourceFactory extends Multipliable<ResourceFactory> {
/**
* Retrieve a resource holder, using the given random number generator to determine
* the amount of the given resource to return.
*
* @param params - named parameters that may be used to compute the amount of resources.
* @param rnd - random number generator to use.
* @return A resource holder.
*/
public ResourceHolder getResource(Collection<NamedParameter> params, Random rnd);
/**
* Retrieve a resource holder, using the given random number generator to determine
* the amount of the given resource to return.
*
* @param params - named parameters that may be used to compute the amount of resources.
* @param rnd - random number generator to use.
* @param count - resource amount multiplier.
* @return A resource holder.
*/
public ResourceHolder getResource(Collection<NamedParameter> params, Random rnd, int count);
/**
* Calculates the minimum amount of resources that may be awarded.
* @param params - named parameters that may be used to compute the amount of resources.
* @param count - resource amount multiplier.
* @return A resource holder.
*/
public ResourceHolder getMinimum(Collection<NamedParameter> params, int count);
/**
* Calculates the maximum amount of resources that may be awarded.
* @param params - named parameters that may be used to compute the amount of resources.
* @param count - resource amount multiplier.
* @return A resource holder.
*/
public ResourceHolder getMaximum(Collection<NamedParameter> params, int count);
}