add override annotation to overridden methods

master
melvinzhang 2017-06-17 11:19:03 +08:00
parent 9551cb4748
commit bbbdcac9ef
316 changed files with 1344 additions and 0 deletions

View File

@ -11,6 +11,7 @@ public class ArtificialChoiceResults {
this.choiceResults=choiceResults;
}
@Override
public String toString() {
final StringBuilder buffer=new StringBuilder();
buffer.append('[').append(worker).append('/').append(gameCount).append('/').append(aiScore).append(']');

View File

@ -857,6 +857,7 @@ class MCTSGameTree implements Iterable<MCTSGameTree> {
return children.get(0);
}
@Override
public Iterator<MCTSGameTree> iterator() {
return children.iterator();
}

View File

@ -35,6 +35,7 @@ public class MMAB extends MagicAI {
MagicGameLog.log(message);
}
@Override
public Object[] findNextEventChoiceResults(final MagicGame sourceGame, final MagicPlayer scorePlayer) {
final long startTime = System.currentTimeMillis();

View File

@ -19,6 +19,7 @@ public class VegasScore {
return choiceResults;
}
@Override
public String toString() {
final StringBuilder buffer=new StringBuilder();
buffer.append("[").append(getScore()).append('/').append(count).append("]");

View File

@ -19,26 +19,31 @@ import magic.model.mstatic.MagicStatic;
public enum CardProperty {
IMAGE() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setImageURL(value);
}
},
VALUE() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setValue(Double.parseDouble(value));
}
},
REMOVAL() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setRemoval(Integer.parseInt(value));
}
},
RARITY() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setRarity(value.charAt(0));
}
},
TYPE() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
final String[] names=value.split(",");
for (final String name : names) {
@ -47,27 +52,32 @@ public enum CardProperty {
}
},
SUBTYPE() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setSubTypes(value.split(COMMA));
card.setSubTypeText(value);
}
},
COLOR() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setColors(value);
}
},
COST() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setCost(MagicManaCost.create(value));
}
},
MANA() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setManaSourceText(value);
}
},
PT() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
final String[] pt = value.split("/");
final int p = pt[0].contains("*") ? 0 : Integer.parseInt(pt[0]);
@ -77,16 +87,19 @@ public enum CardProperty {
}
},
ABILITY() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setAbilityProperty(value);
}
},
LOYALTY() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setStartingLoyalty(Integer.parseInt(value));
}
},
LOAD_ABILITY_COMMA() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
final String[] names=value.split(COMMA);
for (final String name : names) {
@ -95,6 +108,7 @@ public enum CardProperty {
}
},
LOAD_ABILITY() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
final String[] names=value.split(SEMI);
for (final String name : names) {
@ -111,47 +125,56 @@ public enum CardProperty {
}
},
SET_PT() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
final String[] pt = value.split("/");
card.add(MagicStatic.genPTSetStatic(Integer.parseInt(pt[0]), Integer.parseInt(pt[1])));
}
},
GIVEN_ABILITY() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.add(MagicStatic.linkedABStatic(MagicAbility.getAbilityList(value.split(SEMI))));
}
},
GIVEN_SUBTYPE() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.add(MagicStatic.genSTStatic(MagicSubType.getSubTypes(value.split(COMMA))));
}
},
GIVEN_TYPE() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.add(MagicStatic.genTypeStatic(MagicType.getTypes(value.split(COMMA))));
}
},
GIVEN_COLOR() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.add(MagicStatic.AddLinkedColor(MagicColor.getFlags(value)));
}
},
OVERWRITE_COLOR() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.add(MagicStatic.SetLinkedColor(MagicColor.getFlags(value)));
}
},
STATIC() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setStaticType(MagicStaticType.getStaticTypeFor(value));
}
},
TIMING() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setTiming(MagicTiming.getTimingFor(value));
}
},
IMAGE_UPDATED() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
final SimpleDateFormat format = new SimpleDateFormat(IMAGE_UPDATED_FORMAT);
try {
@ -162,22 +185,26 @@ public enum CardProperty {
}
},
MANA_OR_COMBAT() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setExcludeManaOrCombat();
}
},
ENCHANT() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.add(MagicPlayAuraEvent.create(value));
}
},
TOKEN() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setToken();
card.setName(value);
}
},
NAME() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
assert card.getName() == null;
assert card.getDistinctName() == null;
@ -187,21 +214,25 @@ public enum CardProperty {
}
},
EFFECT() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setEffectProperty(value);
}
},
LOAD_EFFECT() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.add(MagicSpellCardEvent.create(card, value));
}
},
REQUIRES_GROOVY_CODE() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setRequiresGroovy(value);
}
},
LOAD_GROOVY_CODE() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
final String cardName = !value.isEmpty() ? value : card.getDistinctName();
final String[] names = cardName.split(SEMI);
@ -211,46 +242,55 @@ public enum CardProperty {
}
},
FLIP() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setFlipCardName(value);
}
},
TRANSFORM() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setTransformCardName(value);
}
},
MELD(){
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setMeldCardNames(value.split(SEMI));
}
},
SPLIT() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setSplitCardName(value);
}
},
SECOND_HALF() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setSecondHalf();
}
},
ORACLE() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setText(value);
}
},
HIDDEN() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setHidden();
}
},
OVERLAY() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setOverlay();
}
},
STATUS() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setStatus(value);
}

View File

@ -12,6 +12,7 @@ public class LRUCache<K,V> extends LinkedHashMap<K,V> {
this.capacity = capacity;
}
@Override
protected boolean removeEldestEntry(final Map.Entry<K,V> eldest) {
return size() > capacity;
}

View File

@ -158,6 +158,7 @@ public class MagicPredefinedFormat extends MagicFormat {
return maximumCardCopies;
}
@Override
public boolean isDeckLegal(final MagicDeck aDeck) {
if (aDeck.size() < minimumDeckSize) {
return false;

View File

@ -120,6 +120,7 @@ public class OSXAdapter implements InvocationHandler {
setHandler(new OSXAdapter("handleOpenFile", target, fileHandler) {
// Override OSXAdapter.callTarget to send information on the
// file to be opened
@Override
public boolean callTarget(final Object appleEvent) {
if (appleEvent != null) {
try {
@ -176,6 +177,7 @@ public class OSXAdapter implements InvocationHandler {
// InvocationHandler implementation
// This is the entry point for our proxy object; it is called every time an ApplicationListener method is invoked
@Override
public Object invoke (final Object proxy, final Method method, final Object[] args) throws Throwable {
if (isCorrectMethod(method, args)) {
final boolean handled = callTarget(args[0]);

View File

@ -28,6 +28,7 @@ public class FiremindGameReport implements Thread.UncaughtExceptionHandler {
currentDuelId = duel_id;
}
@Override
public void uncaughtException(final Thread th, final Throwable ex) {
buildReport(MagicGame.getInstance(), th, ex);
ex.printStackTrace();

View File

@ -90,6 +90,7 @@ public class Ability_Mono_DeckGenerator extends RandomDeckGenerator {
return colorText;
}
@Override
public int getMinRarity() {
return 1;
}
@ -103,10 +104,12 @@ public class Ability_Mono_DeckGenerator extends RandomDeckGenerator {
}
}
@Override
public void setColors(final MagicDeckProfile profile) {
profile.setColors(getColorText());
}
@Override
public boolean ignoreMaxCost() {
return false;
}

View File

@ -27,6 +27,7 @@ public class Elf_Horde_DeckGenerator extends RandomDeckGenerator {
return colorText;
}
@Override
public int getMinRarity() {
return 2;
}
@ -36,14 +37,17 @@ public class Elf_Horde_DeckGenerator extends RandomDeckGenerator {
return !card.isCreature() || card.hasSubType(MagicSubType.Elf);
}
@Override
public void addRequiredSpells(final MagicCondensedDeck deck) {
addRequiredCards(deck, cards);
}
@Override
public void setColors(final MagicDeckProfile profile) {
profile.setColors(getColorText());
}
@Override
public boolean ignoreMaxCost() {
return true;
}

View File

@ -37,6 +37,7 @@ public class Fairy_Horde_DeckGenerator extends RandomDeckGenerator {
return colorText;
}
@Override
public int getMinRarity() {
return 2;
}
@ -46,18 +47,22 @@ public class Fairy_Horde_DeckGenerator extends RandomDeckGenerator {
return !card.isCreature() || card.hasSubType(MagicSubType.Faerie);
}
@Override
public void addRequiredSpells(final MagicCondensedDeck deck) {
addRequiredCards(deck, spells);
}
@Override
public void addRequiredLands(final MagicCondensedDeck deck) {
addRequiredCards(deck, lands);
}
@Override
public void setColors(final MagicDeckProfile profile) {
profile.setColors(getColorText());
}
@Override
public boolean ignoreMaxCost() {
return true;
}

View File

@ -30,6 +30,7 @@ public class Human_Law_DeckGenerator extends RandomDeckGenerator {
return colorText;
}
@Override
public int getMinRarity() {
return 2;
}
@ -39,10 +40,12 @@ public class Human_Law_DeckGenerator extends RandomDeckGenerator {
return !card.isCreature() || card.hasSubType(MagicSubType.Human);
}
@Override
public void addRequiredSpells(final MagicCondensedDeck deck) {
addRequiredCards(deck, cards);
}
@Override
public void setColors(final MagicDeckProfile profile) {
profile.setColors(getColorText());
}

View File

@ -38,18 +38,22 @@ public class Saint___Hero_DeckGenerator extends RandomDeckGenerator {
return colorText;
}
@Override
public int getMinRarity() {
return 2;
}
@Override
public void addRequiredSpells(final MagicCondensedDeck deck) {
addRequiredCards(deck, spells);
}
@Override
public void addRequiredLands(final MagicCondensedDeck deck) {
addRequiredCards(deck, lands);
}
@Override
public void setColors(final MagicDeckProfile profile) {
profile.setColors(getColorText());
}

View File

@ -44,6 +44,7 @@ public class Token_Madness_DeckGenerator extends RandomDeckGenerator {
return colorText;
}
@Override
public int getMinRarity() {
return 2;
}
@ -53,14 +54,17 @@ public class Token_Madness_DeckGenerator extends RandomDeckGenerator {
return !card.isCreature() || card.hasText("token");
}
@Override
public void addRequiredSpells(final MagicCondensedDeck deck) {
addRequiredCards(deck, spells);
}
@Override
public void addRequiredLands(final MagicCondensedDeck deck) {
addRequiredCards(deck, lands);
}
@Override
public void setColors(final MagicDeckProfile profile) {
profile.setColors(getColorText());
}

View File

@ -91,6 +91,7 @@ public class Tribal_Mono_DeckGenerator extends RandomDeckGenerator {
return colorText;
}
@Override
public int getMinRarity() {
return 1;
}
@ -104,10 +105,12 @@ public class Tribal_Mono_DeckGenerator extends RandomDeckGenerator {
}
}
@Override
public void setColors(final MagicDeckProfile profile) {
profile.setColors(getColorText());
}
@Override
public boolean ignoreMaxCost() {
return false;
}

View File

@ -43,6 +43,7 @@ public class Vampire_Rage_DeckGenerator extends RandomDeckGenerator {
return colorText;
}
@Override
public int getMinRarity() {
return 2;
}
@ -52,14 +53,17 @@ public class Vampire_Rage_DeckGenerator extends RandomDeckGenerator {
return !card.isCreature() || card.hasSubType(MagicSubType.Vampire);
}
@Override
public void addRequiredSpells(final MagicCondensedDeck deck) {
addRequiredCards(deck, spells);
}
@Override
public void addRequiredLands(final MagicCondensedDeck deck) {
addRequiredCards(deck, lands);
}
@Override
public void setColors(final MagicDeckProfile profile) {
profile.setColors(getColorText());
}

View File

@ -29,6 +29,7 @@ public class White_Knights_DeckGenerator extends RandomDeckGenerator {
return colorText;
}
@Override
public int getMinRarity() {
return 2;
}
@ -38,14 +39,17 @@ public class White_Knights_DeckGenerator extends RandomDeckGenerator {
return !card.isCreature() || card.hasSubType(MagicSubType.Knight);
}
@Override
public void addRequiredSpells(final MagicCondensedDeck deck) {
addRequiredCards(deck, cards);
}
@Override
public void setColors(final MagicDeckProfile profile) {
profile.setColors(getColorText());
}
@Override
public boolean ignoreMaxCost() {
return true;
}

View File

@ -40,6 +40,7 @@ public class White_Metal_DeckGenerator extends RandomDeckGenerator {
return colorText;
}
@Override
public int getMinRarity() {
return 2;
}
@ -49,18 +50,22 @@ public class White_Metal_DeckGenerator extends RandomDeckGenerator {
return !card.isCreature() || card.isArtifact();
}
@Override
public void addRequiredSpells(final MagicCondensedDeck deck) {
addRequiredCards(deck, spells);
}
@Override
public void addRequiredLands(final MagicCondensedDeck deck) {
addRequiredCards(deck, lands);
}
@Override
public void setColors(final MagicDeckProfile profile) {
profile.setColors(getColorText());
}
@Override
public boolean ignoreMaxColorless() {
return true;
}

View File

@ -29,6 +29,7 @@ public class Zombie_Madness_DeckGenerator extends RandomDeckGenerator {
return colorText;
}
@Override
public int getMinRarity() {
return 2;
}
@ -38,10 +39,12 @@ public class Zombie_Madness_DeckGenerator extends RandomDeckGenerator {
return !card.isCreature() || card.hasSubType(MagicSubType.Zombie);
}
@Override
public void addRequiredSpells(final MagicCondensedDeck deck) {
addRequiredCards(deck, cards);
}
@Override
public void setColors(final MagicDeckProfile profile) {
profile.setColors(getColorText());
}

File diff suppressed because it is too large Load Diff

View File

@ -22,6 +22,7 @@ public class MagicAbilityList implements MagicAbilityStore {
private List<MagicManaActivation> manaActivations =
new LinkedList<MagicManaActivation>();
@Override
public void add(final MagicChangeCardDefinition ccd) {
if (ccd instanceof MagicPermanentActivation) {
permActivations.add((MagicPermanentActivation)ccd);
@ -38,6 +39,7 @@ public class MagicAbilityList implements MagicAbilityStore {
return abilities.get(0);
}
@Override
public void addAbility(final MagicAbility ability) {
abilities.add(ability);
}

View File

@ -9,42 +9,50 @@ import magic.model.target.MagicTargetFilterFactory;
public enum MagicAmountParser {
YourLife("your life total") {
@Override
public MagicAmount toAmount(final Matcher arg) {
return MagicAmountFactory.LifeTotal;
}
},
Domain("basic land type(s)? among lands you control") {
@Override
public MagicAmount toAmount(final Matcher arg) {
return MagicAmountFactory.Domain;
}
},
Devotion("your devotion to " + ARG.COLOR) {
@Override
public MagicAmount toAmount(final Matcher arg) {
final MagicColor color = MagicColor.getColor(ARG.color(arg));
return MagicAmountFactory.Devotion(color);
}
},
Equipment("Equipment attached to (it|SN)") {
@Override
public MagicAmount toAmount(final Matcher arg) {
return MagicAmountFactory.Equipment;
}
},
Aura("Aura attached to (it|SN)") {
@Override
public MagicAmount toAmount(final Matcher arg) {
return MagicAmountFactory.Aura;
}
},
ItsPower("(its|SN's) power") {
@Override
public MagicAmount toAmount(final Matcher arg) {
return MagicAmountFactory.SN_Power;
}
},
AllCounterOnSN("counter(s)? on (it|SN)") {
@Override
public MagicAmount toAmount(final Matcher arg) {
return MagicAmountFactory.AllCountersOnSource;
}
},
CounterOnSN(ARG.WORD1 + " counter(s)? on (it|SN)") {
@Override
public MagicAmount toAmount(final Matcher arg) {
return MagicAmountFactory.CounterOnSource(
MagicCounterType.getCounterRaw(ARG.word1(arg))
@ -52,46 +60,55 @@ public enum MagicAmountParser {
}
},
ColorOnPerms("color among permanents you control") {
@Override
public MagicAmount toAmount(final Matcher arg) {
return MagicAmountFactory.ColorsOnPerms;
}
},
ExperienceCounter("experience counters you have") {
@Override
public MagicAmount toAmount(final Matcher arg) {
return MagicAmountFactory.CountersOnController(MagicCounterType.Experience);
}
},
GreatestPower("the greatest power among creatures you control") {
@Override
public MagicAmount toAmount(final Matcher arg) {
return MagicAmountFactory.GreatestPower;
}
},
HighestCMCPermanentsYouControl("the highest converted mana cost among permanents you control") {
@Override
public MagicAmount toAmount(final Matcher arg) {
return MagicAmountFactory.HighestCMCPermanentsYouControl;
}
},
XCost("x") {
@Override
public MagicAmount toAmount(final Matcher arg) {
return MagicAmountFactory.XCost;
}
},
NegXCost("-x") {
@Override
public MagicAmount toAmount(final Matcher arg) {
return MagicAmountFactory.NegXCost;
}
},
Player("player") {
@Override
public MagicAmount toAmount(final Matcher arg) {
return MagicAmountFactory.Constant(2);
}
},
Number("[^ ]+") {
@Override
public MagicAmount toAmount(final Matcher arg) {
return MagicAmountFactory.Constant(EnglishToInt.convert(arg.group()));
}
},
FromFilter(ARG.ANY) {
@Override
public MagicAmount toAmount(final Matcher arg) {
return MagicAmountFactory.FromFilter(
MagicTargetFilterFactory.Target(ARG.any(arg))

View File

@ -146,14 +146,17 @@ public class MagicCard
return card;
}
@Override
public long getId() {
return id;
}
@Override
public long getStateId() {
return (getCardDefinition().getIndex() * 10L + (aiKnown ? 1 : 0) + (gameKnown ? 2 : 0) + (token ? 4 : 0)) ^ counters.hashCode();
}
@Override
public MagicCardDefinition getCardDefinition() {
return isKnown() ? cardDefinition : MagicCardDefinition.UNKNOWN;
}
@ -167,14 +170,17 @@ public class MagicCard
return token;
}
@Override
public boolean isDoubleFaced() {
return getCardDefinition().isDoubleFaced();
}
@Override
public boolean isFlipCard() {
return getCardDefinition().isFlipCard();
}
@Override
public boolean isSplitCard() {
return getCardDefinition().isSplitCard();
}

View File

@ -199,6 +199,7 @@ public class MagicCardDefinition implements MagicAbilityStore, IRenderableCard {
secondHalf = true;
}
@Override
public boolean isSecondHalf() {
return secondHalf;
}
@ -207,6 +208,7 @@ public class MagicCardDefinition implements MagicAbilityStore, IRenderableCard {
hidden = true;
}
@Override
public boolean isHidden() {
return hidden;
}
@ -289,6 +291,7 @@ public class MagicCardDefinition implements MagicAbilityStore, IRenderableCard {
*
* @see getDistinctName()
*/
@Override
public String getName() {
return name;
}
@ -336,6 +339,7 @@ public class MagicCardDefinition implements MagicAbilityStore, IRenderableCard {
return index;
}
@Override
public String getImageName() {
return token ?
CardDefinitions.getCanonicalName(distinctName):
@ -404,6 +408,7 @@ public class MagicCardDefinition implements MagicAbilityStore, IRenderableCard {
return rarity == null ? "" : rarity.getName();
}
@Override
public Character getRarityChar() {
return rarity == null ? 'C' : rarity.getChar();//Return common for null rarity
}
@ -412,6 +417,7 @@ public class MagicCardDefinition implements MagicAbilityStore, IRenderableCard {
token=true;
}
@Override
public boolean isToken() {
return token;
}
@ -441,6 +447,7 @@ public class MagicCardDefinition implements MagicAbilityStore, IRenderableCard {
return cardType;
}
@Override
public boolean hasType(final MagicType type) {
return (typeFlags&type.getMask())!=0;
}
@ -454,6 +461,7 @@ public class MagicCardDefinition implements MagicAbilityStore, IRenderableCard {
return flipCardDefinition;
}
@Override
public MagicCardDefinition getTransformedDefinition() {
if (transformCardDefinition == null) {
transformCardDefinition = isDoubleFaced() ?
@ -463,6 +471,7 @@ public class MagicCardDefinition implements MagicAbilityStore, IRenderableCard {
return transformCardDefinition;
}
@Override
public MagicCardDefinition getSplitDefinition() {
if (splitCardDefinition == null) {
splitCardDefinition = isSplitCard() ?
@ -472,6 +481,7 @@ public class MagicCardDefinition implements MagicAbilityStore, IRenderableCard {
return splitCardDefinition;
}
@Override
public MagicCardDefinition getCardDefinition() {
return this;
}
@ -484,6 +494,7 @@ public class MagicCardDefinition implements MagicAbilityStore, IRenderableCard {
return hasSubType(MagicSubType.Equipment);
}
@Override
public boolean isPlaneswalker() {
return hasType(MagicType.Planeswalker);
}
@ -516,14 +527,17 @@ public class MagicCardDefinition implements MagicAbilityStore, IRenderableCard {
return !isSpell();
}
@Override
public boolean isFlipCard() {
return flipCardName != null;
}
@Override
public boolean isDoubleFaced() {
return transformCardName != null;
}
@Override
public boolean isSplitCard() {
return splitCardName != null;
}
@ -575,6 +589,7 @@ public class MagicCardDefinition implements MagicAbilityStore, IRenderableCard {
return subTypeFlags.clone();
}
@Override
public EnumSet<MagicSubType> getSubTypes() {
final EnumSet<MagicSubType> subTypes = genSubTypes();
applyCDASubType(null, null, subTypes);
@ -595,6 +610,7 @@ public class MagicCardDefinition implements MagicAbilityStore, IRenderableCard {
return brackets.substring(1, brackets.length() - 1);
}
@Override
public boolean hasSubType(final MagicSubType subType) {
return getSubTypes().contains(subType);
}
@ -608,6 +624,7 @@ public class MagicCardDefinition implements MagicAbilityStore, IRenderableCard {
assert !hasCost() || colorFlags != cost.getColorFlags() : "redundant color declaration: " + colorFlags;
}
@Override
public boolean hasColor(final MagicColor color) {
return (colorFlags&color.getMask())!=0;
}
@ -616,6 +633,7 @@ public class MagicCardDefinition implements MagicAbilityStore, IRenderableCard {
return colorFlags == 0;
}
@Override
public int getColorFlags() {
return colorFlags;
}
@ -687,6 +705,7 @@ public class MagicCardDefinition implements MagicAbilityStore, IRenderableCard {
}
}
@Override
public MagicManaCost getCost() {
return cost;
}
@ -741,6 +760,7 @@ public class MagicCardDefinition implements MagicAbilityStore, IRenderableCard {
startingLoyalty = aLoyalty;
}
@Override
public int getStartingLoyalty() {
return startingLoyalty;
}
@ -768,6 +788,7 @@ public class MagicCardDefinition implements MagicAbilityStore, IRenderableCard {
}
}
@Override
public void addAbility(final MagicAbility ability) {
abilityFlags.add(ability);
}
@ -776,6 +797,7 @@ public class MagicCardDefinition implements MagicAbilityStore, IRenderableCard {
return abilityFlags.clone();
}
@Override
public boolean hasAbility(final MagicAbility ability) {
return abilityFlags.contains(ability);
}
@ -784,6 +806,7 @@ public class MagicCardDefinition implements MagicAbilityStore, IRenderableCard {
this.text = text;
}
@Override
public String getText() {
return text;
}
@ -808,6 +831,7 @@ public class MagicCardDefinition implements MagicAbilityStore, IRenderableCard {
return timing;
}
@Override
public void add(final MagicChangeCardDefinition mod) {
mod.change(this);
}
@ -941,6 +965,7 @@ public class MagicCardDefinition implements MagicAbilityStore, IRenderableCard {
manaActivations.add(activation);
}
@Override
public Collection<MagicManaActivation> getManaActivations() {
return manaActivations;
}
@ -1039,6 +1064,7 @@ public class MagicCardDefinition implements MagicAbilityStore, IRenderableCard {
powerToughnessText = string;
}
@Override
public String getPowerToughnessText() {
return powerToughnessText;
}
@ -1047,6 +1073,7 @@ public class MagicCardDefinition implements MagicAbilityStore, IRenderableCard {
subTypeText = string.replaceAll("(\\w),(\\w)", "$1, $2");// Not automatically adding space unless space is there
}
@Override
public String getSubTypeText() {
return subTypeText;
}

View File

@ -289,6 +289,7 @@ public class MagicGame {
return stateId;
}
@Override
public String toString() {
return "GAME: " +
"id=" + stateId + " " +

View File

@ -31,6 +31,7 @@ public class MagicPayedCost implements MagicCopyable {
kicker = payedCost.kicker;
}
@Override
public MagicCopyable copy(final MagicCopyMap copyMap) {
return new MagicPayedCost(copyMap, this);
}

View File

@ -161,6 +161,7 @@ public class MagicPermanent extends MagicObjectImpl implements MagicSource, Magi
}
}
@Override
public long getId() {
return id;
}
@ -173,6 +174,7 @@ public class MagicPermanent extends MagicObjectImpl implements MagicSource, Magi
return !isValid();
}
@Override
public long getStateId() {
stateId = stateId != 0 ? stateId : MurmurHash3.hash(new long[]{
cardDefinition.getIndex(),
@ -203,6 +205,7 @@ public class MagicPermanent extends MagicObjectImpl implements MagicSource, Magi
return stateId;
}
@Override
public long getRenderKey() {
return getStateId();
}
@ -240,6 +243,7 @@ public class MagicPermanent extends MagicObjectImpl implements MagicSource, Magi
return card;
}
@Override
public boolean isToken() {
return card.isToken();
}
@ -248,10 +252,12 @@ public class MagicPermanent extends MagicObjectImpl implements MagicSource, Magi
return !card.isToken();
}
@Override
public boolean isDoubleFaced() {
return card.isDoubleFaced();
}
@Override
public boolean isFlipCard() {
return card.isFlipCard();
}
@ -335,6 +341,7 @@ public class MagicPermanent extends MagicObjectImpl implements MagicSource, Magi
return cachedActivations;
}
@Override
public Collection<MagicManaActivation> getManaActivations() {
return cachedManaActivations;
}
@ -375,6 +382,7 @@ public class MagicPermanent extends MagicObjectImpl implements MagicSource, Magi
return name.isEmpty() == false && name.equalsIgnoreCase(other);
}
@Override
public String getName() {
final String name = getCardDefinition().getName();
if (name.isEmpty() && getGame().isReal()) {
@ -578,6 +586,7 @@ public class MagicPermanent extends MagicObjectImpl implements MagicSource, Magi
return counters.size() > 0;
}
@Override
public boolean hasSubType(final MagicSubType subType) {
return cachedSubTypeFlags.contains(subType);
}
@ -1125,6 +1134,7 @@ public class MagicPermanent extends MagicObjectImpl implements MagicSource, Magi
return cachedTypeFlags;
}
@Override
public boolean hasType(final MagicType type) {
return type.hasType(getTypeFlags());
}
@ -1137,10 +1147,12 @@ public class MagicPermanent extends MagicObjectImpl implements MagicSource, Magi
return isArtifact() && hasSubType(MagicSubType.Equipment);
}
@Override
public boolean isArtifact() {
return hasType(MagicType.Artifact);
}
@Override
public boolean isEnchantment() {
return hasType(MagicType.Enchantment);
}
@ -1157,6 +1169,7 @@ public class MagicPermanent extends MagicObjectImpl implements MagicSource, Magi
return hasState(MagicPermanentState.Flipped);
}
@Override
public boolean isSplitCard() {
return false;
}

View File

@ -139,10 +139,12 @@ public class MagicPlayer extends MagicObjectImpl implements MagicSource, MagicTa
currGame = game;
}
@Override
public MagicGame getGame() {
return currGame;
}
@Override
public long getStateId() {
keys = new long[] {
life,
@ -202,6 +204,7 @@ public class MagicPlayer extends MagicObjectImpl implements MagicSource, MagicTa
return playerConfig.getName();
}
@Override
public Set<MagicSourceActivation<? extends MagicSource>> getSourceActivations() {
Set<MagicSourceActivation<? extends MagicSource>> set = new TreeSet<MagicSourceActivation<? extends MagicSource>>();
for (final MagicCard card : hand) {
@ -224,6 +227,7 @@ public class MagicPlayer extends MagicObjectImpl implements MagicSource, MagicTa
return index;
}
@Override
public long getId() {
return 1000000000L + index;
}

View File

@ -32,6 +32,7 @@ public class MagicRandom extends Random {
// from http://demesos.blogspot.com/2011/09/replacing-java-random-generator.html
// parameters are from Numerical Recipes 3E, pg 347
@Override
protected int next(int nbits) {
long x = state;
x ^= (x << 21);

View File

@ -30,6 +30,7 @@ public class AIRevealAction extends MagicAction {
newValue = aNewValue;
}
@Override
public void doAction(final MagicGame game) {
for (final MagicCard card : cards) {
known.add(card.isGameKnown());
@ -37,6 +38,7 @@ public class AIRevealAction extends MagicAction {
}
}
@Override
public void undoAction(final MagicGame game) {
for (int i = 0; i < cards.size(); i++) {
cards.get(i).setGameKnown(known.get(i));

View File

@ -30,6 +30,7 @@ public class LookAction extends MagicAction {
desc = aDesc;
}
@Override
public void doAction(final MagicGame game) {
if (cards.isEmpty()) {
return;
@ -43,6 +44,7 @@ public class LookAction extends MagicAction {
));
}
@Override
public void undoAction(final MagicGame game) {
//do nothing for now
}

View File

@ -20,125 +20,149 @@ import magic.model.trigger.LeavesBattlefieldTrigger;
public enum MagicPlayMod implements MagicPermanentAction {
EXILE_AT_END_OF_COMBAT("Exile (that|the) token at end of combat") {
@Override
protected void doAction(final MagicGame game, final MagicPermanent perm) {
game.doAction(new AddTriggerAction(perm, AtEndOfCombatTrigger.Exile));
}
},
EXILE_AT_END_OF_TURN("Exile (it|them|that token) at the beginning of the next end step") {
@Override
protected void doAction(final MagicGame game, final MagicPermanent perm) {
game.doAction(new AddTriggerAction(perm, AtEndOfTurnTrigger.ExileAtEnd));
}
},
EXILE_AT_END_OF_YOUR_TURN("Exile it at the beginning of your next end step") {
@Override
protected void doAction(final MagicGame game, final MagicPermanent perm) {
final MagicPlayer controller = perm.getController();
game.doAction(new AddTriggerAction(perm, AtEndOfTurnTrigger.ExileAtYourEnd(controller)));
}
},
EXILE_AT_END_OF_YOUR_TURN2("At the beginning of your next end step, exile it") {
@Override
protected void doAction(final MagicGame game, final MagicPermanent perm) {
EXILE_AT_END_OF_YOUR_TURN.doAction(game, perm);
}
},
EXILE_WHEN_LEAVES("If it would leave the battlefield, exile it instead of putting it anywhere else") {
@Override
protected void doAction(final MagicGame game, final MagicPermanent perm) {
game.doAction(new AddTriggerAction(perm, LeavesBattlefieldTrigger.Exile));
}
},
SACRIFICE_AT_END_OF_TURN("Sacrifice (it|those tokens) at the beginning of the next end step") {
@Override
protected void doAction(final MagicGame game, final MagicPermanent perm) {
game.doAction(new AddTriggerAction(perm, AtEndOfTurnTrigger.Sacrifice));
}
},
SACRIFICE_AT_END_OF_COMBAT("Sacrifice (it|the token) at end of combat") {
@Override
protected void doAction(final MagicGame game, final MagicPermanent perm) {
game.doAction(new AddTriggerAction(perm, AtEndOfCombatTrigger.Sacrifice));
}
},
DESTROY_AT_END_OF_TURN("Destroy (it|those tokens) at the beginning of the next end step") {
@Override
protected void doAction(final MagicGame game, final MagicPermanent perm) {
game.doAction(new AddTriggerAction(perm, AtEndOfTurnTrigger.Destroy));
}
},
RETURN_AT_END_OF_TURN() {
@Override
protected void doAction(final MagicGame game, final MagicPermanent perm) {
game.doAction(new AddTriggerAction(perm, AtEndOfTurnTrigger.Return));
}
},
ATTACKING("attacking") {
@Override
protected void doAction(final MagicGame game, final MagicPermanent perm) {
perm.setState(MagicPermanentState.Attacking);
}
},
TAPPED("tapped") {
@Override
protected void doAction(final MagicGame game, final MagicPermanent perm) {
perm.setState(MagicPermanentState.Tapped);
}
},
TAPPED_AND_ATTACKING("tapped and attacking") {
@Override
protected void doAction(final MagicGame game, final MagicPermanent perm) {
TAPPED.doAction(game, perm);
ATTACKING.doAction(game, perm);
}
},
HASTE_UEOT("(it|that " + ARG.WORD1 + ") gains haste until end of turn") {
@Override
protected void doAction(final MagicGame game, final MagicPermanent perm) {
game.doAction(new GainAbilityAction(perm, MagicAbility.Haste));
}
},
HASTE("(it|that token) (gains|has) haste") {
@Override
protected void doAction(final MagicGame game, final MagicPermanent perm) {
game.doAction(new GainAbilityAction(perm, MagicAbility.Haste, MagicStatic.Forever));
}
},
PERSIST() {
@Override
protected void doAction(final MagicGame game, final MagicPermanent perm) {
perm.changeCounters(MagicCounterType.MinusOne,1);
}
},
UNDYING() {
@Override
protected void doAction(final MagicGame game, final MagicPermanent perm) {
perm.changeCounters(MagicCounterType.PlusOne,1);
}
},
DEATH_COUNTER() {
@Override
protected void doAction(final MagicGame game, final MagicPermanent perm) {
perm.changeCounters(MagicCounterType.Death,1);
}
},
ARTIFACT() {
@Override
protected void doAction(final MagicGame game, final MagicPermanent perm) {
game.doAction(new AddStaticAction(perm, MagicStatic.Artifact));
}
},
ZOMBIE() {
@Override
protected void doAction(final MagicGame game, final MagicPermanent perm) {
game.doAction(new AddStaticAction(perm, MagicStatic.Zombie));
}
},
SPIRIT() {
@Override
protected void doAction(final MagicGame game, final MagicPermanent perm) {
game.doAction(new AddStaticAction(perm, MagicStatic.Spirit));
}
},
BLACK_ZOMBIE("(it|that creature) is a black Zombie in addition to its other colors and types") {
@Override
protected void doAction(final MagicGame game, final MagicPermanent perm) {
game.doAction(new AddStaticAction(perm, MagicStatic.AddBlack));
game.doAction(new AddStaticAction(perm, MagicStatic.Zombie));
}
},
BLACK_NIGHTMARE("It is black and is a Nightmare in addition to its other creature types") {
@Override
protected void doAction(final MagicGame game, final MagicPermanent perm) {
game.doAction(new AddStaticAction(perm, MagicStatic.IsBlack));
game.doAction(new AddStaticAction(perm, MagicStatic.Nightmare));
}
},
BESTOWED() {
@Override
protected void doAction(final MagicGame game, final MagicPermanent perm) {
game.doAction(new AddStaticAction(perm, MagicStatic.Bestowed));
}
},
MANIFEST() {
@Override
protected void doAction(final MagicGame game, final MagicPermanent perm) {
if (perm.isCreature() && perm.getCardDefinition().hasCost()) {
final MagicAbilityList morphAct = new MagicAbilityList();
@ -150,21 +174,25 @@ public enum MagicPlayMod implements MagicPermanentAction {
}
},
MORPH() {
@Override
protected void doAction(final MagicGame game, final MagicPermanent perm) {
perm.setState(MagicPermanentState.FaceDown);
}
},
FLIPPED("flipped") {
@Override
protected void doAction(final MagicGame game, final MagicPermanent perm) {
perm.setState(MagicPermanentState.Flipped);
}
},
TRANSFORMED() {
@Override
protected void doAction(final MagicGame game, final MagicPermanent perm) {
perm.setState(MagicPermanentState.Transformed);
}
},
NONE() {
@Override
protected void doAction(final MagicGame game, final MagicPermanent perm) {
}
},
@ -180,6 +208,7 @@ public enum MagicPlayMod implements MagicPermanentAction {
this("NONE");
}
@Override
public void doAction(final MagicPermanent perm) {
doAction(perm.getGame(), perm);
}

View File

@ -95,6 +95,7 @@ public class MagicBuilderPayManaCostResult implements MagicPayManaCostResult, Co
return count;
}
@Override
public void doAction(final MagicGame game,final MagicPlayer player) {
for (final MagicSourceManaActivationResult result : results) {
result.doActivation(game);

View File

@ -68,6 +68,7 @@ public class MagicCombatCreature {
return permanent.getName();
}
@Override
public String toString() {
final StringBuilder builder=new StringBuilder();
builder.append(permanent.getName());

View File

@ -60,12 +60,14 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
}
public static MagicCondition NONE = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return true;
}
};
public static MagicCondition CARD_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicCard card = (MagicCard)source;
final MagicCardDefinition cardDefinition = card.getCardDefinition();
@ -81,6 +83,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition HAND_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicCard card = (MagicCard)source;
return card.isInHand();
@ -88,6 +91,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition GRAVEYARD_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicCard card = (MagicCard)source;
return card.isInGraveyard();
@ -95,6 +99,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition NINJUTSU_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicGame game = source.getGame();
return game.isPhase(MagicPhaseType.DeclareBlockers) ||
@ -104,6 +109,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition NOT_SORCERY_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicGame game = source.getGame();
return game.canPlaySorcery(source.getController()) == false;
@ -111,6 +117,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition NOT_MONSTROUS_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return permanent.hasState(MagicPermanentState.Monstrous) == false;
@ -118,6 +125,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition NOT_EXCLUDE_COMBAT_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return permanent.hasState(MagicPermanentState.ExcludeFromCombat) == false;
@ -125,6 +133,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition SORCERY_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicGame game = source.getGame();
return game.canPlaySorcery(source.getController());
@ -132,6 +141,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition BEFORE_YOUR_ATTACK_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicGame game = source.getGame();
return source.isFriend(game.getTurnPlayer()) &&
@ -140,6 +150,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition DECLARE_ATTACKERS = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicGame game = source.getGame();
return game.isPhase(MagicPhaseType.DeclareAttackers);
@ -147,6 +158,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition YOUR_UPKEEP_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicGame game = source.getGame();
return game.isPhase(MagicPhaseType.Upkeep) && source.isFriend(game.getTurnPlayer());
@ -154,6 +166,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition ANY_UPKEEP_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicGame game = source.getGame();
return game.isPhase(MagicPhaseType.Upkeep);
@ -161,6 +174,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition OPPONENTS_UPKEEP_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicGame game = source.getGame();
return game.isPhase(MagicPhaseType.Upkeep) && source.isEnemy(game.getTurnPlayer());
@ -168,6 +182,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition YOUR_TURN_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicGame game = source.getGame();
return source.isFriend(game.getTurnPlayer());
@ -207,6 +222,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition BEEN_ATTACKED = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicGame game = source.getGame();
return source.isEnemy(game.getTurnPlayer()) &&
@ -215,6 +231,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition END_OF_COMBAT_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicGame game = source.getGame();
return game.isPhase(MagicPhaseType.EndOfCombat);
@ -222,6 +239,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition DURING_COMBAT = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicGame game = source.getGame();
return game.getPhase().getType().ordinal() >= MagicPhaseType.BeginOfCombat.ordinal() &&
@ -230,6 +248,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition DURING_COMBAT_AFTER_BLOCKERS = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicGame game = source.getGame();
return game.isPhase(MagicPhaseType.DeclareBlockers) ||
@ -238,6 +257,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition DURING_BLOCKERS = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicGame game = source.getGame();
return game.isPhase(MagicPhaseType.DeclareBlockers);
@ -245,6 +265,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition DURING_COMBAT_BEFORE_BLOCKERS = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicGame game = source.getGame();
return game.getPhase().getType().ordinal() >= MagicPhaseType.BeginOfCombat.ordinal() &&
@ -253,6 +274,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition AFTER_COMBAT = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicGame game = source.getGame();
return game.getPhase().getType().ordinal() > MagicPhaseType.EndOfCombat.ordinal();
@ -260,6 +282,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition CAN_TAP_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return permanent.canTap();
@ -267,6 +290,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition CAN_UNTAP_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return permanent.canUntap();
@ -274,6 +298,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition TAPPED_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return permanent.isTapped();
@ -281,6 +306,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition UNTAPPED_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return permanent.isUntapped();
@ -288,6 +314,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition IS_BLOCKED_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return permanent.isBlocked();
@ -295,6 +322,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition IS_ATTACKING_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return permanent.isAttacking();
@ -302,6 +330,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition IS_ATTACKING_ALONE_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return permanent.isAttacking() && source.getController().getNrOfAttackers() == 1;
@ -309,6 +338,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition ABILITY_ONCE_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return permanent.getAbilityPlayedThisTurn() < 1;
@ -326,6 +356,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition ABILITY_TWICE_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return permanent.getAbilityPlayedThisTurn() < 2;
@ -343,6 +374,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition ABILITY_THRICE_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return permanent.getAbilityPlayedThisTurn() < 3;
@ -360,18 +392,21 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition NOT_CREATURE_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return !source.isCreaturePermanent();
}
};
public static MagicCondition METALCRAFT_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.getController().getNrOfPermanents(MagicType.Artifact) >= 3;
}
};
public static MagicCondition CAN_REGENERATE_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return permanent.canRegenerate();
@ -379,42 +414,49 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition THREE_ATTACKERS_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.getController().getNrOfAttackers() >= 3;
}
};
public static MagicCondition PLAINS_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.getController().controlsPermanent(MagicSubType.Plains);
}
};
public static MagicCondition ISLAND_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.getController().controlsPermanent(MagicSubType.Island);
}
};
public static MagicCondition SWAMP_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.getController().controlsPermanent(MagicSubType.Swamp);
}
};
public static MagicCondition MOUNTAIN_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.getController().controlsPermanent(MagicSubType.Mountain);
}
};
public static MagicCondition FOREST_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.getController().controlsPermanent(MagicSubType.Forest);
}
};
public static MagicCondition LEAST_FIVE_OTHER_MOUNTAINS = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
final MagicOtherPermanentTargetFilter filter = new MagicOtherPermanentTargetFilter(
@ -426,12 +468,14 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition THRESHOLD_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.getController().getGraveyard().size() >= 7;
}
};
public static MagicCondition DELIRIUM_CONDITION = new MagicCondition() {
@Override
public boolean accept(MagicSource source) {
final MagicCardList graveyard = source.getController().getGraveyard();
int count = 0;
@ -445,24 +489,28 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition FATEFUL_HOUR = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.getController().getLife() <= 5;
}
};
public static MagicCondition HELLBENT = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.getController().getHandSize() == 0;
}
};
public static MagicCondition OPPONENT_HELLBENT = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.getOpponent().getHandSize() == 0;
}
};
public static MagicCondition ANY_HELLBENT = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.getOpponent().getHandSize() == 0 || source.getController().getHandSize() == 0;
}
@ -480,6 +528,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition ENCHANTED_IS_UNTAPPED_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return permanent.getEnchantedPermanent().isUntapped();
@ -487,6 +536,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition ENCHANTED_IS_BASIC_MOUNTAIN = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent enchanted = ((MagicPermanent)source).getEnchantedPermanent();
return enchanted.hasType(MagicType.Basic) && enchanted.hasSubType(MagicSubType.Mountain);
@ -494,6 +544,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition HAS_EXILED_CARD = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return permanent.getExiledCard().isValid();
@ -501,6 +552,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition HAS_EXILED_CREATURE_CARD = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
final MagicCard card = permanent.getExiledCard();
@ -509,6 +561,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition HAS_EQUIPPED_CREATURE = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return permanent.getEquippedCreature().isCreature();
@ -516,6 +569,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition IS_EQUIPPED = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return permanent.isEquipped();
@ -523,6 +577,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition IS_ENCHANTED = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return permanent.isEnchanted();
@ -530,6 +585,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition IS_ENCHANTMENT = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return permanent.isEnchantment();
@ -537,6 +593,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition IS_NOT_ENCHANTMENT = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return !permanent.isEnchantment();
@ -544,6 +601,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition IS_MONSTROUS_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return permanent.hasState(MagicPermanentState.Monstrous);
@ -551,6 +609,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition IS_RENOWNED_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return permanent.hasState(MagicPermanentState.Renowned);
@ -558,12 +617,14 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition EMPTY_GRAVEYARD_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.getController().getGraveyard().isEmpty();
}
};
public static MagicCondition LIBRARY_HAS_20_OR_LESS_CARDS_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPlayer player = source.getController();
return player.getLibrary().size() <= 20 || player.getOpponent().getLibrary().size() <= 20;
@ -571,18 +632,21 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition OPP_GRAVEYARD_WITH_10_OR_MORE_CARDS_CONDTITION = new MagicCondition() {
@Override
public boolean accept(MagicSource source) {
return source.getOpponent().getGraveyard().size() >= 10;
}
};
public static MagicCondition OPP_NOT_CONTROL_WHITE_OR_BLUE_CREATURE_CONDITION = new MagicCondition() {
@Override
public boolean accept(MagicSource source) {
return !source.getOpponent().controlsPermanent(MagicTargetFilterFactory.WHITE_OR_BLUE_CREATURE);
}
};
public static MagicCondition MOST_CARDS_IN_HAND_CONDITION = new MagicCondition() {
@Override
public boolean accept(MagicSource source) {
final MagicPlayer player = source.getController();
return player.getHandSize() > player.getOpponent().getHandSize();
@ -590,6 +654,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition EXACTLY_SEVEN_CARDS_IN_HAND_CONDITION = new MagicCondition() {
@Override
public boolean accept(MagicSource source) {
final MagicPlayer player = source.getController();
return player.getHandSize() == 7;
@ -597,30 +662,35 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition OPPONENT_TEN_OR_LESS_LIFE = new MagicCondition() {
@Override
public boolean accept(MagicSource source) {
return source.getOpponent().getLife() <= 10;
}
};
public static MagicCondition OPPONENT_WAS_DEALT_DAMAGE = new MagicCondition() {
@Override
public boolean accept(MagicSource source) {
return source.getOpponent().hasState(MagicPlayerState.WasDealtDamage);
}
};
public static MagicCondition OPPONENT_HAS_GREATER_OR_EQUAL_LIFE = new MagicCondition() {
@Override
public boolean accept(MagicSource source) {
return source.getOpponent().getLife() >= source.getController().getLife();
}
};
public static MagicCondition YOU_30_OR_MORE_LIFE = new MagicCondition() {
@Override
public boolean accept(MagicSource source) {
return source.getController().getLife() >= 30;
}
};
public static MagicCondition YOU_30_OR_MORE_OPPPONENT_10_OR_LESS_LIFE = new MagicCondition() {
@Override
public boolean accept(MagicSource source) {
return YOU_30_OR_MORE_LIFE.accept(source) &&
OPPONENT_TEN_OR_LESS_LIFE.accept(source);
@ -632,12 +702,14 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
public static MagicCondition HAS_ARTIFACT_IN_GRAVEYARD = MagicConditionFactory.YouHaveAtLeast(MagicTargetFilterFactory.ARTIFACT_CARD_FROM_GRAVEYARD, 1);
public static MagicCondition OPP_NOT_CONTROL_CREATURE_CONDITION = new MagicCondition() {
@Override
public boolean accept(MagicSource source) {
return !source.getOpponent().controlsPermanent(MagicType.Creature);
}
};
public static MagicCondition NOT_YOUR_TURN_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicGame game = source.getGame();
return source.isEnemy(game.getTurnPlayer());
@ -734,6 +806,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition CREATURE_DIED_THIS_TURN = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicGame game = source.getGame();
return game.getCreatureDiedThisTurn();
@ -741,12 +814,14 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition PERMANENT_YOU_CONTROLLED_LEFT_BATTLEFIELD = new MagicCondition() {
@Override
public boolean accept(MagicSource source) {
return source.getController().hasState(MagicPlayerState.Revolt);
}
};
public static MagicCondition YOU_ATTACKED_WITH_CREATURE = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPlayer player = source.getController();
return player.getCreaturesAttackedThisTurn() >= 1;
@ -754,6 +829,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition CREATURE_IN_A_GRAVEYARD = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPlayer player = source.getController();
return MagicTargetFilterFactory.CREATURE_CARD_FROM_ALL_GRAVEYARDS.filter(player).size() > 0;
@ -763,6 +839,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
public static MagicCondition HAS_CREATURE_IN_GRAVEYARD = MagicConditionFactory.YouHaveAtLeast(MagicTargetFilterFactory.CREATURE_CARD_FROM_GRAVEYARD, 1);
public static MagicCondition HAS_CREATURE_IN_HAND = new MagicCondition() {
@Override
public boolean accept(MagicSource source) {
final MagicPlayer player = source.getController();
return MagicTargetFilterFactory.CREATURE_CARD_FROM_HAND.filter(player).size() > 0;
@ -770,6 +847,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition HAS_EQUIPMENT_IN_HAND = new MagicCondition() {
@Override
public boolean accept(MagicSource source) {
final MagicPlayer player = source.getController();
return MagicTargetFilterFactory.EQUIPMENT_CARD_FROM_HAND.filter(player).size() > 0;
@ -777,6 +855,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition INSTANT_OR_SORCERY_IN_A_GRAVEYARD = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPlayer player = source.getController();
return !MagicTargetFilterFactory.INSTANT_OR_SORCERY_CARD_FROM_ALL_GRAVEYARDS.filter(player).isEmpty();
@ -784,6 +863,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition SPELL_MASTERY_CONDITION = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPlayer player = source.getController();
return MagicTargetFilterFactory.INSTANT_OR_SORCERY_CARD_FROM_GRAVEYARD.filter(player).size() >= 2;
@ -791,6 +871,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition FORMIDABLE = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final List<MagicPermanent> creatures = MagicTargetFilterFactory.CREATURE_YOU_CONTROL.filter(source.getController());
int totalPower = 0;
@ -802,6 +883,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition CAST_FROM_HAND = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return permanent.hasState(MagicPermanentState.CastFromHand);
@ -809,6 +891,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition WAS_NONCREATURE_ARTIFACT = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return permanent.getCardDefinition().hasType(MagicType.Artifact) &&
@ -817,6 +900,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition WAS_KICKED = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicCardOnStack spell = (MagicCardOnStack)source;
return spell.isKicked();
@ -824,24 +908,28 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition CAST_ANOTHER_SPELL_THIS_TURN = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.getController().getSpellsCast() > 0;
}
};
public static MagicCondition CAST_A_NONCREATURE_SPELL_THIS_TURN = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.getController().getNonCreatureSpellsCast() > 0;
}
};
public static MagicCondition DEFENDING_POISONED = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.getGame().getDefendingPlayer().getPoison() > 0;
}
};
public static MagicCondition CONTROL_SINCE_LAST_TURN = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return !permanent.hasState(MagicPermanentState.Summoned);
@ -849,6 +937,7 @@ public abstract class MagicCondition implements MagicMatchedCostEvent {
};
public static MagicCondition YOU_ARE_MONARCH = new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.getController().isMonarch();
}

View File

@ -23,6 +23,7 @@ public class MagicConditionFactory {
public static MagicCondition CounterAtMost(final MagicCounterType counterType, final int n) {
return new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return permanent.getCounters(counterType) <= n;
@ -32,6 +33,7 @@ public class MagicConditionFactory {
public static MagicCondition CounterAtLeast(final MagicCounterType counterType, final int n) {
return new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return permanent.getCounters(counterType) >= n;
@ -41,6 +43,7 @@ public class MagicConditionFactory {
public static MagicCondition EnchantedCounterAtLeast(final MagicCounterType counterType, final int n) {
return new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return permanent.getEnchantedPermanent().getCounters(counterType) >= n;
@ -50,6 +53,7 @@ public class MagicConditionFactory {
public static MagicCondition EnchantedPowerAtLeast(final int n) {
return new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return permanent.getEnchantedPermanent().getPower() >= n;
@ -59,6 +63,7 @@ public class MagicConditionFactory {
public static MagicCondition CounterEqual(final MagicCounterType counterType, final int n) {
return new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return permanent.getCounters(counterType) == n;
@ -72,6 +77,7 @@ public class MagicConditionFactory {
public static MagicCondition HasSubType(final MagicSubType subtype) {
return new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.hasSubType(subtype);
}
@ -80,6 +86,7 @@ public class MagicConditionFactory {
public static MagicCondition NotSubType(final MagicSubType subtype) {
return new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.hasSubType(subtype) == false;
}
@ -88,6 +95,7 @@ public class MagicConditionFactory {
public static MagicCondition HasAbility(final MagicAbility ability) {
return new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.hasAbility(ability);
}
@ -96,6 +104,7 @@ public class MagicConditionFactory {
public static MagicCondition NoAbility(final MagicAbility ability) {
return new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.hasAbility(ability) == false;
}
@ -104,6 +113,7 @@ public class MagicConditionFactory {
public static MagicCondition HandAtLeast(final int n) {
return new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.getController().getHandSize() >= n;
}
@ -147,6 +157,7 @@ public class MagicConditionFactory {
public static MagicCondition LibraryAtLeast(final int n) {
return new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.getController().getLibrary().size() >= n;
}
@ -155,6 +166,7 @@ public class MagicConditionFactory {
public static MagicCondition GraveyardAtLeast(final int n) {
return new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.getController().getGraveyard().size() >= n;
}
@ -163,6 +175,7 @@ public class MagicConditionFactory {
public static MagicCondition GraveyardTypeAtLeast(final MagicType type, final int n) {
return new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return MagicTargetFilterFactory.card(type).from(MagicTargetType.Graveyard).filter(source).size() >= n;
}
@ -171,6 +184,7 @@ public class MagicConditionFactory {
public static MagicCondition DevotionAtLeast(final MagicColor color, final int n) {
return new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.getController().getDevotion(color) >= n;
}
@ -179,6 +193,7 @@ public class MagicConditionFactory {
public static MagicCondition EnchantedIs(final MagicTargetFilter<MagicPermanent> filter) {
return new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return filter.accept(source, source.getController(), permanent.getEnchantedPermanent());
@ -188,6 +203,7 @@ public class MagicConditionFactory {
public static MagicCondition EquippedIs(final MagicTargetFilter<MagicPermanent> filter) {
return new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return filter.accept(source, source.getController(), permanent.getEquippedCreature());
@ -197,6 +213,7 @@ public class MagicConditionFactory {
public static MagicCondition SelfIs(final MagicTargetFilter<MagicPermanent> filter) {
return new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
final MagicPermanent permanent = (MagicPermanent)source;
return filter.accept(source, source.getController(), permanent);
@ -206,6 +223,7 @@ public class MagicConditionFactory {
public static MagicCondition YouEnergyAtLeast(final int n) {
return new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.getController().getEnergy() >= n;
}
@ -214,6 +232,7 @@ public class MagicConditionFactory {
public static MagicCondition YouLifeAtLeast(final int n) {
return new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.getController().getLife() >= n;
}
@ -222,6 +241,7 @@ public class MagicConditionFactory {
public static MagicCondition YouLifeOrLess(final int n) {
return new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.getController().getLife() <= n;
}
@ -230,6 +250,7 @@ public class MagicConditionFactory {
public static MagicCondition YouGainLifeOrMore(final int n) {
return new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.getController().getLifeGainThisTurn() >= n;
}
@ -238,6 +259,7 @@ public class MagicConditionFactory {
public static MagicCondition OpponentGainLifeOrMore(final int n) {
return new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.getOpponent().getLifeGainThisTurn() >= n;
}
@ -246,6 +268,7 @@ public class MagicConditionFactory {
public static MagicCondition OpponentLoseLifeOrMore(final int n) {
return new MagicCondition() {
@Override
public boolean accept(final MagicSource source) {
return source.getOpponent().getLifeLossThisTurn() >= n;
}

View File

@ -18,6 +18,7 @@ import magic.model.target.MagicTargetFilter;
public enum MagicConditionParser {
YouControlOr("you control a(n)? " + ARG.WORD1 +" or a(n)? "+ ARG.WORD2) {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicConditionFactory.YouControlOr(
MagicTargetFilterFactory.Permanent(ARG.word1(arg)),
@ -26,6 +27,7 @@ public enum MagicConditionParser {
}
},
YouControl("you control a(n)? " + ARG.WORDRUN) {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicConditionFactory.YouControl(
MagicTargetFilterFactory.Permanent(ARG.wordrun(arg))
@ -33,6 +35,7 @@ public enum MagicConditionParser {
}
},
OpponentControl("an opponent controls a(n)? " + ARG.WORDRUN) {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicConditionFactory.OpponentControl(
MagicTargetFilterFactory.Permanent(ARG.wordrun(arg))
@ -40,6 +43,7 @@ public enum MagicConditionParser {
}
},
DefenderControl("defending player controls a(n)? " + ARG.WORDRUN) {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicConditionFactory.OpponentControl(
MagicTargetFilterFactory.Permanent(ARG.wordrun(arg))
@ -47,11 +51,13 @@ public enum MagicConditionParser {
}
},
DefenderPoisoned("defending player is poisoned") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.DEFENDING_POISONED;
}
},
YouControlAnother("you control another " + ARG.WORDRUN) {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicConditionFactory.YouControlAnother(
MagicTargetFilterFactory.Permanent(ARG.wordrun(arg))
@ -59,6 +65,7 @@ public enum MagicConditionParser {
}
},
ControlAtLeast("you control " + ARG.AMOUNT + " or more " + ARG.WORDRUN) {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicConditionFactory.YouControlAtLeast(
MagicTargetFilterFactory.Permanent(ARG.wordrun(arg)),
@ -67,6 +74,7 @@ public enum MagicConditionParser {
}
},
ControlAtLeast2("you control at least " + ARG.AMOUNT + " " + ARG.WORDRUN) {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicConditionFactory.YouControlAtLeast(
MagicTargetFilterFactory.Permanent(ARG.wordrun(arg)),
@ -75,6 +83,7 @@ public enum MagicConditionParser {
}
},
ControlAtMost("you control " + ARG.AMOUNT + " or fewer " + ARG.WORDRUN) {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicConditionFactory.YouControlAtMost(
MagicTargetFilterFactory.Permanent(ARG.wordrun(arg)),
@ -83,6 +92,7 @@ public enum MagicConditionParser {
}
},
OppControlAtLeast("an opponent controls " + ARG.AMOUNT + " or more " + ARG.WORDRUN) {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicConditionFactory.OppControlAtLeast(
MagicTargetFilterFactory.Permanent(ARG.wordrun(arg)),
@ -91,6 +101,7 @@ public enum MagicConditionParser {
}
},
ControlNone("you control no " + ARG.WORDRUN) {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicConditionFactory.YouControlNone(
MagicTargetFilterFactory.Permanent(ARG.wordrun(arg))
@ -98,22 +109,26 @@ public enum MagicConditionParser {
}
},
Threshold("seven or more cards are in your graveyard") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.THRESHOLD_CONDITION;
}
},
YourGraveyardAtLeast("there are " + ARG.AMOUNT + " or more cards in your graveyard") {
@Override
public MagicCondition toCondition(final Matcher arg) {
final int amount = ARG.amount(arg);
return MagicConditionFactory.GraveyardAtLeast(amount);
}
},
Delirium("there are four or more card types among cards in your graveyard") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.DELIRIUM_CONDITION;
}
},
YourDevotionAtLeast("you have at least " + ARG.NUMBER + " devotion to "+ ARG.COLOR) {
@Override
public MagicCondition toCondition(final Matcher arg) {
final int amount = ARG.amount(arg);
final MagicColor color = MagicColor.valueOf(ARG.color(arg));
@ -121,6 +136,7 @@ public enum MagicConditionParser {
}
},
YourDevotion("you have devotion to " + ARG.COLOR) {
@Override
public MagicCondition toCondition(final Matcher arg) {
final int amount = 1;
final MagicColor color = MagicColor.getColor(ARG.color(arg));
@ -128,58 +144,69 @@ public enum MagicConditionParser {
}
},
SpellMastery("there are two or more instant and/or sorcery cards in your graveyard") {
@Override
public MagicCondition toCondition(final Matcher arg) { return MagicCondition.SPELL_MASTERY_CONDITION; }
},
ExactlySeven("you have exactly seven cards in hand") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.EXACTLY_SEVEN_CARDS_IN_HAND_CONDITION;
}
},
HandSize("you have " + ARG.AMOUNT + " or more cards in hand") {
@Override
public MagicCondition toCondition(final Matcher arg) {
final int amount = ARG.amount(arg);
return MagicConditionFactory.HandAtLeast(amount);
}
},
HandFewer("you have " + ARG.AMOUNT +" or fewer cards in hand") {
@Override
public MagicCondition toCondition(final Matcher arg) {
final int amount = ARG.amount(arg);
return MagicConditionFactory.HandAtMost(amount);
}
},
Hellbent("(you )?have no cards in hand") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.HELLBENT;
}
},
OpponentHellbent("an opponent has no cards in hand") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.OPPONENT_HELLBENT;
}
},
AnyHellbent("a player has no cards in hand") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.ANY_HELLBENT;
}
},
ThatHellbent("RN has no cards in hand") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.THAT_HELLBENT;
}
},
ThatHandSizeMore("RN has " + ARG.AMOUNT + " or more cards in hand") {
@Override
public MagicCondition toCondition(final Matcher arg) {
final int amount = ARG.amount(arg);
return MagicConditionFactory.RNHandAtLeast(amount);
}
},
ThatHandSizeLess("RN has " + ARG.AMOUNT + " or fewer cards in hand") {
@Override
public MagicCondition toCondition(final Matcher arg) {
final int amount = ARG.amount(arg);
return MagicConditionFactory.RNHandAtMost(amount);
}
},
CountersAtMost("(SN|it) has " + ARG.AMOUNT + " or fewer " + ARG.WORD1 + " counters on (it|him)") {
@Override
public MagicCondition toCondition(final Matcher arg) {
final int amount = ARG.amount(arg);
final MagicCounterType counterType = MagicCounterType.getCounterRaw(ARG.word1(arg));
@ -187,6 +214,7 @@ public enum MagicConditionParser {
}
},
CountersAtLeast("(SN|it) has " + ARG.AMOUNT + " or more " + ARG.WORD1 + " counters on it") {
@Override
public MagicCondition toCondition(final Matcher arg) {
final int amount = ARG.amount(arg);
final MagicCounterType counterType = MagicCounterType.getCounterRaw(ARG.word1(arg));
@ -194,6 +222,7 @@ public enum MagicConditionParser {
}
},
CountersAtLeastAlt("there are " + ARG.AMOUNT + " or more " + ARG.WORD1 + " counters on SN") {
@Override
public MagicCondition toCondition(final Matcher arg) {
final int amount = ARG.amount(arg);
final MagicCounterType counterType = MagicCounterType.getCounterRaw(ARG.word1(arg));
@ -201,12 +230,14 @@ public enum MagicConditionParser {
}
},
CountersAtLeastOne("(SN|it) has a(n)? " + ARG.WORD1 + " counter on it") {
@Override
public MagicCondition toCondition(final Matcher arg) {
final MagicCounterType counterType = MagicCounterType.getCounterRaw(ARG.word1(arg));
return MagicConditionFactory.CounterAtLeast(counterType, 1);
}
},
CountersEqual("there (is|are) exactly " + ARG.AMOUNT + " " + ARG.WORD1 + " counter(s)? on SN") {
@Override
public MagicCondition toCondition(final Matcher arg) {
final int amount = ARG.amount(arg);
final MagicCounterType counterType = MagicCounterType.getCounterRaw(ARG.word1(arg));
@ -214,60 +245,71 @@ public enum MagicConditionParser {
}
},
CountersNone("((SN|it) (has|had)|there are) no " + ARG.WORD1 + " counters on (it|SN)") {
@Override
public MagicCondition toCondition(final Matcher arg) {
final MagicCounterType counterType = MagicCounterType.getCounterRaw(ARG.word1(arg));
return MagicConditionFactory.CounterEqual(counterType, 0);
}
},
HasEquipped("SN is being equipped") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.HAS_EQUIPPED_CREATURE;
}
},
IsEquipped("(SN is|it's) equipped") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.IS_EQUIPPED;
}
},
IsEnchanted("(SN is|it's) enchanted") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.IS_ENCHANTED;
}
},
IsEnchantment("(SN is|it's) an enchantment") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.IS_ENCHANTMENT;
}
},
IsNotEnchantment("(SN is|it's) not an enchantment") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.IS_NOT_ENCHANTMENT;
}
},
IsPermanent("(SN is|it's) a(n)? " + ARG.WORDRUN) {
@Override
public MagicCondition toCondition(final Matcher arg) {
final MagicTargetFilter<MagicPermanent> filter = MagicTargetFilterFactory.Permanent(ARG.wordrun(arg));
return MagicConditionFactory.SelfIs(filter);
}
},
EquippedIsA("equipped creature is( a| an)? " + ARG.WORDRUN) {
@Override
public MagicCondition toCondition(final Matcher arg) {
final MagicTargetFilter<MagicPermanent> filter = MagicTargetFilterFactory.Permanent(ARG.wordrun(arg));
return MagicConditionFactory.EquippedIs(filter);
}
},
EnchantedIsMountain("enchanted land is a basic Mountain") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.ENCHANTED_IS_BASIC_MOUNTAIN;
}
},
EnchantedIs("enchanted creature is( a| an)? " + ARG.WORDRUN) {
@Override
public MagicCondition toCondition(final Matcher arg) {
final MagicTargetFilter<MagicPermanent> filter = MagicTargetFilterFactory.Permanent(ARG.wordrun(arg));
return MagicConditionFactory.EnchantedIs(filter);
}
},
EnchantedCountersAtLeast("enchanted creature has " + ARG.AMOUNT + " or more " + ARG.WORD1 + " counters on it") {
@Override
public MagicCondition toCondition(final Matcher arg) {
final int amount = ARG.amount(arg);
final MagicCounterType counterType = MagicCounterType.getCounterRaw(ARG.word1(arg));
@ -275,244 +317,292 @@ public enum MagicConditionParser {
}
},
EnchantedPowerAtLeast("enchanted creature's power is " + ARG.AMOUNT + " or greater") {
@Override
public MagicCondition toCondition(final Matcher arg) {
final int amount = ARG.amount(arg);
return MagicConditionFactory.EnchantedPowerAtLeast(amount);
}
},
IsUntapped("(SN is|it's) untapped") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.UNTAPPED_CONDITION;
}
},
IsTapped("(SN is|it's) tapped") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.TAPPED_CONDITION;
}
},
IsMonstrous("(SN is|it's) monstrous") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.IS_MONSTROUS_CONDITION;
}
},
IsRenowned("(SN is|it's) renowned") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.IS_RENOWNED_CONDITION;
}
},
IsBlocked("(SN is|it's) blocked") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.IS_BLOCKED_CONDITION;
}
},
IsAttacking("(SN is|it's) attacking") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.IS_ATTACKING_CONDITION;
}
},
AttackingAlone("it's attacking alone") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.IS_ATTACKING_ALONE_CONDITION;
}
},
HasDefender("it has defender") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicConditionFactory.HasAbility(MagicAbility.Defender);
}
},
HasFlying("SN has flying") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicConditionFactory.HasAbility(MagicAbility.Flying);
}
},
NoCardsInGraveyard("there are no cards in your graveyard") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.EMPTY_GRAVEYARD_CONDITION;
}
},
LibraryWithLEQ20Cards("a library has twenty or fewer cards in it") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.LIBRARY_HAS_20_OR_LESS_CARDS_CONDITION;
}
},
OpponentGraveyardWithGEQ10Cards("an opponent has ten or more cards in his or her graveyard") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.OPP_GRAVEYARD_WITH_10_OR_MORE_CARDS_CONDTITION;
}
},
OpponentNotControlWhiteOrBlueCreature("no opponent controls a white or blue creature") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.OPP_NOT_CONTROL_WHITE_OR_BLUE_CREATURE_CONDITION;
}
},
MostCardsInHand("you have more cards in hand than each opponent") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.MOST_CARDS_IN_HAND_CONDITION;
}
},
CreaturesInGraveyardAtLeast4("(you have|there are) four or more creature cards in your graveyard") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicConditionFactory.GraveyardTypeAtLeast(MagicType.Creature, 4);
}
},
WarriorCardInGraveyard("a Warrior card is in your graveyard") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.HAS_WARRIOR_IN_GRAVEYARD;
}
},
ArtifactCardInGraveyard("an artifact card is in your graveyard") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.HAS_ARTIFACT_IN_GRAVEYARD;
}
},
NoOpponentCreatures("no opponent controls a creature") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.OPP_NOT_CONTROL_CREATURE_CONDITION;
}
},
IsYourTurn("it's your turn") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.YOUR_TURN_CONDITION;
}
},
IsNotYourTurn("it's not your turn") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.NOT_YOUR_TURN_CONDITION;
}
},
YouLifeOrMore("you have "+ARG.NUMBER+" or more life") {
@Override
public MagicCondition toCondition(final Matcher arg) {
final int amount = ARG.number(arg);
return MagicConditionFactory.YouLifeAtLeast(amount);
}
},
YouLifeOrLess("you have "+ARG.NUMBER+" or less life") {
@Override
public MagicCondition toCondition(final Matcher arg) {
final int amount = ARG.number(arg);
return MagicConditionFactory.YouLifeOrLess(amount);
}
},
You30LifeOrMoreOpponent10LifeOrLess("you have 30 or more life and an opponent has 10 or less life") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.YOU_30_OR_MORE_OPPPONENT_10_OR_LESS_LIFE;
}
},
OpponentTenLifeOrLess("an opponent has 10 or less life") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.OPPONENT_TEN_OR_LESS_LIFE;
}
},
NoSpellsCastLastTurn("no spells were cast last turn") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.NO_SPELLS_CAST_LAST_TURN;
}
},
TwoOrMoreSpellsCastByPlayerLastTurn("a player cast two or more spells last turn") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.TWO_OR_MORE_SPELLS_CAST_BY_PLAYER_LAST_TURN;
}
},
Once("once each turn") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.ABILITY_ONCE_CONDITION;
}
},
Twice("no more than twice each turn") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.ABILITY_TWICE_CONDITION;
}
},
Thrice("no more than three times each turn") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.ABILITY_THRICE_CONDITION;
}
},
BeforeYourAttack("during your turn, before attackers are declared") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.BEFORE_YOUR_ATTACK_CONDITION;
}
},
BeforeAttackers("before attackers are declared") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.BEFORE_ATTACKERS;
}
},
BeforeBlockers("before blockers are declared") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.BEFORE_BLOCKERS;
}
},
BeforeCombatDamage("before the combat damage step") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.BEFORE_COMBAT_DAMAGE;
}
},
BeforeEndOfCombat("before the end of combat step") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.BEFORE_END_OF_COMBAT;
}
},
BeenAttacked("you've been attacked this step") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.BEEN_ATTACKED;
}
},
DuringAttack("during the declare attackers step") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.DECLARE_ATTACKERS;
}
},
DuringEndOfCombat("during the end of combat step") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.END_OF_COMBAT_CONDITION;
}
},
DuringCombatAfterBlockers("during combat after blockers are declared") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.DURING_COMBAT_AFTER_BLOCKERS;
}
},
DuringBlockers("during the declare blockers step") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.DURING_BLOCKERS;
}
},
DuringCombatBeforeBlockers("during combat before blockers are declared") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.DURING_COMBAT_BEFORE_BLOCKERS;
}
},
AfterCombat("after combat") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.AFTER_COMBAT;
}
},
YourTurn("during your turn") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.YOUR_TURN_CONDITION;
}
},
YourUpkeep("during your upkeep") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.YOUR_UPKEEP_CONDITION;
}
},
OpponentsUpkeep("during an opponent's upkeep") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.OPPONENTS_UPKEEP_CONDITION;
}
},
Sorcery("any time you could cast a sorcery") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.SORCERY_CONDITION;
}
},
DuringCombat("during combat") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.DURING_COMBAT;
}
},
NoneOnBattlefield("no " + ARG.WORDRUN + " are on the battlefield") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicConditionFactory.BattlefieldEqual(
MagicTargetFilterFactory.Permanent(ARG.wordrun(arg)), 0
@ -520,11 +610,13 @@ public enum MagicConditionParser {
}
},
NoneOnBattlefieldAlt("there are no " + ARG.WORDRUN + " on the battlefield") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return NoneOnBattlefield.toCondition(arg);
}
},
AtLeastOneOnBattlefield("there is (a|an) " + ARG.WORDRUN + " on the battlefield") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicConditionFactory.BattlefieldAtLeast(
MagicTargetFilterFactory.Permanent(ARG.wordrun(arg)), 1
@ -532,14 +624,17 @@ public enum MagicConditionParser {
}
},
IsOnBattlefield("(a|an) " + ARG.WORDRUN + " is on the battlefield") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return AtLeastOneOnBattlefield.toCondition(arg);
}
},
Revolt("a permanent you controlled left the battlefield this turn") {
@Override
public MagicCondition toCondition(final Matcher arg) { return MagicCondition.PERMANENT_YOU_CONTROLLED_LEFT_BATTLEFIELD;}
},
FiveOrMoreIslands("there are " + ARG.AMOUNT + " or more " + ARG.WORDRUN + " on the battlefield") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicConditionFactory.BattlefieldAtLeast(
MagicTargetFilterFactory.Permanent(ARG.wordrun(arg)), ARG.amount(arg)
@ -547,148 +642,177 @@ public enum MagicConditionParser {
}
},
MoreCreaturesThanDefending("you control more creatures than defending player") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.MORE_CREATURES_THAN_DEFENDING;
}
},
MoreCreaturesThanAttacking("you control more creatures than attacking player") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.MORE_CREATURES_THAN_ATTACKING;
}
},
MoreLandsThanDefending("you control more lands than defending player") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.MORE_LANDS_THAN_DEFENDING;
}
},
MoreLandsThanAttacking("you control more lands than attacking player") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.MORE_LANDS_THAN_ATTACKING;
}
},
OpponentMoreLands("an opponent controls more lands than you") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.OPP_MORE_LANDS;
}
},
OpponentMoreCreatures("an opponent controls more creatures than you") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.OPP_MORE_CREATURES;
}
},
OpponentMoreLife("an opponent has more life than you") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.OPP_MORE_LIFE;
}
},
YouMoreLife("you have more life than an opponent") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.YOU_MORE_LIFE;
}
},
Morbid("a creature died this turn") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.CREATURE_DIED_THIS_TURN;
}
},
YouGainedLifeOrMore("you gained "+ARG.NUMBER+" or more life this turn") {
@Override
public MagicCondition toCondition(final Matcher arg) {
final int amount = ARG.number(arg);
return MagicConditionFactory.YouGainLifeOrMore(amount);
}
},
OpponentGainedLife("an opponent gained life this turn") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicConditionFactory.OpponentGainLifeOrMore(1);
}
},
OpponentLostLife("an opponent lost life this turn") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicConditionFactory.OpponentLoseLifeOrMore(1);
}
},
OpponentLostLifeOrMore("an opponent lost "+ARG.NUMBER+" or more life this turn") {
@Override
public MagicCondition toCondition(final Matcher arg) {
final int amount = ARG.number(arg);
return MagicConditionFactory.OpponentLoseLifeOrMore(amount);
}
},
OpponentWasDealtDamage("an opponent (was|has been) dealt damage this turn") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.OPPONENT_WAS_DEALT_DAMAGE;
}
},
YouAttackedWithCreature("you attacked with a creature this turn") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.YOU_ATTACKED_WITH_CREATURE;
}
},
CreatureInAGraveyard("there is a creature card in a graveyard") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.CREATURE_IN_A_GRAVEYARD;
}
},
CreatureInYourGraveyard("you have a creature card in your graveyard") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.HAS_CREATURE_IN_GRAVEYARD;
}
},
CreatureInYourHand("you have a creature card in your hand") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.HAS_CREATURE_IN_HAND;
}
},
ArtifactInYourGraveyard("you have an artifact card in your graveyard") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.HAS_ARTIFACT_IN_GRAVEYARD;
}
},
EquipmentInYourHand("you have an equipment card in your hand") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.HAS_EQUIPMENT_IN_HAND;
}
},
InstantOrSorceryInGraveyard("there is an instant or sorcery card in a graveyard") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.INSTANT_OR_SORCERY_IN_A_GRAVEYARD;
}
},
Formidable("creatures you control have total power 8 or greater") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.FORMIDABLE;
}
},
CastItFromHand("you cast it from your hand") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.CAST_FROM_HAND;
}
},
WasKicked("SN was kicked") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.WAS_KICKED;
}
},
SurgePaid("SN's surge cost was paid") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.WAS_KICKED;
}
},
ControlledSinceLastTurn("you've controlled SN continuously since the beginning of your most recent turn") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.CONTROL_SINCE_LAST_TURN;
}
},
CastAnotherSpellThisTurn("you've cast another spell this turn") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.CAST_ANOTHER_SPELL_THIS_TURN;
}
},
CastNonCreatureSpellThisTurn("you've cast a noncreature spell this turn") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.CAST_A_NONCREATURE_SPELL_THIS_TURN;
}
},
YouAreMonarch("you're the monarch") {
@Override
public MagicCondition toCondition(final Matcher arg) {
return MagicCondition.YOU_ARE_MONARCH;
}

View File

@ -11,36 +11,42 @@ public abstract class MagicChainEventFactory {
}
public static final MagicChainEventFactory Tap = new MagicChainEventFactory() {
@Override
public MagicEvent getEvent(final MagicSource source, final MagicTargetChoice tchoice) {
return new MagicTapPermanentEvent(source, tchoice);
}
};
public static final MagicChainEventFactory Untap = new MagicChainEventFactory() {
@Override
public MagicEvent getEvent(final MagicSource source, final MagicTargetChoice tchoice) {
return new MagicUntapPermanentEvent(source, tchoice);
}
};
public static final MagicChainEventFactory Sac = new MagicChainEventFactory() {
@Override
public MagicEvent getEvent(final MagicSource source, final MagicTargetChoice tchoice) {
return new MagicSacrificePermanentEvent(source, tchoice);
}
};
public static final MagicChainEventFactory Bounce = new MagicChainEventFactory() {
@Override
public MagicEvent getEvent(final MagicSource source, final MagicTargetChoice tchoice) {
return new MagicBounceChosenPermanentEvent(source, tchoice);
}
};
public static final MagicChainEventFactory ExileCard = new MagicChainEventFactory() {
@Override
public MagicEvent getEvent(final MagicSource source, final MagicTargetChoice tchoice) {
return new MagicExileCardEvent(source, tchoice);
}
};
public static final MagicChainEventFactory ExilePerm = new MagicChainEventFactory() {
@Override
public MagicEvent getEvent(final MagicSource source, final MagicTargetChoice tchoice) {
return new MagicExileChosenPermanentEvent(source, tchoice);
}

View File

@ -19,6 +19,7 @@ import java.util.regex.Pattern;
public enum MagicCostEvent {
SacrificeSelf("Sacrifice (SN|this permanent|this land)") {
@Override
public MagicEvent toEvent(final Matcher arg, final MagicSource source) {
return new MagicSacrificeEvent((MagicPermanent)source);
}
@ -28,6 +29,7 @@ public enum MagicCostEvent {
}
},
SacrificeMultiple("Sacrifice (?<another>another )?(" + ARG.AMOUNT + " )?" + ARG.ANY) {
@Override
public MagicEvent toEvent(final Matcher arg, final MagicSource source) {
final int amt = ARG.amount(arg);
final String chosen = MagicTargetFilterFactory.toSingular(ARG.any(arg)) + " you control";
@ -43,6 +45,7 @@ public enum MagicCostEvent {
}
},
BounceSelf("Return SN to its owner's hand") {
@Override
public MagicEvent toEvent(final Matcher arg, final MagicSource source) {
return new MagicBouncePermanentEvent(source, (MagicPermanent)source);
}
@ -52,6 +55,7 @@ public enum MagicCostEvent {
}
},
BounceMultiple("Return ((?<another>another )|" + ARG.AMOUNT + " )?" + ARG.ANY + " to (their|its) owner's hand") {
@Override
public MagicEvent toEvent(final Matcher arg, final MagicSource source) {
final int amt = ARG.amount(arg);
final String chosen = MagicTargetFilterFactory.toSingular(ARG.any(arg));
@ -67,28 +71,33 @@ public enum MagicCostEvent {
}
},
DiscardAll("Discard( all the cards in)? your hand") {
@Override
public MagicEvent toEvent(final Matcher arg, final MagicSource source) {
return new MagicDiscardHandEvent(source);
}
},
DiscardSelf("Discard SN") {
@Override
public MagicEvent toEvent(final Matcher arg, final MagicSource source) {
return new MagicDiscardSelfEvent((MagicCard)source);
}
},
DiscardCards("Discard " + ARG.AMOUNT + " card(s)?") {
@Override
public MagicEvent toEvent(final Matcher arg, final MagicSource source) {
final int amount = ARG.amount(arg);
return new MagicDiscardEvent(source, amount);
}
},
DiscardCardsRandom("Discard " + ARG.AMOUNT + " card(s)? at random") {
@Override
public MagicEvent toEvent(final Matcher arg, final MagicSource source) {
final int amount = ARG.amount(arg);
return MagicDiscardEvent.Random(source, amount);
}
},
DiscardChosen("Discard " + ARG.ANY) {
@Override
public MagicEvent toEvent(final Matcher arg, final MagicSource source) {
final String chosen = ARG.any(arg) + " from your hand";
final MagicTargetFilter<MagicCard> regular = MagicTargetFilterFactory.Card(chosen);
@ -97,6 +106,7 @@ public enum MagicCostEvent {
}
},
ExileSelf("Exile SN") {
@Override
public MagicEvent toEvent(final Matcher arg, final MagicSource source) {
return new MagicExileEvent((MagicPermanent)source);
}
@ -106,16 +116,19 @@ public enum MagicCostEvent {
}
},
ExileCardSelf("Exile SN from your graveyard") {
@Override
public MagicEvent toEvent(final Matcher arg, final MagicSource source) {
return new MagicExileSelfEvent((MagicCard)source, MagicLocationType.Graveyard);
}
},
ExileTopNCardsLibrary("Exile the top( " + ARG.AMOUNT + ")? card(s)? of your library") {
@Override
public MagicEvent toEvent(final Matcher arg, final MagicSource source) {
return new MagicExileTopLibraryEvent(source, ARG.amount(arg));
}
},
ExileCards("Exile " + ARG.AMOUNT + " (?<any>.*card.*)") {
@Override
public MagicEvent toEvent(final Matcher arg, final MagicSource source) {
final int amt = ARG.amount(arg);
final String chosen = MagicTargetFilterFactory.toSingular(ARG.any(arg));
@ -134,6 +147,7 @@ public enum MagicCostEvent {
}
},
ExileMultiple("Exile ((?<another>another )|" + ARG.AMOUNT + " )?" + ARG.ANY) {
@Override
public MagicEvent toEvent(final Matcher arg, final MagicSource source) {
final int amt = ARG.amount(arg);
final String chosen = MagicTargetFilterFactory.toSingular(ARG.any(arg));
@ -149,6 +163,7 @@ public enum MagicCostEvent {
}
},
TapSelf("\\{T\\}") {
@Override
public MagicEvent toEvent(final Matcher arg, final MagicSource source) {
return new MagicTapEvent((MagicPermanent)source);
}
@ -158,6 +173,7 @@ public enum MagicCostEvent {
}
},
UntapSelf("\\{Q\\}") {
@Override
public MagicEvent toEvent(final Matcher arg, final MagicSource source) {
return new MagicUntapEvent((MagicPermanent)source);
}
@ -167,6 +183,7 @@ public enum MagicCostEvent {
}
},
TapMultiple("Tap (?<another>another )?(" + ARG.AMOUNT + " )?untapped " + ARG.ANY) {
@Override
public MagicEvent toEvent(final Matcher arg, final MagicSource source) {
final int amt = ARG.amount(arg);
final String chosen = MagicTargetFilterFactory.toSingular(ARG.any(arg));
@ -179,6 +196,7 @@ public enum MagicCostEvent {
}
},
UntapMultiple("Untap (?<another>another )?(" + ARG.AMOUNT + " )?tapped " + ARG.ANY) {
@Override
public MagicEvent toEvent(final Matcher arg, final MagicSource source) {
final int amt = ARG.amount(arg);
final String chosen = MagicTargetFilterFactory.toSingular(ARG.any(arg));
@ -191,16 +209,19 @@ public enum MagicCostEvent {
}
},
PayLife("Pay " + ARG.NUMBER + " life") {
@Override
public MagicEvent toEvent(final Matcher arg, final MagicSource source) {
return new MagicPayLifeEvent(source, ARG.number(arg));
}
},
PayEnergy("Pay " + ARG.ENERGY) {
@Override
public MagicEvent toEvent(final Matcher arg, final MagicSource source) {
return new MagicPayEnergyEvent(source, ARG.energy(arg));
}
},
RemoveCounterSelf("Remove " + ARG.AMOUNT + " " + ARG.WORD1 + " counter(s)? from SN") {
@Override
public MagicEvent toEvent(final Matcher arg, final MagicSource source) {
final int amount = ARG.amount(arg);
final MagicCounterType counterType = MagicCounterType.getCounterRaw(ARG.word1(arg));
@ -212,12 +233,14 @@ public enum MagicCostEvent {
}
},
RemoveCounterChosen("Remove a " + ARG.WORD1 + " counter from a creature you control") {
@Override
public MagicEvent toEvent(final Matcher arg, final MagicSource source) {
final MagicCounterType counterType = MagicCounterType.getCounterRaw(ARG.word1(arg));
return new MagicRemoveCounterChosenEvent(source, counterType);
}
},
AddCounterSelf("Put " + ARG.AMOUNT + " " + ARG.WORD1 + " counter(s)? on SN") {
@Override
public MagicEvent toEvent(final Matcher arg, final MagicSource source) {
final int amount = ARG.amount(arg);
final MagicCounterType counterType = MagicCounterType.getCounterRaw(ARG.word1(arg));
@ -229,17 +252,20 @@ public enum MagicCostEvent {
}
},
AddCounterChosen("Put a " + ARG.WORD1 + " counter on a creature you control") {
@Override
public MagicEvent toEvent(final Matcher arg, final MagicSource source) {
final MagicCounterType counterType = MagicCounterType.getCounterRaw(ARG.word1(arg));
return new MagicAddCounterChosenEvent(source, counterType);
}
},
PayMana("(pay )?" + ARG.MANACOST) {
@Override
public MagicEvent toEvent(final Matcher arg, final MagicSource source) {
return new MagicPayManaCostEvent(source, MagicManaCost.create(ARG.manacost(arg)));
}
},
AltManaCost("(pay )?alt mana cost " + ARG.MANACOST) {
@Override
public MagicEvent toEvent(final Matcher arg, final MagicSource source) {
final MagicManaCost origCost = MagicManaCost.create(ARG.manacost(arg));
final MagicManaCost cost = origCost == MagicManaCost.ZERO ? MagicManaCost.NONE : origCost;
@ -249,11 +275,13 @@ public enum MagicCostEvent {
}
},
DamageYou("SN deals " + ARG.NUMBER + " damage to you") {
@Override
public MagicEvent toEvent(final Matcher arg, final MagicSource source) {
return MagicRuleEventAction.create(arg.group()).getEvent(source);
}
},
DoesntUntap("SN doesn't untap during your next untap step") {
@Override
public MagicEvent toEvent(final Matcher arg, final MagicSource source) {
return MagicRuleEventAction.create(arg.group()).getEvent(source);
}
@ -263,6 +291,7 @@ public enum MagicCostEvent {
}
},
MillSelf("Put the top( " + ARG.AMOUNT + ")? card(s)? of your library into your graveyard") {
@Override
public MagicEvent toEvent(final Matcher arg, final MagicSource source) {
return new MagicMillEvent(source, ARG.amount(arg));
}

View File

@ -25,6 +25,7 @@ public class MagicDashActivation extends MagicHandCastActivation {
cost = aCost;
}
@Override
public Iterable<? extends MagicEvent> getCostEvent(final MagicCard source) {
return Arrays.asList(
new MagicPayManaCostEvent(

View File

@ -752,6 +752,7 @@ public class MagicEvent implements MagicCopyable {
return choice.hasOptions(player.getGame(), player, source, false);
}
@Override
public String toString() {
return "EVENT: " + source + " " + description + " " + (hasChoice() ? choice.getDescription() : "");
}

View File

@ -53,6 +53,7 @@ public class MagicHandCastActivation extends MagicActivation<MagicCard> implemen
return usesStack;
}
@Override
public Iterable<? extends MagicEvent> getCostEvent(final MagicCard source) {
return source.getCostEvent();
}

View File

@ -31,6 +31,7 @@ public class MagicKickerCost extends MagicAdditionalCost implements MagicEventAc
return new MagicKickerCost(aCost, "conspire");
}
@Override
public MagicEvent getEvent(final MagicSource source) {
return new MagicEvent(
source,

View File

@ -24,6 +24,7 @@ public class MagicMultikickerCost extends MagicAdditionalCost implements MagicEv
return new MagicMultikickerCost(aManaCost, "replicate");
}
@Override
public MagicEvent getEvent(final MagicSource source) {
return new MagicEvent(
source,

View File

@ -27,6 +27,7 @@ public class MagicNinjutsuActivation extends MagicCardAbilityActivation {
cost = aCost;
}
@Override
public Iterable<? extends MagicEvent> getCostEvent(final MagicCard source) {
return Arrays.asList(
new MagicPayManaCostEvent(

View File

@ -92,6 +92,7 @@ public abstract class MagicPermanentActivation extends MagicActivation<MagicPerm
return getPermanentEvent(source,MagicPayedCost.NO_COST).getChoice();
}
@Override
public abstract Iterable<? extends MagicEvent> getCostEvent(final MagicPermanent source);
public abstract MagicEvent getPermanentEvent(final MagicPermanent source,final MagicPayedCost payedCost);

View File

@ -1778,6 +1778,7 @@ public enum MagicRuleEventAction {
MagicTiming.Tapping,
"Untap"
) {
@Override
public MagicEventAction getAction(final Matcher matcher) {
final MagicTargetFilter<MagicPermanent> filter = ARG.permanentsParse(matcher);
return (game, event) -> {

View File

@ -22,6 +22,7 @@ public class MagicSurgeActivation extends MagicHandCastActivation {
cost = aCost;
}
@Override
public Iterable<? extends MagicEvent> getCostEvent(final MagicCard source) {
return Arrays.asList(
MagicPayManaCostEvent.Cast(

View File

@ -20,9 +20,11 @@ public class MagicTransmuteActivation extends MagicCardAbilityActivation {
private static MagicTargetChoice getTransmuteChoice(final int cmc) {
final MagicCardFilterImpl transmuteFilter = new MagicCardFilterImpl() {
@Override
public boolean accept(final MagicSource source,final MagicPlayer player,final MagicCard target) {
return target.getConvertedCost() == cmc;
}
@Override
public boolean acceptType(final MagicTargetType targetType) {
return targetType == MagicTargetType.Library;
}

View File

@ -76,6 +76,7 @@ public class MagicCombatDamagePhase extends MagicPhase {
}
}
@Override
protected void executeEndOfPhase(final MagicGame game) {
executeBeginStep(game);
}

View File

@ -41,10 +41,12 @@ public class MagicMultipleScoreRanking implements MagicScoreRanking {
left=maxSize;
}
@Override
public boolean addScore(final int score) {
return left != 0 || (best ? score > worstScore : score < worstScore);
}
@Override
public void addScoreResult(final MagicScoreResult result) {
results.add(result);
if (left==0) {

View File

@ -119,6 +119,7 @@ public abstract class MagicItemOnStack extends MagicObjectImpl implements MagicT
return MagicTargetNone.getInstance();
}
@Override
public long getId() {
return id;
}
@ -228,6 +229,7 @@ public abstract class MagicItemOnStack extends MagicObjectImpl implements MagicT
});
}
@Override
public abstract boolean isSpell();
public abstract boolean canBeCountered();

View File

@ -14,18 +14,22 @@ import magic.model.MagicType;
import magic.model.event.MagicEvent;
public abstract class MagicCardFilterImpl implements MagicTargetFilter<MagicCard> {
@Override
public List<MagicCard> filter(final MagicSource source) {
return filter(source, source.getController(), MagicTargetHint.None);
}
@Override
public List<MagicCard> filter(final MagicPlayer player) {
return filter(MagicSource.NONE, player, MagicTargetHint.None);
}
@Override
public List<MagicCard> filter(final MagicEvent event) {
return filter(event.getSource(), event.getPlayer(), MagicTargetHint.None);
}
@Override
public List<MagicCard> filter(final MagicSource source, final MagicPlayer player, final MagicTargetHint targetHint) {
final List<MagicCard> targets = new ArrayList<MagicCard>();
@ -78,6 +82,7 @@ public abstract class MagicCardFilterImpl implements MagicTargetFilter<MagicCard
public MagicCardFilterImpl or(final MagicType type) {
final MagicCardFilterImpl curr = this;
return new MagicCardFilterImpl() {
@Override
public boolean accept(final MagicSource source,final MagicPlayer player,final MagicCard target) {
return curr.accept(source, player, target) || target.hasType(type);
}
@ -86,6 +91,7 @@ public abstract class MagicCardFilterImpl implements MagicTargetFilter<MagicCard
public MagicCardFilterImpl or(final MagicSubType subType) {
final MagicCardFilterImpl curr = this;
return new MagicCardFilterImpl() {
@Override
public boolean accept(final MagicSource source,final MagicPlayer player,final MagicCard target) {
return curr.accept(source, player, target) || target.hasSubType(subType);
}
@ -94,6 +100,7 @@ public abstract class MagicCardFilterImpl implements MagicTargetFilter<MagicCard
public MagicCardFilterImpl or(final MagicColor color) {
final MagicCardFilterImpl curr = this;
return new MagicCardFilterImpl() {
@Override
public boolean accept(final MagicSource source,final MagicPlayer player,final MagicCard target) {
return curr.accept(source, player, target) || target.hasColor(color);
}
@ -102,6 +109,7 @@ public abstract class MagicCardFilterImpl implements MagicTargetFilter<MagicCard
public MagicCardFilterImpl or(final MagicAbility ability) {
final MagicCardFilterImpl curr = this;
return new MagicCardFilterImpl() {
@Override
public boolean accept(final MagicSource source,final MagicPlayer player,final MagicCard target) {
return curr.accept(source, player, target) || target.hasAbility(ability);
}
@ -110,6 +118,7 @@ public abstract class MagicCardFilterImpl implements MagicTargetFilter<MagicCard
public MagicCardFilterImpl and(final MagicType type) {
final MagicCardFilterImpl curr = this;
return new MagicCardFilterImpl() {
@Override
public boolean accept(final MagicSource source,final MagicPlayer player,final MagicCard target) {
return curr.accept(source, player, target) && target.hasType(type);
}
@ -118,6 +127,7 @@ public abstract class MagicCardFilterImpl implements MagicTargetFilter<MagicCard
public MagicCardFilterImpl and(final MagicSubType subType) {
final MagicCardFilterImpl curr = this;
return new MagicCardFilterImpl() {
@Override
public boolean accept(final MagicSource source,final MagicPlayer player,final MagicCard target) {
return curr.accept(source, player, target) && target.hasSubType(subType);
}
@ -126,6 +136,7 @@ public abstract class MagicCardFilterImpl implements MagicTargetFilter<MagicCard
public MagicCardFilterImpl and(final MagicColor color) {
final MagicCardFilterImpl curr = this;
return new MagicCardFilterImpl() {
@Override
public boolean accept(final MagicSource source,final MagicPlayer player,final MagicCard target) {
return curr.accept(source, player, target) && target.hasColor(color);
}
@ -134,6 +145,7 @@ public abstract class MagicCardFilterImpl implements MagicTargetFilter<MagicCard
public MagicCardFilterImpl and(final MagicAbility ability) {
final MagicCardFilterImpl curr = this;
return new MagicCardFilterImpl() {
@Override
public boolean accept(final MagicSource source,final MagicPlayer player,final MagicCard target) {
return curr.accept(source, player, target) && target.hasAbility(ability);
}
@ -142,6 +154,7 @@ public abstract class MagicCardFilterImpl implements MagicTargetFilter<MagicCard
public MagicCardFilterImpl permanent() {
final MagicCardFilterImpl curr = this;
return new MagicCardFilterImpl() {
@Override
public boolean accept(final MagicSource source,final MagicPlayer player,final MagicCard target) {
return curr.accept(source, player, target) && target.isPermanentCard();
}
@ -150,6 +163,7 @@ public abstract class MagicCardFilterImpl implements MagicTargetFilter<MagicCard
public MagicCardFilterImpl cmcLEQ(final int n) {
final MagicCardFilterImpl curr = this;
return new MagicCardFilterImpl() {
@Override
public boolean accept(final MagicSource source,final MagicPlayer player,final MagicCard target) {
return curr.accept(source, player, target) && target.getConvertedCost() <= n;
}
@ -158,6 +172,7 @@ public abstract class MagicCardFilterImpl implements MagicTargetFilter<MagicCard
public MagicCardFilterImpl powerLEQ(final int n) {
final MagicCardFilterImpl curr = this;
return new MagicCardFilterImpl() {
@Override
public boolean accept(final MagicSource source,final MagicPlayer player,final MagicCard target) {
return curr.accept(source, player, target) && target.getPower() <= n;
}
@ -166,9 +181,11 @@ public abstract class MagicCardFilterImpl implements MagicTargetFilter<MagicCard
public MagicCardFilterImpl from(final MagicTargetType location) {
final MagicCardFilterImpl curr = this;
return new MagicCardFilterImpl() {
@Override
public boolean accept(final MagicSource source,final MagicPlayer player,final MagicCard target) {
return curr.accept(source, player, target);
}
@Override
public boolean acceptType(final MagicTargetType targetType) {
return curr.acceptType(targetType) || targetType == location;
}

View File

@ -10,18 +10,22 @@ import java.util.ArrayList;
import java.util.List;
public abstract class MagicPermanentFilterImpl implements MagicTargetFilter<MagicPermanent> {
@Override
public List<MagicPermanent> filter(final MagicSource source) {
return filter(source, source.getController(), MagicTargetHint.None);
}
@Override
public List<MagicPermanent> filter(final MagicPlayer player) {
return filter(MagicSource.NONE, player, MagicTargetHint.None);
}
@Override
public List<MagicPermanent> filter(final MagicEvent event) {
return filter(event.getSource(), event.getPlayer(), MagicTargetHint.None);
}
@Override
public List<MagicPermanent> filter(final MagicSource source, final MagicPlayer player, final MagicTargetHint targetHint) {
final MagicGame game = player.getGame();
final List<MagicPermanent> targets=new ArrayList<MagicPermanent>();
@ -38,6 +42,7 @@ public abstract class MagicPermanentFilterImpl implements MagicTargetFilter<Magi
return targets;
}
@Override
public boolean acceptType(final MagicTargetType targetType) {
return targetType==MagicTargetType.Permanent;
}

View File

@ -9,18 +9,22 @@ import java.util.ArrayList;
import java.util.List;
public abstract class MagicPlayerFilterImpl implements MagicTargetFilter<MagicPlayer> {
@Override
public List<MagicPlayer> filter(final MagicSource source) {
return filter(source, source.getController(), MagicTargetHint.None);
}
@Override
public List<MagicPlayer> filter(final MagicPlayer player) {
return filter(MagicSource.NONE, player, MagicTargetHint.None);
}
@Override
public List<MagicPlayer> filter(final MagicEvent event) {
return filter(event.getSource(), event.getPlayer(), MagicTargetHint.None);
}
@Override
public List<MagicPlayer> filter(final MagicSource source, final MagicPlayer player, final MagicTargetHint targetHint) {
final MagicGame game = player.getGame();
final List<MagicPlayer> targets=new ArrayList<MagicPlayer>();
@ -37,6 +41,7 @@ public abstract class MagicPlayerFilterImpl implements MagicTargetFilter<MagicPl
return targets;
}
@Override
public boolean acceptType(final MagicTargetType targetType) {
return targetType==MagicTargetType.Player;
}

View File

@ -10,18 +10,22 @@ import java.util.ArrayList;
import java.util.List;
public abstract class MagicStackFilterImpl implements MagicTargetFilter<MagicItemOnStack> {
@Override
public List<MagicItemOnStack> filter(final MagicSource source) {
return filter(source, source.getController(), MagicTargetHint.None);
}
@Override
public List<MagicItemOnStack> filter(final MagicPlayer player) {
return filter(MagicSource.NONE, player, MagicTargetHint.None);
}
@Override
public List<MagicItemOnStack> filter(final MagicEvent event) {
return filter(event.getSource(), event.getPlayer(), MagicTargetHint.None);
}
@Override
public List<MagicItemOnStack> filter(final MagicSource source, final MagicPlayer player, final MagicTargetHint targetHint) {
final MagicGame game = player.getGame();
final List<MagicItemOnStack> targets=new ArrayList<MagicItemOnStack>();
@ -38,6 +42,7 @@ public abstract class MagicStackFilterImpl implements MagicTargetFilter<MagicIte
return targets;
}
@Override
public boolean acceptType(final MagicTargetType targetType) {
return targetType==MagicTargetType.Stack;
}

File diff suppressed because it is too large Load Diff

View File

@ -10,18 +10,22 @@ import magic.model.MagicSource;
import magic.model.event.MagicEvent;
public abstract class MagicTargetFilterImpl implements MagicTargetFilter<MagicTarget> {
@Override
public List<MagicTarget> filter(final MagicSource source) {
return filter(source, source.getController(), MagicTargetHint.None);
}
@Override
public List<MagicTarget> filter(final MagicPlayer player) {
return filter(MagicSource.NONE, player, MagicTargetHint.None);
}
@Override
public List<MagicTarget> filter(final MagicEvent event) {
return filter(event.getSource(), event.getPlayer(), MagicTargetHint.None);
}
@Override
public List<MagicTarget> filter(final MagicSource source, final MagicPlayer player, final MagicTargetHint targetHint) {
final MagicGame game = player.getGame();
final List<MagicTarget> targets=new ArrayList<MagicTarget>();

View File

@ -10,206 +10,247 @@ import magic.model.target.MagicTargetFilterFactory.Control;
public enum MagicTargetFilterParser {
CardNamedFromYourLibrary("card named " + ARG.ANY + " from your library") {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.cardName(ARG.any(arg)).from(MagicTargetType.Library);
}
},
CardNamedFromYourHand("card named " + ARG.ANY + " from your hand") {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.cardName(ARG.any(arg)).from(MagicTargetType.Hand);
}
},
CardNamedFromYourGraveyard("card named " + ARG.ANY + " from your graveyard") {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.cardName(ARG.any(arg)).from(MagicTargetType.Graveyard);
}
},
CardNamedFromOppGraveyard("card named " + ARG.ANY + " from an opponent's graveyard") {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.cardName(ARG.any(arg)).from(MagicTargetType.OpponentsGraveyard);
}
},
CardNamedFromGraveyard("card named " + ARG.ANY + " from a graveyard") {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.cardName(ARG.any(arg)).from(MagicTargetType.Graveyard).from(MagicTargetType.OpponentsGraveyard);
}
},
PermanentNamed("permanent named " + ARG.ANY) {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.permanentName(ARG.any(arg), Control.Any);
}
},
PermanentNotNamed("permanent not named " + ARG.ANY) {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.permanentNotName(ARG.any(arg), Control.Any);
}
},
CreatureNamedYouControl("creature named " + ARG.ANY + " you control") {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.creatureName(ARG.any(arg), Control.You);
}
},
CreatureYouControlNamed("creature you control named " + ARG.ANY) {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.creatureName(ARG.any(arg), Control.You);
}
},
CreatureNamed("creature named " + ARG.ANY) {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.creatureName(ARG.any(arg), Control.Any);
}
},
LandYouControlNamed("land you control named " + ARG.ANY) {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.landName(ARG.any(arg), Control.You);
}
},
PermanentCardGraveyard(ARG.WORDRUN + " permanent card from your graveyard") {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.matchPermanentCardPrefix(arg.group(), ARG.wordrun(arg), MagicTargetType.Graveyard);
}
},
CreatureCardGraveyard(ARG.WORDRUN + " creature card from your graveyard") {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.matchCreatureCardPrefix(arg.group(), ARG.wordrun(arg), MagicTargetType.Graveyard);
}
},
CardFromGraveyard(ARG.WORDRUN + " card from your graveyard") {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.matchCardPrefix(arg.group(), ARG.wordrun(arg), MagicTargetType.Graveyard);
}
},
PermanentCardOppGraveyard(ARG.WORDRUN + " permanent card from an opponent's graveyard") {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.matchPermanentCardPrefix(arg.group(), ARG.wordrun(arg), MagicTargetType.OpponentsGraveyard);
}
},
CreatureCardOppGraveyard(ARG.WORDRUN + " creature card from an opponent's graveyard") {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.matchCreatureCardPrefix(arg.group(), ARG.wordrun(arg), MagicTargetType.OpponentsGraveyard);
}
},
CardFromOppGraveyard(ARG.WORDRUN + " card from an opponent's graveyard") {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.matchCardPrefix(arg.group(), ARG.wordrun(arg), MagicTargetType.OpponentsGraveyard);
}
},
PermanentCardHand(ARG.WORDRUN + " permanent card from your hand") {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.matchPermanentCardPrefix(arg.group(), ARG.wordrun(arg), MagicTargetType.Hand);
}
},
CreatureCardHand(ARG.WORDRUN + " creature card from your hand") {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.matchCreatureCardPrefix(arg.group(), ARG.wordrun(arg), MagicTargetType.Hand);
}
},
CardFromHand(ARG.WORDRUN + " card from your hand") {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.matchCardPrefix(arg.group(), ARG.wordrun(arg), MagicTargetType.Hand);
}
},
PermanentCardLibrary(ARG.WORDRUN + " permanent card from your library") {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.matchPermanentCardPrefix(arg.group(), ARG.wordrun(arg), MagicTargetType.Library);
}
},
CreatureCardLibrary(ARG.WORDRUN + " creature card from your library") {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.matchCreatureCardPrefix(arg.group(), ARG.wordrun(arg), MagicTargetType.Library);
}
},
CardLibrary(ARG.WORDRUN + " card from your library") {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.matchCardPrefix(arg.group(), ARG.wordrun(arg), MagicTargetType.Library);
}
},
CardFromAGraveyard(ARG.WORDRUN + " card from a graveyard") {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.matchCardPrefix(arg.group(), ARG.wordrun(arg), MagicTargetType.Graveyard).from(MagicTargetType.OpponentsGraveyard);
}
},
AttackingOrBlocking("attacking or blocking " + ARG.WORDRUN) {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.permanentOr(MagicPermanentState.Attacking, MagicPermanentState.Blocking, MagicTargetFilterFactory.Permanent(ARG.wordrun(arg)));
}
},
Attacking("attacking " + ARG.WORDRUN) {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.permanent(MagicPermanentState.Attacking, MagicTargetFilterFactory.Permanent(ARG.wordrun(arg)));
}
},
Untapped("untapped " + ARG.WORDRUN) {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.untapped(MagicTargetFilterFactory.Permanent(ARG.wordrun(arg)));
}
},
Tapped("tapped " + ARG.WORDRUN) {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.permanent(MagicPermanentState.Tapped, MagicTargetFilterFactory.Permanent(ARG.wordrun(arg)));
}
},
CreatureYouControlWith("creature you control with " + ARG.WORDRUN) {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.matchPermanentPrefix(arg.group(), "creature with " + ARG.wordrun(arg), Control.You);
}
},
CreatureOppControlWith("creature an opponent controls with " + ARG.WORDRUN) {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.matchPermanentPrefix(arg.group(), "creature with " + ARG.wordrun(arg), Control.Opp);
}
},
CreatureDefControlWith("creature defending player controls with " + ARG.WORDRUN) {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.matchPermanentPrefix(arg.group(), "creature with " + ARG.wordrun(arg), Control.Def);
}
},
CreatureYouControl(ARG.WORDRUN + " creature you control") {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.matchCreaturePrefix(arg.group(), ARG.wordrun(arg), Control.You);
}
},
CreatureOppControl(ARG.WORDRUN + " creature (an opponent controls|you don't control)") {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.matchCreaturePrefix(arg.group(), ARG.wordrun(arg), Control.Opp);
}
},
PermanentYouControl(ARG.WORDRUN + "( permanent)? you control") {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.matchPermanentPrefix(arg.group(), ARG.wordrun(arg), Control.You);
}
},
PermanentOppControl(ARG.WORDRUN + "( permanent)? (an opponent controls|you don't control)") {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.matchPermanentPrefix(arg.group(), ARG.wordrun(arg), Control.Opp);
}
},
PermanentDefControl(ARG.WORDRUN + "( permanent)? defending player controls") {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.matchPermanentPrefix(arg.group(), ARG.wordrun(arg), Control.Def);
}
},
Permanent(ARG.WORDRUN + " permanent") {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.matchPermanentPrefix(arg.group(), ARG.wordrun(arg), Control.Any);
}
},
Creature(ARG.WORDRUN + " creature") {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.matchCreaturePrefix(arg.group(), ARG.wordrun(arg), Control.Any);
}
},
Planeswalker(ARG.WORDRUN + " planeswalker") {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.matchPlaneswalkerPrefix(arg.group(), ARG.wordrun(arg), Control.Any);
}
},
Spell(ARG.WORDRUN + " spell") {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.matchSpellPrefix(arg.group(), ARG.wordrun(arg));
}
},
PermanentAlt(ARG.WORDRUN) {
@Override
public MagicTargetFilter<?> toTargetFilter(final Matcher arg) {
return MagicTargetFilterFactory.matchPermanentPrefix(arg.group(), ARG.wordrun(arg), Control.Any);
}

View File

@ -113,10 +113,12 @@ public class MagicTargetNone extends MagicObjectImpl implements MagicTarget, Mag
return INSTANCE;
}
@Override
public long getId() {
return hashCode();
}
@Override
public long getStateId() {
return hashCode();
}

View File

@ -30,6 +30,7 @@ public class MagicWeakenTargetPicker extends MagicTargetPicker<MagicPermanent> {
count = MagicAmountFactory.One;
}
@Override
public MagicWeakenTargetPicker create(final String arg) {
final String[] args = arg.replace('+','0').split("/");
final int p = -Integer.parseInt(args[0]);

View File

@ -2,31 +2,37 @@ package magic.model.target;
public enum Operator {
LESS_THAN() {
@Override
public boolean cmp(final int v1, final int v2) {
return v1 < v2;
}
},
LESS_THAN_OR_EQUAL() {
@Override
public boolean cmp(final int v1, final int v2) {
return v1 <= v2;
}
},
GREATER_THAN() {
@Override
public boolean cmp(final int v1, final int v2) {
return v1 > v2;
}
},
GREATER_THAN_OR_EQUAL() {
@Override
public boolean cmp(final int v1, final int v2) {
return v1 >= v2;
}
},
EQUAL() {
@Override
public boolean cmp(final int v1, final int v2) {
return v1 == v2;
}
},
ANY() {
@Override
public boolean cmp(final int v1, final int v2) {
return true;
}

View File

@ -13,6 +13,7 @@ public abstract class AtBeginOfCombatTrigger extends MagicTrigger<MagicPlayer> {
public AtBeginOfCombatTrigger() {}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.AtBeginOfCombat;
}

View File

@ -13,6 +13,7 @@ public abstract class AtDrawTrigger extends MagicTrigger<MagicPlayer> {
public AtDrawTrigger() {}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.AtDraw;
}

View File

@ -18,6 +18,7 @@ public abstract class AtEndOfCombatTrigger extends MagicTrigger<MagicPlayer> {
public AtEndOfCombatTrigger() {}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.AtEndOfCombat;
}

View File

@ -19,6 +19,7 @@ public abstract class AtEndOfTurnTrigger extends MagicTrigger<MagicPlayer> {
public AtEndOfTurnTrigger() {}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.AtEndOfTurn;
}

View File

@ -13,6 +13,7 @@ public abstract class AtUntapTrigger extends MagicTrigger<MagicPlayer> {
public AtUntapTrigger() {}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.AtUntap;
}

View File

@ -16,6 +16,7 @@ public abstract class AtUpkeepTrigger extends MagicTrigger<MagicPlayer> {
public AtUpkeepTrigger() {}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.AtUpkeep;
}

View File

@ -13,6 +13,7 @@ public abstract class AttacksTrigger extends MagicTrigger<MagicPermanent> {
public AttacksTrigger() {}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.WhenAttacks;
}

View File

@ -13,6 +13,7 @@ public abstract class AttacksUnblockedTrigger extends MagicTrigger<MagicPermanen
public AttacksUnblockedTrigger() {}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.WhenAttacksUnblocked;
}

View File

@ -15,6 +15,7 @@ public abstract class BecomesTargetTrigger extends MagicTrigger<MagicItemOnStack
public BecomesTargetTrigger() {}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.WhenTargeted;
}

View File

@ -13,12 +13,14 @@ public abstract class BlocksTrigger extends MagicTrigger<MagicPermanent> {
public BlocksTrigger() {}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.WhenBlocks;
}
public static BlocksTrigger create(final MagicTargetFilter<MagicPermanent> filter, final MagicSourceEvent sourceEvent) {
return new BlocksTrigger() {
@Override
public boolean accept(final MagicPermanent permanent, final MagicPermanent blocker) {
return filter.accept(permanent, permanent.getController(), blocker);
}

View File

@ -13,6 +13,7 @@ public abstract class CantBeBlockedTrigger extends MagicTrigger<MagicPermanent>
public CantBeBlockedTrigger() {}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.CannotBeBlocked;
}

View File

@ -13,6 +13,7 @@ public abstract class CantBlockTrigger extends MagicTrigger<MagicPermanent> {
public CantBlockTrigger() {}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.CantBlock;
}

View File

@ -41,6 +41,7 @@ public class ChampionTrigger extends EntersBattlefieldTrigger {
final MagicTargetFilter<MagicPermanent> targetFilter = subtypes.length == 0 ?
MagicTargetFilterFactory.CREATURE_YOU_CONTROL :
new MagicPermanentFilterImpl() {
@Override
public boolean accept(final MagicSource source,final MagicPlayer player,final MagicPermanent tribal) {
boolean hasSubType = false;
for (final MagicSubType subtype : subtypes) {

View File

@ -9,6 +9,7 @@ public abstract class ClashTrigger extends MagicTrigger<MagicPlayer> {
public ClashTrigger() {}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.WhenClash;
}

View File

@ -28,10 +28,12 @@ public abstract class DamageIsDealtTrigger extends MagicTrigger<MagicDamage> {
public DamageIsDealtTrigger() {
}
@Override
public boolean accept(final MagicPermanent permanent, final MagicDamage damage) {
return damage.getDealtAmount() > 0;
}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.WhenDamageIsDealt;
}

View File

@ -51,6 +51,7 @@ public abstract class EntersBattlefieldTrigger extends MagicTrigger<MagicPayedCo
public EntersBattlefieldTrigger() {}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.WhenComesIntoPlay;
}

View File

@ -10,10 +10,12 @@ public abstract class IfDamageWouldBeDealtTrigger extends MagicTrigger<MagicDama
super(priority);
}
@Override
public boolean accept(final MagicPermanent permanent, final MagicDamage damage) {
return damage.getAmount() > 0;
}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.IfDamageWouldBeDealt;
}

View File

@ -9,6 +9,7 @@ public abstract class IfLifeWouldChangeTrigger extends MagicTrigger<ChangeLifeAc
public IfLifeWouldChangeTrigger() {}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.IfLifeWouldChange;
}

View File

@ -9,6 +9,7 @@ public abstract class IfPlayerWouldLoseTrigger extends MagicTrigger<LoseGameActi
public IfPlayerWouldLoseTrigger() {}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.IfPlayerWouldLose;
}

View File

@ -15,6 +15,7 @@ public abstract class LeavesBattlefieldTrigger extends MagicTrigger<RemoveFromPl
public LeavesBattlefieldTrigger() {}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.WhenLeavesPlay;
}

View File

@ -9,6 +9,7 @@ public abstract class LoseControlTrigger extends MagicTrigger<MagicPermanent> {
public LoseControlTrigger() {}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.WhenLoseControl;
}

View File

@ -11,6 +11,7 @@ public abstract class MonstrousTrigger extends BecomesStateTrigger {
public MonstrousTrigger() {}
@Override
public boolean accept(final MagicPermanent permanent, final ChangeStateAction data) {
return data.state == MagicPermanentState.Monstrous;
}

View File

@ -13,6 +13,7 @@ public abstract class OtherDiesTrigger extends MagicTrigger<MagicPermanent> {
public OtherDiesTrigger() {}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.WhenOtherDies;
}

View File

@ -13,6 +13,7 @@ public abstract class OtherDrawnTrigger extends MagicTrigger<MagicCard> {
public OtherDrawnTrigger() {}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.WhenOtherDrawn;
}

View File

@ -22,6 +22,7 @@ public abstract class OtherEntersBattlefieldTrigger extends MagicTrigger<MagicPe
public OtherEntersBattlefieldTrigger() {}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.WhenOtherComesIntoPlay;
}

View File

@ -11,6 +11,7 @@ public abstract class OtherPutIntoGraveyardTrigger extends MagicTrigger<MoveCard
public OtherPutIntoGraveyardTrigger() {}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.WhenOtherPutIntoGraveyard;
}

View File

@ -15,6 +15,7 @@ public abstract class OtherSpellIsCastTrigger extends MagicTrigger<MagicCardOnSt
public OtherSpellIsCastTrigger() {}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.WhenOtherSpellIsCast;
}

View File

@ -13,6 +13,7 @@ public abstract class ProtectionTrigger extends MagicTrigger<MagicPermanent> {
public ProtectionTrigger() {}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.Protection;
}

View File

@ -14,6 +14,7 @@ public abstract class SacrificeTrigger extends MagicTrigger<RemoveFromPlayAction
public SacrificeTrigger() {}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.WhenSacrifice;
}

View File

@ -12,6 +12,7 @@ import magic.model.action.ShiftCardAction;
public abstract class ThisCombatDamagePlayerTrigger extends DamageIsDealtTrigger {
public ThisCombatDamagePlayerTrigger() {}
@Override
public boolean accept(final MagicPermanent permanent, final MagicDamage damage) {
return super.accept(permanent, damage) &&
damage.isSource(permanent) &&

View File

@ -14,6 +14,7 @@ public abstract class ThisCycleTrigger extends MagicTrigger<MagicCard> {
public ThisCycleTrigger() {}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.WhenCycle;
}

View File

@ -6,6 +6,7 @@ import magic.model.MagicPermanent;
public abstract class ThisDamagePlayerTrigger extends DamageIsDealtTrigger {
public ThisDamagePlayerTrigger() {}
@Override
public boolean accept(final MagicPermanent permanent, final MagicDamage damage) {
return super.accept(permanent, damage) &&
damage.isSource(permanent) &&

View File

@ -10,6 +10,7 @@ public abstract class ThisDrawnTrigger extends MagicTrigger<MagicCard> {
public ThisDrawnTrigger() {}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.WhenDrawn;
}

View File

@ -15,6 +15,7 @@ public abstract class ThisSpellIsCastTrigger extends MagicTrigger<MagicCardOnSta
public ThisSpellIsCastTrigger() {}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.WhenSpellIsCast;
}

View File

@ -9,6 +9,7 @@ public abstract class WouldBeMovedTrigger extends MagicTrigger<MoveCardAction> {
public WouldBeMovedTrigger() {}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.WouldBeMoved;
}

View File

@ -13,6 +13,7 @@ public abstract class YouScryTrigger extends MagicTrigger<MagicPlayer> {
public YouScryTrigger() {}
@Override
public MagicTriggerType getType() {
return MagicTriggerType.WhenScry;
}

View File

@ -6,6 +6,7 @@ import magic.model.MagicPlayer;
import magic.model.phase.MagicMainPhase;
class TestAEtherVial extends TestGameBuilder {
@Override
public MagicGame getGame() {
final MagicDuel duel=createDuel();
final MagicGame game=duel.nextGame();

Some files were not shown because too many files have changed in this diff Show More