[TLE] Implement Aang, A Lot to Learn

This commit is contained in:
theelk801 2025-11-11 10:59:32 -05:00
parent 2799c3f1c0
commit 9d49f601c2
10 changed files with 124 additions and 73 deletions

View file

@ -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);
}
}

View file

@ -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) {

View file

@ -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(

View file

@ -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) {

View file

@ -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) {

View file

@ -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) {

View file

@ -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) {

View file

@ -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());

View file

@ -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));

View file

@ -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";
}
}