
dcutils.cards.mtg.Card Maven / Gradle / Ivy
package dcutils.cards.mtg;
// Import Java JDK Classes
import java.util.HashSet;
import java.util.Set;
// Import DCUtils Classes
import dcutils.tuples.Pair;
/**
* Represents a single card in Magic the Gathering.
* @author dca
*/
public abstract class Card implements PrettyPrintable {
private String cardName;
private ManaCost manaCost;
private Rarity rarity;
private Expansion expansion;
private String typeLine;
private String cardText;
private String flavorText;
private boolean legendary = false;
private Integer multiverseId = null;
@SuppressWarnings("OverridableMethodCallInConstructor")
public Card(
String cardName,
Rarity rarity,
Expansion expansion,
String typeLine
) {
setCardName(cardName);
setRarity(rarity);
setExpansion(expansion);
setTypeLine(typeLine);
} // END constructor
@SuppressWarnings("OverridableMethodCallInConstructor")
public Card(
String cardName,
ManaCost manaCost,
Rarity rarity,
Expansion expansion,
String typeLine
) {
setCardName(cardName);
setManaCost(manaCost);
setRarity(rarity);
setExpansion(expansion);
setTypeLine(typeLine);
} // END constructor
public String getCardName() {
return this.cardName;
} // END getCardName
public Card setCardName(String name) {
this.cardName = name;
return this;
} // END setCardName
public ManaCost getManaCost() {
return this.manaCost;
} // END getManaCost
public Card setManaCost(ManaCost mana) {
this.manaCost = mana;
return this;
} // END setManaCost
public boolean hasManaCost() {
return null != getManaCost();
} // END hasManaCost
public Rarity getRarity() {
return this.rarity;
} // END getRarity
public Card setRarity(Rarity rarity) {
this.rarity = rarity;
return this;
} // END setRarity
public Expansion getExpansion() {
return this.expansion;
} // END getExpansion
public Card setExpansion(Expansion expansion) {
this.expansion = expansion;
return this;
} // END setExpansion
public Pair getRarityAndExpansion() {
return new Pair<>(getRarity(), getExpansion());
} // END getRarityAndExpansion
public String getTypeLine() {
final String prefix = "Legendary ";
return (isLegendary() && !this.typeLine.startsWith(prefix) ? prefix : "") + this.typeLine;
} // END getTypeLine
public Card setTypeLine(String line) {
this.typeLine = line;
return this;
} // END setTypeLine
public String getCardText() {
return this.cardText;
} // END getCardText
public Card setCardText(String text) {
this.cardText = text;
return this;
} // END setCardText
public boolean hasCardText() {
final String text = getCardText();
return null != text && !"".equals(text);
} // END hasCardText
public String getFlavorText() {
return this.flavorText;
} // END getFlavorText
public Card setFlavorText(String text) {
this.flavorText = text;
return this;
} // END setFlavorText
public boolean hasFlavorText() {
final String text = getFlavorText();
return null != text && !"".equals(text);
} // END hasFlavorText
public Card setLegendary() {
this.legendary = true;
return this;
} // END setLegendary
public boolean isLegendary() {
return this.legendary;
} // END isLegendary
public Integer getMultiverseId() {
return this.multiverseId;
} // END getMultiverseId
public Card setMultiverseId(Integer id) {
this.multiverseId = id;
return this;
} // END setMultiverseId
public boolean hasMultiverseId() {
return null != getMultiverseId();
} // END hasMultiverseId
@Override
public String toString() {
StringBuffer buffer = new StringBuffer(1024);
buffer.append(this.getClass().getSimpleName()); buffer.append(" [");
buffer.append(String.format("%s = %s", "cardName", getCardName()));
buffer.append(", ");
buffer.append(String.format("%s = %s", "manaCost", getManaCost()));
buffer.append(", ");
buffer.append(String.format("%s = %s", "rarity", getRarity()));
buffer.append(", ");
buffer.append(String.format("%s = %s", "expansion", getExpansion()));
buffer.append(", ");
buffer.append(String.format("%s = %s", "typeLine", getTypeLine()));
if(hasCardText()) buffer.append(", ");
if(hasCardText()) buffer.append(String.format("%s = %s", "cardText", getCardText()));
if(hasFlavorText()) buffer.append(", ");
if(hasFlavorText()) buffer.append(String.format("%s = %s", "flavorText", getFlavorText()));
if(hasMultiverseId()) buffer.append(", ");
if(hasMultiverseId()) buffer.append(String.format("%s = %s", "multiverseId", getMultiverseId()));
buffer.append("]");
return buffer.toString();
} // END toString
@Override
public boolean equals(Object obj) {
if(null == obj) {
return false;
} else if(obj instanceof Card) {
Card card = (Card)obj;
return this.toString().equals(card.toString());
} else {
return false;
} // END if/else
} // END equals
@Override
public int hashCode() {
int hashCode = 101;
hashCode = (11 * hashCode) + (null == getCardName() ? -1 : getCardName().hashCode());
hashCode = (11 * hashCode) + (null == getManaCost() ? -1 : getManaCost().hashCode());
hashCode = (11 * hashCode) + (null == getRarity() ? -1 : getRarity().hashCode());
hashCode = (11 * hashCode) + (null == getExpansion() ? -1 : getExpansion().hashCode());
hashCode = (11 * hashCode) + (null == getTypeLine() ? -1 : getTypeLine().hashCode());
hashCode = (11 * hashCode) + (null == getCardText() ? -1 : getCardText().hashCode());
hashCode = (11 * hashCode) + (null == getFlavorText() ? -1 : getFlavorText().hashCode());
return hashCode;
} // END hashCode
@Override
public String prettyPrint() {
StringBuffer buffer = new StringBuffer(1024);
buffer.append(this.getClass().getSimpleName()); buffer.append(String.format(" [%n"));
buffer.append(String.format("\t%s = %s", "cardName", getCardName()));
buffer.append(String.format(",%n"));
buffer.append(String.format("\t%s = %s", "manaCost", getManaCost().prettyPrint().replace("\t", "\t\t")));
buffer.append(String.format(",%n"));
buffer.append(String.format("\t%s = %s", "rarity", getRarity()));
buffer.append(String.format(",%n"));
buffer.append(String.format("\t%s = %s", "expansion", getExpansion()));
buffer.append(String.format(",%n"));
buffer.append(String.format("\t%s = %s", "typeLine", getTypeLine()));
if(hasCardText()) buffer.append(String.format(",%n"));
if(hasCardText()) buffer.append(String.format("\t%s = %s", "cardText", getCardText()).replace(String.format("%n"), String.format("%n\t\t")));
if(hasFlavorText()) buffer.append(String.format(",%n"));
if(hasFlavorText()) buffer.append(String.format("\t%s = %s", "flavorText", getFlavorText()).replace(String.format("%n"), String.format("%n\t\t")));
if(hasMultiverseId()) buffer.append(String.format(",%n"));
if(hasMultiverseId()) buffer.append(String.format("\t%s = %s", "multiverseId", getMultiverseId()));
buffer.append(String.format("%n]"));
return buffer.toString();
} // END prettyPrint
public boolean isColorless() {
if(this instanceof BasicLandCard) return false;
else if(this instanceof LandCard) return false;
else if(null == manaCost) return true;
else return manaCost.isColorless();
} // END isColorless
public boolean isWhite() {
if(this instanceof BasicLandCard) return BaseMana.WHITE == BasicLandCard.class.cast(this).getMana();
else if(this instanceof LandCard) return false;
else if(null == manaCost) return false;
else return manaCost.isWhite();
} // END isWhite
public boolean isBlue() {
if(this instanceof BasicLandCard) return BaseMana.BLUE == BasicLandCard.class.cast(this).getMana();
else if(this instanceof LandCard) return false;
else if(null == manaCost) return false;
else return manaCost.isBlue();
} // END isBlue
public boolean isGreen() {
if(this instanceof BasicLandCard) return BaseMana.GREEN == BasicLandCard.class.cast(this).getMana();
else if(this instanceof LandCard) return false;
else if(null == manaCost) return false;
else return manaCost.isGreen();
} // END isGreen
public boolean isRed() {
if(this instanceof BasicLandCard) return BaseMana.RED == BasicLandCard.class.cast(this).getMana();
else if(this instanceof LandCard) return false;
else if(null == manaCost) return false;
else return manaCost.isRed();
} // END isRed
public boolean isBlack() {
if(this instanceof BasicLandCard) return BaseMana.BLACK == BasicLandCard.class.cast(this).getMana();
else if(this instanceof LandCard) return false;
else if(null == manaCost) return false;
else return manaCost.isBlack();
} // END isBlack
public boolean isMulticolor() {
if(this instanceof BasicLandCard) return false;
else if(this instanceof LandCard) return false;
else if(null == manaCost) return false;
else return manaCost.isMulticolor();
} // END isMulticolor
} // END class Card
© 2015 - 2025 Weber Informatics LLC | Privacy Policy