mirror of
https://github.com/magefree/mage.git
synced 2025-12-21 11:02:00 -08:00
GainAbilityControlledEffect now requires a filter to prevent mistakes in implementation
This commit is contained in:
parent
ac0f23410a
commit
af527810ac
19 changed files with 126 additions and 109 deletions
|
|
@ -1,7 +1,6 @@
|
|||
package mage.cards.b;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.condition.common.MyTurnCondition;
|
||||
|
|
@ -14,6 +13,7 @@ import mage.abilities.keyword.ClassLevelAbility;
|
|||
import mage.abilities.keyword.ClassReminderAbility;
|
||||
import mage.abilities.keyword.DoubleStrikeAbility;
|
||||
import mage.abilities.keyword.HasteAbility;
|
||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
|
|
@ -74,7 +74,7 @@ public final class BlacksmithsTalent extends CardImpl {
|
|||
DoubleStrikeAbility.getInstance(), Duration.WhileOnBattlefield, filter2
|
||||
), MyTurnCondition.instance, "during your turn, equipped creatures you control have double strike"));
|
||||
ability.addEffect(new ConditionalContinuousEffect(new GainAbilityControlledEffect(
|
||||
HasteAbility.getInstance(), Duration.WhileOnBattlefield
|
||||
HasteAbility.getInstance(), Duration.WhileOnBattlefield, filter2
|
||||
), MyTurnCondition.instance, "and haste"));
|
||||
this.addAbility(new SimpleStaticAbility(new GainClassAbilitySourceEffect(ability, 3)));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ package mage.cards.b;
|
|||
|
||||
import mage.abilities.Mode;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
|
||||
import mage.abilities.keyword.DoubleStrikeAbility;
|
||||
|
|
@ -11,6 +10,7 @@ import mage.cards.CardImpl;
|
|||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
import mage.target.common.TargetPlayerOrPlaneswalker;
|
||||
|
||||
|
|
@ -27,10 +27,12 @@ public final class BorosCharm extends CardImpl {
|
|||
//Choose one - Boros Charm deals 4 damage to target player
|
||||
this.getSpellAbility().addEffect(new DamageTargetEffect(4));
|
||||
this.getSpellAbility().addTarget(new TargetPlayerOrPlaneswalker());
|
||||
|
||||
//or permanents you control are indestructible this turn
|
||||
this.getSpellAbility().addMode(new Mode(new GainAbilityControlledEffect(
|
||||
IndestructibleAbility.getInstance(), Duration.EndOfTurn
|
||||
IndestructibleAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENTS
|
||||
)));
|
||||
|
||||
//or target creature gains double strike until end of turn.
|
||||
Mode mode2 = new Mode(new GainAbilityTargetEffect(DoubleStrikeAbility.getInstance(), Duration.EndOfTurn));
|
||||
mode2.addTarget(new TargetCreaturePermanent());
|
||||
|
|
|
|||
|
|
@ -16,6 +16,9 @@ import mage.constants.CardType;
|
|||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.counters.CounterType;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.filter.predicate.permanent.CounterAnyPredicate;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
|
@ -25,6 +28,12 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class BulwarkOx extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterCreaturePermanent();
|
||||
|
||||
static {
|
||||
filter.add(CounterAnyPredicate.instance);
|
||||
}
|
||||
|
||||
public BulwarkOx(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}");
|
||||
|
||||
|
|
@ -40,10 +49,10 @@ public final class BulwarkOx extends CardImpl {
|
|||
|
||||
// Sacrifice this creature: Creatures you control with counters on them gain hexproof and indestructible until end of turn.
|
||||
ability = new SimpleActivatedAbility(new GainAbilityControlledEffect(
|
||||
HexproofAbility.getInstance(), Duration.EndOfTurn
|
||||
HexproofAbility.getInstance(), Duration.EndOfTurn, filter
|
||||
).setText("creatures you control with counters on them gain hexproof"), new SacrificeSourceCost());
|
||||
ability.addEffect(new GainAbilityControlledEffect(
|
||||
IndestructibleAbility.getInstance(), Duration.EndOfTurn
|
||||
IndestructibleAbility.getInstance(), Duration.EndOfTurn, filter
|
||||
).setText("and indestructible until end of turn"));
|
||||
this.addAbility(ability);
|
||||
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ import mage.cards.CardSetInfo;
|
|||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.StaticFilters;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -35,7 +36,7 @@ public final class DawngladeRegent extends CardImpl {
|
|||
// As long as you're the monarch, permanents you control have hexproof.
|
||||
this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(
|
||||
new GainAbilityControlledEffect(
|
||||
HexproofAbility.getInstance(), Duration.WhileOnBattlefield
|
||||
HexproofAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENTS
|
||||
), MonarchIsSourceControllerCondition.instance,
|
||||
"as long as you're the monarch, permanents you control have hexproof"
|
||||
)));
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ import mage.cards.CardSetInfo;
|
|||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.GiftType;
|
||||
import mage.filter.StaticFilters;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -32,11 +33,12 @@ public final class DawnsTruce extends CardImpl {
|
|||
HexproofAbility.getInstance(), Duration.EndOfTurn
|
||||
).setText("you"));
|
||||
this.getSpellAbility().addEffect(new GainAbilityControlledEffect(
|
||||
HexproofAbility.getInstance(), Duration.EndOfTurn
|
||||
HexproofAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENTS
|
||||
).concatBy("and"));
|
||||
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
|
||||
new AddContinuousEffectToGame(new GainAbilityControlledEffect(
|
||||
IndestructibleAbility.getInstance(), Duration.EndOfTurn
|
||||
IndestructibleAbility.getInstance(), Duration.EndOfTurn,
|
||||
StaticFilters.FILTER_PERMANENTS
|
||||
)), GiftWasPromisedCondition.TRUE, "if the gift was promised, " +
|
||||
"permanents you control also gain indestructible until end of turn"
|
||||
));
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
|
||||
package mage.cards.d;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.TriggeredAbility;
|
||||
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||
|
|
@ -17,8 +15,9 @@ import mage.constants.Duration;
|
|||
import mage.constants.SpellAbilityType;
|
||||
import mage.filter.StaticFilters;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public final class DrivenDespair extends SplitCard {
|
||||
|
|
@ -27,26 +26,27 @@ public final class DrivenDespair extends SplitCard {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, new CardType[]{CardType.SORCERY}, "{1}{G}", "{1}{B}", SpellAbilityType.SPLIT_AFTERMATH);
|
||||
|
||||
// Until end of turn, creatures you control gain trample and "Whenever this creature deals combat damage to a player, draw a card."
|
||||
getLeftHalfCard().getSpellAbility().addEffect(new GainAbilityControlledEffect(
|
||||
TrampleAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES)
|
||||
.setText("Until end of turn, creatures you control gain trample"));
|
||||
TriggeredAbility ability = new DealsCombatDamageToAPlayerTriggeredAbility(new DrawCardSourceControllerEffect(1), false);
|
||||
getLeftHalfCard().getSpellAbility().addEffect(new GainAbilityControlledEffect(ability, Duration.EndOfTurn)
|
||||
.setText("\"Whenever this creature deals combat damage to a player, draw a card.\"")
|
||||
.concatBy("and"));
|
||||
this.getLeftHalfCard().getSpellAbility().addEffect(new GainAbilityControlledEffect(
|
||||
TrampleAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES
|
||||
).setText("Until end of turn, creatures you control gain trample"));
|
||||
this.getLeftHalfCard().getSpellAbility().addEffect(new GainAbilityControlledEffect(
|
||||
new DealsCombatDamageToAPlayerTriggeredAbility(new DrawCardSourceControllerEffect(1), false),
|
||||
Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES
|
||||
).setText("\"Whenever this creature deals combat damage to a player, draw a card.\"").concatBy("and"));
|
||||
|
||||
// Despair {1}{B}
|
||||
// Sorcery
|
||||
// Aftermath
|
||||
getRightHalfCard().addAbility(new AftermathAbility().setRuleAtTheTop(true));
|
||||
this.getRightHalfCard().addAbility(new AftermathAbility().setRuleAtTheTop(true));
|
||||
// Until end of turn, creatures you control gain menace and "Whenever this creature deals combat damage to a player, that player discards a card."
|
||||
getRightHalfCard().getSpellAbility().addEffect(new GainAbilityControlledEffect(
|
||||
new MenaceAbility(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES)
|
||||
.setText("Until end of turn, creatures you control gain menace"));
|
||||
ability = new DealsCombatDamageToAPlayerTriggeredAbility(new DiscardTargetEffect(1), false, true);
|
||||
getRightHalfCard().getSpellAbility().addEffect(new GainAbilityControlledEffect(ability, Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURES)
|
||||
.setText("\"Whenever this creature deals combat damage to a player, that player discards a card.\"")
|
||||
.concatBy("and"));
|
||||
this.getRightHalfCard().getSpellAbility().addEffect(new GainAbilityControlledEffect(
|
||||
new MenaceAbility(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES
|
||||
).setText("Until end of turn, creatures you control gain menace"));
|
||||
this.getRightHalfCard().getSpellAbility().addEffect(new GainAbilityControlledEffect(
|
||||
new DealsCombatDamageToAPlayerTriggeredAbility(
|
||||
new DiscardTargetEffect(1), false, true
|
||||
), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES
|
||||
).setText("\"Whenever this creature deals combat damage to a player, that player discards a card.\"").concatBy("and"));
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
|
||||
package mage.cards.f;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageObject;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.condition.common.FatefulHourCondition;
|
||||
|
|
@ -17,13 +16,15 @@ import mage.constants.CardType;
|
|||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.filter.FilterCard;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.predicate.mageobject.ColorPredicate;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
import mage.target.common.TargetControlledPermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author BetaSteward
|
||||
*/
|
||||
public final class FaithsShield extends CardImpl {
|
||||
|
|
@ -63,30 +64,26 @@ class FaithsShieldEffect extends OneShotEffect {
|
|||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
MageObject mageObject = game.getObject(source);
|
||||
if (controller != null && mageObject != null) {
|
||||
if (FatefulHourCondition.instance.apply(game, source)) {
|
||||
ChoiceColor choice = new ChoiceColor();
|
||||
if (!controller.choose(Outcome.Protect, choice, game)) {
|
||||
if (controller == null || mageObject == null) {
|
||||
return false;
|
||||
}
|
||||
if (!FatefulHourCondition.instance.apply(game, source)) {
|
||||
game.addEffect(new GainProtectionFromColorTargetEffect(Duration.EndOfTurn), source);
|
||||
return true;
|
||||
}
|
||||
ChoiceColor choice = new ChoiceColor();
|
||||
if (!controller.choose(Outcome.Protect, choice, game) || choice.getColor() == null) {
|
||||
return false;
|
||||
}
|
||||
if (choice.getColor() != null) {
|
||||
game.informPlayers(mageObject.getLogName() + ": " + controller.getLogName() + " has chosen " + choice.getChoice());
|
||||
FilterCard filter = new FilterCard();
|
||||
filter.add(new ColorPredicate(choice.getColor()));
|
||||
filter.setMessage(choice.getChoice());
|
||||
Ability ability = new ProtectionAbility(filter);
|
||||
game.addEffect(new GainAbilityControlledEffect(ability, Duration.EndOfTurn), source);
|
||||
game.addEffect(new GainAbilityControlledEffect(ability, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT), source);
|
||||
game.addEffect(new GainAbilityControllerEffect(ability, Duration.EndOfTurn), source);
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
game.addEffect(new GainProtectionFromColorTargetEffect(Duration.EndOfTurn), source);
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FaithsShieldEffect copy() {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
package mage.cards.f;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
|
|
@ -10,22 +9,23 @@ import mage.cards.CardImpl;
|
|||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.target.common.TargetAnyTarget;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Loki
|
||||
*/
|
||||
public final class FlameFusillade extends CardImpl {
|
||||
|
||||
public FlameFusillade(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{R}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{R}");
|
||||
|
||||
// Until end of turn, permanents you control gain "{tap}: This permanent deals 1 damage to any target."
|
||||
Ability gainedAbility = new SimpleActivatedAbility(new DamageTargetEffect(1, "this permanent"), new TapSourceCost());
|
||||
gainedAbility.addTarget(new TargetAnyTarget());
|
||||
this.getSpellAbility().addEffect(new GainAbilityControlledEffect(gainedAbility, Duration.EndOfTurn).withDurationRuleAtStart(true));
|
||||
this.getSpellAbility().addEffect(new GainAbilityControlledEffect(gainedAbility, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENTS).withDurationRuleAtStart(true));
|
||||
}
|
||||
|
||||
private FlameFusillade(final FlameFusillade card) {
|
||||
|
|
|
|||
|
|
@ -2,12 +2,12 @@ package mage.cards.g;
|
|||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityControllerEffect;
|
||||
import mage.abilities.keyword.ProtectionAbility;
|
||||
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
|
|
@ -45,7 +45,7 @@ public final class GorMuldrakAmphinologist extends CardImpl {
|
|||
new GainAbilityControllerEffect(new ProtectionAbility(filter)).setText("you")
|
||||
);
|
||||
ability.addEffect(new GainAbilityControlledEffect(
|
||||
new ProtectionAbility(filter), Duration.WhileOnBattlefield
|
||||
new ProtectionAbility(filter), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENTS
|
||||
).concatBy("and"));
|
||||
this.addAbility(ability);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,17 +1,18 @@
|
|||
package mage.cards.l;
|
||||
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityControllerEffect;
|
||||
import mage.abilities.effects.keyword.AmassEffect;
|
||||
import mage.abilities.keyword.HexproofAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.StaticFilters;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityControllerEffect;
|
||||
import mage.constants.SubType;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
|
|
@ -29,7 +30,7 @@ public final class LazotepPlating extends CardImpl {
|
|||
HexproofAbility.getInstance(), Duration.EndOfTurn
|
||||
);
|
||||
Effect effect2 = new GainAbilityControlledEffect(
|
||||
HexproofAbility.getInstance(), Duration.EndOfTurn
|
||||
HexproofAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENTS
|
||||
);
|
||||
effect.setText("You");
|
||||
effect2.setText("and permanents you control gain hexproof until end of turn");
|
||||
|
|
|
|||
|
|
@ -35,9 +35,8 @@ public final class MishraTamerOfMakFawa extends CardImpl {
|
|||
|
||||
// Permanents you control have "Ward--Sacrifice a permanent."
|
||||
this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(
|
||||
new WardAbility(new SacrificeTargetCost(
|
||||
StaticFilters.FILTER_PERMANENT
|
||||
), false), Duration.WhileOnBattlefield
|
||||
new WardAbility(new SacrificeTargetCost(StaticFilters.FILTER_PERMANENT), false),
|
||||
Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENTS
|
||||
).withForceQuotes()));
|
||||
|
||||
// Each artifact card in your graveyard has unearth {1}{B}{R}
|
||||
|
|
|
|||
|
|
@ -1,40 +1,38 @@
|
|||
|
||||
package mage.cards.s;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Mode;
|
||||
import mage.abilities.effects.common.ReturnToHandTargetEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||
import mage.abilities.keyword.HexproofAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Plopman
|
||||
*/
|
||||
public final class SimicCharm extends CardImpl {
|
||||
|
||||
public SimicCharm (UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{G}{U}");
|
||||
public SimicCharm(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{G}{U}");
|
||||
|
||||
//Choose one - Target creature gets +3/+3 until end of turn
|
||||
this.getSpellAbility().addEffect(new BoostTargetEffect(3, 3, Duration.EndOfTurn));
|
||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||
|
||||
//permanents you control gain hexproof until end of turn
|
||||
Mode mode = new Mode(new GainAbilityControlledEffect(HexproofAbility.getInstance(), Duration.EndOfTurn));
|
||||
this.getSpellAbility().addMode(mode);
|
||||
this.getSpellAbility().addMode(new Mode(new GainAbilityControlledEffect(HexproofAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENTS)));
|
||||
|
||||
//return target creature to its owner's hand.
|
||||
Mode mode2 = new Mode(new ReturnToHandTargetEffect());
|
||||
mode2.addTarget(new TargetCreaturePermanent());
|
||||
this.getSpellAbility().addMode(mode2);
|
||||
|
||||
}
|
||||
|
||||
private SimicCharm(final SimicCharm card) {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
|
||||
package mage.cards.s;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
|
|
@ -13,18 +12,20 @@ import mage.abilities.keyword.TrampleAbility;
|
|||
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.constants.Zone;
|
||||
import mage.filter.StaticFilters;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public final class SoulOfNewPhyrexia extends CardImpl {
|
||||
|
||||
public SoulOfNewPhyrexia(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{6}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{6}");
|
||||
this.subtype.add(SubType.PHYREXIAN);
|
||||
this.subtype.add(SubType.AVATAR);
|
||||
|
||||
|
|
@ -33,10 +34,12 @@ public final class SoulOfNewPhyrexia extends CardImpl {
|
|||
|
||||
// Trample
|
||||
this.addAbility(TrampleAbility.getInstance());
|
||||
|
||||
// {5}: Permanents you control gain indestructible until end of turn.
|
||||
this.addAbility(new SimpleActivatedAbility(new GainAbilityControlledEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn), new GenericManaCost(5)));
|
||||
this.addAbility(new SimpleActivatedAbility(new GainAbilityControlledEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENTS), new GenericManaCost(5)));
|
||||
|
||||
// {5}, Exile Soul of New Phyrexia from your graveyard: Permanents you control gain indestructible until end of turn.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.GRAVEYARD, new GainAbilityControlledEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn), new GenericManaCost(5));
|
||||
Ability ability = new SimpleActivatedAbility(Zone.GRAVEYARD, new GainAbilityControlledEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENTS), new GenericManaCost(5));
|
||||
ability.addCost(new ExileSourceFromGraveCost());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,24 +1,23 @@
|
|||
package mage.cards.s;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import mage.MageObject;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.PreventionEffectImpl;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityControllerEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||
import mage.abilities.keyword.HexproofAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class SurgeOfSalvation extends CardImpl {
|
||||
|
|
@ -29,7 +28,11 @@ public final class SurgeOfSalvation extends CardImpl {
|
|||
// You and permanents you control gain hexproof until end of turn. Prevent all damage that black and/or red sources would deal to creatures you control this turn.
|
||||
this.getSpellAbility().addEffect(new GainAbilityControllerEffect(
|
||||
HexproofAbility.getInstance(), Duration.EndOfTurn
|
||||
).setText("you"));this.getSpellAbility().addEffect(new GainAbilityControlledEffect(HexproofAbility.getInstance(),Duration.EndOfTurn).concatBy("and"));this.getSpellAbility().addEffect(new SurgeOfSalvationEffect());
|
||||
).setText("you"));
|
||||
this.getSpellAbility().addEffect(new GainAbilityControlledEffect(
|
||||
HexproofAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENTS
|
||||
).concatBy("and"));
|
||||
this.getSpellAbility().addEffect(new SurgeOfSalvationEffect());
|
||||
}
|
||||
|
||||
private SurgeOfSalvation(final SurgeOfSalvation card) {
|
||||
|
|
@ -45,7 +48,7 @@ public final class SurgeOfSalvation extends CardImpl {
|
|||
class SurgeOfSalvationEffect extends PreventionEffectImpl {
|
||||
|
||||
SurgeOfSalvationEffect() {
|
||||
super(Duration.EndOfTurn,Integer.MAX_VALUE,false);
|
||||
super(Duration.EndOfTurn, Integer.MAX_VALUE, false);
|
||||
staticText = "Prevent all damage that black and/or red sources would deal to creatures you control this turn";
|
||||
}
|
||||
|
||||
|
|
@ -60,16 +63,16 @@ class SurgeOfSalvationEffect extends PreventionEffectImpl {
|
|||
|
||||
@Override
|
||||
public boolean checksEventType(GameEvent event, Game game) {
|
||||
return event.getType()== GameEvent.EventType.DAMAGE_PERMANENT;
|
||||
return event.getType() == GameEvent.EventType.DAMAGE_PERMANENT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applies(GameEvent event, Ability source, Game game) {
|
||||
if(! super.applies(event, source, game)){
|
||||
if (!super.applies(event, source, game)) {
|
||||
return false;
|
||||
}
|
||||
Permanent permanent=game.getPermanent(event.getTargetId());
|
||||
MageObject sourceObject=game.getObject(event.getSourceId());
|
||||
Permanent permanent = game.getPermanent(event.getTargetId());
|
||||
MageObject sourceObject = game.getObject(event.getSourceId());
|
||||
return permanent != null
|
||||
&& sourceObject != null
|
||||
&& permanent.isCreature(game)
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ import mage.cards.CardSetInfo;
|
|||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.Game;
|
||||
import mage.game.stack.Spell;
|
||||
|
||||
|
|
@ -29,7 +30,7 @@ public final class UltimateMagicHoly extends CardImpl {
|
|||
|
||||
// Permanents you control gain indestructible until end of turn. If this spell was cast from exile, prevent all damage that would be dealt to you this turn.
|
||||
this.getSpellAbility().addEffect(new GainAbilityControlledEffect(
|
||||
IndestructibleAbility.getInstance(), Duration.EndOfTurn
|
||||
IndestructibleAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENTS
|
||||
));
|
||||
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
|
||||
new AddContinuousEffectToGame(new PreventDamageToControllerEffect(Duration.EndOfTurn)),
|
||||
|
|
|
|||
|
|
@ -120,10 +120,12 @@ class VeilOfSummerEffect extends OneShotEffect {
|
|||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
game.addEffect(new GainAbilityControlledEffect(
|
||||
HexproofFromBlueAbility.getInstance(), Duration.EndOfTurn
|
||||
HexproofFromBlueAbility.getInstance(), Duration.EndOfTurn,
|
||||
StaticFilters.FILTER_PERMANENTS
|
||||
), source);
|
||||
game.addEffect(new GainAbilityControlledEffect(
|
||||
HexproofFromBlackAbility.getInstance(), Duration.EndOfTurn
|
||||
HexproofFromBlackAbility.getInstance(), Duration.EndOfTurn,
|
||||
StaticFilters.FILTER_PERMANENTS
|
||||
), source);
|
||||
game.addEffect(new GainAbilityControllerEffect(
|
||||
HexproofFromBlueAbility.getInstance(), Duration.EndOfTurn
|
||||
|
|
|
|||
|
|
@ -2,16 +2,19 @@ package mage.cards.w;
|
|||
|
||||
import mage.ApprovingObject;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||
import mage.abilities.keyword.WardAbility;
|
||||
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
|
|
@ -29,13 +32,12 @@ public final class WondrousCrucible extends CardImpl {
|
|||
|
||||
// Permanents you control have ward {2}.
|
||||
this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(
|
||||
new WardAbility(new GenericManaCost(2), false), Duration.WhileOnBattlefield
|
||||
new WardAbility(new GenericManaCost(2), false),
|
||||
Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENTS
|
||||
)));
|
||||
|
||||
// At the beginning of your end step, mill two cards, then exile a nonland card at random from your graveyard. Copy it. You may cast the copy without paying its mana cost.
|
||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(
|
||||
new WondrousCrucibleEffect()
|
||||
));
|
||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(new WondrousCrucibleEffect()));
|
||||
}
|
||||
|
||||
private WondrousCrucible(final WondrousCrucible card) {
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ import mage.cards.CardImpl;
|
|||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.predicate.permanent.TokenPredicate;
|
||||
|
||||
import java.util.UUID;
|
||||
|
|
@ -43,7 +44,8 @@ public final class ZurgoThundersDecree extends CardImpl {
|
|||
|
||||
// During your end step, Warrior tokens you control have "This token can't be sacrificed."
|
||||
this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(new GainAbilityControlledEffect(
|
||||
new SimpleStaticAbility(new CantBeSacrificedSourceEffect()), Duration.WhileOnBattlefield
|
||||
new SimpleStaticAbility(new CantBeSacrificedSourceEffect()),
|
||||
Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENTS
|
||||
), condition, "during your end step, Warrior tokens you control have \"This token can't be sacrificed.\"")));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import mage.constants.Layer;
|
|||
import mage.constants.Outcome;
|
||||
import mage.constants.SubLayer;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.util.CardUtil;
|
||||
|
|
@ -27,10 +26,6 @@ public class GainAbilityControlledEffect extends ContinuousEffectImpl {
|
|||
protected boolean forceQuotes = false;
|
||||
protected boolean durationRuleAtStart = false; // put duration rule to the start of the rules instead end
|
||||
|
||||
public GainAbilityControlledEffect(Ability ability, Duration duration) {
|
||||
this(ability, duration, StaticFilters.FILTER_PERMANENTS);
|
||||
}
|
||||
|
||||
public GainAbilityControlledEffect(Ability ability, Duration duration, FilterPermanent filter) {
|
||||
this(ability, duration, filter, false);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue