diff --git a/Mage.Sets/src/mage/cards/a/AangALotToLearn.java b/Mage.Sets/src/mage/cards/a/AangALotToLearn.java new file mode 100644 index 00000000000..348834371d5 --- /dev/null +++ b/Mage.Sets/src/mage/cards/a/AangALotToLearn.java @@ -0,0 +1,58 @@ +package mage.cards.a; + +import mage.MageInt; +import mage.abilities.common.DiesCreatureTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.LessonsInGraveCondition; +import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.VigilanceAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; +import mage.constants.SuperType; +import mage.counters.CounterType; +import mage.filter.StaticFilters; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class AangALotToLearn extends CardImpl { + + public AangALotToLearn(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G/W}"); + + this.supertype.add(SuperType.LEGENDARY); + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.AVATAR); + this.subtype.add(SubType.ALLY); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // Aang has vigilance as long as there's a Lesson card in your graveyard. + this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(VigilanceAbility.getInstance(), Duration.WhileOnBattlefield), + LessonsInGraveCondition.ONE, "{this} has vigilance as long as there's a Lesson card in your graveyard" + )).addHint(LessonsInGraveCondition.getHint())); + + // Whenever another creature you control dies, put a +1/+1 counter on Aang. + this.addAbility(new DiesCreatureTriggeredAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance()), + false, StaticFilters.FILTER_ANOTHER_CREATURE_YOU_CONTROL + )); + } + + private AangALotToLearn(final AangALotToLearn card) { + super(card); + } + + @Override + public AangALotToLearn copy() { + return new AangALotToLearn(this); + } +} diff --git a/Mage.Sets/src/mage/cards/d/DragonflySwarm.java b/Mage.Sets/src/mage/cards/d/DragonflySwarm.java index be39d818143..35683a3dd5f 100644 --- a/Mage.Sets/src/mage/cards/d/DragonflySwarm.java +++ b/Mage.Sets/src/mage/cards/d/DragonflySwarm.java @@ -3,16 +3,12 @@ package mage.cards.d; import mage.MageInt; import mage.abilities.common.DiesSourceTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.CompoundCondition; -import mage.abilities.condition.Condition; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.LessonsInGraveCondition; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.continuous.SetBasePowerSourceEffect; -import mage.abilities.hint.ConditionHint; -import mage.abilities.hint.Hint; import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.WardAbility; import mage.cards.CardImpl; @@ -38,11 +34,6 @@ public final class DragonflySwarm extends CardImpl { } private static final DynamicValue xValue = new CardsInControllerGraveyardCount(filter); - private static final Condition condition = new CompoundCondition( - "there's a Lesson card in your graveyard", - new CardsInControllerGraveyardCondition(1, new FilterCard(SubType.LESSON)) - ); - private static final Hint hint = new ConditionHint(condition); public DragonflySwarm(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{R}"); @@ -63,7 +54,7 @@ public final class DragonflySwarm extends CardImpl { // When this creature dies, if there's a Lesson card in your graveyard, draw a card. this.addAbility(new DiesSourceTriggeredAbility(new DrawCardSourceControllerEffect(1)) - .withInterveningIf(condition).addHint(hint)); + .withInterveningIf(LessonsInGraveCondition.ONE).addHint(LessonsInGraveCondition.getHint())); } private DragonflySwarm(final DragonflySwarm card) { diff --git a/Mage.Sets/src/mage/cards/f/FireNationCadets.java b/Mage.Sets/src/mage/cards/f/FireNationCadets.java index f1eac9405e8..8b5a49df213 100644 --- a/Mage.Sets/src/mage/cards/f/FireNationCadets.java +++ b/Mage.Sets/src/mage/cards/f/FireNationCadets.java @@ -3,21 +3,17 @@ package mage.cards.f; import mage.MageInt; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.Condition; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.LessonsInGraveCondition; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; -import mage.abilities.hint.ConditionHint; -import mage.abilities.hint.Hint; import mage.abilities.keyword.FirebendingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; -import mage.filter.FilterCard; import java.util.UUID; @@ -26,9 +22,6 @@ import java.util.UUID; */ public final class FireNationCadets extends CardImpl { - private static final Condition condition = new CardsInControllerGraveyardCondition(1, new FilterCard(SubType.LESSON)); - private static final Hint hint = new ConditionHint(condition, "There's a Lesson card in your graveyard"); - public FireNationCadets(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}"); @@ -39,9 +32,9 @@ public final class FireNationCadets extends CardImpl { // This creature has firebending 2 as long as there's a Lesson card in your graveyard. this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( - new GainAbilitySourceEffect(new FirebendingAbility(2)), condition, + new GainAbilitySourceEffect(new FirebendingAbility(2)), LessonsInGraveCondition.ONE, "{this} has firebending 2 as long as there's a Lesson card in your graveyard" - )).addHint(hint)); + )).addHint(LessonsInGraveCondition.getHint())); // {2}: This creature gets +1/+0 until end of turn. this.addAbility(new SimpleActivatedAbility( diff --git a/Mage.Sets/src/mage/cards/f/FirstTimeFlyer.java b/Mage.Sets/src/mage/cards/f/FirstTimeFlyer.java index 945c34d9b2b..fa877cfb032 100644 --- a/Mage.Sets/src/mage/cards/f/FirstTimeFlyer.java +++ b/Mage.Sets/src/mage/cards/f/FirstTimeFlyer.java @@ -2,19 +2,15 @@ package mage.cards.f; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.Condition; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.LessonsInGraveCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; -import mage.abilities.hint.ConditionHint; -import mage.abilities.hint.Hint; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; -import mage.filter.FilterCard; import java.util.UUID; @@ -23,9 +19,6 @@ import java.util.UUID; */ public final class FirstTimeFlyer extends CardImpl { - private static final Condition condition = new CardsInControllerGraveyardCondition(1, new FilterCard(SubType.LESSON)); - private static final Hint hint = new ConditionHint(condition, "There's a Lesson card in your graveyard"); - public FirstTimeFlyer(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}"); @@ -40,9 +33,9 @@ public final class FirstTimeFlyer extends CardImpl { // This creature gets +1/+1 as long as there's a Lesson card in your graveyard. this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( - new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), - condition, "{this} gets +1/+1 as long as there's a Lesson card in your graveyard" - )).addHint(hint)); + new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), LessonsInGraveCondition.ONE, + "{this} gets +1/+1 as long as there's a Lesson card in your graveyard" + )).addHint(LessonsInGraveCondition.getHint())); } private FirstTimeFlyer(final FirstTimeFlyer card) { diff --git a/Mage.Sets/src/mage/cards/g/GranGran.java b/Mage.Sets/src/mage/cards/g/GranGran.java index fcd4d51fdd8..74a1d6538d3 100644 --- a/Mage.Sets/src/mage/cards/g/GranGran.java +++ b/Mage.Sets/src/mage/cards/g/GranGran.java @@ -3,20 +3,15 @@ package mage.cards.g; import mage.MageInt; import mage.abilities.common.BecomesTappedSourceTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.Condition; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.LessonsInGraveCondition; import mage.abilities.decorator.ConditionalCostModificationEffect; -import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount; import mage.abilities.effects.common.DrawDiscardControllerEffect; import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect; -import mage.abilities.hint.Hint; -import mage.abilities.hint.ValueHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.SuperType; -import mage.filter.FilterCard; import mage.filter.StaticFilters; import java.util.UUID; @@ -26,11 +21,6 @@ import java.util.UUID; */ public final class GranGran extends CardImpl { - private static final Condition condition = new CardsInControllerGraveyardCondition(3, new FilterCard(SubType.LESSON)); - private static final Hint hint = new ValueHint( - "Lesson cards in your graveyard", new CardsInControllerGraveyardCount(new FilterCard(SubType.LESSON)) - ); - public GranGran(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{U}"); @@ -47,9 +37,9 @@ public final class GranGran extends CardImpl { // Noncreature spells you cast cost {1} less to cast as long as there are three or more Lesson cards in your graveyard. this.addAbility(new SimpleStaticAbility(new ConditionalCostModificationEffect( new SpellsCostReductionControllerEffect(StaticFilters.FILTER_CARD_NON_CREATURE, 1), - condition, "noncreature spells you cast cost {1} less to cast as long as " + + LessonsInGraveCondition.THREE, "noncreature spells you cast cost {1} less to cast as long as " + "there are three or more Lesson cards in your graveyard" - )).addHint(hint)); + )).addHint(LessonsInGraveCondition.getHint())); } private GranGran(final GranGran card) { diff --git a/Mage.Sets/src/mage/cards/m/MasterPakku.java b/Mage.Sets/src/mage/cards/m/MasterPakku.java index 2ee107fed73..98eb78240ab 100644 --- a/Mage.Sets/src/mage/cards/m/MasterPakku.java +++ b/Mage.Sets/src/mage/cards/m/MasterPakku.java @@ -3,11 +3,10 @@ package mage.cards.m; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.BecomesTappedSourceTriggeredAbility; +import mage.abilities.condition.common.LessonsInGraveCondition; import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount; import mage.abilities.effects.common.MillCardsTargetEffect; -import mage.abilities.hint.Hint; -import mage.abilities.hint.ValueHint; import mage.abilities.keyword.ProwessAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -25,7 +24,6 @@ import java.util.UUID; public final class MasterPakku extends CardImpl { private static final DynamicValue xValue = new CardsInControllerGraveyardCount(new FilterCard(SubType.LESSON, "Lesson cards"), null); - private static final Hint hint = new ValueHint("Lesson cards in your graveyard", xValue); public MasterPakku(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}"); @@ -43,7 +41,7 @@ public final class MasterPakku extends CardImpl { // Whenever Master Pakku becomes tapped, target player mills X cards, where X is the number of Lesson cards in your graveyard. Ability ability = new BecomesTappedSourceTriggeredAbility(new MillCardsTargetEffect(xValue)); ability.addTarget(new TargetPlayer()); - this.addAbility(ability.addHint(hint)); + this.addAbility(ability.addHint(LessonsInGraveCondition.getHint())); } private MasterPakku(final MasterPakku card) { diff --git a/Mage.Sets/src/mage/cards/p/PlatypusBear.java b/Mage.Sets/src/mage/cards/p/PlatypusBear.java index 3bbe15feeb9..c7179e3c93b 100644 --- a/Mage.Sets/src/mage/cards/p/PlatypusBear.java +++ b/Mage.Sets/src/mage/cards/p/PlatypusBear.java @@ -3,20 +3,16 @@ package mage.cards.p; import mage.MageInt; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.Condition; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.LessonsInGraveCondition; import mage.abilities.decorator.ConditionalAsThoughEffect; import mage.abilities.effects.common.MillCardsControllerEffect; import mage.abilities.effects.common.combat.CanAttackAsThoughItDidntHaveDefenderSourceEffect; -import mage.abilities.hint.ConditionHint; -import mage.abilities.hint.Hint; import mage.abilities.keyword.DefenderAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; -import mage.filter.FilterCard; import java.util.UUID; @@ -25,9 +21,6 @@ import java.util.UUID; */ public final class PlatypusBear extends CardImpl { - private static final Condition condition = new CardsInControllerGraveyardCondition(1, new FilterCard(SubType.LESSON)); - private static final Hint hint = new ConditionHint(condition, "There is a Lesson card in your graveyard"); - public PlatypusBear(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G/U}"); @@ -44,9 +37,9 @@ public final class PlatypusBear extends CardImpl { // As long as there is a Lesson card in your graveyard, this creature can attack as though it didn't have defender. this.addAbility(new SimpleStaticAbility(new ConditionalAsThoughEffect( - new CanAttackAsThoughItDidntHaveDefenderSourceEffect(Duration.WhileOnBattlefield), condition + new CanAttackAsThoughItDidntHaveDefenderSourceEffect(Duration.WhileOnBattlefield), LessonsInGraveCondition.ONE ).setText("as long as there is a Lesson card in your graveyard, " + - "this creature can attack as though it didn't have defender")).addHint(hint)); + "this creature can attack as though it didn't have defender")).addHint(LessonsInGraveCondition.getHint())); } private PlatypusBear(final PlatypusBear card) { diff --git a/Mage.Sets/src/mage/cards/t/TheLionTurtle.java b/Mage.Sets/src/mage/cards/t/TheLionTurtle.java index 543651f65dd..487744f2be8 100644 --- a/Mage.Sets/src/mage/cards/t/TheLionTurtle.java +++ b/Mage.Sets/src/mage/cards/t/TheLionTurtle.java @@ -3,13 +3,9 @@ package mage.cards.t; import mage.MageInt; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.Condition; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; -import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount; +import mage.abilities.condition.common.LessonsInGraveCondition; import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.combat.CantAttackBlockUnlessConditionSourceEffect; -import mage.abilities.hint.Hint; -import mage.abilities.hint.ValueHint; import mage.abilities.keyword.ReachAbility; import mage.abilities.keyword.VigilanceAbility; import mage.abilities.mana.AnyColorManaAbility; @@ -18,7 +14,6 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.SuperType; -import mage.filter.FilterCard; import java.util.UUID; @@ -27,13 +22,6 @@ import java.util.UUID; */ public final class TheLionTurtle extends CardImpl { - private static final Condition condition = new CardsInControllerGraveyardCondition( - 3, new FilterCard(SubType.LESSON, "Lesson cards") - ); - private static final Hint hint = new ValueHint( - "Lesson cards in your graveyard", new CardsInControllerGraveyardCount(new FilterCard(SubType.LESSON)) - ); - public TheLionTurtle(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}{U}"); @@ -54,7 +42,8 @@ public final class TheLionTurtle extends CardImpl { this.addAbility(new EntersBattlefieldTriggeredAbility(new GainLifeEffect(3))); // The Lion-Turtle can't attack or block unless there are three or more Lesson cards in your graveyard. - this.addAbility(new SimpleStaticAbility(new CantAttackBlockUnlessConditionSourceEffect(condition)).addHint(hint)); + this.addAbility(new SimpleStaticAbility(new CantAttackBlockUnlessConditionSourceEffect(LessonsInGraveCondition.THREE)) + .addHint(LessonsInGraveCondition.getHint())); // {T}: Add one mana of any color. this.addAbility(new AnyColorManaAbility()); diff --git a/Mage.Sets/src/mage/sets/AvatarTheLastAirbenderEternal.java b/Mage.Sets/src/mage/sets/AvatarTheLastAirbenderEternal.java index 856ccac7134..ef12e7fa88d 100644 --- a/Mage.Sets/src/mage/sets/AvatarTheLastAirbenderEternal.java +++ b/Mage.Sets/src/mage/sets/AvatarTheLastAirbenderEternal.java @@ -28,6 +28,7 @@ public final class AvatarTheLastAirbenderEternal extends ExpansionSet { cards.add(new SetCardInfo("Aang's Defense", 211, Rarity.COMMON, mage.cards.a.AangsDefense.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Aang's Defense", 266, Rarity.COMMON, mage.cards.a.AangsDefense.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Aang, A Lot to Learn", 146, Rarity.UNCOMMON, mage.cards.a.AangALotToLearn.class)); cards.add(new SetCardInfo("Aang, Air Nomad", 210, Rarity.RARE, mage.cards.a.AangAirNomad.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Aang, Air Nomad", 265, Rarity.RARE, mage.cards.a.AangAirNomad.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Aang, Airbending Master", 171, Rarity.MYTHIC, mage.cards.a.AangAirbendingMaster.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage/src/main/java/mage/abilities/condition/common/LessonsInGraveCondition.java b/Mage/src/main/java/mage/abilities/condition/common/LessonsInGraveCondition.java new file mode 100644 index 00000000000..2c2f00f2fe1 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/condition/common/LessonsInGraveCondition.java @@ -0,0 +1,45 @@ +package mage.abilities.condition.common; + +import mage.abilities.Ability; +import mage.abilities.condition.Condition; +import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount; +import mage.abilities.hint.Hint; +import mage.abilities.hint.ValueHint; +import mage.constants.SubType; +import mage.filter.FilterCard; +import mage.game.Game; +import mage.players.Player; +import mage.util.CardUtil; + +/** + * @author TheElk801 + */ +public enum LessonsInGraveCondition implements Condition { + ONE(1), + THREE(3); + private final int amount; + private static final FilterCard filter = new FilterCard(SubType.LESSON); + private static final Hint hint = new ValueHint("Lesson cards in your graveyard", new CardsInControllerGraveyardCount(filter)); + + public static Hint getHint() { + return hint; + } + + LessonsInGraveCondition(int amount) { + this.amount = amount; + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + return player != null && player.getGraveyard().count(filter, game) >= this.amount; + } + + @Override + public String toString() { + if (amount == 1) { + return "there's a Lesson card in your graveyard"; + } + return "there are " + CardUtil.numberToText(this.amount) + " or more Lesson cards in your graveyard"; + } +}