From b6bf126dd247d21364662709624038c03c74cc18 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Tue, 23 Jul 2024 17:38:27 -0400 Subject: [PATCH] [BLB] Implement Builder's Talent --- .../src/mage/cards/b/BuildersTalent.java | 84 +++++++++++++++++++ Mage.Sets/src/mage/sets/Bloomburrow.java | 1 + .../game/permanent/token/WallWhiteToken.java | 32 +++++++ 3 files changed, 117 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/b/BuildersTalent.java create mode 100644 Mage/src/main/java/mage/game/permanent/token/WallWhiteToken.java diff --git a/Mage.Sets/src/mage/cards/b/BuildersTalent.java b/Mage.Sets/src/mage/cards/b/BuildersTalent.java new file mode 100644 index 00000000000..b9d5d2106ae --- /dev/null +++ b/Mage.Sets/src/mage/cards/b/BuildersTalent.java @@ -0,0 +1,84 @@ +package mage.cards.b; + +import mage.abilities.Ability; +import mage.abilities.common.BecomesClassLevelTriggeredAbility; +import mage.abilities.common.EntersBattlefieldOneOrMoreTriggeredAbility; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect; +import mage.abilities.effects.common.continuous.GainClassAbilitySourceEffect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.abilities.keyword.ClassLevelAbility; +import mage.abilities.keyword.ClassReminderAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.TargetController; +import mage.counters.CounterType; +import mage.filter.FilterCard; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterNonlandCard; +import mage.filter.common.FilterNonlandPermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.PermanentPredicate; +import mage.game.permanent.token.WallWhiteToken; +import mage.target.common.TargetCardInYourGraveyard; +import mage.target.common.TargetControlledCreaturePermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class BuildersTalent extends CardImpl { + + private static final FilterPermanent filter = new FilterNonlandPermanent("noncreature, nonland permanents"); + private static final FilterCard filter2 = new FilterNonlandCard("noncreature, nonland permanent card from your graveyard"); + + static { + filter.add(Predicates.not(CardType.CREATURE.getPredicate())); + filter2.add(Predicates.not(CardType.CREATURE.getPredicate())); + filter2.add(PermanentPredicate.instance); + } + + public BuildersTalent(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}"); + + this.subtype.add(SubType.CLASS); + + // (Gain the next level as a sorcery to add its ability.) + this.addAbility(new ClassReminderAbility()); + + // When Builder's Talent enters, create a 0/4 white Wall creature token with defender. + this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new WallWhiteToken()))); + + // {W}: Level 2 + this.addAbility(new ClassLevelAbility(2, "{W}")); + + // Whenever one or more noncreature, nonland permanents you control enter, put a +1/+1 counter on target creature you control. + Ability ability = new EntersBattlefieldOneOrMoreTriggeredAbility( + new AddCountersTargetEffect(CounterType.P1P1.createInstance()), filter, TargetController.YOU + ); + ability.addTarget(new TargetControlledCreaturePermanent()); + this.addAbility(new SimpleStaticAbility(new GainClassAbilitySourceEffect(ability, 2))); + + // {4}{W}: Level 3 + this.addAbility(new ClassLevelAbility(3, "{4}{W}")); + + // When this Class becomes level 3, return target noncreature, nonland permanent card from your graveyard to the battlefield. + ability = new BecomesClassLevelTriggeredAbility(new ReturnFromGraveyardToBattlefieldTargetEffect(), 3); + ability.addTarget(new TargetCardInYourGraveyard(filter2)); + this.addAbility(ability); + } + + private BuildersTalent(final BuildersTalent card) { + super(card); + } + + @Override + public BuildersTalent copy() { + return new BuildersTalent(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Bloomburrow.java b/Mage.Sets/src/mage/sets/Bloomburrow.java index d764b6e6e0f..16ebdb8bf81 100644 --- a/Mage.Sets/src/mage/sets/Bloomburrow.java +++ b/Mage.Sets/src/mage/sets/Bloomburrow.java @@ -43,6 +43,7 @@ public final class Bloomburrow extends ExpansionSet { cards.add(new SetCardInfo("Brazen Collector", 128, Rarity.UNCOMMON, mage.cards.b.BrazenCollector.class)); cards.add(new SetCardInfo("Bria, Riptide Rogue", 379, Rarity.MYTHIC, mage.cards.b.BriaRiptideRogue.class)); cards.add(new SetCardInfo("Brightblade Stoat", 4, Rarity.UNCOMMON, mage.cards.b.BrightbladeStoat.class)); + cards.add(new SetCardInfo("Builder's Talent", 5, Rarity.UNCOMMON, mage.cards.b.BuildersTalent.class)); cards.add(new SetCardInfo("Bumbleflower's Sharepot", 244, Rarity.COMMON, mage.cards.b.BumbleflowersSharepot.class)); cards.add(new SetCardInfo("Burrowguard Mentor", 206, Rarity.UNCOMMON, mage.cards.b.BurrowguardMentor.class)); cards.add(new SetCardInfo("Bushy Bodyguard", 166, Rarity.UNCOMMON, mage.cards.b.BushyBodyguard.class)); diff --git a/Mage/src/main/java/mage/game/permanent/token/WallWhiteToken.java b/Mage/src/main/java/mage/game/permanent/token/WallWhiteToken.java new file mode 100644 index 00000000000..6c51fd5e82c --- /dev/null +++ b/Mage/src/main/java/mage/game/permanent/token/WallWhiteToken.java @@ -0,0 +1,32 @@ +package mage.game.permanent.token; + +import mage.MageInt; +import mage.abilities.keyword.DefenderAbility; +import mage.constants.CardType; +import mage.constants.SubType; + +/** + * @author TheElk801 + */ +public final class WallWhiteToken extends TokenImpl { + + public WallWhiteToken() { + super("Wall Token", "0/4 white Wall artifact creature token with defender"); + cardType.add(CardType.ARTIFACT); + cardType.add(CardType.CREATURE); + subtype.add(SubType.WALL); + color.setWhite(true); + power = new MageInt(0); + toughness = new MageInt(4); + + addAbility(DefenderAbility.getInstance()); + } + + private WallWhiteToken(final WallWhiteToken token) { + super(token); + } + + public WallWhiteToken copy() { + return new WallWhiteToken(this); + } +}