add override annotation to overridden methods
parent
9551cb4748
commit
bbbdcac9ef
|
@ -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(']');
|
||||
|
|
|
@ -857,6 +857,7 @@ class MCTSGameTree implements Iterable<MCTSGameTree> {
|
|||
return children.get(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterator<MCTSGameTree> iterator() {
|
||||
return children.iterator();
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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("]");
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -158,6 +158,7 @@ public class MagicPredefinedFormat extends MagicFormat {
|
|||
return maximumCardCopies;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDeckLegal(final MagicDeck aDeck) {
|
||||
if (aDeck.size() < minimumDeckSize) {
|
||||
return false;
|
||||
|
|
|
@ -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]);
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -289,6 +289,7 @@ public class MagicGame {
|
|||
return stateId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "GAME: " +
|
||||
"id=" + stateId + " " +
|
||||
|
|
|
@ -31,6 +31,7 @@ public class MagicPayedCost implements MagicCopyable {
|
|||
kicker = payedCost.kicker;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MagicCopyable copy(final MagicCopyMap copyMap) {
|
||||
return new MagicPayedCost(copyMap, this);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -68,6 +68,7 @@ public class MagicCombatCreature {
|
|||
return permanent.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
final StringBuilder builder=new StringBuilder();
|
||||
builder.append(permanent.getName());
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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() : "");
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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) -> {
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -76,6 +76,7 @@ public class MagicCombatDamagePhase extends MagicPhase {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void executeEndOfPhase(final MagicGame game) {
|
||||
executeBeginStep(game);
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
@ -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>();
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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]);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ public abstract class AtBeginOfCombatTrigger extends MagicTrigger<MagicPlayer> {
|
|||
|
||||
public AtBeginOfCombatTrigger() {}
|
||||
|
||||
@Override
|
||||
public MagicTriggerType getType() {
|
||||
return MagicTriggerType.AtBeginOfCombat;
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ public abstract class AtDrawTrigger extends MagicTrigger<MagicPlayer> {
|
|||
|
||||
public AtDrawTrigger() {}
|
||||
|
||||
@Override
|
||||
public MagicTriggerType getType() {
|
||||
return MagicTriggerType.AtDraw;
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@ public abstract class AtEndOfCombatTrigger extends MagicTrigger<MagicPlayer> {
|
|||
|
||||
public AtEndOfCombatTrigger() {}
|
||||
|
||||
@Override
|
||||
public MagicTriggerType getType() {
|
||||
return MagicTriggerType.AtEndOfCombat;
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@ public abstract class AtEndOfTurnTrigger extends MagicTrigger<MagicPlayer> {
|
|||
|
||||
public AtEndOfTurnTrigger() {}
|
||||
|
||||
@Override
|
||||
public MagicTriggerType getType() {
|
||||
return MagicTriggerType.AtEndOfTurn;
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ public abstract class AtUntapTrigger extends MagicTrigger<MagicPlayer> {
|
|||
|
||||
public AtUntapTrigger() {}
|
||||
|
||||
@Override
|
||||
public MagicTriggerType getType() {
|
||||
return MagicTriggerType.AtUntap;
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@ public abstract class AtUpkeepTrigger extends MagicTrigger<MagicPlayer> {
|
|||
|
||||
public AtUpkeepTrigger() {}
|
||||
|
||||
@Override
|
||||
public MagicTriggerType getType() {
|
||||
return MagicTriggerType.AtUpkeep;
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ public abstract class AttacksTrigger extends MagicTrigger<MagicPermanent> {
|
|||
|
||||
public AttacksTrigger() {}
|
||||
|
||||
@Override
|
||||
public MagicTriggerType getType() {
|
||||
return MagicTriggerType.WhenAttacks;
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ public abstract class AttacksUnblockedTrigger extends MagicTrigger<MagicPermanen
|
|||
|
||||
public AttacksUnblockedTrigger() {}
|
||||
|
||||
@Override
|
||||
public MagicTriggerType getType() {
|
||||
return MagicTriggerType.WhenAttacksUnblocked;
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@ public abstract class BecomesTargetTrigger extends MagicTrigger<MagicItemOnStack
|
|||
|
||||
public BecomesTargetTrigger() {}
|
||||
|
||||
@Override
|
||||
public MagicTriggerType getType() {
|
||||
return MagicTriggerType.WhenTargeted;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ public abstract class CantBeBlockedTrigger extends MagicTrigger<MagicPermanent>
|
|||
|
||||
public CantBeBlockedTrigger() {}
|
||||
|
||||
@Override
|
||||
public MagicTriggerType getType() {
|
||||
return MagicTriggerType.CannotBeBlocked;
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ public abstract class CantBlockTrigger extends MagicTrigger<MagicPermanent> {
|
|||
|
||||
public CantBlockTrigger() {}
|
||||
|
||||
@Override
|
||||
public MagicTriggerType getType() {
|
||||
return MagicTriggerType.CantBlock;
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -9,6 +9,7 @@ public abstract class ClashTrigger extends MagicTrigger<MagicPlayer> {
|
|||
|
||||
public ClashTrigger() {}
|
||||
|
||||
@Override
|
||||
public MagicTriggerType getType() {
|
||||
return MagicTriggerType.WhenClash;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -51,6 +51,7 @@ public abstract class EntersBattlefieldTrigger extends MagicTrigger<MagicPayedCo
|
|||
|
||||
public EntersBattlefieldTrigger() {}
|
||||
|
||||
@Override
|
||||
public MagicTriggerType getType() {
|
||||
return MagicTriggerType.WhenComesIntoPlay;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ public abstract class IfLifeWouldChangeTrigger extends MagicTrigger<ChangeLifeAc
|
|||
|
||||
public IfLifeWouldChangeTrigger() {}
|
||||
|
||||
@Override
|
||||
public MagicTriggerType getType() {
|
||||
return MagicTriggerType.IfLifeWouldChange;
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ public abstract class IfPlayerWouldLoseTrigger extends MagicTrigger<LoseGameActi
|
|||
|
||||
public IfPlayerWouldLoseTrigger() {}
|
||||
|
||||
@Override
|
||||
public MagicTriggerType getType() {
|
||||
return MagicTriggerType.IfPlayerWouldLose;
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@ public abstract class LeavesBattlefieldTrigger extends MagicTrigger<RemoveFromPl
|
|||
|
||||
public LeavesBattlefieldTrigger() {}
|
||||
|
||||
@Override
|
||||
public MagicTriggerType getType() {
|
||||
return MagicTriggerType.WhenLeavesPlay;
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ public abstract class LoseControlTrigger extends MagicTrigger<MagicPermanent> {
|
|||
|
||||
public LoseControlTrigger() {}
|
||||
|
||||
@Override
|
||||
public MagicTriggerType getType() {
|
||||
return MagicTriggerType.WhenLoseControl;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ public abstract class OtherDiesTrigger extends MagicTrigger<MagicPermanent> {
|
|||
|
||||
public OtherDiesTrigger() {}
|
||||
|
||||
@Override
|
||||
public MagicTriggerType getType() {
|
||||
return MagicTriggerType.WhenOtherDies;
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ public abstract class OtherDrawnTrigger extends MagicTrigger<MagicCard> {
|
|||
|
||||
public OtherDrawnTrigger() {}
|
||||
|
||||
@Override
|
||||
public MagicTriggerType getType() {
|
||||
return MagicTriggerType.WhenOtherDrawn;
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@ public abstract class OtherEntersBattlefieldTrigger extends MagicTrigger<MagicPe
|
|||
|
||||
public OtherEntersBattlefieldTrigger() {}
|
||||
|
||||
@Override
|
||||
public MagicTriggerType getType() {
|
||||
return MagicTriggerType.WhenOtherComesIntoPlay;
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ public abstract class OtherPutIntoGraveyardTrigger extends MagicTrigger<MoveCard
|
|||
|
||||
public OtherPutIntoGraveyardTrigger() {}
|
||||
|
||||
@Override
|
||||
public MagicTriggerType getType() {
|
||||
return MagicTriggerType.WhenOtherPutIntoGraveyard;
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@ public abstract class OtherSpellIsCastTrigger extends MagicTrigger<MagicCardOnSt
|
|||
|
||||
public OtherSpellIsCastTrigger() {}
|
||||
|
||||
@Override
|
||||
public MagicTriggerType getType() {
|
||||
return MagicTriggerType.WhenOtherSpellIsCast;
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ public abstract class ProtectionTrigger extends MagicTrigger<MagicPermanent> {
|
|||
|
||||
public ProtectionTrigger() {}
|
||||
|
||||
@Override
|
||||
public MagicTriggerType getType() {
|
||||
return MagicTriggerType.Protection;
|
||||
}
|
||||
|
|
|
@ -14,6 +14,7 @@ public abstract class SacrificeTrigger extends MagicTrigger<RemoveFromPlayAction
|
|||
|
||||
public SacrificeTrigger() {}
|
||||
|
||||
@Override
|
||||
public MagicTriggerType getType() {
|
||||
return MagicTriggerType.WhenSacrifice;
|
||||
}
|
||||
|
|
|
@ -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) &&
|
||||
|
|
|
@ -14,6 +14,7 @@ public abstract class ThisCycleTrigger extends MagicTrigger<MagicCard> {
|
|||
|
||||
public ThisCycleTrigger() {}
|
||||
|
||||
@Override
|
||||
public MagicTriggerType getType() {
|
||||
return MagicTriggerType.WhenCycle;
|
||||
}
|
||||
|
|
|
@ -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) &&
|
||||
|
|
|
@ -10,6 +10,7 @@ public abstract class ThisDrawnTrigger extends MagicTrigger<MagicCard> {
|
|||
|
||||
public ThisDrawnTrigger() {}
|
||||
|
||||
@Override
|
||||
public MagicTriggerType getType() {
|
||||
return MagicTriggerType.WhenDrawn;
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@ public abstract class ThisSpellIsCastTrigger extends MagicTrigger<MagicCardOnSta
|
|||
|
||||
public ThisSpellIsCastTrigger() {}
|
||||
|
||||
@Override
|
||||
public MagicTriggerType getType() {
|
||||
return MagicTriggerType.WhenSpellIsCast;
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ public abstract class WouldBeMovedTrigger extends MagicTrigger<MoveCardAction> {
|
|||
|
||||
public WouldBeMovedTrigger() {}
|
||||
|
||||
@Override
|
||||
public MagicTriggerType getType() {
|
||||
return MagicTriggerType.WouldBeMoved;
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ public abstract class YouScryTrigger extends MagicTrigger<MagicPlayer> {
|
|||
|
||||
public YouScryTrigger() {}
|
||||
|
||||
@Override
|
||||
public MagicTriggerType getType() {
|
||||
return MagicTriggerType.WhenScry;
|
||||
}
|
||||
|
|
|
@ -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
Loading…
Reference in New Issue