Create common implementation for predefined tokens (#11065)

* adds token abilities

* updated cards to use new abilities
This commit is contained in:
Vivian Greenslade 2023-08-29 21:58:21 -02:30 committed by GitHub
parent d67539746e
commit 2cd8bc6f6c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
19 changed files with 112 additions and 134 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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