mirror of
https://github.com/magefree/mage.git
synced 2026-01-10 04:42:07 -08:00
oh boy here I go refactoring ConditionalInterveningIfTriggeredAbility again
This commit is contained in:
parent
d80e0402dd
commit
cc2d234d58
67 changed files with 563 additions and 869 deletions
|
|
@ -1,24 +1,18 @@
|
|||
|
||||
package mage.cards.a;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.ObjectColor;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SanctuaryInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.ContinuousEffect;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.common.SanctuaryTriggeredAbility;
|
||||
import mage.abilities.effects.common.AddContinuousEffectToGame;
|
||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.game.Game;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class AnaSanctuary extends CardImpl {
|
||||
|
|
@ -27,10 +21,11 @@ public final class AnaSanctuary extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}");
|
||||
|
||||
// At the beginning of your upkeep, if you control a blue or black permanent, target creature gets +1/+1 until end of turn. If you control a blue permanent and a black permanent, that creature gets +5/+5 until end of turn instead.
|
||||
Ability ability = new SanctuaryInterveningIfTriggeredAbility(
|
||||
new BoostEffect(1), new BoostEffect(5), ObjectColor.BLACK, ObjectColor.BLUE,
|
||||
"At the beginning of your upkeep, if you control a blue or black permanent, "
|
||||
+ "target creature gets +1/+1 until end of turn. If you control a blue permanent and a black permanent, that creature gets +5/+5 until end of turn instead."
|
||||
Ability ability = new SanctuaryTriggeredAbility(
|
||||
new AddContinuousEffectToGame(new BoostTargetEffect(1, 1)),
|
||||
new AddContinuousEffectToGame(new BoostTargetEffect(5, 5)),
|
||||
ObjectColor.BLACK, ObjectColor.BLUE, "target creature gets +1/+1 until end of turn. " +
|
||||
"If you control a blue permanent and a black permanent, that creature gets +5/+5 until end of turn instead."
|
||||
);
|
||||
ability.addTarget(new TargetCreaturePermanent());
|
||||
this.addAbility(ability);
|
||||
|
|
@ -45,31 +40,3 @@ public final class AnaSanctuary extends CardImpl {
|
|||
return new AnaSanctuary(this);
|
||||
}
|
||||
}
|
||||
|
||||
class BoostEffect extends OneShotEffect {
|
||||
|
||||
private final int amount;
|
||||
|
||||
BoostEffect(int amount) {
|
||||
super(Outcome.Benefit);
|
||||
this.amount = amount;
|
||||
}
|
||||
|
||||
private BoostEffect(final BoostEffect effect) {
|
||||
super(effect);
|
||||
this.amount = effect.amount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BoostEffect copy() {
|
||||
return new BoostEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
ContinuousEffect effect = new BoostTargetEffect(amount, amount, Duration.EndOfTurn);
|
||||
effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game));
|
||||
game.addEffect(effect, source);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,17 +1,16 @@
|
|||
|
||||
package mage.cards.c;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.ObjectColor;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SanctuaryInterveningIfTriggeredAbility;
|
||||
import mage.abilities.common.SanctuaryTriggeredAbility;
|
||||
import mage.abilities.effects.common.DrawDiscardControllerEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class CetaSanctuary extends CardImpl {
|
||||
|
|
@ -20,12 +19,12 @@ public final class CetaSanctuary extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{U}");
|
||||
|
||||
// At the beginning of your upkeep, if you control a red or green permanent, draw a card, then discard a card. If you control a red permanent and a green permanent, instead draw two cards, then discard a card.
|
||||
Ability ability = new SanctuaryInterveningIfTriggeredAbility(
|
||||
new DrawDiscardControllerEffect(1, 1), new DrawDiscardControllerEffect(2, 1), ObjectColor.GREEN, ObjectColor.RED,
|
||||
"At the beginning of your upkeep, if you control a red or green permanent, draw a card, then discard a card. "
|
||||
+ "If you control a red permanent and a green permanent, instead draw two cards, then discard a card."
|
||||
);
|
||||
this.addAbility(ability);
|
||||
this.addAbility(new SanctuaryTriggeredAbility(
|
||||
new DrawDiscardControllerEffect(1, 1),
|
||||
new DrawDiscardControllerEffect(2, 1),
|
||||
ObjectColor.GREEN, ObjectColor.RED, "draw a card, then discard a card. " +
|
||||
"If you control a red permanent and a green permanent, instead draw two cards, then discard a card."
|
||||
));
|
||||
}
|
||||
|
||||
private CetaSanctuary(final CetaSanctuary card) {
|
||||
|
|
|
|||
|
|
@ -1,16 +1,15 @@
|
|||
package mage.cards.c;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.abilities.condition.common.SuspendedCondition;
|
||||
import mage.abilities.costs.Cost;
|
||||
import mage.abilities.costs.common.SacrificeTargetCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.common.StaticValue;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
import mage.abilities.keyword.SuspendAbility;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -44,8 +43,9 @@ public final class CurseOfTheCabal extends CardImpl {
|
|||
this.addAbility(new SuspendAbility(2, new ManaCostsImpl<>("{2}{B}{B}"), this));
|
||||
|
||||
// At the beginning of each player's upkeep, if Curse of the Cabal is suspended, that player may sacrifice a permanent. If they do, put two time counters on Curse of the Cabal.
|
||||
this.addAbility(new CurseOfTheCabalInterveningIfTriggeredAbility());
|
||||
|
||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
||||
Zone.EXILED, TargetController.ANY, new CurseOfTheCabalTriggeredAbilityConditionalDelay(), false
|
||||
).withInterveningIf(SuspendedCondition.instance));
|
||||
}
|
||||
|
||||
private CurseOfTheCabal(final CurseOfTheCabal card) {
|
||||
|
|
@ -100,36 +100,11 @@ class CurseOfTheCabalSacrificeEffect extends OneShotEffect {
|
|||
}
|
||||
}
|
||||
|
||||
class CurseOfTheCabalInterveningIfTriggeredAbility extends ConditionalInterveningIfTriggeredAbility {
|
||||
|
||||
public CurseOfTheCabalInterveningIfTriggeredAbility() {
|
||||
super(new BeginningOfUpkeepTriggeredAbility(
|
||||
Zone.EXILED, TargetController.ANY, new CurseOfTheCabalTriggeredAbilityConditionalDelay(),
|
||||
false
|
||||
),
|
||||
SuspendedCondition.instance,
|
||||
"At the beginning of each player's upkeep, if {this} is suspended, "
|
||||
+ "that player may sacrifice a permanent. If the player does, "
|
||||
+ "put two time counters on {this}."
|
||||
);
|
||||
// controller has to sac a permanent
|
||||
// counters aren't placed
|
||||
}
|
||||
|
||||
private CurseOfTheCabalInterveningIfTriggeredAbility(final CurseOfTheCabalInterveningIfTriggeredAbility effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CurseOfTheCabalInterveningIfTriggeredAbility copy() {
|
||||
return new CurseOfTheCabalInterveningIfTriggeredAbility(this);
|
||||
}
|
||||
}
|
||||
|
||||
class CurseOfTheCabalTriggeredAbilityConditionalDelay extends AddCountersSourceEffect {
|
||||
|
||||
public CurseOfTheCabalTriggeredAbilityConditionalDelay() {
|
||||
super(CounterType.TIME.createInstance(), StaticValue.get(2), false, true);
|
||||
staticText = "that player may sacrifice a permanent. If the player does, put two time counters on {this}";
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -2,16 +2,15 @@ package mage.cards.d;
|
|||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.ReplacementEffectImpl;
|
||||
import mage.abilities.effects.common.counter.RemoveCounterSourceEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.abilities.keyword.HasteAbility;
|
||||
import mage.abilities.keyword.TrampleAbility;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -52,7 +51,9 @@ public final class DarigaazReincarnated extends CardImpl {
|
|||
this.addAbility(new SimpleStaticAbility(new DarigaazReincarnatedDiesEffect()));
|
||||
|
||||
// At the beginning of your upkeep, if Darigaaz is exiled with an egg counter on it, remove an egg counter from it. Then if Darigaaz has no egg counters on it, return it to the battlefield.
|
||||
this.addAbility(new DarigaazReincarnatedInterveningIfTriggeredAbility());
|
||||
Ability ability = new BeginningOfUpkeepTriggeredAbility(
|
||||
Zone.EXILED, TargetController.YOU, new DarigaazReincarnatedReturnEffect(), false
|
||||
).withInterveningIf(DarigaazReincarnatedCondition.instance);
|
||||
}
|
||||
|
||||
private DarigaazReincarnated(final DarigaazReincarnated card) {
|
||||
|
|
@ -108,30 +109,11 @@ class DarigaazReincarnatedDiesEffect extends ReplacementEffectImpl {
|
|||
|
||||
}
|
||||
|
||||
class DarigaazReincarnatedInterveningIfTriggeredAbility extends ConditionalInterveningIfTriggeredAbility {
|
||||
|
||||
public DarigaazReincarnatedInterveningIfTriggeredAbility() {
|
||||
super(new BeginningOfUpkeepTriggeredAbility(Zone.EXILED, TargetController.YOU, new DarigaazReincarnatedReturnEffect(), false),
|
||||
DarigaazReincarnatedCondition.instance,
|
||||
"At the beginning of your upkeep, if {this} is exiled with an egg counter on it, "
|
||||
+ "remove an egg counter from it. Then if {this} has no egg counters on it, return it to the battlefield");
|
||||
}
|
||||
|
||||
private DarigaazReincarnatedInterveningIfTriggeredAbility(final DarigaazReincarnatedInterveningIfTriggeredAbility effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DarigaazReincarnatedInterveningIfTriggeredAbility copy() {
|
||||
return new DarigaazReincarnatedInterveningIfTriggeredAbility(this);
|
||||
}
|
||||
}
|
||||
|
||||
class DarigaazReincarnatedReturnEffect extends OneShotEffect {
|
||||
|
||||
DarigaazReincarnatedReturnEffect() {
|
||||
super(Outcome.Benefit);
|
||||
this.staticText = "";
|
||||
this.staticText = "remove an egg counter from it. Then if {this} has no egg counters on it, return it to the battlefield";
|
||||
}
|
||||
|
||||
private DarigaazReincarnatedReturnEffect(final DarigaazReincarnatedReturnEffect effect) {
|
||||
|
|
@ -165,10 +147,13 @@ enum DarigaazReincarnatedCondition implements Condition {
|
|||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Card card = game.getCard(source.getSourceId());
|
||||
if (card != null) {
|
||||
return game.getState().getZone(card.getId()) == Zone.EXILED
|
||||
&& card.getCounters(game).getCount(CounterType.EGG) > 0;
|
||||
}
|
||||
return false;
|
||||
return card != null
|
||||
&& game.getState().getZone(card.getId()) == Zone.EXILED
|
||||
&& card.getCounters(game).getCount(CounterType.EGG) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "{this} is exiled with an egg counter on it";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,17 +1,15 @@
|
|||
|
||||
package mage.cards.d;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.ObjectColor;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SanctuaryInterveningIfTriggeredAbility;
|
||||
import mage.abilities.common.SanctuaryTriggeredAbility;
|
||||
import mage.abilities.effects.common.GainLifeEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class DegaSanctuary extends CardImpl {
|
||||
|
|
@ -20,12 +18,10 @@ public final class DegaSanctuary extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}");
|
||||
|
||||
// At the beginning of your upkeep, if you control a black or red permanent, you gain 2 life. If you control a black permanent and a red permanent, you gain 4 life instead.
|
||||
Ability ability = new SanctuaryInterveningIfTriggeredAbility(
|
||||
this.addAbility(new SanctuaryTriggeredAbility(
|
||||
new GainLifeEffect(2), new GainLifeEffect(4), ObjectColor.BLACK, ObjectColor.RED,
|
||||
"At the beginning of your upkeep, if you control a black or red permanent, you gain 2 life. "
|
||||
+ "If you control a black permanent and a red permanent, you gain 4 life instead."
|
||||
);
|
||||
this.addAbility(ability);
|
||||
"you gain 2 life. If you control a black permanent and a red permanent, you gain 4 life instead."
|
||||
));
|
||||
}
|
||||
|
||||
private DegaSanctuary(final DegaSanctuary card) {
|
||||
|
|
|
|||
|
|
@ -1,11 +1,10 @@
|
|||
package mage.cards.f;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.hint.Hint;
|
||||
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -31,13 +30,10 @@ public final class FaeOffering extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}");
|
||||
|
||||
// At the beginning of each end step, if you've cast both a creature spell and a noncreature spell this turn, create a Clue token, a Food token, and a Treasure token.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new BeginningOfEndStepTriggeredAbility(
|
||||
TargetController.ANY, new CreateTokenEffect(new ClueArtifactToken()).withAdditionalTokens(new FoodToken(), new TreasureToken()),
|
||||
false
|
||||
), FaeOfferingCondition.instance, "At the beginning of each end step, " +
|
||||
"if you've cast both a creature spell and a noncreature spell this turn, " +
|
||||
"create a Clue token, a Food token, and a Treasure token."
|
||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(
|
||||
TargetController.ANY, new CreateTokenEffect(new ClueArtifactToken())
|
||||
.withAdditionalTokens(new FoodToken(), new TreasureToken()),
|
||||
false, FaeOfferingCondition.instance
|
||||
).addHint(FaeOfferingHint.instance));
|
||||
}
|
||||
|
||||
|
|
@ -68,6 +64,11 @@ enum FaeOfferingCondition implements Condition {
|
|||
.distinct()
|
||||
.count() == 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "you've cast both a creature spell and a noncreature spell this turn";
|
||||
}
|
||||
}
|
||||
|
||||
enum FaeOfferingHint implements Hint {
|
||||
|
|
|
|||
|
|
@ -4,17 +4,16 @@ import mage.MageInt;
|
|||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.TargetController;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.filter.predicate.mageobject.NamePredicate;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
import mage.filter.predicate.mageobject.AnotherPredicate;
|
||||
import mage.filter.predicate.mageobject.NamePredicate;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -23,12 +22,12 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class FaerieMiscreant extends CardImpl {
|
||||
|
||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent();
|
||||
private static final FilterPermanent filter
|
||||
= new FilterControlledCreaturePermanent("you control another creature named Faerie Miscreant");
|
||||
|
||||
static {
|
||||
filter.add(new NamePredicate("Faerie Miscreant"));
|
||||
filter.add(AnotherPredicate.instance);
|
||||
filter.add(TargetController.YOU.getControllerPredicate());
|
||||
}
|
||||
|
||||
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter);
|
||||
|
|
@ -44,12 +43,9 @@ public final class FaerieMiscreant extends CardImpl {
|
|||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// When Faerie Miscreant enters the battlefield, if you control another creature named Faerie Miscreant, draw a card.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldTriggeredAbility(
|
||||
new DrawCardSourceControllerEffect(1), false
|
||||
), condition, "When {this} enters, " +
|
||||
"if you control another creature named Faerie Miscreant, draw a card."
|
||||
));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(
|
||||
new DrawCardSourceControllerEffect(1), false
|
||||
).withInterveningIf(condition));
|
||||
}
|
||||
|
||||
private FaerieMiscreant(final FaerieMiscreant card) {
|
||||
|
|
|
|||
|
|
@ -1,15 +1,10 @@
|
|||
|
||||
package mage.cards.f;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -22,6 +17,10 @@ import mage.game.events.GameEvent;
|
|||
import mage.game.permanent.Permanent;
|
||||
import mage.watchers.Watcher;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author spjspj
|
||||
*/
|
||||
|
|
@ -34,11 +33,10 @@ public final class FairgroundsTrumpeter extends CardImpl {
|
|||
this.toughness = new MageInt(2);
|
||||
|
||||
// At the beginning of each end step, if a +1/+1 counter was put on a permanent under your control this turn, put a +1/+1 counter on Fairgrounds Trumpeter.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(new BeginningOfEndStepTriggeredAbility(
|
||||
TargetController.ANY, new AddCountersSourceEffect(CounterType.P1P1.createInstance()),
|
||||
false), FairgroundsTrumpeterCondition.instance,
|
||||
"At the beginning of each end step, if a +1/+1 counter was put on a permanent under your control this turn, put a +1/+1 counter on {this}."),
|
||||
new FairgroundsTrumpeterWatcher());
|
||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(
|
||||
TargetController.ANY, new AddCountersSourceEffect(CounterType.P1P1.createInstance()),
|
||||
false, FairgroundsTrumpeterCondition.instance
|
||||
), new FairgroundsTrumpeterWatcher());
|
||||
}
|
||||
|
||||
private FairgroundsTrumpeter(final FairgroundsTrumpeter card) {
|
||||
|
|
@ -52,7 +50,6 @@ public final class FairgroundsTrumpeter extends CardImpl {
|
|||
}
|
||||
|
||||
enum FairgroundsTrumpeterCondition implements Condition {
|
||||
|
||||
instance;
|
||||
|
||||
@Override
|
||||
|
|
@ -63,7 +60,7 @@ enum FairgroundsTrumpeterCondition implements Condition {
|
|||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "if a +1/+1 counter was put on a permanent under your control this turn";
|
||||
return "a +1/+1 counter was put on a permanent under your control this turn";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -97,5 +94,4 @@ class FairgroundsTrumpeterWatcher extends Watcher {
|
|||
public boolean p1p1AddedToPermanent(UUID playerId) {
|
||||
return players.contains(playerId);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import mage.abilities.common.SimpleActivatedAbility;
|
|||
import mage.abilities.condition.common.OpponentsLostLifeCondition;
|
||||
import mage.abilities.costs.common.DiscardCardCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.mana.BasicManaEffect;
|
||||
import mage.abilities.hint.common.OpponentsLostLifeHint;
|
||||
|
|
@ -32,11 +31,8 @@ public final class FamishedForagers extends CardImpl {
|
|||
this.toughness = new MageInt(3);
|
||||
|
||||
// When Famished Foragers enters the battlefield, if an opponent lost life this turn, add {R}{R}{R}.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldTriggeredAbility(new BasicManaEffect(Mana.RedMana(3))),
|
||||
OpponentsLostLifeCondition.instance, "When {this} enters, " +
|
||||
"if an opponent lost life this turn, add {R}{R}{R}."
|
||||
).addHint(OpponentsLostLifeHint.instance));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new BasicManaEffect(Mana.RedMana(3)))
|
||||
.withInterveningIf(OpponentsLostLifeCondition.instance).addHint(OpponentsLostLifeHint.instance));
|
||||
|
||||
// {2}{R}, Discard a card: Draw a card.
|
||||
Ability ability = new SimpleActivatedAbility(
|
||||
|
|
|
|||
|
|
@ -1,11 +1,9 @@
|
|||
|
||||
package mage.cards.f;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.TriggeredAbility;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.common.TributeNotPaidCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||
import mage.abilities.keyword.HasteAbility;
|
||||
|
|
@ -34,13 +32,18 @@ public final class FanaticOfXenagos extends CardImpl {
|
|||
|
||||
// Trample
|
||||
this.addAbility(TrampleAbility.getInstance());
|
||||
|
||||
// Tribute 1
|
||||
this.addAbility(new TributeAbility(1));
|
||||
|
||||
// When Fanatic of Xenagos enters the battlefield, if tribute wasn't paid, it gets +1/+1 and gains haste until end of turn.
|
||||
TriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new BoostSourceEffect(1, 1, Duration.EndOfTurn));
|
||||
ability.addEffect(new GainAbilitySourceEffect(HasteAbility.getInstance(), Duration.EndOfTurn));
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, TributeNotPaidCondition.instance,
|
||||
"When {this} enters, if tribute wasn't paid, it gets +1/+1 and gains haste until end of turn."));
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(
|
||||
new BoostSourceEffect(1, 1, Duration.EndOfTurn).setText("it gets +1/+1")
|
||||
).withInterveningIf(TributeNotPaidCondition.instance);
|
||||
ability.addEffect(new GainAbilitySourceEffect(
|
||||
HasteAbility.getInstance(), Duration.EndOfTurn
|
||||
).setText("and gains haste until end of turn"));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private FanaticOfXenagos(final FanaticOfXenagos card) {
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ package mage.cards.f;
|
|||
|
||||
import mage.abilities.common.SourceDealsDamageToYouTriggeredAbility;
|
||||
import mage.abilities.condition.common.SourceTappedCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -15,15 +14,13 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class FarsightMask extends CardImpl {
|
||||
|
||||
private static final String rule = "Whenever a source an opponent controls deals damage to you, if {this} is untapped, you may draw a card.";
|
||||
|
||||
public FarsightMask(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{5}");
|
||||
|
||||
// Whenever a source an opponent controls deals damage to you, if Farsight Mask is untapped, you may draw a card.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(new SourceDealsDamageToYouTriggeredAbility(
|
||||
this.addAbility(new SourceDealsDamageToYouTriggeredAbility(
|
||||
new DrawCardSourceControllerEffect(1), true
|
||||
), SourceTappedCondition.UNTAPPED, rule));
|
||||
).withInterveningIf(SourceTappedCondition.UNTAPPED));
|
||||
}
|
||||
|
||||
private FarsightMask(final FarsightMask card) {
|
||||
|
|
|
|||
|
|
@ -1,12 +1,11 @@
|
|||
|
||||
package mage.cards.f;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.AttacksTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.effects.common.DoIfCostPaid;
|
||||
import mage.abilities.keyword.MenaceAbility;
|
||||
|
|
@ -15,24 +14,27 @@ import mage.cards.CardSetInfo;
|
|||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.filter.predicate.mageobject.AnotherPredicate;
|
||||
import mage.filter.predicate.permanent.TokenPredicate;
|
||||
import mage.game.permanent.token.PirateToken;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class FathomFleetCaptain extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterPermanent("another nontoken Pirate");
|
||||
private static final FilterPermanent filter = new FilterControlledPermanent(SubType.PIRATE, "you control another nontoken Pirate");
|
||||
|
||||
static {
|
||||
filter.add(SubType.PIRATE.getPredicate());
|
||||
filter.add(AnotherPredicate.instance);
|
||||
filter.add(TokenPredicate.FALSE);
|
||||
}
|
||||
|
||||
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter);
|
||||
|
||||
public FathomFleetCaptain(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}");
|
||||
|
||||
|
|
@ -45,10 +47,9 @@ public final class FathomFleetCaptain extends CardImpl {
|
|||
this.addAbility(new MenaceAbility(false));
|
||||
|
||||
// Whenever Fathom Fleet Captain attacks, if you control another nontoken Pirate, you may pay {2}. If you do, creature a 2/2 black Pirate creature token with menace.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new PirateToken()), new GenericManaCost(2)), false),
|
||||
new PermanentsOnTheBattlefieldCondition(filter),
|
||||
"Whenever {this} attacks, if you control another nontoken Pirate, you may pay {2}. If you do, create a 2/2 black Pirate creature token with menace"));
|
||||
this.addAbility(new AttacksTriggeredAbility(
|
||||
new DoIfCostPaid(new CreateTokenEffect(new PirateToken()), new GenericManaCost(2))
|
||||
).withInterveningIf(condition));
|
||||
}
|
||||
|
||||
private FathomFleetCaptain(final FathomFleetCaptain card) {
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import mage.abilities.Ability;
|
|||
import mage.abilities.common.AttacksFirstTimeTriggeredAbility;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.common.DeliriumCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.common.CardTypesInGraveyardCount;
|
||||
import mage.abilities.effects.common.AdditionalCombatPhaseEffect;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
|
|
@ -37,12 +36,7 @@ public final class FearOfMissingOut extends CardImpl {
|
|||
this.addAbility(ability);
|
||||
|
||||
// Delirium -- Whenever Fear of Missing Out attacks for the first time each turn, if there are four or more card types among cards in your graveyard, untap target creature. After this phase, there is an additional combat phase.
|
||||
ability = new ConditionalInterveningIfTriggeredAbility(
|
||||
new AttacksFirstTimeTriggeredAbility(new UntapTargetEffect(), false),
|
||||
DeliriumCondition.instance, "<i>Delirium</i> — Whenever {this} attacks for the first time each turn, "
|
||||
+ "if there are four or more card types among cards in your graveyard, untap target creature. "
|
||||
+ "After this phase, there is an additional combat phase."
|
||||
);
|
||||
ability = new AttacksFirstTimeTriggeredAbility(new UntapTargetEffect(), false).withInterveningIf(DeliriumCondition.instance);
|
||||
ability.addTarget(new TargetCreaturePermanent());
|
||||
ability.addEffect(new AdditionalCombatPhaseEffect());
|
||||
ability.addHint(CardTypesInGraveyardCount.YOU.getHint());
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import mage.abilities.Ability;
|
|||
import mage.abilities.common.AttacksTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||
import mage.abilities.keyword.DeathtouchAbility;
|
||||
import mage.abilities.keyword.MenaceAbility;
|
||||
|
|
@ -26,7 +25,7 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class FearOfTheDark extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterCreaturePermanent(SubType.GLIMMER, "");
|
||||
private static final FilterPermanent filter = new FilterCreaturePermanent(SubType.GLIMMER, "defending player controls no Glimmer creatures");
|
||||
|
||||
static {
|
||||
filter.add(DefendingPlayerControlsSourceAttackingPredicate.instance);
|
||||
|
|
@ -44,12 +43,12 @@ public final class FearOfTheDark extends CardImpl {
|
|||
this.toughness = new MageInt(5);
|
||||
|
||||
// Whenever Fear of the Dark attacks, if defending player controls no Glimmer creatures, it gains menace and deathtouch until end of turn.
|
||||
Ability ability = new ConditionalInterveningIfTriggeredAbility(
|
||||
new AttacksTriggeredAbility(new GainAbilitySourceEffect(new MenaceAbility(), Duration.EndOfTurn)),
|
||||
condition, "Whenever {this} attacks, if defending player controls no Glimmer " +
|
||||
"creatures, it gains menace and deathtouch until end of turn."
|
||||
);
|
||||
ability.addEffect(new GainAbilitySourceEffect(DeathtouchAbility.getInstance(), Duration.EndOfTurn));
|
||||
Ability ability = new AttacksTriggeredAbility(new GainAbilitySourceEffect(
|
||||
new MenaceAbility(), Duration.EndOfTurn
|
||||
).setText("it gains menace")).withInterveningIf(condition);
|
||||
ability.addEffect(new GainAbilitySourceEffect(
|
||||
DeathtouchAbility.getInstance(), Duration.EndOfTurn
|
||||
).setText("and deathtouch until end of turn"));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,12 +1,9 @@
|
|||
|
||||
package mage.cards.f;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -16,23 +13,20 @@ import mage.game.Game;
|
|||
import mage.target.common.TargetControlledCreaturePermanent;
|
||||
import mage.watchers.common.PlayerLostLifeWatcher;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author emerald000
|
||||
*/
|
||||
public final class FeastOnTheFallen extends CardImpl {
|
||||
|
||||
public FeastOnTheFallen(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{B}");
|
||||
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{B}");
|
||||
|
||||
// At the beginning of each upkeep, if an opponent lost life last turn, put a +1/+1 counter on target creature you control.
|
||||
Ability ability = new ConditionalInterveningIfTriggeredAbility(
|
||||
new BeginningOfUpkeepTriggeredAbility(
|
||||
TargetController.ANY, new AddCountersTargetEffect(CounterType.P1P1.createInstance()),
|
||||
false),
|
||||
FeastOnTheFallenCondition.instance,
|
||||
"At the beginning of each upkeep, if an opponent lost life last turn, put a +1/+1 counter on target creature you control.");
|
||||
Ability ability = new BeginningOfUpkeepTriggeredAbility(
|
||||
TargetController.ANY, new AddCountersTargetEffect(CounterType.P1P1.createInstance()), false
|
||||
).withInterveningIf(FeastOnTheFallenCondition.instance);
|
||||
ability.addTarget(new TargetControlledCreaturePermanent());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
|
@ -54,13 +48,16 @@ enum FeastOnTheFallenCondition implements Condition {
|
|||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
PlayerLostLifeWatcher watcher = game.getState().getWatcher(PlayerLostLifeWatcher.class);
|
||||
if (watcher != null) {
|
||||
for (UUID opponentId : game.getOpponents(source.getControllerId())) {
|
||||
if (watcher.getLifeLostLastTurn(opponentId) > 0) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
return watcher != null
|
||||
&& game
|
||||
.getOpponents(source.getControllerId())
|
||||
.stream()
|
||||
.mapToInt(watcher::getLifeLostLastTurn)
|
||||
.anyMatch(x -> x > 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "an opponent lost life last turn";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
|||
import mage.abilities.condition.common.CastFromHandSourcePermanentCondition;
|
||||
import mage.abilities.condition.common.MyTurnCondition;
|
||||
import mage.abilities.costs.common.SacrificeTargetCost;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.effects.common.ReturnSourceFromGraveyardToBattlefieldEffect;
|
||||
import mage.abilities.hint.common.MyTurnHint;
|
||||
|
|
@ -19,7 +18,6 @@ import mage.constants.SubType;
|
|||
import mage.constants.Zone;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.game.permanent.token.FoodToken;
|
||||
import mage.target.common.TargetControlledPermanent;
|
||||
import mage.watchers.common.CastFromHandWatcher;
|
||||
|
||||
import java.util.UUID;
|
||||
|
|
@ -46,11 +44,8 @@ public final class FeastingTrollKing extends CardImpl {
|
|||
this.addAbility(TrampleAbility.getInstance());
|
||||
|
||||
// When Feasting Troll King enters the battlefield, if you cast it from your hand, create three Food tokens.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new FoodToken(), 3)),
|
||||
CastFromHandSourcePermanentCondition.instance, "When {this} enters, " +
|
||||
"if you cast it from your hand, create three Food tokens."
|
||||
), new CastFromHandWatcher());
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new FoodToken(), 3))
|
||||
.withInterveningIf(CastFromHandSourcePermanentCondition.instance), new CastFromHandWatcher());
|
||||
|
||||
// Sacrifice three Foods: Return Feasting Troll King from your graveyard to the battlefield. Activate this ability only during your turn.
|
||||
this.addAbility(new ActivateIfConditionActivatedAbility(
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import mage.abilities.Ability;
|
|||
import mage.abilities.common.EntersBattlefieldTappedAbility;
|
||||
import mage.abilities.common.EntersBattlefieldThisOrAnotherTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.mana.ColorlessManaAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -32,13 +31,9 @@ public final class FieldOfTheDead extends CardImpl {
|
|||
this.addAbility(new ColorlessManaAbility());
|
||||
|
||||
// Whenever Field of the Dead or another land you control enters, if you control seven or more lands with different names, create a 2/2 black Zombie creature token.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldThisOrAnotherTriggeredAbility(
|
||||
new CreateTokenEffect(new ZombieToken()), StaticFilters.FILTER_LAND, false, true
|
||||
), FieldOfTheDeadCondition.instance, "Whenever {this} or another land " +
|
||||
"you control enters, if you control seven or more lands with different names, " +
|
||||
"create a 2/2 black Zombie creature token."
|
||||
));
|
||||
this.addAbility(new EntersBattlefieldThisOrAnotherTriggeredAbility(
|
||||
new CreateTokenEffect(new ZombieToken()), StaticFilters.FILTER_LAND, false, true
|
||||
).withInterveningIf(FieldOfTheDeadCondition.instance));
|
||||
}
|
||||
|
||||
private FieldOfTheDead(final FieldOfTheDead card) {
|
||||
|
|
@ -69,4 +64,9 @@ enum FieldOfTheDeadCondition implements Condition {
|
|||
.distinct()
|
||||
.count() > 6;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "you control seven or more lands with different names";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,19 +1,18 @@
|
|||
package mage.cards.f;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.AttacksAloneControlledTriggeredAbility;
|
||||
import mage.abilities.condition.common.FirstCombatPhaseCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.UntapTargetEffect;
|
||||
import mage.abilities.effects.common.AdditionalCombatPhaseEffect;
|
||||
import mage.abilities.effects.common.UntapTargetEffect;
|
||||
import mage.abilities.keyword.ExaltedAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author awjackson
|
||||
*/
|
||||
public final class FinestHour extends CardImpl {
|
||||
|
|
@ -26,12 +25,9 @@ public final class FinestHour extends CardImpl {
|
|||
|
||||
// Whenever a creature you control attacks alone, if it's the first combat phase of the turn, untap that
|
||||
// creature. After this phase, there is an additional combat phase.
|
||||
Ability ability = new ConditionalInterveningIfTriggeredAbility(
|
||||
new AttacksAloneControlledTriggeredAbility(new UntapTargetEffect("untap that creature"), true, false),
|
||||
FirstCombatPhaseCondition.instance,
|
||||
"Whenever a creature you control attacks alone, if it's the first combat phase of the turn, " +
|
||||
"untap that creature. After this phase, there is an additional combat phase."
|
||||
);
|
||||
Ability ability = new AttacksAloneControlledTriggeredAbility(
|
||||
new UntapTargetEffect("untap that creature"), true, false
|
||||
).withInterveningIf(FirstCombatPhaseCondition.instance);
|
||||
ability.addEffect(new AdditionalCombatPhaseEffect());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,36 +1,30 @@
|
|||
|
||||
package mage.cards.f;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.common.IsStepCondition;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.decorator.ConditionalActivatedAbility;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.GainLifeEffect;
|
||||
import mage.abilities.effects.common.ReturnSourceFromGraveyardToBattlefieldEffect;
|
||||
import mage.abilities.keyword.FirstStrikeAbility;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.PhaseStep;
|
||||
import mage.constants.TargetController;
|
||||
import mage.constants.Zone;
|
||||
import mage.constants.*;
|
||||
import mage.game.Game;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Loki
|
||||
*/
|
||||
public final class FiremaneAngel extends CardImpl {
|
||||
|
||||
public FiremaneAngel(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{R}{W}{W}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}{W}{W}");
|
||||
this.subtype.add(SubType.ANGEL);
|
||||
|
||||
this.power = new MageInt(4);
|
||||
|
|
@ -38,17 +32,20 @@ public final class FiremaneAngel extends CardImpl {
|
|||
|
||||
// Flying
|
||||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// Firststrike
|
||||
this.addAbility(FirstStrikeAbility.getInstance());
|
||||
|
||||
// At the beginning of your upkeep, if Firemane Angel is in your graveyard or on the battlefield, you may gain 1 life.
|
||||
Ability ability = new ConditionalInterveningIfTriggeredAbility(
|
||||
new BeginningOfUpkeepTriggeredAbility(Zone.ALL, TargetController.YOU, new GainLifeEffect(1), true),
|
||||
SourceOnBattlefieldOrGraveyardCondition.instance,
|
||||
"At the beginning of your upkeep, if {this} is in your graveyard or on the battlefield, you may gain 1 life.");
|
||||
this.addAbility(ability);
|
||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
||||
Zone.ALL, TargetController.YOU, new GainLifeEffect(1), true
|
||||
).withInterveningIf(FiremaneAngelCondition.instance));
|
||||
|
||||
// {6}{R}{R}{W}{W}: Return Firemane Angel from your graveyard to the battlefield. Activate this ability only during your upkeep.
|
||||
this.addAbility(new ConditionalActivatedAbility(Zone.GRAVEYARD,
|
||||
new ReturnSourceFromGraveyardToBattlefieldEffect(false, false), new ManaCostsImpl<>("{6}{R}{R}{W}{W}"), new IsStepCondition(PhaseStep.UPKEEP), null));
|
||||
this.addAbility(new ConditionalActivatedAbility(
|
||||
Zone.GRAVEYARD, new ReturnSourceFromGraveyardToBattlefieldEffect(false, false),
|
||||
new ManaCostsImpl<>("{6}{R}{R}{W}{W}"), new IsStepCondition(PhaseStep.UPKEEP), null
|
||||
));
|
||||
}
|
||||
|
||||
private FiremaneAngel(final FiremaneAngel card) {
|
||||
|
|
@ -61,8 +58,7 @@ public final class FiremaneAngel extends CardImpl {
|
|||
}
|
||||
}
|
||||
|
||||
enum SourceOnBattlefieldOrGraveyardCondition implements Condition {
|
||||
|
||||
enum FiremaneAngelCondition implements Condition {
|
||||
instance;
|
||||
|
||||
@Override
|
||||
|
|
@ -73,7 +69,6 @@ enum SourceOnBattlefieldOrGraveyardCondition implements Condition {
|
|||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "if {this} is in your graveyard or on the battlefield";
|
||||
return "{this} is in your graveyard or on the battlefield";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,19 +1,17 @@
|
|||
|
||||
package mage.cards.f;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.abilities.condition.common.LiveLostLastTurnCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.TargetController;
|
||||
import mage.game.permanent.token.SoldierToken;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public final class FirstResponse extends CardImpl {
|
||||
|
|
@ -22,10 +20,9 @@ public final class FirstResponse extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{W}");
|
||||
|
||||
// At the beginning of each upkeep, if you lost life last turn, create a 1/1 white Soldier creature token.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new BeginningOfUpkeepTriggeredAbility(TargetController.ANY, new CreateTokenEffect(new SoldierToken()), false),
|
||||
LiveLostLastTurnCondition.instance,
|
||||
"At the beginning of each upkeep, if you lost life last turn, create a 1/1 white Soldier creature token."));
|
||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
||||
TargetController.ANY, new CreateTokenEffect(new SoldierToken()), false
|
||||
).withInterveningIf(LiveLostLastTurnCondition.instance));
|
||||
}
|
||||
|
||||
private FirstResponse(final FirstResponse card) {
|
||||
|
|
|
|||
|
|
@ -1,14 +1,10 @@
|
|||
|
||||
package mage.cards.f;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.TriggeredAbility;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.DiesSourceTriggeredAbility;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.common.TributeNotPaidCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.ReturnToHandSourceEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
|
|
@ -17,17 +13,18 @@ import mage.abilities.keyword.TributeAbility;
|
|||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public final class FlameWreathedPhoenix extends CardImpl {
|
||||
|
||||
public FlameWreathedPhoenix(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}{R}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}{R}");
|
||||
this.subtype.add(SubType.PHOENIX);
|
||||
|
||||
this.power = new MageInt(3);
|
||||
|
|
@ -35,15 +32,18 @@ public final class FlameWreathedPhoenix extends CardImpl {
|
|||
|
||||
// Flying
|
||||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// Tribute 2 (As this creature enters the battlefield, an opponent of your choice may put 2 +1/+1 counter on it.)
|
||||
this.addAbility(new TributeAbility(2));
|
||||
// When Flame-Wreathed Phoenix enters the battlefield, if tribute wasn't paid, it gains haste and "When this creature dies, return it to its owner's hand."
|
||||
TriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new GainAbilitySourceEffect(HasteAbility.getInstance(), Duration.WhileOnBattlefield));
|
||||
Effect effect = new GainAbilitySourceEffect(new DiesSourceTriggeredAbility(new ReturnToHandSourceEffect()));
|
||||
ability.addEffect(effect);
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, TributeNotPaidCondition.instance,
|
||||
"When {this} enters, if tribute wasn't paid, it gains haste and \"When this creature dies, return it to its owner's hand.\""));
|
||||
|
||||
// When Flame-Wreathed Phoenix enters the battlefield, if tribute wasn't paid, it gains haste and "When this creature dies, return it to its owner's hand."
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(
|
||||
new GainAbilitySourceEffect(HasteAbility.getInstance(), Duration.WhileOnBattlefield).setText("it gains haste")
|
||||
).withInterveningIf(TributeNotPaidCondition.instance);
|
||||
ability.addEffect(new GainAbilitySourceEffect(
|
||||
new DiesSourceTriggeredAbility(new ReturnToHandSourceEffect())
|
||||
).setText("and \"When this creature dies, return it to its owner's hand.\""));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private FlameWreathedPhoenix(final FlameWreathedPhoenix card) {
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import mage.abilities.common.SimpleActivatedAbility;
|
|||
import mage.abilities.condition.common.OpponentsLostLifeCondition;
|
||||
import mage.abilities.costs.common.DiscardCardCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.mana.BasicManaEffect;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -32,14 +31,9 @@ public final class FlamecacheGecko extends CardImpl {
|
|||
this.toughness = new MageInt(2);
|
||||
|
||||
// When Flamecache Gecko enters, if an opponent lost life this turn, add {B}{R}.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldTriggeredAbility(
|
||||
new BasicManaEffect(new Mana(
|
||||
0, 0, 1, 1, 0, 0, 0, 0
|
||||
))
|
||||
), OpponentsLostLifeCondition.instance, "When {this} enters, " +
|
||||
"if an opponent lost life this turn, add {B}{R}."
|
||||
));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(
|
||||
new BasicManaEffect(new Mana(0, 0, 1, 1, 0, 0, 0, 0))
|
||||
).withInterveningIf(OpponentsLostLifeCondition.instance));
|
||||
|
||||
// {1}{R}, Discard a card: Draw a card.
|
||||
Ability ability = new SimpleActivatedAbility(
|
||||
|
|
|
|||
|
|
@ -1,28 +1,36 @@
|
|||
|
||||
package mage.cards.f;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.TriggeredAbility;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.continuous.BoostAllEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.counters.CounterType;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public final class FoundryHornet extends CardImpl {
|
||||
|
||||
private static final String rule = "When {this} enters, if you control a creature with a +1/+1 counter on it, creatures your opponents control get -1/-1 until end of turn.";
|
||||
private static final FilterPermanent filter = new FilterControlledCreaturePermanent("you control a creature with a +1/+1 counter on it");
|
||||
|
||||
static {
|
||||
filter.add(CounterType.P1P1.getPredicate());
|
||||
}
|
||||
|
||||
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter);
|
||||
|
||||
public FoundryHornet(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}");
|
||||
|
|
@ -35,8 +43,10 @@ public final class FoundryHornet extends CardImpl {
|
|||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// When Foundry Hornet enters the battlefield, if you control a creature with a +1/+1 counter on it, creatures your opponents control get -1/-1 until end of turn.
|
||||
TriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new BoostAllEffect(-1, -1, Duration.EndOfTurn, StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE, false), false);
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, new PermanentsOnTheBattlefieldCondition(StaticFilters.FILTER_A_CREATURE_P1P1), rule));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new BoostAllEffect(
|
||||
-1, -1, Duration.EndOfTurn,
|
||||
StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE, false
|
||||
), false).withInterveningIf(condition));
|
||||
}
|
||||
|
||||
private FoundryHornet(final FoundryHornet card) {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ import mage.abilities.common.AttacksTriggeredAbility;
|
|||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.common.SourceIsRingBearerCondition;
|
||||
import mage.abilities.condition.common.YouGainedLifeCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.decorator.ConditionalOneShotEffect;
|
||||
import mage.abilities.dynamicvalue.common.ControllerGainedLifeCount;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
|
|
@ -48,15 +47,10 @@ public final class FrodoAdventurousHobbit extends CardImpl {
|
|||
this.addAbility(VigilanceAbility.getInstance());
|
||||
|
||||
// Whenever Frodo, Adventurous Hobbit attacks, if you gained 3 or more life this turn, the Ring tempts you. Then if Frodo is your Ring-bearer and the Ring has tempted you two or more times this game, draw a card.
|
||||
Ability ability = new ConditionalInterveningIfTriggeredAbility(
|
||||
new AttacksTriggeredAbility(new TheRingTemptsYouEffect()),
|
||||
condition, "Whenever {this} attacks, if you gained 3 or more life this turn, " +
|
||||
"the Ring tempts you. Then if {this} is your Ring-bearer and the Ring " +
|
||||
"has tempted you two or more times this game, draw a card."
|
||||
);
|
||||
Ability ability = new AttacksTriggeredAbility(new TheRingTemptsYouEffect()).withInterveningIf(condition);
|
||||
ability.addEffect(new ConditionalOneShotEffect(
|
||||
new DrawCardSourceControllerEffect(1),
|
||||
FrodoAdventurousHobbitCondition.instance
|
||||
new DrawCardSourceControllerEffect(1), FrodoAdventurousHobbitCondition.instance,
|
||||
"Then if {this} is your Ring-bearer and the Ring has tempted you two or more times this game, draw a card."
|
||||
));
|
||||
this.addAbility(ability.addHint(ControllerGainedLifeCount.getHint()), new PlayerGainedLifeWatcher());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ package mage.cards.f;
|
|||
import mage.MageInt;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.common.MorbidCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.keyword.InvestigateEffect;
|
||||
import mage.abilities.hint.common.MorbidHint;
|
||||
import mage.abilities.keyword.ReachAbility;
|
||||
|
|
@ -30,12 +29,8 @@ public final class FunnelWebRecluse extends CardImpl {
|
|||
this.addAbility(ReachAbility.getInstance());
|
||||
|
||||
// Morbid — When Funnel-Web Recluse enters the battlefield, if a creature died this turn, investigate.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldTriggeredAbility(new InvestigateEffect()),
|
||||
MorbidCondition.instance, "<i>Morbid</i> — When {this} enters, " +
|
||||
"if a creature died this turn, investigate. <i>(Create a colorless Clue artifact token " +
|
||||
"with \"{2}, Sacrifice this artifact: Draw a card.\")</i>"
|
||||
).addHint(MorbidHint.instance));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new InvestigateEffect())
|
||||
.withInterveningIf(MorbidCondition.instance).addHint(MorbidHint.instance));
|
||||
}
|
||||
|
||||
private FunnelWebRecluse(final FunnelWebRecluse card) {
|
||||
|
|
|
|||
|
|
@ -2,17 +2,20 @@ package mage.cards.f;
|
|||
|
||||
import mage.MageObject;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
||||
import mage.abilities.condition.common.FerociousCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.AsThoughEffect;
|
||||
import mage.abilities.effects.AsThoughEffectImpl;
|
||||
import mage.abilities.effects.ContinuousEffect;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.hint.common.FerociousHint;
|
||||
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
import mage.constants.AsThoughEffectType;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
|
|
@ -31,9 +34,8 @@ public final class FuriousRise extends CardImpl {
|
|||
|
||||
// At the beginning of your end step, if you control a creature with power 4 or greater, exile the top card of your library.
|
||||
// You may play that card until you exile another card with Furious Rise.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(new BeginningOfEndStepTriggeredAbility(
|
||||
new FuriousRiseEffect()), FerociousCondition.instance,
|
||||
"At the beginning of your end step, if you control a creature with power 4 or greater, exile the top card of your library. You may play that card until you exile another card with {this}."));
|
||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(new FuriousRiseEffect())
|
||||
.withInterveningIf(FerociousCondition.instance).addHint(FerociousHint.instance));
|
||||
}
|
||||
|
||||
private FuriousRise(final FuriousRise card) {
|
||||
|
|
@ -50,7 +52,7 @@ class FuriousRiseEffect extends OneShotEffect {
|
|||
|
||||
FuriousRiseEffect() {
|
||||
super(Outcome.Benefit);
|
||||
this.staticText = "exile the top card of your library. You may play that card until you exile another card with Furious Rise";
|
||||
this.staticText = "exile the top card of your library. You may play that card until you exile another card with {this}";
|
||||
}
|
||||
|
||||
private FuriousRiseEffect(final FuriousRiseEffect effect) {
|
||||
|
|
|
|||
|
|
@ -1,11 +1,8 @@
|
|||
|
||||
package mage.cards.f;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.common.CastFromHandSourcePermanentCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.ExileAllEffect;
|
||||
import mage.abilities.keyword.AffinityForArtifactsAbility;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
|
|
@ -13,23 +10,18 @@ import mage.cards.CardImpl;
|
|||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.watchers.common.CastFromHandWatcher;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public final class FurnaceDragon extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterPermanent("artifacts");
|
||||
|
||||
static {
|
||||
filter.add(CardType.ARTIFACT.getPredicate());
|
||||
}
|
||||
|
||||
public FurnaceDragon(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{6}{R}{R}{R}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{6}{R}{R}{R}");
|
||||
this.subtype.add(SubType.DRAGON);
|
||||
this.power = new MageInt(5);
|
||||
this.toughness = new MageInt(5);
|
||||
|
|
@ -41,11 +33,9 @@ public final class FurnaceDragon extends CardImpl {
|
|||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// When Furnace Dragon enters the battlefield, if you cast it from your hand, exile all artifacts.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldTriggeredAbility(new ExileAllEffect(filter), false),
|
||||
CastFromHandSourcePermanentCondition.instance,
|
||||
"When {this} enters, if you cast it from your hand, exile all artifacts."),
|
||||
new CastFromHandWatcher());
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(
|
||||
new ExileAllEffect(StaticFilters.FILTER_PERMANENT_ARTIFACTS)
|
||||
).withInterveningIf(CastFromHandSourcePermanentCondition.instance), new CastFromHandWatcher());
|
||||
}
|
||||
|
||||
private FurnaceDragon(final FurnaceDragon card) {
|
||||
|
|
|
|||
|
|
@ -1,13 +1,11 @@
|
|||
|
||||
package mage.cards.f;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.MageObjectReference;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.DiesSourceTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.GainLifeEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -17,22 +15,23 @@ import mage.game.Game;
|
|||
import mage.game.permanent.Permanent;
|
||||
import mage.watchers.common.WasBlockedThisTurnWatcher;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author L_J
|
||||
*/
|
||||
public final class FyndhornDruid extends CardImpl {
|
||||
|
||||
public FyndhornDruid(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
|
||||
this.subtype.add(SubType.ELF);
|
||||
this.subtype.add(SubType.DRUID);
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
// When Fyndhorn Druid dies, if it was blocked this turn, you gain 4 life.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(new DiesSourceTriggeredAbility(new GainLifeEffect(4)), new SourceWasBlockedThisTurnCondition(),
|
||||
"When {this} dies, if it was blocked this turn, you gain 4 life."), new WasBlockedThisTurnWatcher());
|
||||
this.addAbility(new DiesSourceTriggeredAbility(new GainLifeEffect(4))
|
||||
.withInterveningIf(FyndhornDruidCondition.instance), new WasBlockedThisTurnWatcher());
|
||||
}
|
||||
|
||||
private FyndhornDruid(final FyndhornDruid card) {
|
||||
|
|
@ -45,7 +44,8 @@ public final class FyndhornDruid extends CardImpl {
|
|||
}
|
||||
}
|
||||
|
||||
class SourceWasBlockedThisTurnCondition implements Condition {
|
||||
enum FyndhornDruidCondition implements Condition {
|
||||
instance;
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
|
|
@ -53,4 +53,9 @@ class SourceWasBlockedThisTurnCondition implements Condition {
|
|||
WasBlockedThisTurnWatcher watcher = game.getState().getWatcher(WasBlockedThisTurnWatcher.class);
|
||||
return sourcePermanent != null && watcher != null && watcher.getWasBlockedThisTurnCreatures().contains(new MageObjectReference(sourcePermanent, game));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "it was blocked this turn";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,20 +1,19 @@
|
|||
package mage.cards.g;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.AttacksTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.common.CardsInControllerGraveyardCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.constants.SubType;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.StaticFilters;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author weirddan455
|
||||
*/
|
||||
public final class GaeasCourser extends CardImpl {
|
||||
|
|
@ -31,11 +30,7 @@ public final class GaeasCourser extends CardImpl {
|
|||
this.toughness = new MageInt(5);
|
||||
|
||||
// Whenever Gaea's Courser attacks, if there are three or more creature cards in your graveyard, draw a card.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new AttacksTriggeredAbility(new DrawCardSourceControllerEffect(1)),
|
||||
condition,
|
||||
"Whenever {this} attacks, if there are three or more creature cards in your graveyard, draw a card."
|
||||
));
|
||||
this.addAbility(new AttacksTriggeredAbility(new DrawCardSourceControllerEffect(1)).withInterveningIf(condition));
|
||||
}
|
||||
|
||||
private GaeasCourser(final GaeasCourser card) {
|
||||
|
|
|
|||
|
|
@ -3,10 +3,9 @@ package mage.cards.g;
|
|||
import mage.MageInt;
|
||||
import mage.MageObjectReference;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.choices.TwoChoiceVote;
|
||||
|
|
@ -35,18 +34,9 @@ public final class GaladrielElvenQueen extends CardImpl {
|
|||
this.toughness = new MageInt(5);
|
||||
|
||||
// Will of the council -- At the beginning of combat on your turn, if another Elf entered the battlefield under your control this turn, starting with you, each player votes for dominion or guidance. If dominion gets more votes, the Ring tempts you, then you put a +1/+1 counter on your Ring-bearer. If guidance gets more votes or the vote is tied, draw a card.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new BeginningOfCombatTriggeredAbility(
|
||||
Zone.BATTLEFIELD,
|
||||
TargetController.YOU, new GaladrielElvenQueenEffect(),
|
||||
false
|
||||
),
|
||||
GaladrielElvenQueenCondition.instance,
|
||||
"At the beginning of combat on your turn, if another Elf entered the battlefield under "
|
||||
+ "your control this turn, starting with you, each player votes for dominion or guidance. "
|
||||
+ "If dominion gets more votes, the Ring tempts you, then you put a +1/+1 counter on your "
|
||||
+ "Ring-bearer. If guidance gets more votes or the vote is tied, draw a card."
|
||||
).setAbilityWord(AbilityWord.WILL_OF_THE_COUNCIL), new GaladrielElvenQueenWatcher());
|
||||
this.addAbility(new BeginningOfCombatTriggeredAbility(
|
||||
Zone.BATTLEFIELD, TargetController.YOU, new GaladrielElvenQueenEffect(), false
|
||||
).withInterveningIf(GaladrielElvenQueenCondition.instance).setAbilityWord(AbilityWord.WILL_OF_THE_COUNCIL), new GaladrielElvenQueenWatcher());
|
||||
}
|
||||
|
||||
private GaladrielElvenQueen(final GaladrielElvenQueen card) {
|
||||
|
|
@ -73,6 +63,11 @@ enum GaladrielElvenQueenCondition implements Condition {
|
|||
source.getControllerId()
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "another Elf entered the battlefield under your control this turn";
|
||||
}
|
||||
}
|
||||
|
||||
class GaladrielElvenQueenWatcher extends Watcher {
|
||||
|
|
|
|||
|
|
@ -4,8 +4,6 @@ import mage.abilities.Ability;
|
|||
import mage.abilities.common.EntersBattlefieldAbility;
|
||||
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.Effects;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
import mage.abilities.mana.WhiteManaAbility;
|
||||
|
|
@ -40,15 +38,10 @@ public final class GatewatchBeacon extends CardImpl {
|
|||
|
||||
// Whenever a planeswalker you control enters, if Gatewatch Beacon has loyalty
|
||||
// counters on it, you may move a loyalty counter from Gatewatch Beacon onto that planeswalker.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldControlledTriggeredAbility(
|
||||
Zone.BATTLEFIELD,
|
||||
new GatewatchBeaconMoveCounterEffect(),
|
||||
StaticFilters.FILTER_PERMANENT_PLANESWALKER,
|
||||
true
|
||||
), GatewatchBeaconCondition.instance, "Whenever a planeswalker you control enters, if {this} has " +
|
||||
"loyalty counters on it, you may move a loyalty counter from {this} onto that planeswalker"
|
||||
));
|
||||
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
|
||||
Zone.BATTLEFIELD, new GatewatchBeaconMoveCounterEffect(),
|
||||
StaticFilters.FILTER_PERMANENT_PLANESWALKER, true
|
||||
).withInterveningIf(GatewatchBeaconCondition.instance));
|
||||
}
|
||||
|
||||
private GatewatchBeacon(final GatewatchBeacon card) {
|
||||
|
|
@ -67,15 +60,12 @@ enum GatewatchBeaconCondition implements Condition {
|
|||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Permanent permanent = source.getSourcePermanentIfItStillExists(game);
|
||||
if (permanent == null) {
|
||||
return false;
|
||||
}
|
||||
Effects effects = source.getEffects();
|
||||
if (effects.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
return permanent != null && permanent.getCounters(game).getCount(CounterType.LOYALTY) > 0;
|
||||
}
|
||||
|
||||
return permanent.getCounters(game).getCount(CounterType.LOYALTY) > 0;
|
||||
@Override
|
||||
public String toString() {
|
||||
return "{this} has loyalty counters on it";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
package mage.cards.g;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.TriggeredAbility;
|
||||
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
|
||||
import mage.abilities.condition.common.SourceTappedCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -28,12 +26,11 @@ public final class GenesisChamber extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}");
|
||||
|
||||
// Whenever a nontoken creature enters the battlefield, if Genesis Chamber is untapped, that creature's controller creates a 1/1 colorless Myr artifact creature token.
|
||||
TriggeredAbility ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new GenesisChamberEffect(), StaticFilters.FILTER_CREATURE_NON_TOKEN, false, SetTargetPointer.PERMANENT);
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability,
|
||||
SourceTappedCondition.UNTAPPED,
|
||||
"Whenever a nontoken creature enters, "
|
||||
+ "if {this} is untapped, "
|
||||
+ "that creature's controller creates a 1/1 colorless Myr artifact creature token"));
|
||||
this.addAbility(new EntersBattlefieldAllTriggeredAbility(
|
||||
Zone.BATTLEFIELD, new GenesisChamberEffect(),
|
||||
StaticFilters.FILTER_CREATURE_NON_TOKEN,
|
||||
false, SetTargetPointer.PERMANENT
|
||||
).withInterveningIf(SourceTappedCondition.UNTAPPED));
|
||||
}
|
||||
|
||||
private GenesisChamber(final GenesisChamber card) {
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ package mage.cards.g;
|
|||
import mage.MageInt;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.common.CastFromEverywhereSourceCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.keyword.DiscoverEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -26,11 +25,7 @@ public final class GeologicalAppraiser extends CardImpl {
|
|||
this.toughness = new MageInt(2);
|
||||
|
||||
// When Geological Appraiser enters the battlefield, if you cast it, discover 3.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldTriggeredAbility(new DiscoverEffect(3)),
|
||||
CastFromEverywhereSourceCondition.instance,
|
||||
"When {this} enters, if you cast it, discover 3."
|
||||
));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new DiscoverEffect(3)).withInterveningIf(CastFromEverywhereSourceCondition.instance));
|
||||
}
|
||||
|
||||
private GeologicalAppraiser(final GeologicalAppraiser card) {
|
||||
|
|
|
|||
|
|
@ -1,40 +1,36 @@
|
|||
|
||||
package mage.cards.g;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.condition.IntCompareCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.common.CardsInHandCondition;
|
||||
import mage.abilities.effects.common.DrawCardTargetEffect;
|
||||
import mage.abilities.effects.common.continuous.PlayAdditionalLandsAllEffect;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.ComparisonType;
|
||||
import mage.constants.TargetController;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author emerald000
|
||||
*/
|
||||
public final class GhirapurOrrery extends CardImpl {
|
||||
|
||||
private static final Condition condition = new CardsInHandCondition(ComparisonType.EQUAL_TO, 0, TargetController.ACTIVE);
|
||||
|
||||
public GhirapurOrrery(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{4}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}");
|
||||
|
||||
// Each player may play an additional land on each of their turns.
|
||||
this.addAbility(new SimpleStaticAbility(new PlayAdditionalLandsAllEffect()));
|
||||
|
||||
// At the beginning of each player's upkeep, if that player has no cards in hand, that player draws three cards.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new BeginningOfUpkeepTriggeredAbility(TargetController.ANY, new DrawCardTargetEffect(3), false),
|
||||
new GhirapurOrreryCondition(),
|
||||
"At the beginning of each player's upkeep, if that player has no cards in hand, that player draws three cards."));
|
||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
||||
TargetController.ANY, new DrawCardTargetEffect(3), false).withInterveningIf(condition)
|
||||
);
|
||||
}
|
||||
|
||||
private GhirapurOrrery(final GhirapurOrrery card) {
|
||||
|
|
@ -46,19 +42,3 @@ public final class GhirapurOrrery extends CardImpl {
|
|||
return new GhirapurOrrery(this);
|
||||
}
|
||||
}
|
||||
|
||||
class GhirapurOrreryCondition extends IntCompareCondition {
|
||||
|
||||
GhirapurOrreryCondition() {
|
||||
super(ComparisonType.EQUAL_TO, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getInputValue(Game game, Ability source) {
|
||||
Player activePlayer = game.getPlayer(game.getActivePlayerId());
|
||||
if (activePlayer != null) {
|
||||
return activePlayer.getHand().size();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import mage.abilities.Ability;
|
|||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.common.SpellCastControllerTriggeredAbility;
|
||||
import mage.abilities.condition.common.KickedCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.ReturnToHandTargetEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.abilities.keyword.KickerAbility;
|
||||
|
|
@ -36,11 +35,7 @@ public final class GhituAmplifier extends CardImpl {
|
|||
this.addAbility(new KickerAbility("{2}{U}"));
|
||||
|
||||
// When Ghitu Amplifier enters the battlefield, if it was kicked, return target creature an opponent controls to its owner's hand.
|
||||
Ability ability = new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect()),
|
||||
KickedCondition.ONCE, "When {this} enters, " +
|
||||
"if it was kicked, return target creature an opponent controls to its owner's hand."
|
||||
);
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect()).withInterveningIf(KickedCondition.ONCE);
|
||||
ability.addTarget(new TargetOpponentsCreaturePermanent());
|
||||
this.addAbility(ability);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,19 +1,16 @@
|
|||
|
||||
package mage.cards.g;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.common.KickedCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.ReturnToHandTargetEffect;
|
||||
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
|
||||
import mage.abilities.keyword.KickerAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.FilterCard;
|
||||
import mage.filter.common.FilterInstantOrSorceryCard;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.target.common.TargetCardInYourGraveyard;
|
||||
|
||||
import java.util.UUID;
|
||||
|
|
@ -23,9 +20,6 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class GhituChronicler extends CardImpl {
|
||||
|
||||
private static final FilterCard filter
|
||||
= new FilterInstantOrSorceryCard("instant or sorcery card from your graveyard");
|
||||
|
||||
public GhituChronicler(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}");
|
||||
|
||||
|
|
@ -38,12 +32,8 @@ public final class GhituChronicler extends CardImpl {
|
|||
this.addAbility(new KickerAbility("{3}{R}"));
|
||||
|
||||
// When Ghitu Chronicler enters the battlefield, if it was kicked, return target instant or sorcery card from your graveyard to your hand.
|
||||
Ability ability = new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect(), false),
|
||||
KickedCondition.ONCE, "When {this} enters, if it was kicked, " +
|
||||
"return target instant or sorcery card from your graveyard to your hand."
|
||||
);
|
||||
ability.addTarget(new TargetCardInYourGraveyard(filter));
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect()).withInterveningIf(KickedCondition.ONCE);
|
||||
ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY_FROM_YOUR_GRAVEYARD));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,34 +1,35 @@
|
|||
|
||||
package mage.cards.g;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.TriggeredAbility;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.DamagePlayersEffect;
|
||||
import mage.constants.SubType;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.TargetController;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.filter.predicate.mageobject.AnotherPredicate;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class GhituJourneymage extends CardImpl {
|
||||
|
||||
private static final FilterControlledPermanent filter = new FilterControlledPermanent("another Wizard");
|
||||
private static final FilterPermanent filter = new FilterControlledPermanent(SubType.WIZARD, "you control another Wizard");
|
||||
|
||||
static {
|
||||
filter.add(AnotherPredicate.instance);
|
||||
filter.add(SubType.WIZARD.getPredicate());
|
||||
}
|
||||
|
||||
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter);
|
||||
|
||||
public GhituJourneymage(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}");
|
||||
|
||||
|
|
@ -38,12 +39,7 @@ public final class GhituJourneymage extends CardImpl {
|
|||
this.toughness = new MageInt(2);
|
||||
|
||||
// When Ghitu Journeymage enters the battlefield, if you control another Wizard, Ghitu Journeymage deals 2 damage to each opponent.
|
||||
TriggeredAbility triggeredAbility = new EntersBattlefieldTriggeredAbility(new DamagePlayersEffect(2, TargetController.OPPONENT));
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
triggeredAbility,
|
||||
new PermanentsOnTheBattlefieldCondition(filter),
|
||||
"When {this} enters, if you control another Wizard, {this} deals 2 damage to each opponent."
|
||||
));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new DamagePlayersEffect(2, TargetController.OPPONENT)).withInterveningIf(condition));
|
||||
}
|
||||
|
||||
private GhituJourneymage(final GhituJourneymage card) {
|
||||
|
|
|
|||
|
|
@ -1,21 +1,21 @@
|
|||
package mage.cards.g;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.dynamicvalue.common.CardTypesInGraveyardCount;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.common.DeliriumCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.common.CardTypesInGraveyardCount;
|
||||
import mage.abilities.effects.common.DamagePlayersEffect;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AbilityWord;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.TargetController;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author fireshoes
|
||||
*/
|
||||
|
|
@ -28,16 +28,15 @@ public final class GibberingFiend extends CardImpl {
|
|||
this.toughness = new MageInt(1);
|
||||
|
||||
// When Gibbering Fiend enters the battlefield, it deals 1 damage to each opponent.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new DamagePlayersEffect(1, TargetController.OPPONENT, "it"), false));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new DamagePlayersEffect(
|
||||
1, TargetController.OPPONENT, "it"
|
||||
), false));
|
||||
|
||||
// <i>Delirium</i> — At the beginning of each opponent's upkeep, if there are four or more card types among cards in your graveyard,
|
||||
// Gibbering Fiend deals 1 damage to that player.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new BeginningOfUpkeepTriggeredAbility(TargetController.OPPONENT, new DamageTargetEffect(1), false),
|
||||
DeliriumCondition.instance,
|
||||
"<i>Delirium</i> — At the beginning of each opponent's upkeep, if there are four or more card types among cards in your graveyard, "
|
||||
+ "{this} deals 1 damage to that player.")
|
||||
.addHint(CardTypesInGraveyardCount.YOU.getHint()));
|
||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
||||
TargetController.OPPONENT, new DamageTargetEffect(1, true, "that player"), false
|
||||
).withInterveningIf(DeliriumCondition.instance).setAbilityWord(AbilityWord.DELIRIUM).addHint(CardTypesInGraveyardCount.YOU.getHint()));
|
||||
}
|
||||
|
||||
private GibberingFiend(final GibberingFiend card) {
|
||||
|
|
|
|||
|
|
@ -1,40 +1,43 @@
|
|||
|
||||
package mage.cards.g;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.StaticAbility;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.condition.common.KickedCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.AttachEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
|
||||
import mage.abilities.effects.common.continuous.SetBasePowerToughnessSourceEffect;
|
||||
import mage.abilities.effects.common.continuous.SetBasePowerToughnessAttachedEffect;
|
||||
import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect;
|
||||
import mage.abilities.keyword.EnchantAbility;
|
||||
import mage.abilities.keyword.KickerAbility;
|
||||
import mage.abilities.keyword.TrampleAbility;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
import mage.constants.AttachmentType;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.FilterCard;
|
||||
import mage.filter.predicate.mageobject.NamePredicate;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
import mage.target.TargetPermanent;
|
||||
import mage.target.common.TargetCardInLibrary;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author North
|
||||
*/
|
||||
public final class Gigantiform extends CardImpl {
|
||||
|
||||
private static final FilterCard filter = new FilterCard("card named Gigantiform");
|
||||
|
||||
static {
|
||||
filter.add(new NamePredicate("Gigantiform"));
|
||||
}
|
||||
|
||||
public Gigantiform(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{G}{G}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{G}{G}");
|
||||
this.subtype.add(SubType.AURA);
|
||||
|
||||
// Kicker {4}
|
||||
|
|
@ -44,15 +47,21 @@ public final class Gigantiform extends CardImpl {
|
|||
TargetPermanent auraTarget = new TargetCreaturePermanent();
|
||||
this.getSpellAbility().addTarget(auraTarget);
|
||||
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
|
||||
Ability ability = new EnchantAbility(auraTarget);
|
||||
this.addAbility(ability);
|
||||
this.addAbility(new EnchantAbility(auraTarget));
|
||||
|
||||
// Enchanted creature has base power and toughness 8/8 and has trample.
|
||||
this.addAbility(new GigantiformAbility());
|
||||
Ability ability = new SimpleStaticAbility(
|
||||
new SetBasePowerToughnessAttachedEffect(8, 8, AttachmentType.AURA)
|
||||
);
|
||||
ability.addEffect(new GainAbilityAttachedEffect(
|
||||
TrampleAbility.getInstance(), AttachmentType.AURA
|
||||
).setText("and has trample"));
|
||||
this.addAbility(ability);
|
||||
|
||||
// When Gigantiform enters the battlefield, if it was kicked, you may search your library for a card named Gigantiform, put it onto the battlefield, then shuffle your library.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldTriggeredAbility(new GigantiformEffect(), true),
|
||||
KickedCondition.ONCE,
|
||||
"When {this} enters, if it was kicked, you may search your library for a card named Gigantiform, put it onto the battlefield, then shuffle."));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(
|
||||
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)), true
|
||||
).withInterveningIf(KickedCondition.ONCE));
|
||||
}
|
||||
|
||||
private Gigantiform(final Gigantiform card) {
|
||||
|
|
@ -64,65 +73,3 @@ public final class Gigantiform extends CardImpl {
|
|||
return new Gigantiform(this);
|
||||
}
|
||||
}
|
||||
|
||||
class GigantiformAbility extends StaticAbility {
|
||||
|
||||
public GigantiformAbility() {
|
||||
super(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(TrampleAbility.getInstance(), AttachmentType.AURA));
|
||||
Ability ability = new SimpleStaticAbility(
|
||||
new SetBasePowerToughnessSourceEffect(8, 8, Duration.WhileOnBattlefield)
|
||||
);
|
||||
this.addEffect(new GainAbilityAttachedEffect(ability, AttachmentType.AURA));
|
||||
}
|
||||
|
||||
private GigantiformAbility(final GigantiformAbility ability) {
|
||||
super(ability);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GigantiformAbility copy() {
|
||||
return new GigantiformAbility(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Enchanted creature has base power and toughness 8/8 and has trample.";
|
||||
}
|
||||
}
|
||||
|
||||
class GigantiformEffect extends OneShotEffect {
|
||||
|
||||
private static final FilterCard filter = new FilterCard("card named Gigantiform");
|
||||
|
||||
static {
|
||||
filter.add(new NamePredicate("Gigantiform"));
|
||||
}
|
||||
|
||||
public GigantiformEffect() {
|
||||
super(Outcome.PutCardInPlay);
|
||||
}
|
||||
|
||||
private GigantiformEffect(final GigantiformEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GigantiformEffect copy() {
|
||||
return new GigantiformEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
TargetCardInLibrary target = new TargetCardInLibrary(filter);
|
||||
if (controller != null && controller.searchLibrary(target, source, game)) {
|
||||
Card card = controller.getLibrary().getCard(target.getFirstTarget(), game);
|
||||
if (card != null) {
|
||||
controller.moveCards(card, Zone.BATTLEFIELD, source, game);
|
||||
}
|
||||
controller.shuffleLibrary(source, game);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import mage.MageInt;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.AttacksTriggeredAbility;
|
||||
import mage.abilities.condition.common.DesertControlledOrGraveyardCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.combat.CantBlockTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -20,8 +19,6 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class GildedCerodon extends CardImpl {
|
||||
|
||||
private static final String rule = "Whenever {this} attacks, if you control a Desert or there is a Desert card in your graveyard, target creature can't block this turn.";
|
||||
|
||||
public GildedCerodon(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{R}");
|
||||
|
||||
|
|
@ -31,13 +28,10 @@ public final class GildedCerodon extends CardImpl {
|
|||
this.toughness = new MageInt(4);
|
||||
|
||||
// Whenever Gilded Cerodon attacks, if you control a Desert or there is a Desert card in your graveyard, target creature can't block this turn.
|
||||
Ability ability = new ConditionalInterveningIfTriggeredAbility(
|
||||
new AttacksTriggeredAbility(new CantBlockTargetEffect(Duration.EndOfTurn), false),
|
||||
DesertControlledOrGraveyardCondition.instance, rule
|
||||
);
|
||||
Ability ability = new AttacksTriggeredAbility(new CantBlockTargetEffect(Duration.EndOfTurn))
|
||||
.withInterveningIf(DesertControlledOrGraveyardCondition.instance);
|
||||
ability.addTarget(new TargetCreaturePermanent());
|
||||
this.addAbility(ability.addHint(DesertControlledOrGraveyardCondition.getHint()));
|
||||
|
||||
}
|
||||
|
||||
private GildedCerodon(final GildedCerodon card) {
|
||||
|
|
|
|||
|
|
@ -1,30 +1,31 @@
|
|||
package mage.cards.g;
|
||||
|
||||
import mage.abilities.TriggeredAbility;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.AttacksWithCreaturesTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.condition.common.FormidableCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.FightTargetsEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||
import mage.abilities.keyword.HasteAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
import mage.constants.AbilityWord;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.TargetController;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterAttackingCreature;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.target.TargetPermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author notgreat
|
||||
*/
|
||||
public final class GimlisRecklessMight extends CardImpl {
|
||||
|
||||
private static final FilterCreaturePermanent filter = new FilterAttackingCreature("attacking creature you control");
|
||||
private static final FilterPermanent filter = new FilterAttackingCreature("attacking creature you control");
|
||||
|
||||
static {
|
||||
filter.add(TargetController.YOU.getControllerPredicate());
|
||||
|
|
@ -35,14 +36,15 @@ public final class GimlisRecklessMight extends CardImpl {
|
|||
|
||||
// Creatures you control have haste.
|
||||
this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(
|
||||
HasteAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES)));
|
||||
HasteAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES
|
||||
)));
|
||||
|
||||
// Formidable -- Whenever you attack, if creatures you control have total power 8 or greater, target attacking creature you control fights up to one target creature you don't control.
|
||||
TriggeredAbility ability = new AttacksWithCreaturesTriggeredAbility(new FightTargetsEffect(),1);
|
||||
Ability ability = new AttacksWithCreaturesTriggeredAbility(new FightTargetsEffect(), 1)
|
||||
.withInterveningIf(FormidableCondition.instance);
|
||||
ability.addTarget(new TargetPermanent(filter));
|
||||
ability.addTarget(new TargetPermanent(0, 1, StaticFilters.FILTER_CREATURE_YOU_DONT_CONTROL));
|
||||
ability.setAbilityWord(AbilityWord.FORMIDABLE);
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, FormidableCondition.instance,
|
||||
"<i>Formidable</i> — Whenever you attack, if creatures you control have total power 8 or greater, target attacking creature you control fights up to one target creature you don't control."));
|
||||
this.addAbility(ability.setAbilityWord(AbilityWord.FORMIDABLE));
|
||||
}
|
||||
|
||||
private GimlisRecklessMight(final GimlisRecklessMight card) {
|
||||
|
|
|
|||
|
|
@ -1,26 +1,25 @@
|
|||
package mage.cards.g;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.common.CardsInControllerGraveyardCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
import mage.constants.SubType;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.counters.CounterType;
|
||||
import mage.filter.StaticFilters;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author weirddan455
|
||||
*/
|
||||
public final class GixianSkullflayer extends CardImpl {
|
||||
|
||||
private static final CardsInControllerGraveyardCondition condition
|
||||
= new CardsInControllerGraveyardCondition(3, StaticFilters.FILTER_CARD_CREATURES);
|
||||
private static final Condition condition = new CardsInControllerGraveyardCondition(3, StaticFilters.FILTER_CARD_CREATURES);
|
||||
|
||||
public GixianSkullflayer(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}");
|
||||
|
|
@ -32,11 +31,7 @@ public final class GixianSkullflayer extends CardImpl {
|
|||
this.toughness = new MageInt(3);
|
||||
|
||||
// At the beginning of your upkeep, if there are three or more creature cards in your graveyard, put a +1/+1 counter on Gixian Skullflayer.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new BeginningOfUpkeepTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance())),
|
||||
condition,
|
||||
"At the beginning of your upkeep, if there are three or more creature cards in your graveyard, put a +1/+1 counter on {this}."
|
||||
));
|
||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance())).withInterveningIf(condition));
|
||||
}
|
||||
|
||||
private GixianSkullflayer(final GixianSkullflayer card) {
|
||||
|
|
|
|||
|
|
@ -1,33 +1,36 @@
|
|||
|
||||
package mage.cards.g;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.TriggeredAbility;
|
||||
import mage.abilities.common.OnEventTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.SacrificeSourceEffect;
|
||||
import mage.abilities.mana.AnyColorManaAbility;
|
||||
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.ComparisonType;
|
||||
import mage.constants.TargetController;
|
||||
import mage.filter.common.FilterControlledArtifactPermanent;
|
||||
import mage.game.events.GameEvent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author jonubuu
|
||||
*/
|
||||
public final class Glimmervoid extends CardImpl {
|
||||
|
||||
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(
|
||||
new FilterControlledArtifactPermanent("you control no artifacts"), ComparisonType.EQUAL_TO, 0
|
||||
);
|
||||
|
||||
public Glimmervoid(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.LAND},"");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
|
||||
|
||||
// At the beginning of the end step, if you control no artifacts, sacrifice Glimmervoid.
|
||||
TriggeredAbility triggered = new OnEventTriggeredAbility(GameEvent.EventType.END_TURN_STEP_PRE, "beginning of the end step", true, new SacrificeSourceEffect());
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(triggered, new PermanentsOnTheBattlefieldCondition(new FilterControlledArtifactPermanent(), ComparisonType.FEWER_THAN, 1),
|
||||
"At the beginning of the end step, if you control no artifacts, sacrifice {this}."));
|
||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(
|
||||
TargetController.NEXT, new SacrificeSourceEffect(), false, condition
|
||||
));
|
||||
|
||||
// {tap}: Add one mana of any color.
|
||||
this.addAbility(new AnyColorManaAbility());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,26 +1,25 @@
|
|||
package mage.cards.g;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||
import mage.abilities.keyword.DoubleStrikeAbility;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.abilities.keyword.LifelinkAbility;
|
||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.TargetController;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author weirddan455
|
||||
*/
|
||||
public final class GloriousEnforcer extends CardImpl {
|
||||
|
|
@ -39,14 +38,12 @@ public final class GloriousEnforcer extends CardImpl {
|
|||
this.addAbility(LifelinkAbility.getInstance());
|
||||
|
||||
// At the beginning of each combat, if you have more life than an opponent, Glorious Enforcer gains double strike until end of turn.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new BeginningOfCombatTriggeredAbility(
|
||||
TargetController.ANY, new GainAbilitySourceEffect(DoubleStrikeAbility.getInstance(), Duration.EndOfTurn),
|
||||
false
|
||||
),
|
||||
GloriousEnforcerCondition.instance,
|
||||
"At the beginning of each combat, if you have more life than an opponent, {this} gains double strike until end of turn."
|
||||
));
|
||||
this.addAbility(new BeginningOfCombatTriggeredAbility(
|
||||
TargetController.ANY,
|
||||
new GainAbilitySourceEffect(
|
||||
DoubleStrikeAbility.getInstance(), Duration.EndOfTurn
|
||||
), false
|
||||
).withInterveningIf(GloriousEnforcerCondition.instance));
|
||||
}
|
||||
|
||||
private GloriousEnforcer(final GloriousEnforcer card) {
|
||||
|
|
@ -66,14 +63,20 @@ enum GloriousEnforcerCondition implements Condition {
|
|||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (controller != null) {
|
||||
for (UUID opponentId : game.getOpponents(source.getControllerId())) {
|
||||
Player opponent = game.getPlayer(opponentId);
|
||||
if (opponent != null && controller.getLife() > opponent.getLife()) {
|
||||
return true;
|
||||
}
|
||||
if (controller == null) {
|
||||
return false;
|
||||
}
|
||||
for (UUID opponentId : game.getOpponents(source.getControllerId())) {
|
||||
Player opponent = game.getPlayer(opponentId);
|
||||
if (opponent != null && controller.getLife() > opponent.getLife()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "you have more life than an opponent";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,9 @@
|
|||
|
||||
package mage.cards.g;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.common.KickedCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.continuous.BoostControlledEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||
import mage.abilities.keyword.HasteAbility;
|
||||
|
|
@ -13,12 +11,13 @@ import mage.abilities.keyword.KickerAbility;
|
|||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.StaticFilters;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author North
|
||||
*/
|
||||
public final class GoblinBushwhacker extends CardImpl {
|
||||
|
|
@ -35,19 +34,14 @@ public final class GoblinBushwhacker extends CardImpl {
|
|||
this.addAbility(new KickerAbility("{R}"));
|
||||
|
||||
// When this creature enters, if it was kicked, creatures you control get +1/+0 and gain haste until end of turn.
|
||||
EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new BoostControlledEffect(1, 0, Duration.EndOfTurn), false);
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(
|
||||
new BoostControlledEffect(1, 0, Duration.EndOfTurn)
|
||||
.setText("creatures you control get +1/+0")).withInterveningIf(KickedCondition.ONCE);
|
||||
ability.addEffect(new GainAbilityControlledEffect(
|
||||
HasteAbility.getInstance(),
|
||||
Duration.EndOfTurn,
|
||||
HasteAbility.getInstance(), Duration.EndOfTurn,
|
||||
StaticFilters.FILTER_CONTROLLED_CREATURES
|
||||
));
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
ability,
|
||||
KickedCondition.ONCE,
|
||||
"When this creature enters, "
|
||||
+ "if it was kicked, "
|
||||
+ "creatures you control get +1/+0 and gain haste until end of turn."
|
||||
));
|
||||
).setText("and gain haste until end of turn"));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private GoblinBushwhacker(final GoblinBushwhacker card) {
|
||||
|
|
|
|||
|
|
@ -2,11 +2,10 @@
|
|||
|
||||
package mage.cards.g;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.common.KickedCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.DestroyTargetEffect;
|
||||
import mage.abilities.keyword.HasteAbility;
|
||||
import mage.abilities.keyword.KickerAbility;
|
||||
|
|
@ -16,14 +15,15 @@ import mage.constants.CardType;
|
|||
import mage.constants.SubType;
|
||||
import mage.target.common.TargetNonBasicLandPermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public final class GoblinRuinblaster extends CardImpl {
|
||||
|
||||
public GoblinRuinblaster(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}");
|
||||
|
||||
this.subtype.add(SubType.GOBLIN);
|
||||
this.subtype.add(SubType.SHAMAN);
|
||||
|
|
@ -33,14 +33,13 @@ public final class GoblinRuinblaster extends CardImpl {
|
|||
// Kicker {R} (You may pay an additional {R} as you cast this spell.)
|
||||
this.addAbility(new KickerAbility("{R}"));
|
||||
|
||||
|
||||
// Haste
|
||||
this.addAbility(HasteAbility.getInstance());
|
||||
|
||||
// When Goblin Ruinblaster enters the battlefield, if it was kicked, destroy target nonbasic land.
|
||||
EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new DestroyTargetEffect(), false);
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(new DestroyTargetEffect()).withInterveningIf(KickedCondition.ONCE);
|
||||
ability.addTarget(new TargetNonBasicLandPermanent());
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, KickedCondition.ONCE, "When {this} enters, if it was kicked, destroy target nonbasic land."));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private GoblinRuinblaster(final GoblinRuinblaster card) {
|
||||
|
|
|
|||
|
|
@ -1,13 +1,12 @@
|
|||
package mage.cards.g;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.common.CorruptedCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.keyword.ToxicAbility;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AbilityWord;
|
||||
|
|
@ -38,11 +37,10 @@ public final class GoliathHatchery extends CardImpl {
|
|||
));
|
||||
|
||||
// Corrupted -- At the beginning of your upkeep, if an opponent has three or more poison counters, choose a creature you control, then draw cards equal to its total toxic value.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new BeginningOfUpkeepTriggeredAbility(
|
||||
new GoliathHatcheryEffect(), false
|
||||
).setAbilityWord(AbilityWord.CORRUPTED), CorruptedCondition.instance, null
|
||||
).addHint(CorruptedCondition.getHint()));
|
||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new GoliathHatcheryEffect())
|
||||
.withInterveningIf(CorruptedCondition.instance)
|
||||
.setAbilityWord(AbilityWord.CORRUPTED)
|
||||
.addHint(CorruptedCondition.getHint()));
|
||||
}
|
||||
|
||||
private GoliathHatchery(final GoliathHatchery card) {
|
||||
|
|
@ -59,8 +57,7 @@ class GoliathHatcheryEffect extends OneShotEffect {
|
|||
|
||||
GoliathHatcheryEffect() {
|
||||
super(Outcome.Benefit);
|
||||
staticText = "if an opponent has three or more poison counters, " +
|
||||
"choose a creature you control, then draw cards equal to its total toxic value";
|
||||
staticText = "choose a creature you control, then draw cards equal to its total toxic value";
|
||||
}
|
||||
|
||||
private GoliathHatcheryEffect(final GoliathHatcheryEffect effect) {
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ package mage.cards.g;
|
|||
import mage.MageInt;
|
||||
import mage.abilities.common.AttacksTriggeredAbility;
|
||||
import mage.abilities.condition.common.DeliriumCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.common.CardTypesInGraveyardCount;
|
||||
import mage.abilities.effects.common.DamageAllControlledTargetEffect;
|
||||
import mage.abilities.keyword.ReachAbility;
|
||||
|
|
@ -16,7 +15,6 @@ import mage.constants.SubType;
|
|||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author weirddan455
|
||||
*/
|
||||
public final class GougedZealot extends CardImpl {
|
||||
|
|
@ -33,11 +31,11 @@ public final class GougedZealot extends CardImpl {
|
|||
this.addAbility(ReachAbility.getInstance());
|
||||
|
||||
// Delirium — Whenever Gouged Zealot attacks, if there are four or more card types among cards in your graveyard, Gouged Zealot deals 1 damage to each creature defending player controls.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new AttacksTriggeredAbility(new DamageAllControlledTargetEffect(1), false, null, SetTargetPointer.PLAYER),
|
||||
DeliriumCondition.instance,
|
||||
"<i>Delirium</i> — Whenever {this} attacks, if there are four or more card types among cards in your graveyard, {this} deals 1 damage to each creature defending player controls."
|
||||
).addHint(CardTypesInGraveyardCount.YOU.getHint()));
|
||||
this.addAbility(new AttacksTriggeredAbility(
|
||||
new DamageAllControlledTargetEffect(1)
|
||||
.setText("{this} deals 1 damage to each creature defending player controls"),
|
||||
false, null, SetTargetPointer.PLAYER
|
||||
).withInterveningIf(DeliriumCondition.instance).addHint(CardTypesInGraveyardCount.YOU.getHint()));
|
||||
}
|
||||
|
||||
private GougedZealot(final GougedZealot card) {
|
||||
|
|
|
|||
|
|
@ -1,11 +1,10 @@
|
|||
package mage.cards.g;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.common.MeldCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.MeldEffect;
|
||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -30,13 +29,9 @@ public final class GrafRats extends CardImpl {
|
|||
this.meldsToClazz = mage.cards.c.ChitteringHost.class;
|
||||
|
||||
// At the beginning of combat on your turn, if you both own and control Graf Rats and a creature named Midnight Scavengers, exile them, then meld them into Chittering Host.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new BeginningOfCombatTriggeredAbility(new MeldEffect(
|
||||
"Midnight Scavengers", "Chittering Host"
|
||||
)), condition, "At the beginning " +
|
||||
"of combat on your turn, if you both own and control {this} and a creature " +
|
||||
"named Midnight Scavengers, exile them, then meld them into Chittering Host."
|
||||
));
|
||||
this.addAbility(new BeginningOfCombatTriggeredAbility(new MeldEffect(
|
||||
"Midnight Scavengers", "Chittering Host"
|
||||
)).withInterveningIf(condition));
|
||||
}
|
||||
|
||||
private GrafRats(final GrafRats card) {
|
||||
|
|
|
|||
|
|
@ -1,22 +1,25 @@
|
|||
package mage.cards.g;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.TriggeredAbility;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.ReturnToHandTargetEffect;
|
||||
import mage.abilities.keyword.MadnessAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.FilterCard;
|
||||
import mage.filter.common.FilterCreatureCard;
|
||||
import mage.target.common.TargetCardInGraveyard;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public final class GraveScrabbler extends CardImpl {
|
||||
|
||||
private static final FilterCard filter = new FilterCreatureCard("creature card from a graveyard");
|
||||
|
||||
public GraveScrabbler(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}");
|
||||
this.subtype.add(SubType.ZOMBIE);
|
||||
|
|
@ -24,15 +27,14 @@ public final class GraveScrabbler extends CardImpl {
|
|||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
//Madness {1}{B}
|
||||
// Madness {1}{B}
|
||||
this.addAbility(new MadnessAbility(new ManaCostsImpl<>("{1}{B}")));
|
||||
|
||||
//When Grave Scrabbler enters the battlefield, if its madness cost was paid,
|
||||
//you may return target creature card from a graveyard to its owner's hand.
|
||||
TriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect(), true);
|
||||
ability.addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card in a graveyard")));
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, MadnessAbility.getCondition(),
|
||||
"When {this} enters, if its madness cost was paid, you may return target creature card from a graveyard to its owner's hand."));
|
||||
// When Grave Scrabbler enters the battlefield, if its madness cost was paid, you may return target creature card from a graveyard to its owner's hand.
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect(), true)
|
||||
.withInterveningIf(MadnessAbility.getCondition());
|
||||
ability.addTarget(new TargetCardInGraveyard(filter));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private GraveScrabbler(final GraveScrabbler card) {
|
||||
|
|
|
|||
|
|
@ -1,12 +1,10 @@
|
|||
package mage.cards.g;
|
||||
|
||||
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.common.YouGainedLifeCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.common.ControllerGainedLifeCount;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.hint.ConditionHint;
|
||||
import mage.abilities.hint.Hint;
|
||||
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -22,18 +20,13 @@ import java.util.UUID;
|
|||
public final class GriffinAerie extends CardImpl {
|
||||
|
||||
private static final Condition condition = new YouGainedLifeCondition(ComparisonType.MORE_THAN, 2);
|
||||
private static final Hint hint = new ConditionHint(condition, "You gained 3 or more life this turn");
|
||||
|
||||
public GriffinAerie(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}");
|
||||
|
||||
// At the beginning of your end step, if you gained 3 or more life this turn, create a 2/2 white Griffin creature token with flying.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new BeginningOfEndStepTriggeredAbility(
|
||||
new CreateTokenEffect(new GriffinToken())
|
||||
), condition, "At the beginning of your end step, " +
|
||||
"if you gained 3 or more life this turn, create a 2/2 white Griffin creature token with flying."
|
||||
).addHint(hint), new PlayerGainedLifeWatcher());
|
||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(new CreateTokenEffect(new GriffinToken()))
|
||||
.withInterveningIf(condition).addHint(ControllerGainedLifeCount.getHint()), new PlayerGainedLifeWatcher());
|
||||
}
|
||||
|
||||
private GriffinAerie(final GriffinAerie card) {
|
||||
|
|
|
|||
|
|
@ -1,24 +1,34 @@
|
|||
package mage.cards.g;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.LookLibraryAndPickControllerEffect;
|
||||
import mage.abilities.effects.common.TransformSourceEffect;
|
||||
import mage.abilities.hint.common.CreaturesYouControlHint;
|
||||
import mage.abilities.keyword.TransformAbility;
|
||||
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.ComparisonType;
|
||||
import mage.constants.PutCards;
|
||||
import mage.constants.SuperType;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author JRHerlehy
|
||||
*/
|
||||
public final class GrowingRitesOfItlimoc extends CardImpl {
|
||||
|
||||
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(
|
||||
new FilterControlledCreaturePermanent("you control four or more creatures"),
|
||||
ComparisonType.MORE_THAN, 3
|
||||
);
|
||||
|
||||
public GrowingRitesOfItlimoc(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}");
|
||||
|
||||
|
|
@ -30,14 +40,13 @@ public final class GrowingRitesOfItlimoc extends CardImpl {
|
|||
// You may reveal a creature card from among them and put it into your hand.
|
||||
// Put the rest on the bottom of your library in any order.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new LookLibraryAndPickControllerEffect(
|
||||
4, 1, StaticFilters.FILTER_CARD_CREATURE_A, PutCards.HAND, PutCards.BOTTOM_ANY)));
|
||||
4, 1, StaticFilters.FILTER_CARD_CREATURE_A, PutCards.HAND, PutCards.BOTTOM_ANY
|
||||
)));
|
||||
|
||||
// At the beginning of your end step, if you control four or more creatures, transform Growing Rites of Itlimoc.
|
||||
this.addAbility(new TransformAbility());
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new BeginningOfEndStepTriggeredAbility(new TransformSourceEffect()),
|
||||
new PermanentsOnTheBattlefieldCondition(StaticFilters.FILTER_CONTROLLED_A_CREATURE, ComparisonType.MORE_THAN, 3),
|
||||
"At the beginning of your end step, if you control four or more creatures, transform {this}"));
|
||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(new TransformSourceEffect())
|
||||
.withInterveningIf(condition).addHint(CreaturesYouControlHint.instance));
|
||||
}
|
||||
|
||||
private GrowingRitesOfItlimoc(final GrowingRitesOfItlimoc card) {
|
||||
|
|
|
|||
|
|
@ -3,8 +3,8 @@ package mage.cards.g;
|
|||
import mage.MageInt;
|
||||
import mage.abilities.common.DiesSourceTriggeredAbility;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.common.SourceMatchesFilterCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.common.SourcePermanentPowerValue;
|
||||
import mage.abilities.effects.CreateTokenCopySourceEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersAllEffect;
|
||||
|
|
@ -26,14 +26,16 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class GruffTriplets extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filterNonToken = new FilterPermanent("non-token permanent");
|
||||
private static final FilterControlledPermanent filterNamedGruffTriplets = new FilterControlledPermanent("creature you control named Gruff Triplets");
|
||||
private static final FilterPermanent filterNonToken = new FilterPermanent("it isn't a token");
|
||||
private static final FilterPermanent filterNamedGruffTriplets = new FilterControlledPermanent("creature you control named Gruff Triplets");
|
||||
|
||||
static {
|
||||
filterNonToken.add(TokenPredicate.FALSE);
|
||||
filterNamedGruffTriplets.add(new NamePredicate("Gruff Triplets"));
|
||||
}
|
||||
|
||||
private static final Condition condition = new SourceMatchesFilterCondition(filterNonToken);
|
||||
|
||||
public GruffTriplets(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}{G}{G}");
|
||||
|
||||
|
|
@ -46,20 +48,13 @@ public final class GruffTriplets extends CardImpl {
|
|||
this.addAbility(TrampleAbility.getInstance());
|
||||
|
||||
// When Gruff Triplets enters the battlefield, if it isn't a token, create two tokens that are copies of it.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldTriggeredAbility(new CreateTokenCopySourceEffect(2)),
|
||||
new SourceMatchesFilterCondition(filterNonToken),
|
||||
"When {this} enters, if it isn't a token, create two tokens that are copies of it."
|
||||
));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenCopySourceEffect(2)
|
||||
.setText("create two tokens that are copies of it")).withInterveningIf(condition));
|
||||
|
||||
// When Gruff Triplets dies, put a number of +1/+1 counters equal to its power on each creature you control named Gruff Triplets.
|
||||
this.addAbility(new DiesSourceTriggeredAbility(
|
||||
new AddCountersAllEffect(
|
||||
CounterType.P1P1.createInstance(),
|
||||
SourcePermanentPowerValue.NOT_NEGATIVE,
|
||||
filterNamedGruffTriplets
|
||||
).setText("put a number of +1/+1 counters equal to its power on each creature you control named Gruff Triplets.")
|
||||
));
|
||||
this.addAbility(new DiesSourceTriggeredAbility(new AddCountersAllEffect(
|
||||
CounterType.P1P1.createInstance(), SourcePermanentPowerValue.NOT_NEGATIVE, filterNamedGruffTriplets
|
||||
).setText("put a number of +1/+1 counters equal to its power on each creature you control named Gruff Triplets")));
|
||||
}
|
||||
|
||||
private GruffTriplets(final GruffTriplets card) {
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import mage.MageInt;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.DiesSourceTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.keyword.DeathtouchAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -35,10 +34,8 @@ public final class GuildswornProwler extends CardImpl {
|
|||
this.addAbility(DeathtouchAbility.getInstance());
|
||||
|
||||
// When Guildsworn Prowler dies, if it wasn't blocking, draw a card.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new DiesSourceTriggeredAbility(new DrawCardSourceControllerEffect(1)),
|
||||
GuildswornProwlerCondition.instance, "When {this} dies, if it wasn't blocking, draw a card."
|
||||
));
|
||||
this.addAbility(new DiesSourceTriggeredAbility(new DrawCardSourceControllerEffect(1))
|
||||
.withInterveningIf(GuildswornProwlerCondition.instance));
|
||||
}
|
||||
|
||||
private GuildswornProwler(final GuildswornProwler card) {
|
||||
|
|
@ -61,4 +58,9 @@ enum GuildswornProwlerCondition implements Condition {
|
|||
.map(permanent -> !BlockingOrBlockedWatcher.check(permanent, game))
|
||||
.orElse(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "it wasn't blocking";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,11 +5,8 @@ import mage.abilities.Ability;
|
|||
import mage.abilities.common.DiesSourceTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.AdditiveDynamicValue;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.common.AuraAttachedCount;
|
||||
import mage.abilities.dynamicvalue.common.EquipmentAttachedCount;
|
||||
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.abilities.keyword.TrampleAbility;
|
||||
|
|
@ -18,7 +15,9 @@ import mage.cards.CardSetInfo;
|
|||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.predicate.Predicates;
|
||||
import mage.filter.predicate.permanent.AttachedToSourcePredicate;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.game.permanent.token.JunkToken;
|
||||
|
|
@ -31,6 +30,18 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class GunnerConscript extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterPermanent("Aura and Equipment attached to it");
|
||||
|
||||
static {
|
||||
filter.add(Predicates.or(
|
||||
SubType.AURA.getPredicate(),
|
||||
SubType.EQUIPMENT.getPredicate()
|
||||
));
|
||||
filter.add(AttachedToSourcePredicate.instance);
|
||||
}
|
||||
|
||||
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter);
|
||||
|
||||
public GunnerConscript(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
|
||||
|
||||
|
|
@ -43,20 +54,15 @@ public final class GunnerConscript extends CardImpl {
|
|||
this.addAbility(TrampleAbility.getInstance());
|
||||
|
||||
// Gunner Conscript gets +1/+1 for each Aura and Equipment attached to it.
|
||||
DynamicValue totalAmount = new AdditiveDynamicValue(new AuraAttachedCount(), new EquipmentAttachedCount());
|
||||
this.addAbility(new SimpleStaticAbility(
|
||||
new BoostSourceEffect(totalAmount, totalAmount, Duration.WhileOnBattlefield)
|
||||
.setText("{this} gets +1/+1 for each Aura and Equipment attached to it")));
|
||||
this.addAbility(new SimpleStaticAbility(new BoostSourceEffect(xValue, xValue, Duration.WhileOnBattlefield)));
|
||||
|
||||
// When Gunner Conscript dies, if it was enchanted, create a Junk token.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new DiesSourceTriggeredAbility(new CreateTokenEffect(new JunkToken())), GunnerConscriptEnchantedCondition.instance,
|
||||
"When Gunner Conscript dies, if it was enchanted, create a Junk token."));
|
||||
this.addAbility(new DiesSourceTriggeredAbility(new CreateTokenEffect(new JunkToken()))
|
||||
.withInterveningIf(GunnerConscriptEnchantedCondition.instance));
|
||||
|
||||
// When Gunner Conscript dies, if it was equipped, create a Junk token.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new DiesSourceTriggeredAbility(new CreateTokenEffect(new JunkToken())), GunnerConscriptEquippedCondition.instance,
|
||||
"When Gunner Conscript dies, if it was equipped, create a Junk token."));
|
||||
this.addAbility(new DiesSourceTriggeredAbility(new CreateTokenEffect(new JunkToken()))
|
||||
.withInterveningIf(GunnerConscriptEquippedCondition.instance));
|
||||
}
|
||||
|
||||
private GunnerConscript(final GunnerConscript card) {
|
||||
|
|
@ -84,6 +90,11 @@ enum GunnerConscriptEnchantedCondition implements Condition {
|
|||
.filter(Objects::nonNull)
|
||||
.anyMatch(permanent -> permanent.isEnchantment(game));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "it was enchanted";
|
||||
}
|
||||
}
|
||||
|
||||
enum GunnerConscriptEquippedCondition implements Condition {
|
||||
|
|
@ -98,4 +109,9 @@ enum GunnerConscriptEquippedCondition implements Condition {
|
|||
.filter(Objects::nonNull)
|
||||
.anyMatch(attachment -> attachment.hasSubtype(SubType.EQUIPMENT, game));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "it was equipped";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
package mage.cards.g;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.common.RaidCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.LookLibraryAndPickControllerEffect;
|
||||
import mage.abilities.hint.common.RaidHint;
|
||||
import mage.abilities.keyword.DeathtouchAbility;
|
||||
|
|
@ -19,14 +17,13 @@ import mage.watchers.common.PlayerAttackedWatcher;
|
|||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author ciaccona007
|
||||
*/
|
||||
public final class GutlessPlunderer extends CardImpl {
|
||||
|
||||
public GutlessPlunderer(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}");
|
||||
|
||||
|
||||
this.subtype.add(SubType.SKELETON);
|
||||
this.subtype.add(SubType.PIRATE);
|
||||
this.power = new MageInt(2);
|
||||
|
|
@ -36,17 +33,9 @@ public final class GutlessPlunderer extends CardImpl {
|
|||
this.addAbility(DeathtouchAbility.getInstance());
|
||||
|
||||
// Raid -- When this creature enters, if you attacked this turn, look at the top three cards of your library. You may put one of those cards back on top of your library. Put the rest into your graveyard.
|
||||
Ability ability = new ConditionalInterveningIfTriggeredAbility(new EntersBattlefieldTriggeredAbility(
|
||||
new LookLibraryAndPickControllerEffect(
|
||||
3, 1, PutCards.TOP_ANY, PutCards.GRAVEYARD, true
|
||||
)
|
||||
), RaidCondition.instance, "When this creature enters, if you attacked this turn, "
|
||||
+ "look at the top three cards of your library. You may "
|
||||
+ "put one of those cards back on top of your library. Put the rest into your graveyard."
|
||||
);
|
||||
ability.setAbilityWord(AbilityWord.RAID);
|
||||
ability.addHint(RaidHint.instance);
|
||||
this.addAbility(ability, new PlayerAttackedWatcher());
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new LookLibraryAndPickControllerEffect(
|
||||
3, 1, PutCards.TOP_ANY, PutCards.GRAVEYARD, true
|
||||
)).withInterveningIf(RaidCondition.instance).setAbilityWord(AbilityWord.RAID).addHint(RaidHint.instance), new PlayerAttackedWatcher());
|
||||
}
|
||||
|
||||
private GutlessPlunderer(final GutlessPlunderer card) {
|
||||
|
|
|
|||
|
|
@ -3,8 +3,8 @@ package mage.cards.g;
|
|||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -13,7 +13,7 @@ import mage.constants.CardType;
|
|||
import mage.constants.ComparisonType;
|
||||
import mage.constants.SubType;
|
||||
import mage.counters.CounterType;
|
||||
import mage.filter.common.FilterLandPermanent;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.game.permanent.token.KithkinSoldierToken;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
|
|
@ -24,16 +24,14 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class GwyllionHedgeMage extends CardImpl {
|
||||
|
||||
private static final FilterLandPermanent filter = new FilterLandPermanent("Plains");
|
||||
private static final FilterLandPermanent filter2 = new FilterLandPermanent("Swamps");
|
||||
|
||||
static {
|
||||
filter.add(SubType.PLAINS.getPredicate());
|
||||
filter2.add(SubType.SWAMP.getPredicate());
|
||||
}
|
||||
|
||||
private static final String rule1 = "When {this} enters, if you control two or more Plains, you may create a 1/1 white Kithkin Soldier creature token.";
|
||||
private static final String rule2 = "When {this} enters, if you control two or more Swamps, you may put a -1/-1 counter on target creature.";
|
||||
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(
|
||||
new FilterControlledPermanent(SubType.PLAINS, "you control two or more Plains"),
|
||||
ComparisonType.MORE_THAN, 1
|
||||
);
|
||||
private static final Condition condition2 = new PermanentsOnTheBattlefieldCondition(
|
||||
new FilterControlledPermanent(SubType.SWAMP, "you control two or more Swamps"),
|
||||
ComparisonType.MORE_THAN, 1
|
||||
);
|
||||
|
||||
public GwyllionHedgeMage(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W/B}");
|
||||
|
|
@ -44,16 +42,12 @@ public final class GwyllionHedgeMage extends CardImpl {
|
|||
this.toughness = new MageInt(2);
|
||||
|
||||
// When Gwyllion Hedge-Mage enters the battlefield, if you control two or more Plains, you may create a 1/1 white Kithkin Soldier creature token.
|
||||
Ability ability = new ConditionalInterveningIfTriggeredAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new KithkinSoldierToken()), true), new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.MORE_THAN, 1), rule1);
|
||||
this.addAbility(ability);
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new KithkinSoldierToken()), true).withInterveningIf(condition));
|
||||
|
||||
// When Gwyllion Hedge-Mage enters the battlefield, if you control two or more Swamps, you may put a -1/-1 counter on target creature.
|
||||
Ability ability2 = new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldTriggeredAbility(new AddCountersTargetEffect(CounterType.M1M1.createInstance()), true),
|
||||
new PermanentsOnTheBattlefieldCondition(filter2, ComparisonType.MORE_THAN, 1),
|
||||
rule2);
|
||||
ability2.addTarget(new TargetCreaturePermanent());
|
||||
this.addAbility(ability2);
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(new AddCountersTargetEffect(CounterType.M1M1.createInstance()), true).withInterveningIf(condition2);
|
||||
ability.addTarget(new TargetCreaturePermanent());
|
||||
this.addAbility(ability);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,8 @@
|
|||
package mage.cards.i;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import mage.Mana;
|
||||
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
|
||||
import mage.abilities.hint.Hint;
|
||||
import mage.abilities.hint.ValueHint;
|
||||
import mage.abilities.hint.common.CreaturesYouControlHint;
|
||||
import mage.abilities.mana.DynamicManaAbility;
|
||||
import mage.abilities.mana.GreenManaAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -14,19 +11,16 @@ import mage.constants.CardType;
|
|||
import mage.constants.SuperType;
|
||||
import mage.filter.StaticFilters;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author JRHerlehy
|
||||
*/
|
||||
public final class ItlimocCradleOfTheSun extends CardImpl {
|
||||
|
||||
private static final Hint hint = new ValueHint(
|
||||
"Number of creatures you control", new PermanentsOnBattlefieldCount(StaticFilters.FILTER_PERMANENT_CREATURE_CONTROLLED)
|
||||
);
|
||||
|
||||
public ItlimocCradleOfTheSun(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
|
||||
|
||||
|
||||
this.supertype.add(SuperType.LEGENDARY);
|
||||
|
||||
// (Transforms from Growing Rites of Itlimoc.)/
|
||||
|
|
@ -36,7 +30,7 @@ public final class ItlimocCradleOfTheSun extends CardImpl {
|
|||
this.addAbility(new GreenManaAbility());
|
||||
|
||||
// {T}: Add {G} for each creature you control.
|
||||
this.addAbility(new DynamicManaAbility(Mana.GreenMana(1), new PermanentsOnBattlefieldCount(StaticFilters.FILTER_PERMANENT_CREATURE_CONTROLLED)).addHint(hint));
|
||||
this.addAbility(new DynamicManaAbility(Mana.GreenMana(1), new PermanentsOnBattlefieldCount(StaticFilters.FILTER_PERMANENT_CREATURE_CONTROLLED)).addHint(CreaturesYouControlHint.instance));
|
||||
}
|
||||
|
||||
private ItlimocCradleOfTheSun(final ItlimocCradleOfTheSun card) {
|
||||
|
|
|
|||
|
|
@ -1,18 +1,17 @@
|
|||
|
||||
package mage.cards.n;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.ObjectColor;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SanctuaryInterveningIfTriggeredAbility;
|
||||
import mage.abilities.common.SanctuaryTriggeredAbility;
|
||||
import mage.abilities.effects.common.LoseLifeTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.target.TargetPlayer;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class NecraSanctuary extends CardImpl {
|
||||
|
|
@ -21,10 +20,9 @@ public final class NecraSanctuary extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{B}");
|
||||
|
||||
// At the beginning of your upkeep, if you control a green or white permanent, target player loses 1 life. If you control a green permanent and a white permanent, that player loses 3 life instead.
|
||||
Ability ability = new SanctuaryInterveningIfTriggeredAbility(
|
||||
Ability ability = new SanctuaryTriggeredAbility(
|
||||
new LoseLifeTargetEffect(1), new LoseLifeTargetEffect(3), ObjectColor.GREEN, ObjectColor.WHITE,
|
||||
"At the beginning of your upkeep, if you control a green or white permanent, "
|
||||
+ "target player loses 1 life. If you control a green permanent and a white permanent, that player loses 3 life instead."
|
||||
"target player loses 1 life. If you control a green permanent and a white permanent, that player loses 3 life instead."
|
||||
);
|
||||
ability.addTarget(new TargetPlayer());
|
||||
this.addAbility(ability);
|
||||
|
|
|
|||
|
|
@ -1,18 +1,17 @@
|
|||
|
||||
package mage.cards.r;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.ObjectColor;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SanctuaryInterveningIfTriggeredAbility;
|
||||
import mage.abilities.common.SanctuaryTriggeredAbility;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class RakaSanctuary extends CardImpl {
|
||||
|
|
@ -21,10 +20,10 @@ public final class RakaSanctuary extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{R}");
|
||||
|
||||
// At the beginning of your upkeep, if you control a white or blue permanent, Raka Sanctuary deals 1 damage to target creature. If you control a white permanent and a blue permanent, Raka Sanctuary deals 3 damage to that creature instead.
|
||||
Ability ability = new SanctuaryInterveningIfTriggeredAbility(
|
||||
new DamageTargetEffect(1), new DamageTargetEffect(3), ObjectColor.WHITE, ObjectColor.BLUE,
|
||||
"At the beginning of your upkeep, if you control a white or blue permanent, Raka Sanctuary deals 1 damage to target creature. "
|
||||
+ "If you control a white permanent and a blue permanent, Raka Sanctuary deals 3 damage to that creature instead."
|
||||
Ability ability = new SanctuaryTriggeredAbility(
|
||||
new DamageTargetEffect(1), new DamageTargetEffect(3),
|
||||
ObjectColor.WHITE, ObjectColor.BLUE, "{this} deals 1 damage to target creature. " +
|
||||
"If you control a white permanent and a blue permanent, {this} deals 3 damage to that creature instead."
|
||||
);
|
||||
ability.addTarget(new TargetCreaturePermanent());
|
||||
this.addAbility(ability);
|
||||
|
|
|
|||
|
|
@ -1,14 +1,10 @@
|
|||
|
||||
package mage.abilities.common;
|
||||
|
||||
import mage.ObjectColor;
|
||||
import mage.abilities.TriggeredAbility;
|
||||
import mage.abilities.condition.CompoundCondition;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.InvertCondition;
|
||||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
||||
import mage.abilities.decorator.ConditionalOneShotEffect;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.filter.FilterPermanent;
|
||||
|
|
@ -18,10 +14,10 @@ import mage.filter.predicate.mageobject.ColorPredicate;
|
|||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public class SanctuaryInterveningIfTriggeredAbility extends ConditionalInterveningIfTriggeredAbility {
|
||||
public class SanctuaryTriggeredAbility extends BeginningOfUpkeepTriggeredAbility {
|
||||
|
||||
private static Condition makeOrCondition(ObjectColor color1, ObjectColor color2) {
|
||||
FilterPermanent filter = new FilterPermanent();
|
||||
FilterPermanent filter = new FilterPermanent("you control a " + color1.getDescription() + " or " + color2.getDescription() + " permanent");
|
||||
filter.add(Predicates.or(
|
||||
new ColorPredicate(color1),
|
||||
new ColorPredicate(color2)
|
||||
|
|
@ -39,24 +35,17 @@ public class SanctuaryInterveningIfTriggeredAbility extends ConditionalInterveni
|
|||
return new CompoundCondition(condition1, condition2);
|
||||
}
|
||||
|
||||
private static TriggeredAbility makeTrigger(OneShotEffect effect1, OneShotEffect effect2, ObjectColor color1, ObjectColor color2) {
|
||||
TriggeredAbility ability = new BeginningOfUpkeepTriggeredAbility(
|
||||
new ConditionalOneShotEffect(effect1, new InvertCondition(makeAndCondition(color1, color2)))
|
||||
);
|
||||
ability.addEffect(new ConditionalOneShotEffect(effect2, makeAndCondition(color1, color2)));
|
||||
return ability;
|
||||
public SanctuaryTriggeredAbility(OneShotEffect effect1, OneShotEffect effect2, ObjectColor color1, ObjectColor color2, String text) {
|
||||
super(new ConditionalOneShotEffect(effect2, effect1, makeAndCondition(color1, color2), text));
|
||||
this.withInterveningIf(makeOrCondition(color1, color2));
|
||||
}
|
||||
|
||||
public SanctuaryInterveningIfTriggeredAbility(OneShotEffect effect1, OneShotEffect effect2, ObjectColor color1, ObjectColor color2, String text) {
|
||||
super(makeTrigger(effect1, effect2, color1, color2), makeOrCondition(color1, color2), text);
|
||||
}
|
||||
|
||||
protected SanctuaryInterveningIfTriggeredAbility(final SanctuaryInterveningIfTriggeredAbility ability) {
|
||||
protected SanctuaryTriggeredAbility(final SanctuaryTriggeredAbility ability) {
|
||||
super(ability);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SanctuaryInterveningIfTriggeredAbility copy() {
|
||||
return new SanctuaryInterveningIfTriggeredAbility(this);
|
||||
public SanctuaryTriggeredAbility copy() {
|
||||
return new SanctuaryTriggeredAbility(this);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,28 +1,24 @@
|
|||
|
||||
package mage.abilities.condition.common;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.game.Game;
|
||||
import mage.watchers.WatcherUtils;
|
||||
import mage.watchers.common.PlayerLostLifeWatcher;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX
|
||||
*/
|
||||
public enum LiveLostLastTurnCondition implements Condition {
|
||||
|
||||
instance;
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
PlayerLostLifeWatcher watcher = game.getState().getWatcher(PlayerLostLifeWatcher.class);
|
||||
if (watcher != null) {
|
||||
return watcher.getLifeLostLastTurn(source.getControllerId()) > 0;
|
||||
} else {
|
||||
WatcherUtils.logMissingWatcher(game, source, PlayerLostLifeWatcher.class, this.getClass());
|
||||
}
|
||||
return false;
|
||||
return watcher != null && watcher.getLifeLostLastTurn(source.getControllerId()) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "you lost life last turn";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.abilities.condition.common;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
|
|
@ -11,8 +10,7 @@ import mage.game.Game;
|
|||
* @author LevelX2
|
||||
*/
|
||||
public enum TributeNotPaidCondition implements Condition {
|
||||
|
||||
instance;
|
||||
instance;
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
|
|
@ -22,4 +20,9 @@ public enum TributeNotPaidCondition implements Condition {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "tribute wasn't paid";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ public class MeldEffect extends OneShotEffect {
|
|||
this.meldWithName = meldWithName;
|
||||
this.meldIntoName = meldIntoName;
|
||||
this.attacking = attacking;
|
||||
this.staticText = "exile them, then meld them into " + meldWithName;
|
||||
}
|
||||
|
||||
protected MeldEffect(final MeldEffect effect) {
|
||||
|
|
|
|||
|
|
@ -291,4 +291,9 @@ enum MadnessCondition implements Condition {
|
|||
|
||||
return ((Spell) madnessSpell).getSpellAbility().getSpellAbilityCastMode() == SpellAbilityCastMode.MADNESS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "its madness cost was paid";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ import mage.abilities.costs.VariableCostType;
|
|||
import mage.abilities.costs.mana.ManaCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.costs.mana.VariableManaCost;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.ContinuousEffect;
|
||||
import mage.abilities.effects.ContinuousEffectImpl;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
|
|
@ -147,7 +146,7 @@ public class SuspendAbility extends SpecialAction {
|
|||
if (card.getManaCost().isEmpty()) {
|
||||
setRuleAtTheTop(true);
|
||||
}
|
||||
addSubAbility(new SuspendBeginningOfUpkeepInterveningIfTriggeredAbility());
|
||||
addSubAbility(new SuspendUpkeepAbility());
|
||||
addSubAbility(new SuspendPlayCardAbility());
|
||||
} else {
|
||||
ruleText = "Suspend";
|
||||
|
|
@ -188,8 +187,7 @@ public class SuspendAbility extends SpecialAction {
|
|||
ability.setControllerId(card.getOwnerId());
|
||||
game.getState().addOtherAbility(card, ability);
|
||||
|
||||
SuspendBeginningOfUpkeepInterveningIfTriggeredAbility ability1
|
||||
= new SuspendBeginningOfUpkeepInterveningIfTriggeredAbility();
|
||||
SuspendUpkeepAbility ability1 = new SuspendUpkeepAbility();
|
||||
ability1.setSourceId(card.getId());
|
||||
ability1.setControllerId(card.getOwnerId());
|
||||
game.getState().addOtherAbility(card, ability1);
|
||||
|
|
@ -434,23 +432,20 @@ class GainHasteEffect extends ContinuousEffectImpl {
|
|||
|
||||
}
|
||||
|
||||
class SuspendBeginningOfUpkeepInterveningIfTriggeredAbility extends ConditionalInterveningIfTriggeredAbility {
|
||||
class SuspendUpkeepAbility extends BeginningOfUpkeepTriggeredAbility {
|
||||
|
||||
SuspendBeginningOfUpkeepInterveningIfTriggeredAbility() {
|
||||
super(new BeginningOfUpkeepTriggeredAbility(Zone.EXILED, TargetController.YOU, new RemoveCounterSourceEffect(CounterType.TIME.createInstance()),
|
||||
false),
|
||||
SuspendedCondition.instance,
|
||||
"At the beginning of your upkeep, if {this} is suspended, remove a time counter from it.");
|
||||
SuspendUpkeepAbility() {
|
||||
super(Zone.EXILED, TargetController.YOU, new RemoveCounterSourceEffect(CounterType.TIME.createInstance()).setText("remove a time counter from it"), false);
|
||||
this.withInterveningIf(SuspendedCondition.instance);
|
||||
this.setRuleVisible(false);
|
||||
|
||||
}
|
||||
|
||||
private SuspendBeginningOfUpkeepInterveningIfTriggeredAbility(final SuspendBeginningOfUpkeepInterveningIfTriggeredAbility effect) {
|
||||
private SuspendUpkeepAbility(final SuspendUpkeepAbility effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SuspendBeginningOfUpkeepInterveningIfTriggeredAbility copy() {
|
||||
return new SuspendBeginningOfUpkeepInterveningIfTriggeredAbility(this);
|
||||
public SuspendUpkeepAbility copy() {
|
||||
return new SuspendUpkeepAbility(this);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,20 +0,0 @@
|
|||
|
||||
package mage.watchers;
|
||||
|
||||
import mage.MageObject;
|
||||
import mage.abilities.Ability;
|
||||
import mage.game.Game;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public final class WatcherUtils {
|
||||
|
||||
public static void logMissingWatcher(Game game, Ability source, Class watcherClass, Class usingClass) {
|
||||
MageObject sourceObject = source.getSourceObject(game);
|
||||
Logger.getLogger(usingClass).error("Needed watcher is not started " + watcherClass.getSimpleName()
|
||||
+ " - " + (sourceObject == null ? " no source object" : sourceObject.getName()));
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue