[TSR] added tokens

This commit is contained in:
Oleg Agafonov 2021-03-07 03:08:02 +04:00
parent 7e72ba95bc
commit ccc85c1acb
41 changed files with 172 additions and 133 deletions

View file

@ -520,7 +520,7 @@ public class ScryfallImageSupportTokens {
put("KHM/Emblem Tibalt Cosmic Imposter", "https://api.scryfall.com/cards/tkhm/21/en?format=image"); put("KHM/Emblem Tibalt Cosmic Imposter", "https://api.scryfall.com/cards/tkhm/21/en?format=image");
put("KHM/Emblem Tyvar Kell", "https://api.scryfall.com/cards/tkhm/22/en?format=image"); put("KHM/Emblem Tyvar Kell", "https://api.scryfall.com/cards/tkhm/22/en?format=image");
// TKHC // KHC
put("KHC/Bird", "https://api.scryfall.com/cards/tkhc/1/en?format=image"); put("KHC/Bird", "https://api.scryfall.com/cards/tkhc/1/en?format=image");
put("KHC/Boar", "https://api.scryfall.com/cards/tkhc/5/en?format=image"); put("KHC/Boar", "https://api.scryfall.com/cards/tkhc/5/en?format=image");
put("KHC/Elemental", "https://api.scryfall.com/cards/tkhc/6/en?format=image"); put("KHC/Elemental", "https://api.scryfall.com/cards/tkhc/6/en?format=image");
@ -530,6 +530,23 @@ public class ScryfallImageSupportTokens {
put("KHC/Soldier", "https://api.scryfall.com/cards/tkhc/4/en?format=image"); put("KHC/Soldier", "https://api.scryfall.com/cards/tkhc/4/en?format=image");
put("KHC/Thopter", "https://api.scryfall.com/cards/tkhc/8/en?format=image"); put("KHC/Thopter", "https://api.scryfall.com/cards/tkhc/8/en?format=image");
// TSR
put("TSR/Ape", "https://api.scryfall.com/cards/ttsr/10/en?format=image");
put("TSR/Assembly-Worker", "https://api.scryfall.com/cards/ttsr/14/en?format=image");
put("TSR/Bat", "https://api.scryfall.com/cards/ttsr/4/en?format=image");
put("TSR/Cloud Sprite", "https://api.scryfall.com/cards/ttsr/3/en?format=image");
put("TSR/Giant", "https://api.scryfall.com/cards/ttsr/7/en?format=image");
put("TSR/Goblin", "https://api.scryfall.com/cards/ttsr/8/en?format=image");
put("TSR/Griffin", "https://api.scryfall.com/cards/ttsr/1/en?format=image");
put("TSR/Insect", "https://api.scryfall.com/cards/ttsr/11/en?format=image");
put("TSR/Knight", "https://api.scryfall.com/cards/ttsr/5/en?format=image");
put("TSR/Kobolds of Kher Keep", "https://api.scryfall.com/cards/ttsr/9/en?format=image");
put("TSR/Llanowar Elves", "https://api.scryfall.com/cards/ttsr/12/en?format=image");
put("TSR/Metallic Sliver", "https://api.scryfall.com/cards/ttsr/15/en?format=image");
put("TSR/Saproling", "https://api.scryfall.com/cards/ttsr/13/en?format=image");
put("TSR/Soldier", "https://api.scryfall.com/cards/ttsr/2/en?format=image");
put("TSR/Spider", "https://api.scryfall.com/cards/ttsr/6/en?format=image");
// generate supported sets // generate supported sets
supportedSets.clear(); supportedSets.clear();
for (String cardName : this.keySet()) { for (String cardName : this.keySet()) {

View file

@ -1,3 +1,4 @@
#TODO: some sets (TOK:code) don't have tokens but recorded here - must be fixed and removed (from that file and from tokens)
#Generate|TOK:TPR|Goblin|| #Generate|TOK:TPR|Goblin||
#Generate|TOK:TPR|Pegasus|| #Generate|TOK:TPR|Pegasus||
#Generate|TOK:TPR|Rat|| #Generate|TOK:TPR|Rat||
@ -305,8 +306,7 @@
|Generate|TOK:C14|Demon|2||ReignOfThePitToken| |Generate|TOK:C14|Demon|2||ReignOfThePitToken|
|Generate|TOK:C14|Elemental|||TitaniaProtectorOfArgothElementalToken| |Generate|TOK:C14|Elemental|||TitaniaProtectorOfArgothElementalToken|
|Generate|TOK:C14|Elephant|||ElephantToken| |Generate|TOK:C14|Elephant|||ElephantToken|
|Generate|TOK:C14|Elf Druid|||FreyaliseLlanowarsFuryToken| |Generate|TOK:C14|Elf Druid|||ElfDruidToken|
|Generate|TOK:C14|Elf Druid|||LlanowarElvesToken|
|Generate|TOK:C14|Elf Warrior|||ElfWarriorToken| |Generate|TOK:C14|Elf Warrior|||ElfWarriorToken|
|Generate|TOK:C14|Equipment|||NahiriTheLithomancerEquipmentToken| |Generate|TOK:C14|Equipment|||NahiriTheLithomancerEquipmentToken|
|Generate|TOK:C14|Fish|||ReefWormFishToken| |Generate|TOK:C14|Fish|||ReefWormFishToken|
@ -444,8 +444,7 @@
|Generate|TOK:CMA|Drake|||LeafdrakeRoostDrakeToken| |Generate|TOK:CMA|Drake|||LeafdrakeRoostDrakeToken|
|Generate|TOK:CMA|Elemental|||TitaniaProtectorOfArgothElementalToken| |Generate|TOK:CMA|Elemental|||TitaniaProtectorOfArgothElementalToken|
|Generate|TOK:CMA|Elephant|||ElephantToken| |Generate|TOK:CMA|Elephant|||ElephantToken|
|Generate|TOK:C14|Elf Druid|||FreyaliseLlanowarsFuryToken| |Generate|TOK:C14|Elf Druid|||ElfDruidToken|
|Generate|TOK:C14|Elf Druid|||LlanowarElvesToken|
|Generate|TOK:CMA|Elf Warrior|| |Generate|TOK:CMA|Elf Warrior||
|Generate|TOK:CMA|Gargoyle|||GargoyleToken| |Generate|TOK:CMA|Gargoyle|||GargoyleToken|
|Generate|TOK:CMA|Kithkin Soldier|||KithkinSoldierToken| |Generate|TOK:CMA|Kithkin Soldier|||KithkinSoldierToken|
@ -467,7 +466,6 @@
|Generate|TOK:CMD|Saproling|||SaprolingToken| |Generate|TOK:CMD|Saproling|||SaprolingToken|
|Generate|TOK:CMD|Snake|||SnakeToken| |Generate|TOK:CMD|Snake|||SnakeToken|
|Generate|TOK:CMD|Soldier|||SoldierToken| |Generate|TOK:CMD|Soldier|||SoldierToken|
|Generate|TOK:CMD|Spider|||PenumbraSpiderToken|
|Generate|TOK:CMD|Spirit|||SpiritWhiteToken| |Generate|TOK:CMD|Spirit|||SpiritWhiteToken|
|Generate|TOK:CMD|Squirrel|||SquirrelToken| |Generate|TOK:CMD|Squirrel|||SquirrelToken|
|Generate|TOK:CMD|Triskelavite|||TriskelaviteToken| |Generate|TOK:CMD|Triskelavite|||TriskelaviteToken|
@ -680,18 +678,6 @@
|Generate|TOK:FRF|Monk|||MonasteryMentorToken| |Generate|TOK:FRF|Monk|||MonasteryMentorToken|
|Generate|TOK:FRF|Spirit|||SpiritWhiteToken| |Generate|TOK:FRF|Spirit|||SpiritWhiteToken|
|Generate|TOK:FRF|Warrior|||MarduStrikeLeaderWarriorToken| |Generate|TOK:FRF|Warrior|||MarduStrikeLeaderWarriorToken|
|Generate|TOK:FUT|Elemental|||SparkElementalToken|
|Generate|TOK:FUT|Elf Druid|||FreyaliseLlanowarsFuryToken|
|Generate|TOK:FUT|Elf Druid|||LlanowarElvesToken|
|Generate|TOK:FUT|Giant|||GiantToken|
|Generate|TOK:FUT|Kithkin Soldier|||KithkinSoldierToken|
|Generate|TOK:FUT|Saproling|||SaprolingToken|
|Generate|TOK:FUT|Sliver|||SliversmithToken|
|Generate|TOK:FUT|Soldier|||SoldierToken|
|Generate|TOK:FUT|Wurm|||WurmCallingWurmToken|
|Generate|TOK:FUT|Zombie Goblin|||FesteringGoblinToken|
|Generate|TOK:FUT|Zombie|||ZombieToken|
|Generate|TOK:FUT|Faerie|||CloudSpriteToken|
|Generate|TOK:GPT|Bat|||BatToken| |Generate|TOK:GPT|Bat|||BatToken|
|Generate|TOK:GPT|Pegasus|||PegasusToken| |Generate|TOK:GPT|Pegasus|||PegasusToken|
|Generate|TOK:GPT|Sand|||DuneBroodNephilimToken| |Generate|TOK:GPT|Sand|||DuneBroodNephilimToken|
@ -709,7 +695,6 @@
|Generate|TOK:GTC|Soldier|1||SoldierToken| |Generate|TOK:GTC|Soldier|1||SoldierToken|
|Generate|TOK:GTC|Soldier|2||SoldierTokenWithHaste| |Generate|TOK:GTC|Soldier|2||SoldierTokenWithHaste|
|Generate|TOK:GTC|Spirit|||TeysaEnvoyOfGhostsToken| |Generate|TOK:GTC|Spirit|||TeysaEnvoyOfGhostsToken|
|Generate|TOK:H09|Sliver|||SliversmithToken|
|Generate|TOK:H17|Dragon|||DragonTokenGold| |Generate|TOK:H17|Dragon|||DragonTokenGold|
|Generate|TOK:HML|Plant Wall|||KelpToken| |Generate|TOK:HML|Plant Wall|||KelpToken|
|Generate|TOK:HML|Serf|||SerfToken| |Generate|TOK:HML|Serf|||SerfToken|
@ -792,10 +777,7 @@
|Generate|TOK:LEG|Demon|||MinorDemonToken| |Generate|TOK:LEG|Demon|||MinorDemonToken|
|Generate|TOK:LEG|Sand Warrior|||HazezonTamarSandWarriorToken| |Generate|TOK:LEG|Sand Warrior|||HazezonTamarSandWarriorToken|
|Generate|TOK:LEG|Snake|||SerpentGeneratorSnakeToken| |Generate|TOK:LEG|Snake|||SerpentGeneratorSnakeToken|
|Generate|TOK:LGN|Bear|||BearToken| # LGN don't have tokens, from wiki: A Sliver token for Brood Sliver and a Goblin token for Warbreak Trumpeter were featured as a Magic Player Reward.
|Generate|TOK:LGN|Goblin|||GoblinToken|
|Generate|TOK:LGN|Insect|||InsectToken|
|Generate|TOK:LGN|Sliver|||SliversmithToken|
|Generate|TOK:LRW|Avatar|||AvatarToken| |Generate|TOK:LRW|Avatar|||AvatarToken|
|Generate|TOK:LRW|Beast|||BeastToken| |Generate|TOK:LRW|Beast|||BeastToken|
|Generate|TOK:LRW|Elemental Shaman|||ElementalShamanToken| |Generate|TOK:LRW|Elemental Shaman|||ElementalShamanToken|
@ -1037,7 +1019,7 @@
|Generate|TOK:PCY|Squirrel|||SquirrelToken| |Generate|TOK:PCY|Squirrel|||SquirrelToken|
|Generate|TOK:PLC|Ape|||PongifyApeToken| |Generate|TOK:PLC|Ape|||PongifyApeToken|
|Generate|TOK:PLC|Cat Warrior|||CatWarriorToken| |Generate|TOK:PLC|Cat Warrior|||CatWarriorToken|
|Generate|TOK:PLC|Insect|||DeadlyGrubToken| |Generate|TOK:PLC|Insect|||DeadlyGrubInsectToken|
|Generate|TOK:PLC|Knight|||RiftmarkedKnightToken| |Generate|TOK:PLC|Knight|||RiftmarkedKnightToken|
|Generate|TOK:PLC|Saproling|||SaprolingToken| |Generate|TOK:PLC|Saproling|||SaprolingToken|
|Generate|TOK:PLC|Soldier|||SoldierToken| |Generate|TOK:PLC|Soldier|||SoldierToken|
@ -1127,12 +1109,6 @@
|Generate|TOK:SOM|Wolf|||WolfToken| |Generate|TOK:SOM|Wolf|||WolfToken|
|Generate|TOK:SOM|Wurm|1||WurmWithDeathtouchToken| |Generate|TOK:SOM|Wurm|1||WurmWithDeathtouchToken|
|Generate|TOK:SOM|Wurm|2||WurmWithLifelinkToken| |Generate|TOK:SOM|Wurm|2||WurmWithLifelinkToken|
|Generate|TOK:STH|Goblin|||GoblinToken|
|Generate|TOK:STH|Insect|||HornetToken|
|Generate|TOK:STH|Insect|||WaspToken|
|Generate|TOK:STH|Rat|||RatToken|
|Generate|TOK:STH|Sliver|||SliversmithToken|
|Generate|TOK:STH|Spike|||SpikeToken|
|Generate|TOK:SWS|Ewok|||EwokToken| |Generate|TOK:SWS|Ewok|||EwokToken|
|Generate|TOK:SWS|B-Wing|||RebelStarshipToken| |Generate|TOK:SWS|B-Wing|||RebelStarshipToken|
|Generate|TOK:SWS|Hunter|||HunterToken| |Generate|TOK:SWS|Hunter|||HunterToken|
@ -1161,16 +1137,6 @@
|Generate|TOK:TMP|Spirit|||SpiritWhiteToken| |Generate|TOK:TMP|Spirit|||SpiritWhiteToken|
|Generate|TOK:TMP|Zombie|||ZombieToken| |Generate|TOK:TMP|Zombie|||ZombieToken|
|Generate|TOK:TOR|Squirrel|||SquirrelToken| |Generate|TOK:TOR|Squirrel|||SquirrelToken|
|Generate|TOK:TPR|Goblin|||GoblinToken|
|Generate|TOK:TPR|Pegasus|||PegasusToken|
|Generate|TOK:TPR|Rat|||RatToken|
|Generate|TOK:TPR|Reflection|||ReflectionToken|
|Generate|TOK:TPR|Saproling|||SaprolingToken|
|Generate|TOK:TPR|Sliver|||SliversmithToken|
|Generate|TOK:TPR|Spike|||SpikeToken|
|Generate|TOK:TPR|Spirit|||SpiritWhiteToken|
|Generate|TOK:TPR|Thopter|||ThopterColorlessToken|
|Generate|TOK:TPR|Zombie|||ZombieToken|
|Generate|TOK:TSP|Assembly-Worker|||AssembleWorkerToken| |Generate|TOK:TSP|Assembly-Worker|||AssembleWorkerToken|
|Generate|TOK:TSP|Bat|||SengirNosferatuBatToken| |Generate|TOK:TSP|Bat|||SengirNosferatuBatToken|
|Generate|TOK:TSP|Citizen|||CitizenToken| |Generate|TOK:TSP|Citizen|||CitizenToken|
@ -1512,4 +1478,21 @@
|Generate|TOK:KHC|Pegasus|||PegasusToken| |Generate|TOK:KHC|Pegasus|||PegasusToken|
|Generate|TOK:KHC|Servo|||ServoToken| |Generate|TOK:KHC|Servo|||ServoToken|
|Generate|TOK:KHC|Soldier|||SoldierToken| |Generate|TOK:KHC|Soldier|||SoldierToken|
|Generate|TOK:KHC|Thopter|||ThopterColorlessToken| |Generate|TOK:KHC|Thopter|||ThopterColorlessToken|
# TSR
|Generate|TOK:TSR|Ape|||PongifyApeToken|
|Generate|TOK:TSR|Assembly-Worker|||AssemblyWorkerToken|
|Generate|TOK:TSR|Bat|||SengirNosferatuBatToken|
|Generate|TOK:TSR|Cloud Sprite|||CloudSpriteToken|
|Generate|TOK:TSR|Giant|||GiantToken|
|Generate|TOK:TSR|Goblin|||GoblinToken|
|Generate|TOK:TSR|Griffin|||GriffinToken|
|Generate|TOK:TSR|Insect|||DeadlyGrubInsectToken|
|Generate|TOK:TSR|Knight|||RiftmarkedKnightToken|
|Generate|TOK:TSR|Kobolds of Kher Keep|||KherKeepKoboldToken|
|Generate|TOK:TSR|Llanowar Elves|||LlanowarElvesToken|
|Generate|TOK:TSR|Metallic Sliver|||MetallicSliverToken|
|Generate|TOK:TSR|Saproling|||SaprolingToken|
|Generate|TOK:TSR|Soldier|||SoldierToken|
|Generate|TOK:TSR|Spider|||PenumbraSpiderToken|

View file

@ -17,7 +17,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.game.permanent.token.DeadlyGrubToken; import mage.game.permanent.token.DeadlyGrubInsectToken;
/** /**
* *
@ -37,8 +37,9 @@ public final class DeadlyGrub extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
this.addAbility(new VanishingUpkeepAbility(3)); this.addAbility(new VanishingUpkeepAbility(3));
this.addAbility(new VanishingSacrificeAbility()); this.addAbility(new VanishingSacrificeAbility());
// When Deadly Grub dies, if it had no time counters on it, create a 6/1 green Insect creature token with shroud. // When Deadly Grub dies, if it had no time counters on it, create a 6/1 green Insect creature token with shroud.
this.addAbility(new ConditionalInterveningIfTriggeredAbility(new DiesSourceTriggeredAbility(new CreateTokenEffect(new DeadlyGrubToken(), 1)), this.addAbility(new ConditionalInterveningIfTriggeredAbility(new DiesSourceTriggeredAbility(new CreateTokenEffect(new DeadlyGrubInsectToken(), 1)),
LastTimeCounterRemovedCondition.instance, "When {this} dies, if it had no time counters on it, create a 6/1 green Insect creature token with shroud.")); LastTimeCounterRemovedCondition.instance, "When {this} dies, if it had no time counters on it, create a 6/1 green Insect creature token with shroud."));
} }

View file

@ -1,4 +1,3 @@
package mage.cards.e; package mage.cards.e;
import java.util.UUID; import java.util.UUID;
@ -20,6 +19,7 @@ public final class EmptyTheWarrens extends CardImpl {
// Create two 1/1 red Goblin creature tokens. // Create two 1/1 red Goblin creature tokens.
this.getSpellAbility().addEffect(new CreateTokenEffect(new GoblinToken(), 2)); this.getSpellAbility().addEffect(new CreateTokenEffect(new GoblinToken(), 2));
// Storm // Storm
this.addAbility(new StormAbility()); this.addAbility(new StormAbility());
} }

View file

@ -1,4 +1,3 @@
package mage.cards.f; package mage.cards.f;
import mage.ObjectColor; import mage.ObjectColor;
@ -16,7 +15,7 @@ import mage.constants.SubType;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.mageobject.ColorPredicate; import mage.filter.predicate.mageobject.ColorPredicate;
import mage.game.permanent.token.FreyaliseLlanowarsFuryToken; import mage.game.permanent.token.ElfDruidToken;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import java.util.UUID; import java.util.UUID;
@ -42,11 +41,13 @@ public final class FreyaliseLlanowarsFury extends CardImpl {
this.addAbility(new PlaneswalkerEntersWithLoyaltyCountersAbility(3)); this.addAbility(new PlaneswalkerEntersWithLoyaltyCountersAbility(3));
// +2: Create a 1/1 green Elf Druid creature token with "{T}: Add {G}." // +2: Create a 1/1 green Elf Druid creature token with "{T}: Add {G}."
this.addAbility(new LoyaltyAbility(new CreateTokenEffect(new FreyaliseLlanowarsFuryToken()), 2)); this.addAbility(new LoyaltyAbility(new CreateTokenEffect(new ElfDruidToken()), 2));
// -2: Destroy target artifact or enchantment. // -2: Destroy target artifact or enchantment.
LoyaltyAbility loyaltyAbility = new LoyaltyAbility(new DestroyTargetEffect(), -2); LoyaltyAbility loyaltyAbility = new LoyaltyAbility(new DestroyTargetEffect(), -2);
loyaltyAbility.addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_ARTIFACT_OR_ENCHANTMENT)); loyaltyAbility.addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_ARTIFACT_OR_ENCHANTMENT));
this.addAbility(loyaltyAbility); this.addAbility(loyaltyAbility);
// -6: Draw a card for each green creature you control. // -6: Draw a card for each green creature you control.
this.addAbility(new LoyaltyAbility(new DrawCardSourceControllerEffect(new PermanentsOnBattlefieldCount(filterGreen)), -6)); this.addAbility(new LoyaltyAbility(new DrawCardSourceControllerEffect(new PermanentsOnBattlefieldCount(filterGreen)), -6));

View file

@ -25,7 +25,7 @@ public final class GoblinGangLeader extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// When Goblin Gang Leader enters the battlefield, create two 1/1 red Goblin creature tokens. // When Goblin Gang Leader enters the battlefield, create two 1/1 red Goblin creature tokens.
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new GoblinToken("ANA"), 2))); this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new GoblinToken(), 2)));
} }
private GoblinGangLeader(final GoblinGangLeader card) { private GoblinGangLeader(final GoblinGangLeader card) {

View file

@ -1,4 +1,3 @@
package mage.cards.g; package mage.cards.g;
import java.util.UUID; import java.util.UUID;
@ -34,10 +33,12 @@ public final class GriffinGuide extends CardImpl {
this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility)); this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility));
Ability ability = new EnchantAbility(auraTarget.getTargetName()); Ability ability = new EnchantAbility(auraTarget.getTargetName());
this.addAbility(ability); this.addAbility(ability);
// Enchanted creature gets +2/+2 and has flying. // Enchanted creature gets +2/+2 and has flying.
ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2, 2, Duration.WhileOnBattlefield)); ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2, 2, Duration.WhileOnBattlefield));
ability.addEffect(new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield, "and has flying")); ability.addEffect(new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield, "and has flying"));
this.addAbility(ability); this.addAbility(ability);
// When enchanted creature dies, create a 2/2 white Griffin creature token with flying. // When enchanted creature dies, create a 2/2 white Griffin creature token with flying.
this.addAbility(new DiesAttachedTriggeredAbility(new CreateTokenEffect(new GriffinToken()), "enchanted creature")); this.addAbility(new DiesAttachedTriggeredAbility(new CreateTokenEffect(new GriffinToken()), "enchanted creature"));
} }

View file

@ -1,4 +1,3 @@
package mage.cards.k; package mage.cards.k;
import java.util.UUID; import java.util.UUID;
@ -25,9 +24,10 @@ public final class KherKeep extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
addSuperType(SuperType.LEGENDARY); addSuperType(SuperType.LEGENDARY);
// {tap}: Add {C}. // {T}: Add {C}.
this.addAbility(new ColorlessManaAbility()); this.addAbility(new ColorlessManaAbility());
// {1}{R}, {tap}: Create a 0/1 red Kobold creature token named Kobolds of Kher Keep.
// {1}{R}, {T}: Create a 0/1 red Kobold creature token named Kobolds of Kher Keep.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new KherKeepKoboldToken()), new ManaCostsImpl("{1}{R}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new KherKeepKoboldToken()), new ManaCostsImpl("{1}{R}"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
this.addAbility(ability); this.addAbility(ability);

View file

@ -72,6 +72,6 @@ class KrenkoTinStreetKingpinEffect extends OneShotEffect {
new AddCountersSourceEffect(CounterType.P1P1.createInstance()).apply(game, source); new AddCountersSourceEffect(CounterType.P1P1.createInstance()).apply(game, source);
game.getState().processAction(game); game.getState().processAction(game);
int xValue = permanent.getPower().getValue(); int xValue = permanent.getPower().getValue();
return new CreateTokenEffect(new GoblinToken("WAR"), xValue).apply(game, source); return new CreateTokenEffect(new GoblinToken(), xValue).apply(game, source);
} }
} }

View file

@ -1,4 +1,3 @@
package mage.cards.l; package mage.cards.l;
import java.util.UUID; import java.util.UUID;
@ -29,7 +28,7 @@ public final class LlanowarMentor extends CardImpl {
this.power = new MageInt(1); this.power = new MageInt(1);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// {G}, {tap}, Discard a card: Create a 1/1 green Elf Druid creature token named Llanowar Elves. It has "{tap}: Add {G}." // {G}, {T}, Discard a card: Create a 1/1 green Elf Druid creature token named Llanowar Elves. It has "{T}: Add {G}."
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new LlanowarElvesToken()), new ManaCostsImpl("{G}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new LlanowarElvesToken()), new ManaCostsImpl("{G}"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addCost(new DiscardCardCost()); ability.addCost(new DiscardCardCost());

View file

@ -1,4 +1,3 @@
package mage.cards.m; package mage.cards.m;
import java.util.UUID; import java.util.UUID;
@ -42,8 +41,10 @@ public final class Mycologist extends CardImpl {
// At the beginning of your upkeep, put a spore counter on Mycologist. // At the beginning of your upkeep, put a spore counter on Mycologist.
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new AddCountersSourceEffect(CounterType.SPORE.createInstance()), TargetController.YOU, false)); this.addAbility(new BeginningOfUpkeepTriggeredAbility(new AddCountersSourceEffect(CounterType.SPORE.createInstance()), TargetController.YOU, false));
// Remove three spore counters from Mycologist: Create a 1/1 green Saproling creature token. // Remove three spore counters from Mycologist: Create a 1/1 green Saproling creature token.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new SaprolingToken()), new RemoveCountersSourceCost(CounterType.SPORE.createInstance(3)))); this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new SaprolingToken()), new RemoveCountersSourceCost(CounterType.SPORE.createInstance(3))));
// Sacrifice a Saproling: You gain 2 life. // Sacrifice a Saproling: You gain 2 life.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainLifeEffect(2), this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainLifeEffect(2),
new SacrificeTargetCost(new TargetControlledPermanent(1, 1, filter, false)))); new SacrificeTargetCost(new TargetControlledPermanent(1, 1, filter, false))));

View file

@ -1,4 +1,3 @@
package mage.cards.p; package mage.cards.p;
import java.util.UUID; import java.util.UUID;
@ -24,6 +23,7 @@ public final class PactOfTheTitan extends CardImpl {
// Create a 4/4 red Giant creature token. // Create a 4/4 red Giant creature token.
this.getSpellAbility().addEffect(new CreateTokenEffect(new GiantToken())); this.getSpellAbility().addEffect(new CreateTokenEffect(new GiantToken()));
// At the beginning of your next upkeep, pay {4}{R}. If you don't, you lose the game. // At the beginning of your next upkeep, pay {4}{R}. If you don't, you lose the game.
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new PactDelayedTriggeredAbility(new ManaCostsImpl("{4}{R}")))); this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new PactDelayedTriggeredAbility(new ManaCostsImpl("{4}{R}"))));
} }

View file

@ -1,4 +1,3 @@
package mage.cards.p; package mage.cards.p;
import java.util.UUID; import java.util.UUID;
@ -27,6 +26,7 @@ public final class PenumbraSpider extends CardImpl {
// Reach // Reach
this.addAbility(ReachAbility.getInstance()); this.addAbility(ReachAbility.getInstance());
// When Penumbra Spider dies, create a 2/4 black Spider creature token with reach. // When Penumbra Spider dies, create a 2/4 black Spider creature token with reach.
this.addAbility(new DiesSourceTriggeredAbility(new CreateTokenEffect(new PenumbraSpiderToken()), false)); this.addAbility(new DiesSourceTriggeredAbility(new CreateTokenEffect(new PenumbraSpiderToken()), false));
} }

View file

@ -1,4 +1,3 @@
package mage.cards.r; package mage.cards.r;
import java.util.UUID; import java.util.UUID;
@ -39,8 +38,10 @@ public final class RiftmarkedKnight extends CardImpl {
// Protection from black; flanking // Protection from black; flanking
this.addAbility(ProtectionAbility.from(ObjectColor.BLACK)); this.addAbility(ProtectionAbility.from(ObjectColor.BLACK));
this.addAbility(new FlankingAbility()); this.addAbility(new FlankingAbility());
// Suspend 3-{1}{W}{W} // Suspend 3-{1}{W}{W}
this.addAbility(new SuspendAbility(3, new ManaCostsImpl("{1}{W}{W}"), this)); this.addAbility(new SuspendAbility(3, new ManaCostsImpl("{1}{W}{W}"), this));
// When the last time counter is removed from Riftmarked Knight while it's exiled, put a 2/2 black Knight creature token with flanking, protection from white, and haste onto the battlefield. // When the last time counter is removed from Riftmarked Knight while it's exiled, put a 2/2 black Knight creature token with flanking, protection from white, and haste onto the battlefield.
this.addAbility(new RiftmarkedKnightTriggeredAbility()); this.addAbility(new RiftmarkedKnightTriggeredAbility());
} }

View file

@ -1,4 +1,3 @@
package mage.cards.s; package mage.cards.s;
import java.util.UUID; import java.util.UUID;
@ -14,7 +13,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone; import mage.constants.Zone;
import mage.game.permanent.token.SliversmithToken; import mage.game.permanent.token.MetallicSliverToken;
/** /**
* *
@ -28,8 +27,8 @@ public final class Sliversmith extends CardImpl {
this.power = new MageInt(1); this.power = new MageInt(1);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// {1}, {tap}, Discard a card: Create a 1/1 colorless Sliver artifact creature token named Metallic Sliver. // {1}, {T}, Discard a card: Create a 1/1 colorless Sliver artifact creature token named Metallic Sliver.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new SliversmithToken()), new ManaCostsImpl("{1}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new MetallicSliverToken()), new ManaCostsImpl("{1}"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addCost(new DiscardCardCost()); ability.addCost(new DiscardCardCost());
this.addAbility(ability); this.addAbility(ability);

View file

@ -1,4 +1,3 @@
package mage.cards.u; package mage.cards.u;
import mage.abilities.Ability; import mage.abilities.Ability;
@ -28,7 +27,8 @@ public final class UrzasFactory extends CardImpl {
// {tap}: Add {C}. // {tap}: Add {C}.
this.addAbility(new ColorlessManaAbility()); this.addAbility(new ColorlessManaAbility());
// {7}, {tap}: Create a 2/2 colorless Assembly-Worker artifact creature token.
// {7}, {T}: Create a 2/2 colorless Assembly-Worker artifact creature token.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new AssemblyWorkerToken()), new GenericManaCost(7)); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new AssemblyWorkerToken()), new GenericManaCost(7));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
this.addAbility(ability); this.addAbility(ability);

View file

@ -5,6 +5,8 @@ import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.MageInt; import mage.MageInt;
import java.util.Arrays;
/** /**
* *
* @author spjspj * @author spjspj
@ -15,9 +17,12 @@ public final class AssemblyWorkerToken extends TokenImpl {
super("Assembly-Worker", "2/2 Assembly-Worker artifact creature"); super("Assembly-Worker", "2/2 Assembly-Worker artifact creature");
cardType.add(CardType.ARTIFACT); cardType.add(CardType.ARTIFACT);
cardType.add(CardType.CREATURE); cardType.add(CardType.CREATURE);
this.subtype.add(SubType.ASSEMBLY_WORKER); subtype.add(SubType.ASSEMBLY_WORKER);
power = new MageInt(2); power = new MageInt(2);
toughness = new MageInt(2); toughness = new MageInt(2);
availableImageSetCodes = Arrays.asList("4ED", "ATQ", "DDF", "EMA", "MED", "TSR");
} }
public AssemblyWorkerToken(final AssemblyWorkerToken token) { public AssemblyWorkerToken(final AssemblyWorkerToken token) {

View file

@ -19,7 +19,7 @@ public final class BearToken extends TokenImpl {
power = new MageInt(2); power = new MageInt(2);
toughness = new MageInt(2); toughness = new MageInt(2);
availableImageSetCodes = Arrays.asList("C15", "JUD", "LGN", "ODY", "ONS", "VMA", "MH1", "ELD", "KHM"); availableImageSetCodes = Arrays.asList("C15", "JUD", "ODY", "ONS", "VMA", "MH1", "ELD", "KHM");
} }
public BearToken(final BearToken token) { public BearToken(final BearToken token) {

View file

@ -7,6 +7,8 @@ import mage.MageInt;
import mage.abilities.common.CanBlockOnlyFlyingAbility; import mage.abilities.common.CanBlockOnlyFlyingAbility;
import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.FlyingAbility;
import java.util.Arrays;
/** /**
* *
* @author spjspj * @author spjspj
@ -15,15 +17,19 @@ public final class CloudSpriteToken extends TokenImpl {
public CloudSpriteToken() { public CloudSpriteToken() {
super("Cloud Sprite", "1/1 blue Faerie creature token named Cloud Sprite. It has flying and \"Cloud Sprite can block only creatures with flying.\""); super("Cloud Sprite", "1/1 blue Faerie creature token named Cloud Sprite. It has flying and \"Cloud Sprite can block only creatures with flying.\"");
this.setOriginalExpansionSetCode("FUT");
cardType.add(CardType.CREATURE); cardType.add(CardType.CREATURE);
color.setBlue(true); color.setBlue(true);
subtype.add(SubType.FAERIE); subtype.add(SubType.FAERIE);
power = new MageInt(1); power = new MageInt(1);
toughness = new MageInt(1); toughness = new MageInt(1);
// Flying
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// Cloud Sprite can block only creatures with flying.
this.addAbility(new CanBlockOnlyFlyingAbility()); this.addAbility(new CanBlockOnlyFlyingAbility());
availableImageSetCodes = Arrays.asList("TSR");
} }
public CloudSpriteToken(final CloudSpriteToken token) { public CloudSpriteToken(final CloudSpriteToken token) {

View file

@ -6,27 +6,33 @@ import mage.constants.SubType;
import mage.MageInt; import mage.MageInt;
import mage.abilities.keyword.ShroudAbility; import mage.abilities.keyword.ShroudAbility;
import java.util.Arrays;
/** /**
* *
* @author spjspj * @author spjspj
*/ */
public final class DeadlyGrubToken extends TokenImpl { public final class DeadlyGrubInsectToken extends TokenImpl {
public DeadlyGrubToken() { public DeadlyGrubInsectToken() {
super("Insect", "6/1 green Insect creature token with shroud"); super("Insect", "6/1 green Insect creature token with shroud");
cardType.add(CardType.CREATURE); cardType.add(CardType.CREATURE);
color.setGreen(true); color.setGreen(true);
subtype.add(SubType.INSECT); subtype.add(SubType.INSECT);
power = new MageInt(6); power = new MageInt(6);
toughness = new MageInt(1); toughness = new MageInt(1);
// Shroud
this.addAbility(ShroudAbility.getInstance()); this.addAbility(ShroudAbility.getInstance());
availableImageSetCodes = Arrays.asList("PLC", "TSR");
} }
public DeadlyGrubToken(final DeadlyGrubToken token) { public DeadlyGrubInsectToken(final DeadlyGrubInsectToken token) {
super(token); super(token);
} }
public DeadlyGrubToken copy() { public DeadlyGrubInsectToken copy() {
return new DeadlyGrubToken(this); return new DeadlyGrubInsectToken(this);
} }
} }

View file

@ -1,9 +1,8 @@
package mage.game.permanent.token; package mage.game.permanent.token;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.MageInt; import mage.MageInt;
@ -14,26 +13,18 @@ import mage.abilities.mana.GreenManaAbility;
* *
* @author spjspj * @author spjspj
*/ */
public final class FreyaliseLlanowarsFuryToken extends TokenImpl { public final class ElfDruidToken extends TokenImpl {
static final private List<String> tokenImageSets = new ArrayList<>(); public ElfDruidToken() {
static {
tokenImageSets.addAll(Arrays.asList("C14", "CMA"));
}
public FreyaliseLlanowarsFuryToken() {
this(null, 0); this(null, 0);
} }
public FreyaliseLlanowarsFuryToken(String setCode) { public ElfDruidToken(String setCode) {
this(setCode, 0); this(setCode, 0);
} }
public FreyaliseLlanowarsFuryToken(String setCode, int tokenType) { public ElfDruidToken(String setCode, int tokenType) {
super("Elf Druid", "1/1 green Elf Druid creature token with \"{T}: Add {G}.\""); super("Elf Druid", "1/1 green Elf Druid creature token with \"{T}: Add {G}.\"");
availableImageSetCodes = tokenImageSets;
setOriginalExpansionSetCode(setCode);
this.cardType.add(CardType.CREATURE); this.cardType.add(CardType.CREATURE);
this.color = ObjectColor.GREEN; this.color = ObjectColor.GREEN;
this.subtype.add(SubType.ELF); this.subtype.add(SubType.ELF);
@ -44,13 +35,15 @@ public final class FreyaliseLlanowarsFuryToken extends TokenImpl {
// {T}: Add {G}. // {T}: Add {G}.
this.addAbility(new GreenManaAbility()); this.addAbility(new GreenManaAbility());
availableImageSetCodes = Arrays.asList("C14");
} }
public FreyaliseLlanowarsFuryToken(final FreyaliseLlanowarsFuryToken token) { public ElfDruidToken(final ElfDruidToken token) {
super(token); super(token);
} }
public FreyaliseLlanowarsFuryToken copy() { public ElfDruidToken copy() {
return new FreyaliseLlanowarsFuryToken(this); return new ElfDruidToken(this);
} }
} }

View file

@ -18,7 +18,6 @@ public final class FesteringGoblinToken extends TokenImpl {
public FesteringGoblinToken() { public FesteringGoblinToken() {
super("Festering Goblin", "1/1 black Zombie Goblin creature token named Festering Goblin with \"When Festering Goblin dies, target creature gets -1/-1 until end of turn.\""); super("Festering Goblin", "1/1 black Zombie Goblin creature token named Festering Goblin with \"When Festering Goblin dies, target creature gets -1/-1 until end of turn.\"");
this.setOriginalExpansionSetCode("FUT");
cardType.add(CardType.CREATURE); cardType.add(CardType.CREATURE);
color.setBlack(true); color.setBlack(true);
subtype.add(SubType.ZOMBIE); subtype.add(SubType.ZOMBIE);

View file

@ -5,6 +5,8 @@ import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.MageInt; import mage.MageInt;
import java.util.Arrays;
/** /**
* *
* @author spjspj * @author spjspj
@ -18,6 +20,8 @@ public final class GiantToken extends TokenImpl {
color.setRed(true); color.setRed(true);
power = new MageInt(4); power = new MageInt(4);
toughness = new MageInt(4); toughness = new MageInt(4);
availableImageSetCodes = Arrays.asList("TSR");
} }
public GiantToken(final GiantToken token) { public GiantToken(final GiantToken token) {

View file

@ -14,16 +14,10 @@ import java.util.List;
*/ */
public final class GoblinToken extends TokenImpl { public final class GoblinToken extends TokenImpl {
static final private List<String> tokenImageSets = new ArrayList<>();
static {
tokenImageSets.addAll(Arrays.asList("10E", "ALA", "SOM", "M10", "NPH", "M13", "RTR",
"MMA", "M15", "C14", "KTK", "EVG", "DTK", "ORI", "DDG", "DDN", "EVG", "MM2",
"MM3", "EMA", "C16", "DOM", "ANA", "RNA", "WAR", "MH1"));
}
public GoblinToken(boolean withHaste) { public GoblinToken(boolean withHaste) {
this(); this();
// token image don't have haste info so it's ok to use same class for different versions
if (withHaste) { if (withHaste) {
addAbility(HasteAbility.getInstance()); addAbility(HasteAbility.getInstance());
this.description = "1/1 red Goblin creature token with haste"; this.description = "1/1 red Goblin creature token with haste";
@ -31,22 +25,16 @@ public final class GoblinToken extends TokenImpl {
} }
public GoblinToken() { public GoblinToken() {
this(null, 0);
}
public GoblinToken(String setCode) {
this(setCode, 0);
}
public GoblinToken(String setCode, int tokenType) {
super("Goblin", "1/1 red Goblin creature token"); super("Goblin", "1/1 red Goblin creature token");
availableImageSetCodes = tokenImageSets;
setOriginalExpansionSetCode(setCode);
cardType.add(CardType.CREATURE); cardType.add(CardType.CREATURE);
subtype.add(SubType.GOBLIN); subtype.add(SubType.GOBLIN);
color.setRed(true); color.setRed(true);
power = new MageInt(1); power = new MageInt(1);
toughness = new MageInt(1); toughness = new MageInt(1);
availableImageSetCodes = Arrays.asList("10E", "ALA", "SOM", "M10", "NPH", "M13", "RTR",
"MMA", "M15", "C14", "KTK", "EVG", "DTK", "ORI", "DDG", "DDN", "EVG", "MM2",
"MM3", "EMA", "C16", "DOM", "ANA", "RNA", "WAR", "MH1", "TSR");
} }
public GoblinToken(final GoblinToken token) { public GoblinToken(final GoblinToken token) {

View file

@ -20,7 +20,6 @@ public final class GoldmeadowHarrierToken extends TokenImpl {
public GoldmeadowHarrierToken() { public GoldmeadowHarrierToken() {
super("Goldmeadow Harrier", "1/1 white Kithkin Soldier creature token named Goldmeadow Harrier with \"{W}, {T}: Tap target creature.\""); super("Goldmeadow Harrier", "1/1 white Kithkin Soldier creature token named Goldmeadow Harrier with \"{W}, {T}: Tap target creature.\"");
this.setOriginalExpansionSetCode("FUT");
cardType.add(CardType.CREATURE); cardType.add(CardType.CREATURE);
color.setWhite(true); color.setWhite(true);
subtype.add(SubType.KITHKIN); subtype.add(SubType.KITHKIN);

View file

@ -19,9 +19,11 @@ public final class GriffinToken extends TokenImpl {
subtype.add(SubType.GRIFFIN); subtype.add(SubType.GRIFFIN);
power = new MageInt(2); power = new MageInt(2);
toughness = new MageInt(2); toughness = new MageInt(2);
// Flying
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
availableImageSetCodes.addAll(Arrays.asList("DDG", "DDH", "DDL", "TSP", "M21")); availableImageSetCodes = Arrays.asList("DDG", "DDH", "DDL", "TSP", "M21", "TSR");
} }
public GriffinToken(final GriffinToken token) { public GriffinToken(final GriffinToken token) {

View file

@ -5,6 +5,8 @@ import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.MageInt; import mage.MageInt;
import java.util.Arrays;
/** /**
* *
* @author spjspj * @author spjspj
@ -18,6 +20,8 @@ public final class KherKeepKoboldToken extends TokenImpl {
subtype.add(SubType.KOBOLD); subtype.add(SubType.KOBOLD);
power = new MageInt(0); power = new MageInt(0);
toughness = new MageInt(1); toughness = new MageInt(1);
availableImageSetCodes = Arrays.asList("TSR");
} }
public KherKeepKoboldToken(final KherKeepKoboldToken token) { public KherKeepKoboldToken(final KherKeepKoboldToken token) {
super(token); super(token);

View file

@ -20,7 +20,7 @@ public final class KithkinSoldierToken extends TokenImpl {
power = new MageInt(1); power = new MageInt(1);
toughness = new MageInt(1); toughness = new MageInt(1);
availableImageSetCodes = Arrays.asList("CMD", "EVE", "FUT", "LRW", "MMA", "MOR", "SHM", "MMA", "KHC"); availableImageSetCodes = Arrays.asList("CMD", "EVE", "LRW", "MMA", "MOR", "SHM", "MMA", "KHC");
} }
public KithkinSoldierToken(final KithkinSoldierToken token) { public KithkinSoldierToken(final KithkinSoldierToken token) {

View file

@ -1,11 +1,12 @@
package mage.game.permanent.token; package mage.game.permanent.token;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.MageInt; import mage.MageInt;
import mage.abilities.mana.GreenManaAbility; import mage.abilities.mana.GreenManaAbility;
import java.util.Arrays;
/** /**
* *
* @author spjspj * @author spjspj
@ -14,7 +15,6 @@ public final class LlanowarElvesToken extends TokenImpl {
public LlanowarElvesToken() { public LlanowarElvesToken() {
super("Llanowar Elves", "1/1 green Elf Druid creature token named Llanowar Elves with \"{T}: Add {G}.\""); super("Llanowar Elves", "1/1 green Elf Druid creature token named Llanowar Elves with \"{T}: Add {G}.\"");
this.setOriginalExpansionSetCode("FUT");
cardType.add(CardType.CREATURE); cardType.add(CardType.CREATURE);
color.setGreen(true); color.setGreen(true);
subtype.add(SubType.ELF); subtype.add(SubType.ELF);
@ -22,7 +22,10 @@ public final class LlanowarElvesToken extends TokenImpl {
power = new MageInt(1); power = new MageInt(1);
toughness = new MageInt(1); toughness = new MageInt(1);
// {T}: Add {G}.
this.addAbility(new GreenManaAbility()); this.addAbility(new GreenManaAbility());
availableImageSetCodes = Arrays.asList("TSR");
} }
public LlanowarElvesToken(final LlanowarElvesToken token) { public LlanowarElvesToken(final LlanowarElvesToken token) {

View file

@ -5,27 +5,30 @@ import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.MageInt; import mage.MageInt;
import java.util.Arrays;
/** /**
* *
* @author spjspj * @author spjspj
*/ */
public final class SliversmithToken extends TokenImpl { public final class MetallicSliverToken extends TokenImpl {
public SliversmithToken() { public MetallicSliverToken() {
super("Metallic Sliver", "1/1 colorless Sliver creature token named Metallic Sliver"); super("Metallic Sliver", "1/1 colorless Sliver creature token named Metallic Sliver");
cardType.add(CardType.CREATURE); cardType.add(CardType.CREATURE);
cardType.add(CardType.ARTIFACT); cardType.add(CardType.ARTIFACT);
subtype.add(SubType.SLIVER); subtype.add(SubType.SLIVER);
power = new MageInt(1); power = new MageInt(1);
toughness = new MageInt(1); toughness = new MageInt(1);
this.setOriginalExpansionSetCode("FUT");
availableImageSetCodes = Arrays.asList("TSR");
} }
public SliversmithToken(final SliversmithToken token) { public MetallicSliverToken(final MetallicSliverToken token) {
super(token); super(token);
} }
public SliversmithToken copy() { public MetallicSliverToken copy() {
return new SliversmithToken(this); return new MetallicSliverToken(this);
} }
} }

View file

@ -22,7 +22,7 @@ public final class PegasusToken extends TokenImpl {
addAbility(FlyingAbility.getInstance()); addAbility(FlyingAbility.getInstance());
availableImageSetCodes = Arrays.asList("C14", "C19", "CMD", "EXO", "GPT", "MIR", "TMP", "TPR", "TSP", "THB", "KHC"); availableImageSetCodes = Arrays.asList("C14", "C19", "CMD", "EXO", "GPT", "MIR", "TMP", "TSP", "THB", "KHC");
} }
public PegasusToken(final PegasusToken token) { public PegasusToken(final PegasusToken token) {

View file

@ -1,4 +1,3 @@
package mage.game.permanent.token; package mage.game.permanent.token;
import mage.constants.CardType; import mage.constants.CardType;
@ -6,6 +5,8 @@ import mage.constants.SubType;
import mage.MageInt; import mage.MageInt;
import mage.abilities.keyword.ReachAbility; import mage.abilities.keyword.ReachAbility;
import java.util.Arrays;
/** /**
* *
* @author spjspj * @author spjspj
@ -20,7 +21,10 @@ public final class PenumbraSpiderToken extends TokenImpl {
subtype.add(SubType.SPIDER); subtype.add(SubType.SPIDER);
power = new MageInt(2); power = new MageInt(2);
toughness = new MageInt(4); toughness = new MageInt(4);
addAbility(ReachAbility.getInstance()); addAbility(ReachAbility.getInstance());
availableImageSetCodes = Arrays.asList("MMA", "PC2", "TSP", "TSR");
} }
public PenumbraSpiderToken(final PenumbraSpiderToken token) { public PenumbraSpiderToken(final PenumbraSpiderToken token) {

View file

@ -5,6 +5,8 @@ import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.MageInt; import mage.MageInt;
import java.util.Arrays;
/** /**
* *
* @author spjspj * @author spjspj
@ -18,6 +20,8 @@ public final class PongifyApeToken extends TokenImpl {
subtype.add(SubType.APE); subtype.add(SubType.APE);
power = new MageInt(3); power = new MageInt(3);
toughness = new MageInt(3); toughness = new MageInt(3);
availableImageSetCodes = Arrays.asList("10E", "C14", "GVL", "DDD", "DDG", "PLC", "ULG", "UNH", "TSR");
} }
public PongifyApeToken(final PongifyApeToken token) { public PongifyApeToken(final PongifyApeToken token) {

View file

@ -19,7 +19,7 @@ public final class RatToken extends TokenImpl {
power = new MageInt(1); power = new MageInt(1);
toughness = new MageInt(1); toughness = new MageInt(1);
availableImageSetCodes = Arrays.asList("C17", "CHK", "GTC", "SHM", "STH", "TPR", "ELD", "ZNC"); availableImageSetCodes = Arrays.asList("C17", "CHK", "GTC", "SHM", "ELD", "ZNC");
} }
public RatToken(final RatToken token) { public RatToken(final RatToken token) {

View file

@ -7,6 +7,8 @@ import mage.MageInt;
import mage.ObjectColor; import mage.ObjectColor;
import mage.abilities.keyword.ReachAbility; import mage.abilities.keyword.ReachAbility;
import java.util.Arrays;
/** /**
* *
* @author spjspj * @author spjspj
@ -15,14 +17,16 @@ public final class RenownedWeaverSpiderToken extends TokenImpl {
public RenownedWeaverSpiderToken() { public RenownedWeaverSpiderToken() {
super("Spider", "1/3 green Spider enchantment creature token with reach"); super("Spider", "1/3 green Spider enchantment creature token with reach");
this.setOriginalExpansionSetCode("JOU");
cardType.add(CardType.ENCHANTMENT); cardType.add(CardType.ENCHANTMENT);
cardType.add(CardType.CREATURE); cardType.add(CardType.CREATURE);
color.setColor(ObjectColor.GREEN); color.setColor(ObjectColor.GREEN);
subtype.add(SubType.SPIDER); subtype.add(SubType.SPIDER);
power = new MageInt(1); power = new MageInt(1);
toughness = new MageInt(3); toughness = new MageInt(3);
this.addAbility(ReachAbility.getInstance()); this.addAbility(ReachAbility.getInstance());
availableImageSetCodes = Arrays.asList("JOU");
} }
public RenownedWeaverSpiderToken(final RenownedWeaverSpiderToken token) { public RenownedWeaverSpiderToken(final RenownedWeaverSpiderToken token) {

View file

@ -9,6 +9,8 @@ import mage.abilities.keyword.FlankingAbility;
import mage.abilities.keyword.HasteAbility; import mage.abilities.keyword.HasteAbility;
import mage.abilities.keyword.ProtectionAbility; import mage.abilities.keyword.ProtectionAbility;
import java.util.Arrays;
/** /**
* *
* @author spjspj * @author spjspj
@ -22,9 +24,12 @@ public final class RiftmarkedKnightToken extends TokenImpl {
subtype.add(SubType.KNIGHT); subtype.add(SubType.KNIGHT);
power = new MageInt(2); power = new MageInt(2);
toughness = new MageInt(2); toughness = new MageInt(2);
this.addAbility(ProtectionAbility.from(ObjectColor.WHITE));
this.addAbility(new FlankingAbility()); this.addAbility(new FlankingAbility());
this.addAbility(ProtectionAbility.from(ObjectColor.WHITE));
this.addAbility(HasteAbility.getInstance()); this.addAbility(HasteAbility.getInstance());
availableImageSetCodes = Arrays.asList("PLC", "TSR");
} }
public RiftmarkedKnightToken(final RiftmarkedKnightToken token) { public RiftmarkedKnightToken(final RiftmarkedKnightToken token) {

View file

@ -44,7 +44,8 @@ public final class SaprolingToken extends TokenImpl {
"C20", "C20",
"M21", "M21",
"ZNC", "ZNC",
"CMR" "CMR",
"TSR"
)); ));
} }

View file

@ -19,6 +19,8 @@ import mage.players.Player;
import mage.target.Target; import mage.target.Target;
import mage.target.common.TargetCardInExile; import mage.target.common.TargetCardInExile;
import java.util.Arrays;
/** /**
* @author spjspj * @author spjspj
*/ */
@ -31,12 +33,18 @@ public final class SengirNosferatuBatToken extends TokenImpl {
subtype.add(SubType.BAT); subtype.add(SubType.BAT);
power = new MageInt(1); power = new MageInt(1);
toughness = new MageInt(2); toughness = new MageInt(2);
// Flying
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// {1}{B}, Sacrifice this creature: Return an exiled card named Sengir Nosferatu to the battlefield under its owners control.
ReturnSengirNosferatuEffect effect = new ReturnSengirNosferatuEffect(); ReturnSengirNosferatuEffect effect = new ReturnSengirNosferatuEffect();
effect.setText("Return an exiled card named Sengir Nosferatu to the battlefield under its owner's control."); effect.setText("Return an exiled card named Sengir Nosferatu to the battlefield under its owner's control.");
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{1}{B}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{1}{B}"));
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());
this.addAbility(ability); this.addAbility(ability);
availableImageSetCodes = Arrays.asList("TSP", "TSR");
} }
public SengirNosferatuBatToken(final SengirNosferatuBatToken token) { public SengirNosferatuBatToken(final SengirNosferatuBatToken token) {

View file

@ -20,8 +20,9 @@ public final class SoldierToken extends TokenImpl {
power = new MageInt(1); power = new MageInt(1);
toughness = new MageInt(1); toughness = new MageInt(1);
availableImageSetCodes = Arrays.asList("10E", "M15", "C14", "ORI", "ALA", "DDF", "THS", "M12", "M13", "MM2", "MMA", "RTR", availableImageSetCodes = Arrays.asList("10E", "M15", "C14", "ORI", "ALA", "DDF", "THS", "M12", "M13",
"SOM", "DDO", "M10", "ORI", "EMN", "EMA", "CN2", "C16", "MM3", "E01", "DOM", "MH1", "M20", "C20", "M21", "CMR", "KHC"); "MM2", "MMA", "RTR", "SOM", "DDO", "M10", "ORI", "EMN", "EMA", "CN2", "C16", "MM3", "E01",
"DOM", "MH1", "M20", "C20", "M21", "CMR", "KHC", "TSR");
} }
public SoldierToken(final SoldierToken token) { public SoldierToken(final SoldierToken token) {

View file

@ -1,5 +1,3 @@
package mage.game.permanent.token; package mage.game.permanent.token;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
@ -18,7 +16,6 @@ public final class SparkElementalToken extends TokenImpl {
public SparkElementalToken() { public SparkElementalToken() {
super("Spark Elemental", "3/1 red Elemental creature token named Spark Elemental with trample, haste, and \"At the beginning of the end step, sacrifice Spark Elemental.\""); super("Spark Elemental", "3/1 red Elemental creature token named Spark Elemental with trample, haste, and \"At the beginning of the end step, sacrifice Spark Elemental.\"");
this.setOriginalExpansionSetCode("FUT");
cardType.add(CardType.CREATURE); cardType.add(CardType.CREATURE);
color.setRed(true); color.setRed(true);
subtype.add(SubType.ELEMENTAL); subtype.add(SubType.ELEMENTAL);

View file

@ -23,7 +23,7 @@ public final class ThopterColorlessToken extends TokenImpl {
addAbility(FlyingAbility.getInstance()); addAbility(FlyingAbility.getInstance());
availableImageSetCodes = Arrays.asList("C18", "EXO", "KLD", "MBS", "ORI", "TPR", "VMA", "M19", "ZNC", "KHC"); availableImageSetCodes = Arrays.asList("C18", "EXO", "KLD", "MBS", "ORI", "VMA", "M19", "ZNC", "KHC");
} }
@Override @Override