From 2cd8bc6f6c0e8bda7c01a7dd58ac99b5ae06a729 Mon Sep 17 00:00:00 2001 From: Vivian Greenslade Date: Tue, 29 Aug 2023 21:58:21 -0230 Subject: [PATCH] Create common implementation for predefined tokens (#11065) * adds token abilities * updated cards to use new abilities --- Mage.Sets/src/mage/cards/a/AgentsToolkit.java | 10 ++----- .../src/mage/cards/c/CouriersBriefcase.java | 8 ++---- Mage.Sets/src/mage/cards/d/DireMimic.java | 8 ++---- .../mage/cards/e/EriettesTemptingApple.java | 7 ++--- Mage.Sets/src/mage/cards/g/Gingerbrute.java | 10 ++----- Mage.Sets/src/mage/cards/g/GoldenEgg.java | 11 ++------ Mage.Sets/src/mage/cards/g/Goldhound.java | 9 ++---- .../mage/cards/i/InvestigatorsJournal.java | 8 ++---- Mage.Sets/src/mage/cards/l/Lembas.java | 11 ++------ Mage.Sets/src/mage/cards/m/Mimic.java | 8 ++---- Mage.Sets/src/mage/cards/p/ParcelMyr.java | 12 ++------ .../mage/cards/s/ShelobChildOfUngoliant.java | 13 ++------- Mage.Sets/src/mage/cards/t/ToughCookie.java | 10 ++----- .../mage/abilities/token/ClueAbility.java | 25 +++++++++++++++++ .../mage/abilities/token/FoodAbility.java | 28 +++++++++++++++++++ .../mage/abilities/token/TreasureAbility.java | 25 +++++++++++++++++ .../permanent/token/ClueArtifactToken.java | 15 ++-------- .../mage/game/permanent/token/FoodToken.java | 16 ++--------- .../game/permanent/token/TreasureToken.java | 12 ++------ 19 files changed, 112 insertions(+), 134 deletions(-) create mode 100644 Mage/src/main/java/mage/abilities/token/ClueAbility.java create mode 100644 Mage/src/main/java/mage/abilities/token/FoodAbility.java create mode 100644 Mage/src/main/java/mage/abilities/token/TreasureAbility.java diff --git a/Mage.Sets/src/mage/cards/a/AgentsToolkit.java b/Mage.Sets/src/mage/cards/a/AgentsToolkit.java index ff7479f0f78..6a5d5f082ce 100644 --- a/Mage.Sets/src/mage/cards/a/AgentsToolkit.java +++ b/Mage.Sets/src/mage/cards/a/AgentsToolkit.java @@ -3,12 +3,9 @@ package mage.cards.a; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.SacrificeSourceCost; -import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.token.ClueAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.choices.Choice; @@ -16,7 +13,6 @@ import mage.choices.ChoiceImpl; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SubType; -import mage.constants.Zone; import mage.counters.CounterType; import mage.filter.StaticFilters; import mage.game.Game; @@ -51,9 +47,7 @@ public class AgentsToolkit extends CardImpl { )); // {2}, Sacrifice Agent’s Toolkit: Draw a card. - Ability drawAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new GenericManaCost(2)); - drawAbility.addCost(new SacrificeSourceCost()); - this.addAbility(drawAbility); + this.addAbility(new ClueAbility(true)); } private AgentsToolkit(final AgentsToolkit card) { diff --git a/Mage.Sets/src/mage/cards/c/CouriersBriefcase.java b/Mage.Sets/src/mage/cards/c/CouriersBriefcase.java index 5297235f442..006987b7b2e 100644 --- a/Mage.Sets/src/mage/cards/c/CouriersBriefcase.java +++ b/Mage.Sets/src/mage/cards/c/CouriersBriefcase.java @@ -8,7 +8,7 @@ import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; -import mage.abilities.mana.AnyColorManaAbility; +import mage.abilities.token.TreasureAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -31,12 +31,10 @@ public final class CouriersBriefcase extends CardImpl { this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new CitizenGreenWhiteToken()))); // {T}, Sacrifice Courier's Briefcase: Add one mana of any color. - Ability ability = new AnyColorManaAbility(); - ability.addCost(new SacrificeSourceCost()); - this.addAbility(ability); + this.addAbility(new TreasureAbility(true)); // {W}{U}{B}{R}{G}, {T}, Sacrifice Courier's Briefcase: Draw three cards. - ability = new SimpleActivatedAbility( + Ability ability = new SimpleActivatedAbility( new DrawCardSourceControllerEffect(3), new ManaCostsImpl<>("{W}{U}{B}{R}{G}") ); ability.addCost(new TapSourceCost()); diff --git a/Mage.Sets/src/mage/cards/d/DireMimic.java b/Mage.Sets/src/mage/cards/d/DireMimic.java index d8b647106ef..cbb5f8e3b4a 100644 --- a/Mage.Sets/src/mage/cards/d/DireMimic.java +++ b/Mage.Sets/src/mage/cards/d/DireMimic.java @@ -1,12 +1,10 @@ package mage.cards.d; -import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; import mage.abilities.keyword.FlashAbility; -import mage.abilities.mana.AnyColorManaAbility; +import mage.abilities.token.TreasureAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -30,9 +28,7 @@ public final class DireMimic extends CardImpl { this.addAbility(FlashAbility.getInstance()); // {T}, Sacrifice Dire Mimic: Add one mana of any color. - Ability ability = new AnyColorManaAbility(); - ability.addCost(new SacrificeSourceCost()); - this.addAbility(ability); + this.addAbility(new TreasureAbility(true)); // {3}: Dire Mimic becomes a Shapeshifter artifact creature with base power and toughness 5/5 until end of turn. this.addAbility(new SimpleActivatedAbility(new BecomesCreatureSourceEffect( diff --git a/Mage.Sets/src/mage/cards/e/EriettesTemptingApple.java b/Mage.Sets/src/mage/cards/e/EriettesTemptingApple.java index 20d8422226c..9711abc1f73 100644 --- a/Mage.Sets/src/mage/cards/e/EriettesTemptingApple.java +++ b/Mage.Sets/src/mage/cards/e/EriettesTemptingApple.java @@ -6,12 +6,12 @@ import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.LoseLifeTargetEffect; import mage.abilities.effects.common.UntapTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.effects.common.continuous.GainControlTargetEffect; import mage.abilities.keyword.HasteAbility; +import mage.abilities.token.FoodAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -42,10 +42,7 @@ public final class EriettesTemptingApple extends CardImpl { this.addAbility(ability); // {2}, {T}, Sacrifice Eriette's Tempting Apple: You gain 3 life. - ability = new SimpleActivatedAbility(new GainLifeEffect(3), new GenericManaCost(2)); - ability.addCost(new TapSourceCost()); - ability.addCost(new SacrificeSourceCost()); - this.addAbility(ability); + this.addAbility(new FoodAbility(true)); // {2}, {T}, Sacrifice Eriette's Tempting Apple: Target opponent loses 3 life. ability = new SimpleActivatedAbility(new LoseLifeTargetEffect(3), new GenericManaCost(2)); diff --git a/Mage.Sets/src/mage/cards/g/Gingerbrute.java b/Mage.Sets/src/mage/cards/g/Gingerbrute.java index 2d65b3cad6c..b3b92fcc97c 100644 --- a/Mage.Sets/src/mage/cards/g/Gingerbrute.java +++ b/Mage.Sets/src/mage/cards/g/Gingerbrute.java @@ -1,14 +1,11 @@ package mage.cards.g; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.SacrificeSourceCost; -import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.combat.CantBeBlockedByCreaturesSourceEffect; import mage.abilities.keyword.HasteAbility; +import mage.abilities.token.FoodAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -49,10 +46,7 @@ public final class Gingerbrute extends CardImpl { )); // {2}, {T}, Sacrifice Gingerbrute: You gain 3 life. - Ability ability = new SimpleActivatedAbility(new GainLifeEffect(3), new GenericManaCost(2)); - ability.addCost(new TapSourceCost()); - ability.addCost(new SacrificeSourceCost()); - this.addAbility(ability); + this.addAbility(new FoodAbility(true)); } private Gingerbrute(final Gingerbrute card) { diff --git a/Mage.Sets/src/mage/cards/g/GoldenEgg.java b/Mage.Sets/src/mage/cards/g/GoldenEgg.java index fc506e96f78..6aa2dba566c 100644 --- a/Mage.Sets/src/mage/cards/g/GoldenEgg.java +++ b/Mage.Sets/src/mage/cards/g/GoldenEgg.java @@ -2,20 +2,16 @@ package mage.cards.g; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.DrawCardSourceControllerEffect; -import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.mana.AnyColorManaAbility; +import mage.abilities.token.FoodAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; - import java.util.UUID; /** @@ -38,10 +34,7 @@ public final class GoldenEgg extends CardImpl { this.addAbility(ability); // {2}, {T}, Sacrifice Golden Egg: You gain 3 life. - Ability ability1 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainLifeEffect(3), new ManaCostsImpl<>("{2}")); - ability1.addCost(new TapSourceCost()); - ability1.addCost(new SacrificeSourceCost()); - this.addAbility(ability1); + this.addAbility(new FoodAbility(true)); } private GoldenEgg(final GoldenEgg card) { diff --git a/Mage.Sets/src/mage/cards/g/Goldhound.java b/Mage.Sets/src/mage/cards/g/Goldhound.java index 0b5fa40edd3..2705c09e749 100644 --- a/Mage.Sets/src/mage/cards/g/Goldhound.java +++ b/Mage.Sets/src/mage/cards/g/Goldhound.java @@ -2,12 +2,9 @@ package mage.cards.g; import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.keyword.FirstStrikeAbility; import mage.abilities.keyword.MenaceAbility; -import mage.abilities.mana.AnyColorManaAbility; -import mage.abilities.mana.GreenManaAbility; +import mage.abilities.token.TreasureAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -36,9 +33,7 @@ public final class Goldhound extends CardImpl { this.addAbility(new MenaceAbility(true)); // {T}, Sacrifice Goldhound: Add one mana of any color. - Ability ability = new AnyColorManaAbility(); - ability.addCost(new SacrificeSourceCost()); - this.addAbility(ability); + this.addAbility(new TreasureAbility(true)); } private Goldhound(final Goldhound card) { diff --git a/Mage.Sets/src/mage/cards/i/InvestigatorsJournal.java b/Mage.Sets/src/mage/cards/i/InvestigatorsJournal.java index 3b1e5cdba2d..62230d7b324 100644 --- a/Mage.Sets/src/mage/cards/i/InvestigatorsJournal.java +++ b/Mage.Sets/src/mage/cards/i/InvestigatorsJournal.java @@ -1,19 +1,18 @@ package mage.cards.i; -import java.util.HashMap; import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.RemoveCountersSourceCost; -import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.effects.Effect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.token.ClueAbility; import mage.constants.SubType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -21,7 +20,6 @@ import mage.constants.CardType; import mage.counters.CounterType; import mage.filter.StaticFilters; import mage.game.Game; -import mage.game.permanent.Permanent; import mage.players.Player; /** @@ -48,9 +46,7 @@ public final class InvestigatorsJournal extends CardImpl { this.addAbility(ability); // {2}, Sacrifice Investigator's Journal: Draw a card. - ability = new SimpleActivatedAbility(new DrawCardSourceControllerEffect(1), new GenericManaCost(2)); - ability.addCost(new SacrificeSourceCost()); - this.addAbility(ability); + this.addAbility(new ClueAbility(true)); } private InvestigatorsJournal(final InvestigatorsJournal card) { diff --git a/Mage.Sets/src/mage/cards/l/Lembas.java b/Mage.Sets/src/mage/cards/l/Lembas.java index c28f6f31a85..ac3e80eed4a 100644 --- a/Mage.Sets/src/mage/cards/l/Lembas.java +++ b/Mage.Sets/src/mage/cards/l/Lembas.java @@ -3,14 +3,10 @@ package mage.cards.l; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.PutIntoGraveFromBattlefieldSourceTriggeredAbility; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.SacrificeSourceCost; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.common.DrawCardSourceControllerEffect; -import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.ShuffleIntoLibrarySourceEffect; import mage.abilities.effects.keyword.ScryEffect; +import mage.abilities.token.FoodAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -34,10 +30,7 @@ public final class Lembas extends CardImpl { this.addAbility(ability); // {2}, {T}, Sacrifice Lembas: You gain 3 life. - ability = new SimpleActivatedAbility(new GainLifeEffect(3), new GenericManaCost(2)); - ability.addCost(new TapSourceCost()); - ability.addCost(new SacrificeSourceCost()); - this.addAbility(ability); + this.addAbility(new FoodAbility(true)); // When Lembas is put into a graveyard from the battlefield, its owner shuffles it into their library. this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility( diff --git a/Mage.Sets/src/mage/cards/m/Mimic.java b/Mage.Sets/src/mage/cards/m/Mimic.java index fb63998dfa9..5b33364941f 100644 --- a/Mage.Sets/src/mage/cards/m/Mimic.java +++ b/Mage.Sets/src/mage/cards/m/Mimic.java @@ -1,11 +1,9 @@ package mage.cards.m; -import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; -import mage.abilities.mana.AnyColorManaAbility; +import mage.abilities.token.TreasureAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -26,9 +24,7 @@ public final class Mimic extends CardImpl { this.subtype.add(SubType.TREASURE); // {T}, Sacrifice Mimic: Add one mana of any color. - Ability ability = new AnyColorManaAbility(); - ability.addCost(new SacrificeSourceCost()); - this.addAbility(ability); + this.addAbility(new TreasureAbility(true)); // {2}: Mimic becomes a Shapeshifter artifact creature with base power and toughness 3/3 until end of turn. this.addAbility(new SimpleActivatedAbility(new BecomesCreatureSourceEffect( diff --git a/Mage.Sets/src/mage/cards/p/ParcelMyr.java b/Mage.Sets/src/mage/cards/p/ParcelMyr.java index a52322bf5d0..5fc154c76bc 100644 --- a/Mage.Sets/src/mage/cards/p/ParcelMyr.java +++ b/Mage.Sets/src/mage/cards/p/ParcelMyr.java @@ -1,11 +1,7 @@ package mage.cards.p; import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.SacrificeSourceCost; -import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.token.ClueAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -27,11 +23,7 @@ public final class ParcelMyr extends CardImpl { this.toughness = new MageInt(1); // {2}, Sacrifice Parcel Myr: Draw a card - Ability ability = new SimpleActivatedAbility( - new DrawCardSourceControllerEffect(1), new GenericManaCost(2) - ); - ability.addCost(new SacrificeSourceCost()); - this.addAbility(ability); + this.addAbility(new ClueAbility(true)); } private ParcelMyr(final ParcelMyr card) { diff --git a/Mage.Sets/src/mage/cards/s/ShelobChildOfUngoliant.java b/Mage.Sets/src/mage/cards/s/ShelobChildOfUngoliant.java index 1d6aa4dcaa9..848306bc498 100644 --- a/Mage.Sets/src/mage/cards/s/ShelobChildOfUngoliant.java +++ b/Mage.Sets/src/mage/cards/s/ShelobChildOfUngoliant.java @@ -4,19 +4,15 @@ import mage.MageInt; import mage.MageObjectReference; import mage.abilities.Ability; import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.costs.common.SacrificeSourceCost; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.CreateTokenCopyTargetEffect; -import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; import mage.abilities.keyword.DeathtouchAbility; import mage.abilities.keyword.WardAbility; +import mage.abilities.token.FoodAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; @@ -225,12 +221,7 @@ class ShelobChildOfUngoliantEffect extends OneShotEffect { token.addSubType(SubType.FOOD); // {2}, {T}, Sacrifice this artifact: You gain 3 life. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainLifeEffect(3), new GenericManaCost(2)); - ability.addCost(new TapSourceCost()); - SacrificeSourceCost cost = new SacrificeSourceCost(); - cost.setText("Sacrifice this artifact"); - ability.addCost(cost); - token.addAbility(ability); + token.addAbility(new FoodAbility(false)); }).apply(game, source); } } diff --git a/Mage.Sets/src/mage/cards/t/ToughCookie.java b/Mage.Sets/src/mage/cards/t/ToughCookie.java index 82a12b8ec21..0e7eaa28916 100644 --- a/Mage.Sets/src/mage/cards/t/ToughCookie.java +++ b/Mage.Sets/src/mage/cards/t/ToughCookie.java @@ -4,14 +4,11 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.SacrificeSourceCost; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.CreateTokenEffect; -import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.continuous.AddCardTypeTargetEffect; import mage.abilities.effects.common.continuous.SetBasePowerToughnessTargetEffect; +import mage.abilities.token.FoodAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -59,10 +56,7 @@ public final class ToughCookie extends CardImpl { this.addAbility(ability); // {2}, {T}, Sacrifice Tough Cookie: You gain 3 life. - ability = new SimpleActivatedAbility(new GainLifeEffect(3), new GenericManaCost(2)); - ability.addCost(new TapSourceCost()); - ability.addCost(new SacrificeSourceCost()); - this.addAbility(ability); + this.addAbility(new FoodAbility(true)); } private ToughCookie(final ToughCookie card) { diff --git a/Mage/src/main/java/mage/abilities/token/ClueAbility.java b/Mage/src/main/java/mage/abilities/token/ClueAbility.java new file mode 100644 index 00000000000..82688984c1f --- /dev/null +++ b/Mage/src/main/java/mage/abilities/token/ClueAbility.java @@ -0,0 +1,25 @@ +package mage.abilities.token; + +import mage.abilities.ActivatedAbilityImpl; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.constants.Zone; + +public class ClueAbility extends ActivatedAbilityImpl { + + public ClueAbility(boolean named) { + super(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new GenericManaCost(2)); + // {2}, Sacrifice this artifact: You draw a card.” + this.addCost(new SacrificeSourceCost().setText("sacrifice " + (named ? "{this}" : "this artifact"))); + } + + private ClueAbility(final ClueAbility ability) { + super(ability); + } + + @Override + public ClueAbility copy() { + return new ClueAbility(this); + } +} diff --git a/Mage/src/main/java/mage/abilities/token/FoodAbility.java b/Mage/src/main/java/mage/abilities/token/FoodAbility.java new file mode 100644 index 00000000000..ce58c9c0259 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/token/FoodAbility.java @@ -0,0 +1,28 @@ +package mage.abilities.token; + +import mage.abilities.ActivatedAbilityImpl; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.GainLifeEffect; +import mage.constants.Zone; + +public class FoodAbility extends ActivatedAbilityImpl { + + public FoodAbility(boolean named) { + super(Zone.BATTLEFIELD, new GainLifeEffect(3), new GenericManaCost(2)); + // {2}, {T}, Sacrifice this artifact: You gain 3 life.” + this.addCost(new TapSourceCost()); + this.addCost(new SacrificeSourceCost().setText("sacrifice " + (named ? "{this}" : "this artifact"))); + } + + private FoodAbility(final FoodAbility ability) { + super(ability); + } + + @Override + public FoodAbility copy() { + return new FoodAbility(this); + } + +} diff --git a/Mage/src/main/java/mage/abilities/token/TreasureAbility.java b/Mage/src/main/java/mage/abilities/token/TreasureAbility.java new file mode 100644 index 00000000000..a1c9e9c8797 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/token/TreasureAbility.java @@ -0,0 +1,25 @@ +package mage.abilities.token; + +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.mana.AddManaOfAnyColorEffect; +import mage.abilities.mana.ActivatedManaAbilityImpl; +import mage.constants.Zone; + +public class TreasureAbility extends ActivatedManaAbilityImpl { + + public TreasureAbility(boolean named) { + super(Zone.BATTLEFIELD, new AddManaOfAnyColorEffect(), new TapSourceCost()); + this.addCost(new SacrificeSourceCost().setText("sacrifice " + (named ? "{this}" : "this artifact"))); + } + + private TreasureAbility(final TreasureAbility ability) { + super(ability); + } + + @Override + public TreasureAbility copy() { + return new TreasureAbility(this); + } + +} diff --git a/Mage/src/main/java/mage/game/permanent/token/ClueArtifactToken.java b/Mage/src/main/java/mage/game/permanent/token/ClueArtifactToken.java index 4ba6bac4ea2..dba4877e59c 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ClueArtifactToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ClueArtifactToken.java @@ -1,13 +1,8 @@ package mage.game.permanent.token; -import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.SacrificeSourceCost; -import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.token.ClueAbility; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; /** * @@ -15,16 +10,12 @@ import mage.constants.Zone; public final class ClueArtifactToken extends TokenImpl { public ClueArtifactToken() { - super("Clue Token", "colorless Clue artifact token with \"{2}, Sacrifice this artifact: Draw a card.\""); + super("Clue Token", "Clue token"); cardType.add(CardType.ARTIFACT); subtype.add(SubType.CLUE); // {2}, Sacrifice this artifact: Draw a card. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new GenericManaCost(2)); - SacrificeSourceCost cost = new SacrificeSourceCost(); - cost.setText("Sacrifice this artifact"); - ability.addCost(cost); - this.addAbility(ability); + this.addAbility(new ClueAbility(false)); } protected ClueArtifactToken(final ClueArtifactToken token) { diff --git a/Mage/src/main/java/mage/game/permanent/token/FoodToken.java b/Mage/src/main/java/mage/game/permanent/token/FoodToken.java index 9eccdad178a..5c2a0b7af32 100644 --- a/Mage/src/main/java/mage/game/permanent/token/FoodToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/FoodToken.java @@ -1,14 +1,8 @@ package mage.game.permanent.token; -import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.SacrificeSourceCost; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.token.FoodAbility; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; /** * @author jmharmon @@ -21,13 +15,7 @@ public final class FoodToken extends TokenImpl { cardType.add(CardType.ARTIFACT); subtype.add(SubType.FOOD); - // {2}, {T}, Sacrifice this artifact: You gain 3 life.” - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainLifeEffect(3), new GenericManaCost(2)); - ability.addCost(new TapSourceCost()); - SacrificeSourceCost cost = new SacrificeSourceCost(); - cost.setText("Sacrifice this artifact"); - ability.addCost(cost); - this.addAbility(ability); + this.addAbility(new FoodAbility(false)); } protected FoodToken(final FoodToken token) { diff --git a/Mage/src/main/java/mage/game/permanent/token/TreasureToken.java b/Mage/src/main/java/mage/game/permanent/token/TreasureToken.java index cd58690998f..81927a9ea51 100644 --- a/Mage/src/main/java/mage/game/permanent/token/TreasureToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/TreasureToken.java @@ -1,13 +1,8 @@ package mage.game.permanent.token; -import mage.abilities.Ability; -import mage.abilities.costs.common.SacrificeSourceCost; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.effects.mana.AddManaOfAnyColorEffect; -import mage.abilities.mana.SimpleManaAbility; +import mage.abilities.token.TreasureAbility; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; /** * @author TheElk801 @@ -19,10 +14,7 @@ public final class TreasureToken extends TokenImpl { cardType.add(CardType.ARTIFACT); subtype.add(SubType.TREASURE); - // {T}, Sacrifice this artifact: Add one mana of any color. - Ability ability = new SimpleManaAbility(Zone.BATTLEFIELD, new AddManaOfAnyColorEffect(), new TapSourceCost()); - ability.addCost(new SacrificeSourceCost().setText("sacrifice this artifact")); - this.addAbility(ability); + this.addAbility(new TreasureAbility(false)); } protected TreasureToken(final TreasureToken token) {