package forge.card.mana;
/**
* <p>Abstract Mana_Part class.</p>
*
* @author Forge
* @version $Id: $
*/
public abstract class Mana_Part {
/** {@inheritDoc} */
@Override
abstract public String toString();
/**
* <p>reduce.</p>
*
* @param mana a {@link java.lang.String} object.
*/
abstract public void reduce(String mana);
/**
* <p>reduce.</p>
*
* @param mana a {@link forge.card.mana.Mana} object.
*/
abstract public void reduce(Mana mana);
/**
* <p>isPaid.</p>
*
* @return a boolean.
*/
abstract public boolean isPaid();
/**
* <p>isNeeded.</p>
*
* @param mana a {@link java.lang.String} object.
* @return a boolean.
*/
abstract public boolean isNeeded(String mana);
/**
* <p>isNeeded.</p>
*
* @param mana a {@link forge.card.mana.Mana} object.
* @return a boolean.
*/
abstract public boolean isNeeded(Mana mana);
/**
* <p>isColor.</p>
*
* @param mana a {@link java.lang.String} object.
* @return a boolean.
*/
abstract public boolean isColor(String mana);
/**
* <p>isColor.</p>
*
* @param mana a {@link forge.card.mana.Mana} object.
* @return a boolean.
*/
abstract public boolean isColor(Mana mana);
/**
* <p>isEasierToPay.</p>
*
* @param mp a {@link forge.card.mana.Mana_Part} object.
* @return a boolean.
*/
abstract public boolean isEasierToPay(Mana_Part mp);
/**
* <p>getConvertedManaCost.</p>
*
* @return a int.
*/
abstract public int getConvertedManaCost();
/**
* <p>checkSingleMana.</p>
*
* @param m a {@link java.lang.String} object.
*/
public static void checkSingleMana(String m) {
if (m.length() != 1) throw new RuntimeException(
"Mana_Part : checkMana() error, argument mana is not of length 1, mana - " + m);
if (!(m.equals("G") || m.equals("U") || m.equals("W") || m.equals("B") || m.equals("R") || m.equals("1") || m.equals("S") || m.startsWith("P")))
throw new RuntimeException(
"Mana_Part : checkMana() error, argument mana is invalid mana, mana - " + m);
}
}