[ZNR] Added tokens support and download

This commit is contained in:
Oleg Agafonov 2020-11-05 12:22:55 +04:00
parent 778729f20a
commit 6bc040ef6c
17 changed files with 90 additions and 56 deletions

View file

@ -448,6 +448,18 @@ public class ScryfallImageSupportTokens {
put("M21/Weird", "https://api.scryfall.com/cards/tm21/13/en?format=image"); put("M21/Weird", "https://api.scryfall.com/cards/tm21/13/en?format=image");
put("M21/Zombie", "https://api.scryfall.com/cards/tm21/7/en?format=image"); put("M21/Zombie", "https://api.scryfall.com/cards/tm21/7/en?format=image");
// ZNR
put("ZNR/Angel Warrior", "https://api.scryfall.com/cards/tznr/1/en?format=image");
put("ZNR/Cat Beast", "https://api.scryfall.com/cards/tznr/3/en?format=image");
put("ZNR/Cat", "https://api.scryfall.com/cards/tznr/2/en?format=image");
put("ZNR/Construct", "https://api.scryfall.com/cards/tznr/10/en?format=image");
put("ZNR/Drake", "https://api.scryfall.com/cards/tznr/5/en?format=image");
put("ZNR/Goblin Construct", "https://api.scryfall.com/cards/tznr/11/en?format=image");
put("ZNR/Hydra", "https://api.scryfall.com/cards/tznr/9/en?format=image");
put("ZNR/Illusion", "https://api.scryfall.com/cards/tznr/6/en?format=image");
put("ZNR/Insect", "https://api.scryfall.com/cards/tznr/7/en?format=image");
put("ZNR/Kor Warrior", "https://api.scryfall.com/cards/tznr/4/en?format=image");
put("ZNR/Plant", "https://api.scryfall.com/cards/tznr/8/en?format=image");
// generate supported sets // generate supported sets
supportedSets.clear(); supportedSets.clear();

View file

@ -1426,3 +1426,16 @@
# Jumpstart uses tokens and emblems from M21 set, # Jumpstart uses tokens and emblems from M21 set,
# TODO: check scryfall for JMP tokens after set's release # TODO: check scryfall for JMP tokens after set's release
|Generate|TOK:JMP|Unicorn|||UnicornToken| |Generate|TOK:JMP|Unicorn|||UnicornToken|
# ZNR
|Generate|TOK:ZNR|Angel Warrior|||AngelWarriorToken|
|Generate|TOK:ZNR|Cat|||CatToken3|
|Generate|TOK:ZNR|Cat Beast|||CatBeastToken|
|Generate|TOK:ZNR|Construct|||ConstructToken|
|Generate|TOK:ZNR|Goblin Construct|||RelicRobberToken|
|Generate|TOK:ZNR|Drake|||DrakeToken|
|Generate|TOK:ZNR|Hydra|||GrakmawSkyclaveRavagerHydraToken|
|Generate|TOK:ZNR|Illusion|||CustomIllusionToken|
|Generate|TOK:ZNR|Insect|||InsectToken|
|Generate|TOK:ZNR|Kor Warrior|||KorWarriorToken|
|Generate|TOK:ZNR|Plant|||PlantToken|

View file

@ -3,6 +3,7 @@ package mage.cards.g;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.DiesCreatureTriggeredAbility; import mage.abilities.common.DiesCreatureTriggeredAbility;
import mage.abilities.common.DiesSourceTriggeredAbility;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect;
@ -18,10 +19,9 @@ import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.permanent.AnotherPredicate; import mage.filter.predicate.permanent.AnotherPredicate;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.game.permanent.token.GrakmawSkyclaveRavagerToken; import mage.game.permanent.token.GrakmawSkyclaveRavagerHydraToken;
import java.util.UUID; import java.util.UUID;
import mage.abilities.common.DiesSourceTriggeredAbility;
/** /**
* @author TheElk801 * @author TheElk801
@ -96,7 +96,7 @@ class GrakmawSkyclaveRavagerEffect extends OneShotEffect {
if (permanent != null) { if (permanent != null) {
counters = permanent.getCounters(game).getCount(CounterType.P1P1); counters = permanent.getCounters(game).getCount(CounterType.P1P1);
} }
return new GrakmawSkyclaveRavagerToken(counters).putOntoBattlefield( return new GrakmawSkyclaveRavagerHydraToken(counters).putOntoBattlefield(
1, game, source.getSourceId(), source.getControllerId() 1, game, source.getSourceId(), source.getControllerId()
); );
} }

View file

@ -12,7 +12,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.token.InscriptionOfInsightToken; import mage.game.permanent.token.CustomIllusionToken;
import mage.players.Player; import mage.players.Player;
import mage.target.TargetPlayer; import mage.target.TargetPlayer;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
@ -80,8 +80,8 @@ class InscriptionOfInsightEffect extends OneShotEffect {
if (player == null) { if (player == null) {
return false; return false;
} }
int cardsInHand = player.getHand().size();
return new InscriptionOfInsightToken(player.getHand().size()).putOntoBattlefield( return new CustomIllusionToken(player.getHand().size()).putOntoBattlefield(
1, game, source.getSourceId(), source.getFirstTarget() 1, game, source.getSourceId(), source.getFirstTarget()
); );
} }

View file

@ -17,7 +17,7 @@ import mage.filter.predicate.permanent.TokenPredicate;
import mage.game.ExileZone; import mage.game.ExileZone;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.game.permanent.token.InscriptionOfInsightToken; import mage.game.permanent.token.CustomIllusionToken;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import mage.util.CardUtil; import mage.util.CardUtil;
@ -104,7 +104,7 @@ class SkyclaveApparitionEffect extends OneShotEffect {
card.getOwnerId(), (u, i) -> i == null ? card.getConvertedManaCost() : Integer.sum(card.getConvertedManaCost(), i) card.getOwnerId(), (u, i) -> i == null ? card.getConvertedManaCost() : Integer.sum(card.getConvertedManaCost(), i)
)); ));
for (Map.Entry<UUID, Integer> entry : map.entrySet()) { for (Map.Entry<UUID, Integer> entry : map.entrySet()) {
new InscriptionOfInsightToken(entry.getValue()).putOntoBattlefield( new CustomIllusionToken(entry.getValue()).putOntoBattlefield(
1, game, source.getSourceId(), entry.getKey() 1, game, source.getSourceId(), entry.getKey()
); );
} }

View file

@ -5,14 +5,10 @@ import mage.abilities.keyword.FlyingAbility;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
public final class AngelToken extends TokenImpl { public final class AngelToken extends TokenImpl {
static final private List<String> tokenImageSets = new ArrayList<>();
public AngelToken() { public AngelToken() {
super("Angel", "4/4 white Angel creature token with flying"); super("Angel", "4/4 white Angel creature token with flying");
cardType.add(CardType.CREATURE); cardType.add(CardType.CREATURE);

View file

@ -5,6 +5,8 @@ import mage.abilities.keyword.FlyingAbility;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import java.util.Arrays;
public final class AngelWarriorToken extends TokenImpl { public final class AngelWarriorToken extends TokenImpl {
public AngelWarriorToken() { public AngelWarriorToken() {
@ -15,7 +17,10 @@ public final class AngelWarriorToken extends TokenImpl {
subtype.add(SubType.WARRIOR); subtype.add(SubType.WARRIOR);
power = new MageInt(4); power = new MageInt(4);
toughness = new MageInt(4); toughness = new MageInt(4);
addAbility(FlyingAbility.getInstance()); addAbility(FlyingAbility.getInstance());
availableImageSetCodes = Arrays.asList("ZNR");
} }
public AngelWarriorToken(final AngelWarriorToken token) { public AngelWarriorToken(final AngelWarriorToken token) {

View file

@ -4,6 +4,8 @@ import mage.MageInt;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import java.util.Arrays;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
@ -17,6 +19,8 @@ public final class CatBeastToken extends TokenImpl {
subtype.add(SubType.BEAST); subtype.add(SubType.BEAST);
power = new MageInt(2); power = new MageInt(2);
toughness = new MageInt(2); toughness = new MageInt(2);
availableImageSetCodes = Arrays.asList("ZNR");
} }
public CatBeastToken(final CatBeastToken token) { public CatBeastToken(final CatBeastToken token) {

View file

@ -4,6 +4,8 @@ import mage.MageInt;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import java.util.Arrays;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
@ -16,6 +18,8 @@ public final class CatToken3 extends TokenImpl {
subtype.add(SubType.CAT); subtype.add(SubType.CAT);
power = new MageInt(1); power = new MageInt(1);
toughness = new MageInt(1); toughness = new MageInt(1);
availableImageSetCodes = Arrays.asList("ZNR");
} }
private CatToken3(final CatToken3 token) { private CatToken3(final CatToken3 token) {

View file

@ -4,6 +4,8 @@ import mage.MageInt;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import java.util.Arrays;
/** /**
* @author spjspj * @author spjspj
*/ */
@ -16,6 +18,8 @@ public final class ConstructToken extends TokenImpl {
subtype.add(SubType.CONSTRUCT); subtype.add(SubType.CONSTRUCT);
power = new MageInt(1); power = new MageInt(1);
toughness = new MageInt(1); toughness = new MageInt(1);
availableImageSetCodes = Arrays.asList("ZNR");
} }
public ConstructToken(final ConstructToken token) { public ConstructToken(final ConstructToken token) {

View file

@ -4,25 +4,29 @@ import mage.MageInt;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import java.util.Arrays;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
public final class InscriptionOfInsightToken extends TokenImpl { public final class CustomIllusionToken extends TokenImpl {
public InscriptionOfInsightToken(int xValue) { public CustomIllusionToken(int xValue) {
super("Illusion", "X/X blue Illusion creature token"); super("Illusion", "X/X blue Illusion creature token");
cardType.add(CardType.CREATURE); cardType.add(CardType.CREATURE);
color.setBlue(true); color.setBlue(true);
subtype.add(SubType.ILLUSION); subtype.add(SubType.ILLUSION);
power = new MageInt(xValue); power = new MageInt(xValue);
toughness = new MageInt(xValue); toughness = new MageInt(xValue);
availableImageSetCodes = Arrays.asList("ZNR");
} }
public InscriptionOfInsightToken(final InscriptionOfInsightToken token) { public CustomIllusionToken(final CustomIllusionToken token) {
super(token); super(token);
} }
public InscriptionOfInsightToken copy() { public CustomIllusionToken copy() {
return new InscriptionOfInsightToken(this); return new CustomIllusionToken(this);
} }
} }

View file

@ -1,14 +1,14 @@
package mage.game.permanent.token; package mage.game.permanent.token;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.MageInt; import mage.MageInt;
import mage.ObjectColor; import mage.ObjectColor;
import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.FlyingAbility;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.Arrays;
/** /**
*
* @author North * @author North
*/ */
public final class DrakeToken extends TokenImpl { public final class DrakeToken extends TokenImpl {
@ -23,6 +23,8 @@ public final class DrakeToken extends TokenImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
availableImageSetCodes = Arrays.asList("AKH", "C15", "C19", "M13", "C20", "ZNR");
} }
public DrakeToken(final DrakeToken token) { public DrakeToken(final DrakeToken token) {

View file

@ -4,12 +4,14 @@ import mage.MageInt;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import java.util.Arrays;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
public final class GrakmawSkyclaveRavagerToken extends TokenImpl { public final class GrakmawSkyclaveRavagerHydraToken extends TokenImpl {
public GrakmawSkyclaveRavagerToken(int xValue) { public GrakmawSkyclaveRavagerHydraToken(int xValue) {
super("Hydra", "X/X black and green Hydra creature token"); super("Hydra", "X/X black and green Hydra creature token");
cardType.add(CardType.CREATURE); cardType.add(CardType.CREATURE);
color.setBlack(true); color.setBlack(true);
@ -17,13 +19,15 @@ public final class GrakmawSkyclaveRavagerToken extends TokenImpl {
subtype.add(SubType.HYDRA); subtype.add(SubType.HYDRA);
power = new MageInt(xValue); power = new MageInt(xValue);
toughness = new MageInt(xValue); toughness = new MageInt(xValue);
availableImageSetCodes = Arrays.asList("ZNR");
} }
private GrakmawSkyclaveRavagerToken(final GrakmawSkyclaveRavagerToken token) { private GrakmawSkyclaveRavagerHydraToken(final GrakmawSkyclaveRavagerHydraToken token) {
super(token); super(token);
} }
public GrakmawSkyclaveRavagerToken copy() { public GrakmawSkyclaveRavagerHydraToken copy() {
return new GrakmawSkyclaveRavagerToken(this); return new GrakmawSkyclaveRavagerHydraToken(this);
} }
} }

View file

@ -1,28 +1,18 @@
package mage.game.permanent.token; package mage.game.permanent.token;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import mage.MageInt; import mage.MageInt;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import java.util.Arrays;
/** /**
*
* @author BetaSteward_at_googlemail.com * @author BetaSteward_at_googlemail.com
*/ */
public final class InsectToken extends TokenImpl { public final class InsectToken extends TokenImpl {
static final private List<String> tokenImageSets = new ArrayList<>();
static {
tokenImageSets.addAll(Arrays.asList("M10", "MM2", "SOI"));
}
public InsectToken() { public InsectToken() {
this((String)null); this((String) null);
} }
public InsectToken(String setCode) { public InsectToken(String setCode) {
@ -34,7 +24,7 @@ public final class InsectToken extends TokenImpl {
power = new MageInt(1); power = new MageInt(1);
toughness = new MageInt(1); toughness = new MageInt(1);
availableImageSetCodes = tokenImageSets; availableImageSetCodes = Arrays.asList("M10", "MM2", "SOI", "ZNR");
} }
public InsectToken(final InsectToken token) { public InsectToken(final InsectToken token) {

View file

@ -4,8 +4,9 @@ import mage.MageInt;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import java.util.Arrays;
/** /**
*
* @author TheElk801 * @author TheElk801
*/ */
public final class KorWarriorToken extends TokenImpl { public final class KorWarriorToken extends TokenImpl {
@ -18,6 +19,8 @@ public final class KorWarriorToken extends TokenImpl {
color.setWhite(true); color.setWhite(true);
power = new MageInt(1); power = new MageInt(1);
toughness = new MageInt(1); toughness = new MageInt(1);
availableImageSetCodes = Arrays.asList("ZNR");
} }
public KorWarriorToken(final KorWarriorToken token) { public KorWarriorToken(final KorWarriorToken token) {

View file

@ -1,20 +1,13 @@
package mage.game.permanent.token; package mage.game.permanent.token;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import mage.MageInt; import mage.MageInt;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import java.util.Arrays;
public final class PlantToken extends TokenImpl { public final class PlantToken extends TokenImpl {
static final private List<String> tokenImageSets = new ArrayList<>();
static {
tokenImageSets.addAll(Arrays.asList("WWK", "DDP", "OGW"));
}
public PlantToken() { public PlantToken() {
super("Plant", "0/1 green Plant creature token"); super("Plant", "0/1 green Plant creature token");
cardType.add(CardType.CREATURE); cardType.add(CardType.CREATURE);
@ -23,7 +16,7 @@ public final class PlantToken extends TokenImpl {
power = new MageInt(0); power = new MageInt(0);
toughness = new MageInt(1); toughness = new MageInt(1);
availableImageSetCodes = tokenImageSets; availableImageSetCodes = Arrays.asList("WWK", "DDP", "OGW", "ZNR");
} }
public PlantToken(final PlantToken token) { public PlantToken(final PlantToken token) {

View file

@ -10,13 +10,10 @@ import mage.constants.Duration;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.TargetController; import mage.constants.TargetController;
import java.util.ArrayList; import java.util.Arrays;
import java.util.List;
public final class RelicRobberToken extends TokenImpl { public final class RelicRobberToken extends TokenImpl {
static final private List<String> tokenImageSets = new ArrayList<>();
public RelicRobberToken() { public RelicRobberToken() {
super("Goblin Construct", "0/1 colorless Goblin Construct artifact creature token with \"This creature can't block\" and \"At the beginning of your upkeep, this creature deals 1 damage to you.\""); super("Goblin Construct", "0/1 colorless Goblin Construct artifact creature token with \"This creature can't block\" and \"At the beginning of your upkeep, this creature deals 1 damage to you.\"");
cardType.add(CardType.ARTIFACT); cardType.add(CardType.ARTIFACT);
@ -25,12 +22,15 @@ public final class RelicRobberToken extends TokenImpl {
subtype.add(SubType.CONSTRUCT); subtype.add(SubType.CONSTRUCT);
power = new MageInt(0); power = new MageInt(0);
toughness = new MageInt(1); toughness = new MageInt(1);
this.addAbility(new SimpleStaticAbility( this.addAbility(new SimpleStaticAbility(
new CantBlockSourceEffect(Duration.WhileOnBattlefield).setText("this creature can't block") new CantBlockSourceEffect(Duration.WhileOnBattlefield).setText("this creature can't block")
)); ));
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new DamageControllerEffect( this.addAbility(new BeginningOfUpkeepTriggeredAbility(new DamageControllerEffect(
1, "this creature" 1, "this creature"
), TargetController.YOU, false)); ), TargetController.YOU, false));
availableImageSetCodes = Arrays.asList("ZNR");
} }
public RelicRobberToken(final RelicRobberToken token) { public RelicRobberToken(final RelicRobberToken token) {