All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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