diff --git a/Mage.Sets/src/mage/cards/i/IanTheReckless.java b/Mage.Sets/src/mage/cards/i/IanTheReckless.java index f809522becf..659edde93e2 100644 --- a/Mage.Sets/src/mage/cards/i/IanTheReckless.java +++ b/Mage.Sets/src/mage/cards/i/IanTheReckless.java @@ -3,8 +3,7 @@ package mage.cards.i; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.AttacksTriggeredAbility; -import mage.abilities.condition.Condition; -import mage.abilities.condition.common.SourceMatchesFilterCondition; +import mage.abilities.condition.common.SourceModifiedCondition; import mage.abilities.dynamicvalue.common.SourcePermanentPowerValue; import mage.abilities.effects.common.DamageControllerEffect; import mage.abilities.effects.common.DamageTargetEffect; @@ -13,8 +12,6 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.SuperType; -import mage.filter.FilterPermanent; -import mage.filter.predicate.permanent.ModifiedPredicate; import mage.target.common.TargetAnyTarget; import java.util.UUID; @@ -24,14 +21,6 @@ import java.util.UUID; */ public final class IanTheReckless extends CardImpl { - private static final FilterPermanent filter = new FilterPermanent("it's modified"); - - static { - filter.add(ModifiedPredicate.instance); - } - - private static final Condition condition = new SourceMatchesFilterCondition(filter); - public IanTheReckless(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}"); @@ -42,8 +31,10 @@ public final class IanTheReckless extends CardImpl { this.toughness = new MageInt(1); // Whenever Ian the Reckless attacks, if it's modified, you may have it deal damage equal to its power to you and any target. - Ability ability = new AttacksTriggeredAbility(new DamageControllerEffect(SourcePermanentPowerValue.NOT_NEGATIVE) - .setText("have it deal damage equal to its power to you"), true).withInterveningIf(condition); + Ability ability = new AttacksTriggeredAbility( + new DamageControllerEffect(SourcePermanentPowerValue.NOT_NEGATIVE) + .setText("have it deal damage equal to its power to you"), true + ).withInterveningIf(SourceModifiedCondition.instance); ability.addEffect(new DamageTargetEffect(SourcePermanentPowerValue.NOT_NEGATIVE).setText("and any target")); ability.addTarget(new TargetAnyTarget()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/o/OrochiMergeKeeper.java b/Mage.Sets/src/mage/cards/o/OrochiMergeKeeper.java index 39b4429664f..b9af61a8062 100644 --- a/Mage.Sets/src/mage/cards/o/OrochiMergeKeeper.java +++ b/Mage.Sets/src/mage/cards/o/OrochiMergeKeeper.java @@ -3,8 +3,7 @@ package mage.cards.o; import mage.MageInt; import mage.Mana; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.Condition; -import mage.abilities.condition.common.SourceMatchesFilterCondition; +import mage.abilities.condition.common.SourceModifiedCondition; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; @@ -15,8 +14,6 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.FilterPermanent; -import mage.filter.predicate.permanent.ModifiedPredicate; import java.util.UUID; @@ -25,14 +22,6 @@ import java.util.UUID; */ public final class OrochiMergeKeeper extends CardImpl { - private static final FilterPermanent filter = new FilterPermanent(); - - static { - filter.add(ModifiedPredicate.instance); - } - - private static final Condition condition = new SourceMatchesFilterCondition(filter); - public OrochiMergeKeeper(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}"); @@ -48,7 +37,7 @@ public final class OrochiMergeKeeper extends CardImpl { this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( new GainAbilitySourceEffect(new SimpleManaAbility( Zone.BATTLEFIELD, Mana.GreenMana(2), new TapSourceCost() - )), condition, "as long as {this} is modified, it has \"{T}: Add {G}{G}.\"" + )), SourceModifiedCondition.instance, "as long as {this} is modified, it has \"{T}: Add {G}{G}.\"" ))); } diff --git a/Mage.Sets/src/mage/cards/s/SkywardSpider.java b/Mage.Sets/src/mage/cards/s/SkywardSpider.java new file mode 100644 index 00000000000..2edd517b03d --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/SkywardSpider.java @@ -0,0 +1,51 @@ +package mage.cards.s; + +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.SourceModifiedCondition; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.WardAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class SkywardSpider extends CardImpl { + + public SkywardSpider(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{W/U}{W/U}"); + + this.subtype.add(SubType.SPIDER); + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.HERO); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Ward {2} + this.addAbility(new WardAbility(new ManaCostsImpl<>("{2}"))); + + // This creature has flying as long as it's modified. + this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield), + SourceModifiedCondition.instance, "{this} has flying as long as it's modified" + ))); + } + + private SkywardSpider(final SkywardSpider card) { + super(card); + } + + @Override + public SkywardSpider copy() { + return new SkywardSpider(this); + } +} diff --git a/Mage.Sets/src/mage/sets/MarvelsSpiderMan.java b/Mage.Sets/src/mage/sets/MarvelsSpiderMan.java index 1cd121121e5..01a45203e19 100644 --- a/Mage.Sets/src/mage/sets/MarvelsSpiderMan.java +++ b/Mage.Sets/src/mage/sets/MarvelsSpiderMan.java @@ -126,6 +126,7 @@ public final class MarvelsSpiderMan extends ExpansionSet { cards.add(new SetCardInfo("Selfless Police Captain", 12, Rarity.COMMON, mage.cards.s.SelflessPoliceCaptain.class)); cards.add(new SetCardInfo("Shock", 88, Rarity.COMMON, mage.cards.s.Shock.class)); cards.add(new SetCardInfo("Shocker, Unshakable", 89, Rarity.UNCOMMON, mage.cards.s.ShockerUnshakable.class)); + cards.add(new SetCardInfo("Skyward Spider", 146, Rarity.COMMON, mage.cards.s.SkywardSpider.class)); cards.add(new SetCardInfo("Spectacular Spider-Man", 14, Rarity.RARE, mage.cards.s.SpectacularSpiderMan.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Spectacular Spider-Man", 235, Rarity.RARE, mage.cards.s.SpectacularSpiderMan.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Spectacular Spider-Man", 236, Rarity.RARE, mage.cards.s.SpectacularSpiderMan.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage/src/main/java/mage/abilities/condition/common/SourceModifiedCondition.java b/Mage/src/main/java/mage/abilities/condition/common/SourceModifiedCondition.java new file mode 100644 index 00000000000..e030d7052ea --- /dev/null +++ b/Mage/src/main/java/mage/abilities/condition/common/SourceModifiedCondition.java @@ -0,0 +1,28 @@ +package mage.abilities.condition.common; + +import mage.abilities.Ability; +import mage.abilities.condition.Condition; +import mage.filter.predicate.permanent.ModifiedPredicate; +import mage.game.Game; + +import java.util.Optional; + +/** + * @author TheElk801 + */ +public enum SourceModifiedCondition implements Condition { + instance; + + @Override + public boolean apply(Game game, Ability source) { + return Optional + .ofNullable(source.getSourcePermanentIfItStillExists(game)) + .filter(permanent -> ModifiedPredicate.instance.apply(permanent, game)) + .isPresent(); + } + + @Override + public String toString() { + return "it's modified"; + } +}