From 364b456ef65363212128a07847598a215f132284 Mon Sep 17 00:00:00 2001 From: Daniel Bomar Date: Mon, 5 Jul 2021 12:33:09 -0500 Subject: [PATCH] [AFR] Implemented Yuan-Ti Malison --- Mage.Sets/src/mage/cards/d/DreamProwler.java | 14 +++--- Mage.Sets/src/mage/cards/y/YuanTiMalison.java | 49 +++++++++++++++++++ .../sets/AdventuresInTheForgottenRealms.java | 1 + .../common/SourceAttackingAloneCondition.java | 24 +++++++++ 4 files changed, 80 insertions(+), 8 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/y/YuanTiMalison.java create mode 100644 Mage/src/main/java/mage/abilities/condition/common/SourceAttackingAloneCondition.java diff --git a/Mage.Sets/src/mage/cards/d/DreamProwler.java b/Mage.Sets/src/mage/cards/d/DreamProwler.java index d8268de3a8e..4e663bf0787 100644 --- a/Mage.Sets/src/mage/cards/d/DreamProwler.java +++ b/Mage.Sets/src/mage/cards/d/DreamProwler.java @@ -4,17 +4,13 @@ package mage.cards.d; import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; +import mage.abilities.condition.common.SourceAttackingAloneCondition; import mage.abilities.decorator.ConditionalRestrictionEffect; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.ComparisonType; -import mage.constants.Zone; -import mage.filter.common.FilterAttackingCreature; /** * @@ -29,9 +25,11 @@ public final class DreamProwler extends CardImpl { this.toughness = new MageInt(5); // Dream Prowler can't be blocked as long as it's attacking alone. - Effect effect = new ConditionalRestrictionEffect(new CantBeBlockedSourceEffect(), new PermanentsOnTheBattlefieldCondition(new FilterAttackingCreature(), ComparisonType.FEWER_THAN, 2)); - effect.setText("{this} can't be blocked as long as it's attacking alone"); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); + this.addAbility(new SimpleStaticAbility(new ConditionalRestrictionEffect( + new CantBeBlockedSourceEffect(), + SourceAttackingAloneCondition.instance, + "{this} can't be blocked as long as it's attacking alone" + ))); } private DreamProwler(final DreamProwler card) { diff --git a/Mage.Sets/src/mage/cards/y/YuanTiMalison.java b/Mage.Sets/src/mage/cards/y/YuanTiMalison.java new file mode 100644 index 00000000000..b146543c87f --- /dev/null +++ b/Mage.Sets/src/mage/cards/y/YuanTiMalison.java @@ -0,0 +1,49 @@ +package mage.cards.y; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.SourceAttackingAloneCondition; +import mage.abilities.decorator.ConditionalRestrictionEffect; +import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect; +import mage.abilities.effects.keyword.VentureIntoTheDungeonEffect; +import mage.constants.SubType; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; + +/** + * + * @author weirddan455 + */ +public final class YuanTiMalison extends CardImpl { + + public YuanTiMalison(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}"); + + this.subtype.add(SubType.SNAKE); + this.subtype.add(SubType.ROGUE); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // Yuan-Ti Malison can't be blocked as long as it's attacking alone. + this.addAbility(new SimpleStaticAbility(new ConditionalRestrictionEffect( + new CantBeBlockedSourceEffect(), + SourceAttackingAloneCondition.instance, + "{this} can't be blocked as long as it's attacking alone" + ))); + + // Whenever Yuan-Ti Malison deals combat damage to a player, venture into the dungeon. + this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new VentureIntoTheDungeonEffect(), false)); + } + + private YuanTiMalison(final YuanTiMalison card) { + super(card); + } + + @Override + public YuanTiMalison copy() { + return new YuanTiMalison(this); + } +} diff --git a/Mage.Sets/src/mage/sets/AdventuresInTheForgottenRealms.java b/Mage.Sets/src/mage/sets/AdventuresInTheForgottenRealms.java index 1bfa088637a..2d2d0b32ca7 100644 --- a/Mage.Sets/src/mage/sets/AdventuresInTheForgottenRealms.java +++ b/Mage.Sets/src/mage/sets/AdventuresInTheForgottenRealms.java @@ -159,6 +159,7 @@ public final class AdventuresInTheForgottenRealms extends ExpansionSet { cards.add(new SetCardInfo("You See a Pair of Goblins", 170, Rarity.UNCOMMON, mage.cards.y.YouSeeAPairOfGoblins.class)); cards.add(new SetCardInfo("You're Ambushed on the Road", 43, Rarity.COMMON, mage.cards.y.YoureAmbushedOnTheRoad.class)); cards.add(new SetCardInfo("Yuan-Ti Fang-Blade", 128, Rarity.COMMON, mage.cards.y.YuanTiFangBlade.class)); + cards.add(new SetCardInfo("Yuan-Ti Malison", 86, Rarity.RARE, mage.cards.y.YuanTiMalison.class)); cards.add(new SetCardInfo("Zalto, Fire Giant Duke", 171, Rarity.RARE, mage.cards.z.ZaltoFireGiantDuke.class)); cards.add(new SetCardInfo("Zombie Ogre", 129, Rarity.COMMON, mage.cards.z.ZombieOgre.class)); } diff --git a/Mage/src/main/java/mage/abilities/condition/common/SourceAttackingAloneCondition.java b/Mage/src/main/java/mage/abilities/condition/common/SourceAttackingAloneCondition.java new file mode 100644 index 00000000000..5e747aae046 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/condition/common/SourceAttackingAloneCondition.java @@ -0,0 +1,24 @@ +package mage.abilities.condition.common; + +import mage.abilities.Ability; +import mage.abilities.condition.Condition; +import mage.game.Game; + +/** + * + * @author weirddan455 + */ +public enum SourceAttackingAloneCondition implements Condition { + + instance; + + @Override + public boolean apply(Game game, Ability source) { + return game.getCombat().attacksAlone() && game.getCombat().getAttackers().get(0).equals(source.getSourceId()); + } + + @Override + public String toString() { + return "{this} is attacking alone"; + } +}