[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 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/Boar", "https://api.scryfall.com/cards/tkhc/5/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/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
supportedSets.clear();
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|Pegasus||
#Generate|TOK:TPR|Rat||
@ -305,8 +306,7 @@
|Generate|TOK:C14|Demon|2||ReignOfThePitToken|
|Generate|TOK:C14|Elemental|||TitaniaProtectorOfArgothElementalToken|
|Generate|TOK:C14|Elephant|||ElephantToken|
|Generate|TOK:C14|Elf Druid|||FreyaliseLlanowarsFuryToken|
|Generate|TOK:C14|Elf Druid|||LlanowarElvesToken|
|Generate|TOK:C14|Elf Druid|||ElfDruidToken|
|Generate|TOK:C14|Elf Warrior|||ElfWarriorToken|
|Generate|TOK:C14|Equipment|||NahiriTheLithomancerEquipmentToken|
|Generate|TOK:C14|Fish|||ReefWormFishToken|
@ -444,8 +444,7 @@
|Generate|TOK:CMA|Drake|||LeafdrakeRoostDrakeToken|
|Generate|TOK:CMA|Elemental|||TitaniaProtectorOfArgothElementalToken|
|Generate|TOK:CMA|Elephant|||ElephantToken|
|Generate|TOK:C14|Elf Druid|||FreyaliseLlanowarsFuryToken|
|Generate|TOK:C14|Elf Druid|||LlanowarElvesToken|
|Generate|TOK:C14|Elf Druid|||ElfDruidToken|
|Generate|TOK:CMA|Elf Warrior||
|Generate|TOK:CMA|Gargoyle|||GargoyleToken|
|Generate|TOK:CMA|Kithkin Soldier|||KithkinSoldierToken|
@ -467,7 +466,6 @@
|Generate|TOK:CMD|Saproling|||SaprolingToken|
|Generate|TOK:CMD|Snake|||SnakeToken|
|Generate|TOK:CMD|Soldier|||SoldierToken|
|Generate|TOK:CMD|Spider|||PenumbraSpiderToken|
|Generate|TOK:CMD|Spirit|||SpiritWhiteToken|
|Generate|TOK:CMD|Squirrel|||SquirrelToken|
|Generate|TOK:CMD|Triskelavite|||TriskelaviteToken|
@ -680,18 +678,6 @@
|Generate|TOK:FRF|Monk|||MonasteryMentorToken|
|Generate|TOK:FRF|Spirit|||SpiritWhiteToken|
|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|Pegasus|||PegasusToken|
|Generate|TOK:GPT|Sand|||DuneBroodNephilimToken|
@ -709,7 +695,6 @@
|Generate|TOK:GTC|Soldier|1||SoldierToken|
|Generate|TOK:GTC|Soldier|2||SoldierTokenWithHaste|
|Generate|TOK:GTC|Spirit|||TeysaEnvoyOfGhostsToken|
|Generate|TOK:H09|Sliver|||SliversmithToken|
|Generate|TOK:H17|Dragon|||DragonTokenGold|
|Generate|TOK:HML|Plant Wall|||KelpToken|
|Generate|TOK:HML|Serf|||SerfToken|
@ -792,10 +777,7 @@
|Generate|TOK:LEG|Demon|||MinorDemonToken|
|Generate|TOK:LEG|Sand Warrior|||HazezonTamarSandWarriorToken|
|Generate|TOK:LEG|Snake|||SerpentGeneratorSnakeToken|
|Generate|TOK:LGN|Bear|||BearToken|
|Generate|TOK:LGN|Goblin|||GoblinToken|
|Generate|TOK:LGN|Insect|||InsectToken|
|Generate|TOK:LGN|Sliver|||SliversmithToken|
# 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:LRW|Avatar|||AvatarToken|
|Generate|TOK:LRW|Beast|||BeastToken|
|Generate|TOK:LRW|Elemental Shaman|||ElementalShamanToken|
@ -1037,7 +1019,7 @@
|Generate|TOK:PCY|Squirrel|||SquirrelToken|
|Generate|TOK:PLC|Ape|||PongifyApeToken|
|Generate|TOK:PLC|Cat Warrior|||CatWarriorToken|
|Generate|TOK:PLC|Insect|||DeadlyGrubToken|
|Generate|TOK:PLC|Insect|||DeadlyGrubInsectToken|
|Generate|TOK:PLC|Knight|||RiftmarkedKnightToken|
|Generate|TOK:PLC|Saproling|||SaprolingToken|
|Generate|TOK:PLC|Soldier|||SoldierToken|
@ -1127,12 +1109,6 @@
|Generate|TOK:SOM|Wolf|||WolfToken|
|Generate|TOK:SOM|Wurm|1||WurmWithDeathtouchToken|
|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|B-Wing|||RebelStarshipToken|
|Generate|TOK:SWS|Hunter|||HunterToken|
@ -1161,16 +1137,6 @@
|Generate|TOK:TMP|Spirit|||SpiritWhiteToken|
|Generate|TOK:TMP|Zombie|||ZombieToken|
|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|Bat|||SengirNosferatuBatToken|
|Generate|TOK:TSP|Citizen|||CitizenToken|
@ -1513,3 +1479,20 @@
|Generate|TOK:KHC|Servo|||ServoToken|
|Generate|TOK:KHC|Soldier|||SoldierToken|
|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.SubType;
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(new VanishingUpkeepAbility(3));
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.
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."));
}

View file

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

View file

@ -1,4 +1,3 @@
package mage.cards.f;
import mage.ObjectColor;
@ -16,7 +15,7 @@ import mage.constants.SubType;
import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.mageobject.ColorPredicate;
import mage.game.permanent.token.FreyaliseLlanowarsFuryToken;
import mage.game.permanent.token.ElfDruidToken;
import mage.target.TargetPermanent;
import java.util.UUID;
@ -42,11 +41,13 @@ public final class FreyaliseLlanowarsFury extends CardImpl {
this.addAbility(new PlaneswalkerEntersWithLoyaltyCountersAbility(3));
// +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.
LoyaltyAbility loyaltyAbility = new LoyaltyAbility(new DestroyTargetEffect(), -2);
loyaltyAbility.addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_ARTIFACT_OR_ENCHANTMENT));
this.addAbility(loyaltyAbility);
// -6: Draw a card for each green creature you control.
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);
// 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) {

View file

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

View file

@ -1,4 +1,3 @@
package mage.cards.k;
import java.util.UUID;
@ -25,9 +24,10 @@ public final class KherKeep extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
addSuperType(SuperType.LEGENDARY);
// {tap}: Add {C}.
// {T}: Add {C}.
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.addCost(new TapSourceCost());
this.addAbility(ability);

View file

@ -72,6 +72,6 @@ class KrenkoTinStreetKingpinEffect extends OneShotEffect {
new AddCountersSourceEffect(CounterType.P1P1.createInstance()).apply(game, source);
game.getState().processAction(game);
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;
import java.util.UUID;
@ -29,7 +28,7 @@ public final class LlanowarMentor extends CardImpl {
this.power = 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.addCost(new TapSourceCost());
ability.addCost(new DiscardCardCost());

View file

@ -1,4 +1,3 @@
package mage.cards.m;
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.
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.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new SaprolingToken()), new RemoveCountersSourceCost(CounterType.SPORE.createInstance(3))));
// Sacrifice a Saproling: You gain 2 life.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainLifeEffect(2),
new SacrificeTargetCost(new TargetControlledPermanent(1, 1, filter, false))));

View file

@ -1,4 +1,3 @@
package mage.cards.p;
import java.util.UUID;
@ -24,6 +23,7 @@ public final class PactOfTheTitan extends CardImpl {
// Create a 4/4 red Giant creature token.
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.
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new PactDelayedTriggeredAbility(new ManaCostsImpl("{4}{R}"))));
}

View file

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

View file

@ -1,4 +1,3 @@
package mage.cards.r;
import java.util.UUID;
@ -39,8 +38,10 @@ public final class RiftmarkedKnight extends CardImpl {
// Protection from black; flanking
this.addAbility(ProtectionAbility.from(ObjectColor.BLACK));
this.addAbility(new FlankingAbility());
// Suspend 3-{1}{W}{W}
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.
this.addAbility(new RiftmarkedKnightTriggeredAbility());
}

View file

@ -1,4 +1,3 @@
package mage.cards.s;
import java.util.UUID;
@ -14,7 +13,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
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.toughness = new MageInt(1);
// {1}, {tap}, 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}"));
// {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 MetallicSliverToken()), new ManaCostsImpl("{1}"));
ability.addCost(new TapSourceCost());
ability.addCost(new DiscardCardCost());
this.addAbility(ability);

View file

@ -1,4 +1,3 @@
package mage.cards.u;
import mage.abilities.Ability;
@ -28,7 +27,8 @@ public final class UrzasFactory extends CardImpl {
// {tap}: Add {C}.
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.addCost(new TapSourceCost());
this.addAbility(ability);

View file

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

View file

@ -19,7 +19,7 @@ public final class BearToken extends TokenImpl {
power = 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) {

View file

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

View file

@ -6,27 +6,33 @@ import mage.constants.SubType;
import mage.MageInt;
import mage.abilities.keyword.ShroudAbility;
import java.util.Arrays;
/**
*
* @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");
cardType.add(CardType.CREATURE);
color.setGreen(true);
subtype.add(SubType.INSECT);
power = new MageInt(6);
toughness = new MageInt(1);
// Shroud
this.addAbility(ShroudAbility.getInstance());
availableImageSetCodes = Arrays.asList("PLC", "TSR");
}
public DeadlyGrubToken(final DeadlyGrubToken token) {
public DeadlyGrubInsectToken(final DeadlyGrubInsectToken token) {
super(token);
}
public DeadlyGrubToken copy() {
return new DeadlyGrubToken(this);
public DeadlyGrubInsectToken copy() {
return new DeadlyGrubInsectToken(this);
}
}

View file

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

View file

@ -18,7 +18,6 @@ public final class FesteringGoblinToken extends TokenImpl {
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.\"");
this.setOriginalExpansionSetCode("FUT");
cardType.add(CardType.CREATURE);
color.setBlack(true);
subtype.add(SubType.ZOMBIE);

View file

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

View file

@ -14,16 +14,10 @@ import java.util.List;
*/
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) {
this();
// token image don't have haste info so it's ok to use same class for different versions
if (withHaste) {
addAbility(HasteAbility.getInstance());
this.description = "1/1 red Goblin creature token with haste";
@ -31,22 +25,16 @@ public final class GoblinToken extends TokenImpl {
}
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");
availableImageSetCodes = tokenImageSets;
setOriginalExpansionSetCode(setCode);
cardType.add(CardType.CREATURE);
subtype.add(SubType.GOBLIN);
color.setRed(true);
power = 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) {

View file

@ -20,7 +20,6 @@ public final class GoldmeadowHarrierToken extends TokenImpl {
public GoldmeadowHarrierToken() {
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);
color.setWhite(true);
subtype.add(SubType.KITHKIN);

View file

@ -19,9 +19,11 @@ public final class GriffinToken extends TokenImpl {
subtype.add(SubType.GRIFFIN);
power = new MageInt(2);
toughness = new MageInt(2);
// Flying
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) {

View file

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

View file

@ -20,7 +20,7 @@ public final class KithkinSoldierToken extends TokenImpl {
power = 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) {

View file

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

View file

@ -5,27 +5,30 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.MageInt;
import java.util.Arrays;
/**
*
* @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");
cardType.add(CardType.CREATURE);
cardType.add(CardType.ARTIFACT);
subtype.add(SubType.SLIVER);
power = 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);
}
public SliversmithToken copy() {
return new SliversmithToken(this);
public MetallicSliverToken copy() {
return new MetallicSliverToken(this);
}
}

View file

@ -22,7 +22,7 @@ public final class PegasusToken extends TokenImpl {
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) {

View file

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

View file

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

View file

@ -19,7 +19,7 @@ public final class RatToken extends TokenImpl {
power = 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) {

View file

@ -7,6 +7,8 @@ import mage.MageInt;
import mage.ObjectColor;
import mage.abilities.keyword.ReachAbility;
import java.util.Arrays;
/**
*
* @author spjspj
@ -15,14 +17,16 @@ public final class RenownedWeaverSpiderToken extends TokenImpl {
public RenownedWeaverSpiderToken() {
super("Spider", "1/3 green Spider enchantment creature token with reach");
this.setOriginalExpansionSetCode("JOU");
cardType.add(CardType.ENCHANTMENT);
cardType.add(CardType.CREATURE);
color.setColor(ObjectColor.GREEN);
subtype.add(SubType.SPIDER);
power = new MageInt(1);
toughness = new MageInt(3);
this.addAbility(ReachAbility.getInstance());
availableImageSetCodes = Arrays.asList("JOU");
}
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.ProtectionAbility;
import java.util.Arrays;
/**
*
* @author spjspj
@ -22,9 +24,12 @@ public final class RiftmarkedKnightToken extends TokenImpl {
subtype.add(SubType.KNIGHT);
power = new MageInt(2);
toughness = new MageInt(2);
this.addAbility(ProtectionAbility.from(ObjectColor.WHITE));
this.addAbility(new FlankingAbility());
this.addAbility(ProtectionAbility.from(ObjectColor.WHITE));
this.addAbility(HasteAbility.getInstance());
availableImageSetCodes = Arrays.asList("PLC", "TSR");
}
public RiftmarkedKnightToken(final RiftmarkedKnightToken token) {

View file

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

View file

@ -19,6 +19,8 @@ import mage.players.Player;
import mage.target.Target;
import mage.target.common.TargetCardInExile;
import java.util.Arrays;
/**
* @author spjspj
*/
@ -31,12 +33,18 @@ public final class SengirNosferatuBatToken extends TokenImpl {
subtype.add(SubType.BAT);
power = new MageInt(1);
toughness = new MageInt(2);
// Flying
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();
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.addCost(new SacrificeSourceCost());
this.addAbility(ability);
availableImageSetCodes = Arrays.asList("TSP", "TSR");
}
public SengirNosferatuBatToken(final SengirNosferatuBatToken token) {

View file

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

View file

@ -1,5 +1,3 @@
package mage.game.permanent.token;
import mage.constants.CardType;
import mage.constants.SubType;
@ -18,7 +16,6 @@ public final class SparkElementalToken extends TokenImpl {
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.\"");
this.setOriginalExpansionSetCode("FUT");
cardType.add(CardType.CREATURE);
color.setRed(true);
subtype.add(SubType.ELEMENTAL);

View file

@ -23,7 +23,7 @@ public final class ThopterColorlessToken extends TokenImpl {
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