diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/collection/viewer/MageBook.java b/Mage.Client/src/main/java/mage/client/deckeditor/collection/viewer/MageBook.java index a9c18d7bd5..e8b5ba9639 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/collection/viewer/MageBook.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/collection/viewer/MageBook.java @@ -401,6 +401,7 @@ public class MageBook extends JComponent { cardDimension = new Dimension(Config.dimensions.frameWidth, Config.dimensions.frameHeight); } PermanentToken newToken = new PermanentToken(token, null, token.getOriginalExpansionSetCode(), null); + newToken.removeSummoningSickness(); PermanentView theToken = new PermanentView(newToken, null, null, null); theToken.setInViewerOnly(true); final MageCard cardImg = Plugins.instance.getMagePermanent(theToken, bigCard, cardDimension, gameId, true); @@ -650,7 +651,7 @@ public class MageBook extends JComponent { } } - public void updateSize(String size) { + public void updateSize(String size){ switch (size) { case LAYOUT_3x3: this.conf = new _3x3Configuration(); diff --git a/Mage.Common/src/main/java/mage/view/CardView.java b/Mage.Common/src/main/java/mage/view/CardView.java index cce41e6041..5a0d5a5b58 100644 --- a/Mage.Common/src/main/java/mage/view/CardView.java +++ b/Mage.Common/src/main/java/mage/view/CardView.java @@ -46,6 +46,7 @@ import mage.game.Game; import mage.game.command.Emblem; import mage.game.permanent.Permanent; import mage.game.permanent.PermanentToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.game.stack.Spell; import mage.game.stack.StackAbility; diff --git a/Mage.Sets/src/mage/cards/a/AbhorrentOverlord.java b/Mage.Sets/src/mage/cards/a/AbhorrentOverlord.java index df0618918f..9ff92d2ac6 100644 --- a/Mage.Sets/src/mage/cards/a/AbhorrentOverlord.java +++ b/Mage.Sets/src/mage/cards/a/AbhorrentOverlord.java @@ -43,6 +43,7 @@ import mage.constants.ColoredManaSymbol; import mage.constants.SubType; import mage.constants.TargetController; import mage.filter.StaticFilters; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -78,7 +79,7 @@ public class AbhorrentOverlord extends CardImpl { } } -class AbhorrentOverlordHarpyToken extends Token { +class AbhorrentOverlordHarpyToken extends TokenImpl { public AbhorrentOverlordHarpyToken() { super("Harpy", "1/1 black Harpy creature tokens with flying"); @@ -90,4 +91,11 @@ class AbhorrentOverlordHarpyToken extends Token { this.addAbility(FlyingAbility.getInstance()); } + public AbhorrentOverlordHarpyToken(final AbhorrentOverlordHarpyToken token) { + super(token); + } + + public AbhorrentOverlordHarpyToken copy() { + return new AbhorrentOverlordHarpyToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/a/AcademyDrake.java b/Mage.Sets/src/mage/cards/a/AcademyDrake.java index 3a06af16fd..43e0a31b69 100644 --- a/Mage.Sets/src/mage/cards/a/AcademyDrake.java +++ b/Mage.Sets/src/mage/cards/a/AcademyDrake.java @@ -22,11 +22,12 @@ public class AcademyDrake extends CardImpl { power = new MageInt(2); toughness = new MageInt(2); - // Kicker {4} this.addAbility(new KickerAbility("{4}")); + // Flying addAbility(FlyingAbility.getInstance()); + // If Academy Drake was kicked, it enters the battlefield with two +1/+1 counters on it. this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(2)), KickedCondition.instance, "If {this} was kicked, it enters the battlefield with two +1/+1 counters on it.", "")); diff --git a/Mage.Sets/src/mage/cards/a/AjaniGoldmane.java b/Mage.Sets/src/mage/cards/a/AjaniGoldmane.java index d7c7fd0dba..ad0087f425 100644 --- a/Mage.Sets/src/mage/cards/a/AjaniGoldmane.java +++ b/Mage.Sets/src/mage/cards/a/AjaniGoldmane.java @@ -47,6 +47,7 @@ import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; @@ -88,7 +89,7 @@ public class AjaniGoldmane extends CardImpl { } -class AvatarToken extends Token { +class AvatarToken extends TokenImpl { public AvatarToken() { super("Avatar", "white Avatar creature token with \"This creature's power and toughness are each equal to your life total.\""); @@ -97,7 +98,13 @@ class AvatarToken extends Token { color.setWhite(true); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new AvatarTokenEffect())); } + public AvatarToken(final AvatarToken token) { + super(token); + } + public AvatarToken copy() { + return new AvatarToken(this); + } } class AvatarTokenEffect extends ContinuousEffectImpl { diff --git a/Mage.Sets/src/mage/cards/a/AjanisChosen.java b/Mage.Sets/src/mage/cards/a/AjanisChosen.java index 56cdd43624..f6e6abfd4f 100644 --- a/Mage.Sets/src/mage/cards/a/AjanisChosen.java +++ b/Mage.Sets/src/mage/cards/a/AjanisChosen.java @@ -38,6 +38,7 @@ import mage.filter.common.FilterControlledEnchantmentPermanent; import mage.game.Game; import mage.game.permanent.Permanent; import mage.game.permanent.token.CatToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; diff --git a/Mage.Sets/src/mage/cards/a/AkkiLavarunner.java b/Mage.Sets/src/mage/cards/a/AkkiLavarunner.java index f2c8b1e86a..c710008ce6 100644 --- a/Mage.Sets/src/mage/cards/a/AkkiLavarunner.java +++ b/Mage.Sets/src/mage/cards/a/AkkiLavarunner.java @@ -19,6 +19,7 @@ import mage.game.events.DamagedPlayerEvent; import mage.game.events.GameEvent; import mage.game.events.GameEvent.EventType; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -84,7 +85,7 @@ class AkkiLavarunnerAbility extends TriggeredAbilityImpl { } } -class TokTokVolcanoBorn extends Token { +class TokTokVolcanoBorn extends TokenImpl { TokTokVolcanoBorn() { super("Tok-Tok, Volcano Born", ""); addSuperType(SuperType.LEGENDARY); @@ -97,6 +98,13 @@ class TokTokVolcanoBorn extends Token { this.addAbility(ProtectionAbility.from(ObjectColor.RED)); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new TokTokVolcanoBornEffect())); } + public TokTokVolcanoBorn(final TokTokVolcanoBorn token) { + super(token); + } + + public TokTokVolcanoBorn copy() { + return new TokTokVolcanoBorn(this); + } } class TokTokVolcanoBornEffect extends ReplacementEffectImpl { diff --git a/Mage.Sets/src/mage/cards/a/AkroanHorse.java b/Mage.Sets/src/mage/cards/a/AkroanHorse.java index 6b309c0dc5..c02c7e1567 100644 --- a/Mage.Sets/src/mage/cards/a/AkroanHorse.java +++ b/Mage.Sets/src/mage/cards/a/AkroanHorse.java @@ -43,6 +43,7 @@ import mage.constants.*; import mage.game.Game; import mage.game.permanent.Permanent; import mage.game.permanent.token.SoldierToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; import mage.target.Target; diff --git a/Mage.Sets/src/mage/cards/a/AmbushCommander.java b/Mage.Sets/src/mage/cards/a/AmbushCommander.java index 47466562de..54851fb9b3 100644 --- a/Mage.Sets/src/mage/cards/a/AmbushCommander.java +++ b/Mage.Sets/src/mage/cards/a/AmbushCommander.java @@ -43,6 +43,7 @@ import mage.constants.*; import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetCreaturePermanent; @@ -89,7 +90,7 @@ public class AmbushCommander extends CardImpl { } } -class AmbushCommanderToken extends Token { +class AmbushCommanderToken extends TokenImpl { public AmbushCommanderToken() { super("Elf", "1/1 green Elf creatures"); @@ -99,5 +100,12 @@ class AmbushCommanderToken extends Token { toughness = new MageInt(1); color.setGreen(true); } + public AmbushCommanderToken(final AmbushCommanderToken token) { + super(token); + } + + public AmbushCommanderToken copy() { + return new AmbushCommanderToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/a/AngelsTomb.java b/Mage.Sets/src/mage/cards/a/AngelsTomb.java index c95f6e5d78..9cfa070e56 100644 --- a/Mage.Sets/src/mage/cards/a/AngelsTomb.java +++ b/Mage.Sets/src/mage/cards/a/AngelsTomb.java @@ -37,6 +37,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -62,7 +63,7 @@ public class AngelsTomb extends CardImpl { } } -class AngelTombToken extends Token { +class AngelTombToken extends TokenImpl { public AngelTombToken() { super("", "3/3 white Angel artifact creature with flying"); @@ -75,4 +76,11 @@ class AngelTombToken extends Token { toughness = new MageInt(3); addAbility(FlyingAbility.getInstance()); } + public AngelTombToken(final AngelTombToken token) { + super(token); + } + + public AngelTombToken copy() { + return new AngelTombToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/a/AnimateLand.java b/Mage.Sets/src/mage/cards/a/AnimateLand.java index 662b86d37a..b3784a6493 100644 --- a/Mage.Sets/src/mage/cards/a/AnimateLand.java +++ b/Mage.Sets/src/mage/cards/a/AnimateLand.java @@ -34,6 +34,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetLandPermanent; @@ -61,7 +62,7 @@ public class AnimateLand extends CardImpl { } } -class AnimatedLand extends Token { +class AnimatedLand extends TokenImpl { public AnimatedLand() { super("", "3/3 creature"); @@ -69,4 +70,11 @@ class AnimatedLand extends Token { this.power = new MageInt(3); this.toughness = new MageInt(3); } + public AnimatedLand(final AnimatedLand token) { + super(token); + } + + public AnimatedLand copy() { + return new AnimatedLand(this); + } } diff --git a/Mage.Sets/src/mage/cards/a/AnthousaSetessanHero.java b/Mage.Sets/src/mage/cards/a/AnthousaSetessanHero.java index 7725d33087..99f8f2cb32 100644 --- a/Mage.Sets/src/mage/cards/a/AnthousaSetessanHero.java +++ b/Mage.Sets/src/mage/cards/a/AnthousaSetessanHero.java @@ -39,6 +39,7 @@ import mage.constants.Duration; import mage.constants.SubType; import mage.constants.SuperType; import mage.filter.common.FilterControlledLandPermanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetControlledPermanent; @@ -73,7 +74,7 @@ public class AnthousaSetessanHero extends CardImpl { } } -class AnthousaWarriorToken extends Token { +class AnthousaWarriorToken extends TokenImpl { public AnthousaWarriorToken() { super("", "2/2 Warrior creatures"); @@ -82,5 +83,12 @@ class AnthousaWarriorToken extends Token { power = new MageInt(2); toughness = new MageInt(2); } + public AnthousaWarriorToken(final AnthousaWarriorToken token) { + super(token); + } + + public AnthousaWarriorToken copy() { + return new AnthousaWarriorToken(this); + } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/a/ArvadTheCursed.java b/Mage.Sets/src/mage/cards/a/ArvadTheCursed.java new file mode 100644 index 0000000000..7e636384d2 --- /dev/null +++ b/Mage.Sets/src/mage/cards/a/ArvadTheCursed.java @@ -0,0 +1,85 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.cards.a; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.abilities.keyword.DeathtouchAbility; +import mage.abilities.keyword.LifelinkAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SuperType; +import mage.constants.SubType; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.SupertypePredicate; + + +/** + * + * @author Rystan + */ +public class ArvadTheCursed extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("legendary creatures you control"); + + static { + filter.add(new SupertypePredicate(SuperType.LEGENDARY)); + } + + public ArvadTheCursed(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}{B}"); + + addSuperType(SuperType.LEGENDARY); + this.subtype.add(SubType.VAMPIRE); + this.subtype.add(SubType.KNIGHT); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Deathtouch + this.addAbility(DeathtouchAbility.getInstance()); + // Lifelink + this.addAbility(LifelinkAbility.getInstance()); + + // Other legendary creatures you control get +2/+2. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(2, 2, Duration.WhileOnBattlefield, filter, true))); + } + + public ArvadTheCursed(final ArvadTheCursed card) { + super(card); + } + + @Override + public ArvadTheCursed copy() { + return new ArvadTheCursed(this); + } +} diff --git a/Mage.Sets/src/mage/cards/a/AtarkaMonument.java b/Mage.Sets/src/mage/cards/a/AtarkaMonument.java index 4c37a87fec..794bccc1ef 100644 --- a/Mage.Sets/src/mage/cards/a/AtarkaMonument.java +++ b/Mage.Sets/src/mage/cards/a/AtarkaMonument.java @@ -41,6 +41,7 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -70,7 +71,7 @@ public class AtarkaMonument extends CardImpl { return new AtarkaMonument(this); } - private static class AtarkaMonumentToken extends Token { + private static class AtarkaMonumentToken extends TokenImpl { AtarkaMonumentToken() { super("", "4/4 red and green Dragon artifact creature with flying"); cardType.add(CardType.ARTIFACT); @@ -82,5 +83,12 @@ public class AtarkaMonument extends CardImpl { toughness = new MageInt(4); this.addAbility(FlyingAbility.getInstance()); } + public AtarkaMonumentToken(final AtarkaMonumentToken token) { + super(token); + } + + public AtarkaMonumentToken copy() { + return new AtarkaMonumentToken(this); + } } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/a/AwakenTheAncient.java b/Mage.Sets/src/mage/cards/a/AwakenTheAncient.java index f53bb97e9b..37549cb360 100644 --- a/Mage.Sets/src/mage/cards/a/AwakenTheAncient.java +++ b/Mage.Sets/src/mage/cards/a/AwakenTheAncient.java @@ -39,6 +39,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.filter.common.FilterLandPermanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetPermanent; import mage.target.common.TargetLandPermanent; @@ -78,7 +79,7 @@ public class AwakenTheAncient extends CardImpl { return new AwakenTheAncient(this); } - private static class GiantToken extends Token { + private static class GiantToken extends TokenImpl { GiantToken() { super("Giant", "7/7 red Giant creature with haste"); @@ -89,5 +90,13 @@ public class AwakenTheAncient extends CardImpl { toughness = new MageInt(7); this.addAbility(HasteAbility.getInstance()); } + + public GiantToken(final GiantToken token) { + super(token); + } + + public GiantToken copy() { + return new GiantToken(this); + } } } diff --git a/Mage.Sets/src/mage/cards/a/AwakenerDruid.java b/Mage.Sets/src/mage/cards/a/AwakenerDruid.java index 8b9f7ae106..6db18cff04 100644 --- a/Mage.Sets/src/mage/cards/a/AwakenerDruid.java +++ b/Mage.Sets/src/mage/cards/a/AwakenerDruid.java @@ -40,6 +40,7 @@ import mage.constants.*; import mage.filter.common.FilterLandPermanent; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetLandPermanent; @@ -107,7 +108,7 @@ class AwakenerDruidBecomesCreatureEffect extends BecomesCreatureTargetEffect { } } -class AwakenerDruidToken extends Token { +class AwakenerDruidToken extends TokenImpl { public AwakenerDruidToken() { super("", "4/5 green Treefolk creature as long as {this} is on the battlefield"); @@ -117,5 +118,11 @@ class AwakenerDruidToken extends Token { power = new MageInt(4); toughness = new MageInt(5); } + public AwakenerDruidToken(final AwakenerDruidToken token) { + super(token); + } + public AwakenerDruidToken copy() { + return new AwakenerDruidToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/a/AzoriusKeyrune.java b/Mage.Sets/src/mage/cards/a/AzoriusKeyrune.java index b7347e9341..6cb93200fd 100644 --- a/Mage.Sets/src/mage/cards/a/AzoriusKeyrune.java +++ b/Mage.Sets/src/mage/cards/a/AzoriusKeyrune.java @@ -41,6 +41,7 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -68,7 +69,7 @@ public class AzoriusKeyrune extends CardImpl { return new AzoriusKeyrune(this); } - private static class AzoriusKeyruneToken extends Token { + private static class AzoriusKeyruneToken extends TokenImpl { AzoriusKeyruneToken() { super("", "2/2 white and blue Bird artifact creature with flying"); cardType.add(CardType.ARTIFACT); @@ -80,5 +81,12 @@ public class AzoriusKeyrune extends CardImpl { toughness = new MageInt(2); this.addAbility(FlyingAbility.getInstance()); } + public AzoriusKeyruneToken(final AzoriusKeyruneToken token) { + super(token); + } + + public AzoriusKeyruneToken copy() { + return new AzoriusKeyruneToken(this); + } } } diff --git a/Mage.Sets/src/mage/cards/b/BairdStewardOfArgive.java b/Mage.Sets/src/mage/cards/b/BairdStewardOfArgive.java new file mode 100644 index 0000000000..eaefe8e425 --- /dev/null +++ b/Mage.Sets/src/mage/cards/b/BairdStewardOfArgive.java @@ -0,0 +1,74 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.cards.b; + +import java.util.UUID; + +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.combat.CantAttackYouUnlessPayManaAllEffect; +import mage.abilities.keyword.VigilanceAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.SuperType; +import mage.constants.Zone; + +/** + * @author JRHerlehy + * Created on 4/4/18. + */ +public class BairdStewardOfArgive extends CardImpl { + + public BairdStewardOfArgive(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}{W}"); + + this.addSuperType(SuperType.LEGENDARY); + this.subtype.add(SubType.HUMAN, SubType.SOLDIER); + + this.power = new MageInt(2); + this.toughness = new MageInt(4); + + //Vigilance + this.addAbility(VigilanceAbility.getInstance()); + + //Creatures can’t attack you or a planeswalker you control unless their controller pays {1} for each of those creatures. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantAttackYouUnlessPayManaAllEffect(new ManaCostsImpl("{1}"), true))); + } + + public BairdStewardOfArgive(final BairdStewardOfArgive card) { + super(card); + } + + @Override + public BairdStewardOfArgive copy() { + return new BairdStewardOfArgive(this); + } +} diff --git a/Mage.Sets/src/mage/cards/b/BalduvianConjurer.java b/Mage.Sets/src/mage/cards/b/BalduvianConjurer.java index c96cf954a5..73c8d9a8f1 100644 --- a/Mage.Sets/src/mage/cards/b/BalduvianConjurer.java +++ b/Mage.Sets/src/mage/cards/b/BalduvianConjurer.java @@ -37,6 +37,7 @@ import mage.cards.CardSetInfo; import mage.constants.*; import mage.filter.common.FilterLandPermanent; import mage.filter.predicate.mageobject.SupertypePredicate; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetPermanent; @@ -77,7 +78,7 @@ public class BalduvianConjurer extends CardImpl { } } -class AnimatedLand extends Token { +class AnimatedLand extends TokenImpl { public AnimatedLand() { super("", "2/2 creature"); @@ -85,4 +86,11 @@ class AnimatedLand extends Token { this.power = new MageInt(2); this.toughness = new MageInt(2); } + public AnimatedLand(final AnimatedLand token) { + super(token); + } + + public AnimatedLand copy() { + return new AnimatedLand(this); + } } diff --git a/Mage.Sets/src/mage/cards/b/BalduvianFrostwaker.java b/Mage.Sets/src/mage/cards/b/BalduvianFrostwaker.java index 2e00ca988e..5ea5b3de7a 100644 --- a/Mage.Sets/src/mage/cards/b/BalduvianFrostwaker.java +++ b/Mage.Sets/src/mage/cards/b/BalduvianFrostwaker.java @@ -40,6 +40,7 @@ import mage.cards.CardSetInfo; import mage.constants.*; import mage.filter.common.FilterLandPermanent; import mage.filter.predicate.mageobject.SupertypePredicate; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetPermanent; @@ -79,7 +80,7 @@ public class BalduvianFrostwaker extends CardImpl { } } -class BalduvianFrostwakerToken extends Token { +class BalduvianFrostwakerToken extends TokenImpl { public BalduvianFrostwakerToken() { super("Elemental", "2/2 blue Elemental creature with flying"); @@ -90,4 +91,11 @@ class BalduvianFrostwakerToken extends Token { this.toughness = new MageInt(2); this.addAbility(FlyingAbility.getInstance()); } + public BalduvianFrostwakerToken(final BalduvianFrostwakerToken token) { + super(token); + } + + public BalduvianFrostwakerToken copy() { + return new BalduvianFrostwakerToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/b/BaruFistOfKrosa.java b/Mage.Sets/src/mage/cards/b/BaruFistOfKrosa.java index a4c067a4bb..933f28667f 100644 --- a/Mage.Sets/src/mage/cards/b/BaruFistOfKrosa.java +++ b/Mage.Sets/src/mage/cards/b/BaruFistOfKrosa.java @@ -49,6 +49,7 @@ import mage.filter.predicate.mageobject.SubtypePredicate; import mage.filter.predicate.permanent.ControllerPredicate; import mage.game.Game; import mage.game.permanent.token.BaruFistOfKrosaToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** diff --git a/Mage.Sets/src/mage/cards/b/BlinkmothNexus.java b/Mage.Sets/src/mage/cards/b/BlinkmothNexus.java index 728ce3b1e0..0a5aed5fed 100644 --- a/Mage.Sets/src/mage/cards/b/BlinkmothNexus.java +++ b/Mage.Sets/src/mage/cards/b/BlinkmothNexus.java @@ -46,6 +46,7 @@ import mage.constants.SubType; import mage.constants.Zone; import mage.filter.FilterPermanent; import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetPermanent; @@ -88,7 +89,7 @@ public class BlinkmothNexus extends CardImpl { } -class BlinkmothNexusToken extends Token { +class BlinkmothNexusToken extends TokenImpl { public BlinkmothNexusToken() { super("Blinkmoth", "1/1 Blinkmoth artifact creature with flying"); cardType.add(CardType.ARTIFACT); @@ -98,4 +99,11 @@ class BlinkmothNexusToken extends Token { toughness = new MageInt(1); this.addAbility(FlyingAbility.getInstance()); } + public BlinkmothNexusToken(final BlinkmothNexusToken token) { + super(token); + } + + public BlinkmothNexusToken copy() { + return new BlinkmothNexusToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/b/BorosKeyrune.java b/Mage.Sets/src/mage/cards/b/BorosKeyrune.java index 0c77135741..ab00eb2524 100644 --- a/Mage.Sets/src/mage/cards/b/BorosKeyrune.java +++ b/Mage.Sets/src/mage/cards/b/BorosKeyrune.java @@ -41,6 +41,7 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -69,7 +70,7 @@ public class BorosKeyrune extends CardImpl { return new BorosKeyrune(this); } - private static class BorosKeyruneToken extends Token { + private static class BorosKeyruneToken extends TokenImpl { BorosKeyruneToken() { super("Soldier", "1/1 red and white Soldier artifact creature with double strike"); cardType.add(CardType.ARTIFACT); @@ -81,5 +82,12 @@ public class BorosKeyrune extends CardImpl { toughness = new MageInt(1); this.addAbility(DoubleStrikeAbility.getInstance()); } + public BorosKeyruneToken(final BorosKeyruneToken token) { + super(token); + } + + public BorosKeyruneToken copy() { + return new BorosKeyruneToken(this); + } } } diff --git a/Mage.Sets/src/mage/cards/b/BrimazKingOfOreskos.java b/Mage.Sets/src/mage/cards/b/BrimazKingOfOreskos.java index 8dd22ace15..a590196abe 100644 --- a/Mage.Sets/src/mage/cards/b/BrimazKingOfOreskos.java +++ b/Mage.Sets/src/mage/cards/b/BrimazKingOfOreskos.java @@ -45,6 +45,7 @@ import mage.game.Game; import mage.game.combat.CombatGroup; import mage.game.permanent.Permanent; import mage.game.permanent.token.CatSoldierCreatureToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; diff --git a/Mage.Sets/src/mage/cards/b/BudokaGardener.java b/Mage.Sets/src/mage/cards/b/BudokaGardener.java index de109a0e97..a9463b13f2 100644 --- a/Mage.Sets/src/mage/cards/b/BudokaGardener.java +++ b/Mage.Sets/src/mage/cards/b/BudokaGardener.java @@ -43,6 +43,7 @@ import mage.filter.common.FilterControlledLandPermanent; import mage.filter.common.FilterControlledPermanent; import mage.game.Game; import mage.game.permanent.token.DokaiWeaverofLifeToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; @@ -111,7 +112,7 @@ class BudokaGardenerEffect extends OneShotEffect { } -class DokaiWeaverofLife extends Token { +class DokaiWeaverofLife extends TokenImpl { DokaiWeaverofLife() { super("Dokai, Weaver of Life", ""); @@ -127,4 +128,11 @@ class DokaiWeaverofLife extends Token { ability.addCost(new TapSourceCost()); this.addAbility(ability); } + public DokaiWeaverofLife(final DokaiWeaverofLife token) { + super(token); + } + + public DokaiWeaverofLife copy() { + return new DokaiWeaverofLife(this); + } } diff --git a/Mage.Sets/src/mage/cards/b/BudokaPupil.java b/Mage.Sets/src/mage/cards/b/BudokaPupil.java index a1a0d1cb7d..b224ddcd8a 100644 --- a/Mage.Sets/src/mage/cards/b/BudokaPupil.java +++ b/Mage.Sets/src/mage/cards/b/BudokaPupil.java @@ -45,6 +45,7 @@ import mage.constants.*; import mage.counters.CounterType; import mage.filter.StaticFilters; import mage.game.events.GameEvent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetCreaturePermanent; @@ -85,7 +86,7 @@ public class BudokaPupil extends CardImpl { } } -class IchigaWhoTopplesOaks extends Token { +class IchigaWhoTopplesOaks extends TokenImpl { IchigaWhoTopplesOaks() { super("Ichiga, Who Topples Oaks", ""); @@ -107,4 +108,11 @@ class IchigaWhoTopplesOaks extends Token { ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); } + public IchigaWhoTopplesOaks(final IchigaWhoTopplesOaks token) { + super(token); + } + + public IchigaWhoTopplesOaks copy() { + return new IchigaWhoTopplesOaks(this); + } } diff --git a/Mage.Sets/src/mage/cards/b/BushiTenderfoot.java b/Mage.Sets/src/mage/cards/b/BushiTenderfoot.java index 95874348dc..53db42aa37 100644 --- a/Mage.Sets/src/mage/cards/b/BushiTenderfoot.java +++ b/Mage.Sets/src/mage/cards/b/BushiTenderfoot.java @@ -43,6 +43,7 @@ import mage.constants.SubType; import mage.constants.SuperType; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.permanent.WasDealtDamageThisTurnPredicate; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import java.util.UUID; @@ -83,7 +84,7 @@ public class BushiTenderfoot extends CardImpl { } } -class KenzoTheHardhearted extends Token { +class KenzoTheHardhearted extends TokenImpl { KenzoTheHardhearted() { super("Kenzo the Hardhearted", ""); @@ -98,4 +99,11 @@ class KenzoTheHardhearted extends Token { this.addAbility(DoubleStrikeAbility.getInstance()); this.addAbility(new BushidoAbility(2)); } + public KenzoTheHardhearted(final KenzoTheHardhearted token) { + super(token); + } + + public KenzoTheHardhearted copy() { + return new KenzoTheHardhearted(this); + } } diff --git a/Mage.Sets/src/mage/cards/c/CabalEvangel.java b/Mage.Sets/src/mage/cards/c/CabalEvangel.java new file mode 100644 index 0000000000..66ea279353 --- /dev/null +++ b/Mage.Sets/src/mage/cards/c/CabalEvangel.java @@ -0,0 +1,60 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.cards.c; + +import java.util.UUID; +import mage.MageInt; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; + +/** + * + * @author Rystan + */ +public class CabalEvangel extends CardImpl { + + public CabalEvangel(UUID ownerId, CardSetInfo setInfo) { + super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{B}"); + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.CLERIC); + + this.power = new MageInt(2); + this.toughness = new MageInt(2); + } + + public CabalEvangel(final CabalEvangel card) { + super(card); + } + + @Override + public CabalEvangel copy() { + return new CabalEvangel(this); + } +} diff --git a/Mage.Sets/src/mage/cards/c/CallowJushi.java b/Mage.Sets/src/mage/cards/c/CallowJushi.java index c8d12f69c9..aa2867a6fd 100644 --- a/Mage.Sets/src/mage/cards/c/CallowJushi.java +++ b/Mage.Sets/src/mage/cards/c/CallowJushi.java @@ -49,6 +49,7 @@ import mage.constants.Zone; import mage.counters.CounterType; import mage.filter.StaticFilters; import mage.game.events.GameEvent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetSpell; @@ -88,7 +89,7 @@ public class CallowJushi extends CardImpl { } } -class JarakuTheInterloper extends Token { +class JarakuTheInterloper extends TokenImpl { JarakuTheInterloper() { super("Jaraku the Interloper", ""); @@ -107,4 +108,11 @@ class JarakuTheInterloper extends Token { ability.addTarget(new TargetSpell()); this.addAbility(ability); } + public JarakuTheInterloper(final JarakuTheInterloper token) { + super(token); + } + + public JarakuTheInterloper copy() { + return new JarakuTheInterloper(this); + } } diff --git a/Mage.Sets/src/mage/cards/c/CelestialColonnade.java b/Mage.Sets/src/mage/cards/c/CelestialColonnade.java index f0b5ebdc0b..982ba8a058 100644 --- a/Mage.Sets/src/mage/cards/c/CelestialColonnade.java +++ b/Mage.Sets/src/mage/cards/c/CelestialColonnade.java @@ -43,6 +43,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -71,7 +72,7 @@ public class CelestialColonnade extends CardImpl { } -class CelestialColonnadeToken extends Token { +class CelestialColonnadeToken extends TokenImpl { public CelestialColonnadeToken() { super("", "4/4 white and blue Elemental creature with flying and vigilance"); @@ -84,5 +85,12 @@ class CelestialColonnadeToken extends Token { addAbility(FlyingAbility.getInstance()); addAbility(VigilanceAbility.getInstance()); } + public CelestialColonnadeToken(final CelestialColonnadeToken token) { + super(token); + } + + public CelestialColonnadeToken copy() { + return new CelestialColonnadeToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/c/ChimericEgg.java b/Mage.Sets/src/mage/cards/c/ChimericEgg.java index c68cd64383..6430539440 100644 --- a/Mage.Sets/src/mage/cards/c/ChimericEgg.java +++ b/Mage.Sets/src/mage/cards/c/ChimericEgg.java @@ -46,6 +46,7 @@ import mage.counters.CounterType; import mage.filter.FilterSpell; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; @@ -82,7 +83,7 @@ public class ChimericEgg extends CardImpl { return new ChimericEgg(this); } - private static class ChimericEggToken extends Token { + private static class ChimericEggToken extends TokenImpl { ChimericEggToken() { super("", "6/6 Construct artifact creature with trample"); cardType.add(CardType.ARTIFACT); @@ -92,5 +93,12 @@ public class ChimericEgg extends CardImpl { toughness = new MageInt(6); this.addAbility(TrampleAbility.getInstance()); } + public ChimericEggToken(final ChimericEggToken token) { + super(token); + } + + public ChimericEggToken copy() { + return new ChimericEggToken(this); + } } } diff --git a/Mage.Sets/src/mage/cards/c/ChimericIdol.java b/Mage.Sets/src/mage/cards/c/ChimericIdol.java index 3db3bc1ab6..9b4e6b0f79 100644 --- a/Mage.Sets/src/mage/cards/c/ChimericIdol.java +++ b/Mage.Sets/src/mage/cards/c/ChimericIdol.java @@ -41,6 +41,7 @@ import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; import mage.filter.common.FilterControlledLandPermanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -69,7 +70,7 @@ public class ChimericIdol extends CardImpl { } } -class ChimericIdolToken extends Token { +class ChimericIdolToken extends TokenImpl { public ChimericIdolToken() { super("Turtle", "3/3 Turtle artifact creature token"); @@ -79,4 +80,11 @@ class ChimericIdolToken extends Token { power = new MageInt(3); toughness = new MageInt(3); } + public ChimericIdolToken(final ChimericIdolToken token) { + super(token); + } + + public ChimericIdolToken copy() { + return new ChimericIdolToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/c/ChimericMass.java b/Mage.Sets/src/mage/cards/c/ChimericMass.java index 8ae0d1fb1a..115efb1266 100644 --- a/Mage.Sets/src/mage/cards/c/ChimericMass.java +++ b/Mage.Sets/src/mage/cards/c/ChimericMass.java @@ -44,6 +44,7 @@ import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; import mage.counters.CounterType; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -73,7 +74,7 @@ public class ChimericMass extends CardImpl { } -class ChimericMassToken extends Token { +class ChimericMassToken extends TokenImpl { public ChimericMassToken() { super("", "Construct artifact creature with \"This creature's power and toughness are each equal to the number of charge counters on it.\""); @@ -83,4 +84,11 @@ class ChimericMassToken extends Token { toughness = new MageInt(0); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SetPowerToughnessSourceEffect(new CountersSourceCount(CounterType.CHARGE), Duration.WhileOnBattlefield))); } + public ChimericMassToken(final ChimericMassToken token) { + super(token); + } + + public ChimericMassToken copy() { + return new ChimericMassToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/c/ChimericSphere.java b/Mage.Sets/src/mage/cards/c/ChimericSphere.java index 2bef93cac5..d4fa5a6d58 100644 --- a/Mage.Sets/src/mage/cards/c/ChimericSphere.java +++ b/Mage.Sets/src/mage/cards/c/ChimericSphere.java @@ -38,6 +38,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -67,7 +68,7 @@ public class ChimericSphere extends CardImpl { } } -class ChimericSphereCreature1 extends Token { +class ChimericSphereCreature1 extends TokenImpl { public ChimericSphereCreature1() { super("Chimeric Sphere", "2/1 Construct artifact creature with flying"); @@ -78,9 +79,16 @@ class ChimericSphereCreature1 extends Token { this.addAbility(FlyingAbility.getInstance()); } + public ChimericSphereCreature1(final ChimericSphereCreature1 token) { + super(token); + } + + public ChimericSphereCreature1 copy() { + return new ChimericSphereCreature1(this); + } } -class ChimericSphereCreature2 extends Token { +class ChimericSphereCreature2 extends TokenImpl { public ChimericSphereCreature2() { super("Chimeric Sphere", "3/2 Construct artifact creature without flying"); @@ -89,5 +97,12 @@ class ChimericSphereCreature2 extends Token { power = new MageInt(3); toughness = new MageInt(2); } + public ChimericSphereCreature2(final ChimericSphereCreature2 token) { + super(token); + } + + public ChimericSphereCreature2 copy() { + return new ChimericSphereCreature2(this); + } } diff --git a/Mage.Sets/src/mage/cards/c/ChronatogTotem.java b/Mage.Sets/src/mage/cards/c/ChronatogTotem.java index 2cb60a672e..ba271f5c71 100644 --- a/Mage.Sets/src/mage/cards/c/ChronatogTotem.java +++ b/Mage.Sets/src/mage/cards/c/ChronatogTotem.java @@ -50,6 +50,7 @@ import mage.constants.EffectType; import mage.constants.Zone; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -122,7 +123,7 @@ class ChronatogTotemAbility extends LimitedTimesPerTurnActivatedAbility { } } -class ChronatogTotemToken extends Token { +class ChronatogTotemToken extends TokenImpl { ChronatogTotemToken() { super("Atog", "1/2 blue Atog artifact creature"); @@ -133,6 +134,13 @@ class ChronatogTotemToken extends Token { toughness = new MageInt(2); color.setBlue(true); } + public ChronatogTotemToken(final ChronatogTotemToken token) { + super(token); + } + + public ChronatogTotemToken copy() { + return new ChronatogTotemToken(this); + } } class ChronatogTotemCondition implements Condition { diff --git a/Mage.Sets/src/mage/cards/c/CorruptedZendikon.java b/Mage.Sets/src/mage/cards/c/CorruptedZendikon.java index ecb1e79db3..01744b45ca 100644 --- a/Mage.Sets/src/mage/cards/c/CorruptedZendikon.java +++ b/Mage.Sets/src/mage/cards/c/CorruptedZendikon.java @@ -43,6 +43,7 @@ import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Outcome; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetPermanent; import mage.target.common.TargetLandPermanent; @@ -85,7 +86,7 @@ public class CorruptedZendikon extends CardImpl { } } -class CorruptedZendikonOozeToken extends Token { +class CorruptedZendikonOozeToken extends TokenImpl { public CorruptedZendikonOozeToken() { super("Ooze", "3/3 black Ooze creature"); @@ -95,5 +96,12 @@ class CorruptedZendikonOozeToken extends Token { this.power = new MageInt(3); this.toughness = new MageInt(3); } + public CorruptedZendikonOozeToken(final CorruptedZendikonOozeToken token) { + super(token); + } + + public CorruptedZendikonOozeToken copy() { + return new CorruptedZendikonOozeToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/c/CreepingTarPit.java b/Mage.Sets/src/mage/cards/c/CreepingTarPit.java index 59ce83209f..288bfcc48c 100644 --- a/Mage.Sets/src/mage/cards/c/CreepingTarPit.java +++ b/Mage.Sets/src/mage/cards/c/CreepingTarPit.java @@ -43,6 +43,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -76,7 +77,7 @@ public class CreepingTarPit extends CardImpl { } -class CreepingTarPitToken extends Token { +class CreepingTarPitToken extends TokenImpl { public CreepingTarPitToken() { super("", "3/2 blue and black Elemental creature and can't be blocked"); cardType.add(CardType.CREATURE); @@ -87,4 +88,11 @@ class CreepingTarPitToken extends Token { toughness = new MageInt(2); this.addAbility(new CantBeBlockedSourceAbility()); } + public CreepingTarPitToken(final CreepingTarPitToken token) { + super(token); + } + + public CreepingTarPitToken copy() { + return new CreepingTarPitToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/c/CrusherZendikon.java b/Mage.Sets/src/mage/cards/c/CrusherZendikon.java index b71aa8c365..c6b9ab3fc9 100644 --- a/Mage.Sets/src/mage/cards/c/CrusherZendikon.java +++ b/Mage.Sets/src/mage/cards/c/CrusherZendikon.java @@ -44,6 +44,7 @@ import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Outcome; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetPermanent; import mage.target.common.TargetLandPermanent; @@ -83,7 +84,7 @@ public class CrusherZendikon extends CardImpl { } } -class BeastToken extends Token { +class BeastToken extends TokenImpl { BeastToken() { super("", "4/2 red Beast creature with trample"); @@ -94,4 +95,11 @@ class BeastToken extends Token { toughness = new MageInt(2); this.addAbility(TrampleAbility.getInstance()); } + public BeastToken(final BeastToken token) { + super(token); + } + + public BeastToken copy() { + return new BeastToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/c/CunningBandit.java b/Mage.Sets/src/mage/cards/c/CunningBandit.java index 82f59bcbb9..2267a698de 100644 --- a/Mage.Sets/src/mage/cards/c/CunningBandit.java +++ b/Mage.Sets/src/mage/cards/c/CunningBandit.java @@ -49,6 +49,7 @@ import mage.constants.Zone; import mage.counters.CounterType; import mage.filter.StaticFilters; import mage.game.events.GameEvent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetCreaturePermanent; @@ -88,7 +89,7 @@ public class CunningBandit extends CardImpl { } } -class AzamukiTreacheryIncarnate extends Token { +class AzamukiTreacheryIncarnate extends TokenImpl { AzamukiTreacheryIncarnate() { super("Azamuki, Treachery Incarnate", ""); @@ -107,4 +108,11 @@ class AzamukiTreacheryIncarnate extends Token { ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); } + public AzamukiTreacheryIncarnate(final AzamukiTreacheryIncarnate token) { + super(token); + } + + public AzamukiTreacheryIncarnate copy() { + return new AzamukiTreacheryIncarnate(this); + } } diff --git a/Mage.Sets/src/mage/cards/d/DanceOfTheSkywise.java b/Mage.Sets/src/mage/cards/d/DanceOfTheSkywise.java index cdb619773f..876e63b1ff 100644 --- a/Mage.Sets/src/mage/cards/d/DanceOfTheSkywise.java +++ b/Mage.Sets/src/mage/cards/d/DanceOfTheSkywise.java @@ -37,6 +37,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetControlledCreaturePermanent; @@ -65,7 +66,7 @@ public class DanceOfTheSkywise extends CardImpl { return new DanceOfTheSkywise(this); } - private static class DragonIllusionToken extends Token { + private static class DragonIllusionToken extends TokenImpl { public DragonIllusionToken() { super("Dragon", "blue Dragon Illusion with base power and toughness 4/4 and with flying"); @@ -77,6 +78,13 @@ public class DanceOfTheSkywise extends CardImpl { toughness = new MageInt(4); this.addAbility(FlyingAbility.getInstance()); } + public DragonIllusionToken(final DragonIllusionToken token) { + super(token); + } + + public DragonIllusionToken copy() { + return new DragonIllusionToken(this); + } } } diff --git a/Mage.Sets/src/mage/cards/d/DarksteelBrute.java b/Mage.Sets/src/mage/cards/d/DarksteelBrute.java index a0b1972cce..69e35546ee 100644 --- a/Mage.Sets/src/mage/cards/d/DarksteelBrute.java +++ b/Mage.Sets/src/mage/cards/d/DarksteelBrute.java @@ -39,6 +39,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -64,7 +65,7 @@ public class DarksteelBrute extends CardImpl { } -class DarksteelBruteToken extends Token { +class DarksteelBruteToken extends TokenImpl { public DarksteelBruteToken() { super("", "2/2 Beast artifact creature"); cardType.add(CardType.ARTIFACT); @@ -72,4 +73,11 @@ class DarksteelBruteToken extends Token { power = new MageInt(2); toughness = new MageInt(2); } + public DarksteelBruteToken(final DarksteelBruteToken token) { + super(token); + } + + public DarksteelBruteToken copy() { + return new DarksteelBruteToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/d/DarksteelMutation.java b/Mage.Sets/src/mage/cards/d/DarksteelMutation.java index 1be8bf04b6..415af1d5ea 100644 --- a/Mage.Sets/src/mage/cards/d/DarksteelMutation.java +++ b/Mage.Sets/src/mage/cards/d/DarksteelMutation.java @@ -42,6 +42,7 @@ import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Outcome; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; @@ -81,7 +82,7 @@ public class DarksteelMutation extends CardImpl { } } -class DarksteelMutationInsectToken extends Token { +class DarksteelMutationInsectToken extends TokenImpl { public DarksteelMutationInsectToken() { super("Insect", "Insect artifact creature with base power and toughness 0/1"); @@ -93,5 +94,12 @@ class DarksteelMutationInsectToken extends Token { this.addAbility(IndestructibleAbility.getInstance()); } + public DarksteelMutationInsectToken(final DarksteelMutationInsectToken token) { + super(token); + } + + public DarksteelMutationInsectToken copy() { + return new DarksteelMutationInsectToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/d/DaxossTorment.java b/Mage.Sets/src/mage/cards/d/DaxossTorment.java index 10ee7aeff9..eb873e41c4 100644 --- a/Mage.Sets/src/mage/cards/d/DaxossTorment.java +++ b/Mage.Sets/src/mage/cards/d/DaxossTorment.java @@ -38,6 +38,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -63,7 +64,7 @@ public class DaxossTorment extends CardImpl { } } -class DaxossTormentToken extends Token { +class DaxossTormentToken extends TokenImpl { public DaxossTormentToken() { super("", "5/5 Demon creature with flying and haste"); @@ -75,4 +76,11 @@ class DaxossTormentToken extends Token { addAbility(FlyingAbility.getInstance()); addAbility(HasteAbility.getInstance()); } + public DaxossTormentToken(final DaxossTormentToken token) { + super(token); + } + + public DaxossTormentToken copy() { + return new DaxossTormentToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/d/DeathByDragons.java b/Mage.Sets/src/mage/cards/d/DeathByDragons.java index 793f6bea10..57933f54f7 100644 --- a/Mage.Sets/src/mage/cards/d/DeathByDragons.java +++ b/Mage.Sets/src/mage/cards/d/DeathByDragons.java @@ -36,6 +36,7 @@ import mage.constants.CardType; import mage.constants.Outcome; import mage.game.Game; import mage.game.permanent.token.DragonToken2; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; import mage.target.TargetPlayer; diff --git a/Mage.Sets/src/mage/cards/d/DecreeOfJustice.java b/Mage.Sets/src/mage/cards/d/DecreeOfJustice.java index 8b13bccdb7..dfd29de43c 100644 --- a/Mage.Sets/src/mage/cards/d/DecreeOfJustice.java +++ b/Mage.Sets/src/mage/cards/d/DecreeOfJustice.java @@ -44,6 +44,7 @@ import mage.constants.Outcome; import mage.game.Game; import mage.game.permanent.token.AngelToken; import mage.game.permanent.token.SoldierToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; diff --git a/Mage.Sets/src/mage/cards/d/DimirKeyrune.java b/Mage.Sets/src/mage/cards/d/DimirKeyrune.java index 8e4ab1f83a..c0a6e04079 100644 --- a/Mage.Sets/src/mage/cards/d/DimirKeyrune.java +++ b/Mage.Sets/src/mage/cards/d/DimirKeyrune.java @@ -41,6 +41,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -69,7 +70,7 @@ public class DimirKeyrune extends CardImpl { return new DimirKeyrune(this); } - private static class DimirKeyruneToken extends Token { + private static class DimirKeyruneToken extends TokenImpl { DimirKeyruneToken() { super("Horror", "2/2 blue and black Horror until end of turn and can't be blocked this turn"); cardType.add(CardType.ARTIFACT); @@ -81,5 +82,12 @@ public class DimirKeyrune extends CardImpl { toughness = new MageInt(2); this.addAbility(new CantBeBlockedSourceAbility()); } + public DimirKeyruneToken(final DimirKeyruneToken token) { + super(token); + } + + public DimirKeyruneToken copy() { + return new DimirKeyruneToken(this); + } } } diff --git a/Mage.Sets/src/mage/cards/d/DinOfTheFireherd.java b/Mage.Sets/src/mage/cards/d/DinOfTheFireherd.java index 52af8e5dd1..7f6a2613b6 100644 --- a/Mage.Sets/src/mage/cards/d/DinOfTheFireherd.java +++ b/Mage.Sets/src/mage/cards/d/DinOfTheFireherd.java @@ -42,6 +42,7 @@ import mage.filter.common.FilterControlledLandPermanent; import mage.filter.predicate.mageobject.ColorPredicate; import mage.game.Game; import mage.game.permanent.token.DinOfTheFireherdToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; import mage.target.common.TargetOpponent; diff --git a/Mage.Sets/src/mage/cards/d/Dovescape.java b/Mage.Sets/src/mage/cards/d/Dovescape.java index 2b8e339aa4..8d15bd5739 100644 --- a/Mage.Sets/src/mage/cards/d/Dovescape.java +++ b/Mage.Sets/src/mage/cards/d/Dovescape.java @@ -41,6 +41,7 @@ import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.CardTypePredicate; import mage.game.Game; import mage.game.permanent.token.DovescapeToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.game.stack.Spell; diff --git a/Mage.Sets/src/mage/cards/d/Dragonshift.java b/Mage.Sets/src/mage/cards/d/Dragonshift.java index 9ec8d8c96c..8f6c7036df 100644 --- a/Mage.Sets/src/mage/cards/d/Dragonshift.java +++ b/Mage.Sets/src/mage/cards/d/Dragonshift.java @@ -46,6 +46,7 @@ import mage.constants.TargetController; import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.permanent.ControllerPredicate; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetControlledCreaturePermanent; @@ -85,7 +86,7 @@ public class Dragonshift extends CardImpl { return new Dragonshift(this); } - private class DragonToken extends Token { + private class DragonToken extends TokenImpl { public DragonToken() { super("Dragon", "blue and red Dragon with base power and toughness 4/4 and with flying"); @@ -97,6 +98,13 @@ public class Dragonshift extends CardImpl { toughness = new MageInt(4); this.addAbility(FlyingAbility.getInstance()); } + public DragonToken(final DragonToken token) { + super(token); + } + + public DragonToken copy() { + return new DragonToken(this); + } } } diff --git a/Mage.Sets/src/mage/cards/d/DreadStatuary.java b/Mage.Sets/src/mage/cards/d/DreadStatuary.java index 1f357efac2..ebc23f44eb 100644 --- a/Mage.Sets/src/mage/cards/d/DreadStatuary.java +++ b/Mage.Sets/src/mage/cards/d/DreadStatuary.java @@ -40,6 +40,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -65,7 +66,7 @@ public class DreadStatuary extends CardImpl { } -class DreadStatuaryToken extends Token { +class DreadStatuaryToken extends TokenImpl { public DreadStatuaryToken() { super("", "4/2 Golem artifact creature"); @@ -75,5 +76,11 @@ class DreadStatuaryToken extends Token { power = new MageInt(4); toughness = new MageInt(2); } + public DreadStatuaryToken(final DreadStatuaryToken token) { + super(token); + } + public DreadStatuaryToken copy() { + return new DreadStatuaryToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/d/DromokaMonument.java b/Mage.Sets/src/mage/cards/d/DromokaMonument.java index 36b05dd1e6..8537005ae8 100644 --- a/Mage.Sets/src/mage/cards/d/DromokaMonument.java +++ b/Mage.Sets/src/mage/cards/d/DromokaMonument.java @@ -41,6 +41,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -70,7 +71,7 @@ public class DromokaMonument extends CardImpl { return new DromokaMonument(this); } - private class DromokaMonumentToken extends Token { + private class DromokaMonumentToken extends TokenImpl { DromokaMonumentToken() { super("", "4/4 green and white Dragon artifact creature with flying"); cardType.add(CardType.ARTIFACT); @@ -82,5 +83,12 @@ public class DromokaMonument extends CardImpl { toughness = new MageInt(4); this.addAbility(FlyingAbility.getInstance()); } + public DromokaMonumentToken(final DromokaMonumentToken token) { + super(token); + } + + public DromokaMonumentToken copy() { + return new DromokaMonumentToken(this); + } } } diff --git a/Mage.Sets/src/mage/cards/d/DruidicSatchel.java b/Mage.Sets/src/mage/cards/d/DruidicSatchel.java index 57120c0d68..1245f2b959 100644 --- a/Mage.Sets/src/mage/cards/d/DruidicSatchel.java +++ b/Mage.Sets/src/mage/cards/d/DruidicSatchel.java @@ -39,6 +39,7 @@ import mage.constants.Outcome; import mage.constants.Zone; import mage.game.Game; import mage.game.permanent.token.SaprolingToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; diff --git a/Mage.Sets/src/mage/cards/d/Dub.java b/Mage.Sets/src/mage/cards/d/Dub.java new file mode 100644 index 0000000000..1d64ddc952 --- /dev/null +++ b/Mage.Sets/src/mage/cards/d/Dub.java @@ -0,0 +1,63 @@ +package mage.cards.d; + +import java.util.UUID; + +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.continuous.AddCardSubtypeAttachedEffect; +import mage.abilities.effects.common.continuous.BoostEnchantedEffect; +import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; +import mage.abilities.keyword.EnchantAbility; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.constants.Zone; +import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * @author JRHerlehy + * Created on 4/6/18. + */ +public class Dub extends CardImpl { + + public Dub(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}"); + this.subtype.add(SubType.AURA); + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + + // Enchanted creature gets +2/+2, has first strike, and is a Knight in addition to its other types. + Effect effect = new BoostEnchantedEffect(2, 2); + ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect); + effect = new GainAbilityAttachedEffect(FirstStrikeAbility.getInstance(), AttachmentType.AURA); + effect.setText(", has first strike"); + ability.addEffect(effect); + effect = new AddCardSubtypeAttachedEffect(SubType.KNIGHT, Duration.WhileOnBattlefield, AttachmentType.AURA); + effect.setText(", and is a Knight in addition to its other types"); + ability.addEffect(effect); + this.addAbility(ability); + } + + public Dub(final Dub card) { + super(card); + } + + @Override + public Dub copy() { + return new Dub(this); + } + +} diff --git a/Mage.Sets/src/mage/cards/e/ElementalUprising.java b/Mage.Sets/src/mage/cards/e/ElementalUprising.java index 3b930cbf8e..60f1679b35 100644 --- a/Mage.Sets/src/mage/cards/e/ElementalUprising.java +++ b/Mage.Sets/src/mage/cards/e/ElementalUprising.java @@ -39,6 +39,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.filter.common.FilterControlledLandPermanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetPermanent; @@ -69,7 +70,7 @@ public class ElementalUprising extends CardImpl { } } -class ElementalUprisingToken extends Token { +class ElementalUprisingToken extends TokenImpl { public ElementalUprisingToken() { super("", "4/4 Elemental creature with haste"); @@ -81,4 +82,11 @@ class ElementalUprisingToken extends Token { this.addAbility(HasteAbility.getInstance()); } + public ElementalUprisingToken(final ElementalUprisingToken token) { + super(token); + } + + public ElementalUprisingToken copy() { + return new ElementalUprisingToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/e/ElspethKnightErrant.java b/Mage.Sets/src/mage/cards/e/ElspethKnightErrant.java index fd12ee7237..744314577c 100644 --- a/Mage.Sets/src/mage/cards/e/ElspethKnightErrant.java +++ b/Mage.Sets/src/mage/cards/e/ElspethKnightErrant.java @@ -45,6 +45,7 @@ import mage.constants.Duration; import mage.constants.SuperType; import mage.game.command.emblems.ElspethKnightErrantEmblem; import mage.game.permanent.token.SoldierToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetCreaturePermanent; diff --git a/Mage.Sets/src/mage/cards/e/ElvishBranchbender.java b/Mage.Sets/src/mage/cards/e/ElvishBranchbender.java index 1d590a0c0a..8607e795b7 100644 --- a/Mage.Sets/src/mage/cards/e/ElvishBranchbender.java +++ b/Mage.Sets/src/mage/cards/e/ElvishBranchbender.java @@ -43,6 +43,7 @@ import mage.filter.FilterPermanent; import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.SubtypePredicate; import mage.game.Game; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetPermanent; @@ -112,7 +113,7 @@ class ElvishBranchbenderEffect extends OneShotEffect { } } -class ElvishBranchbenderToken extends Token { +class ElvishBranchbenderToken extends TokenImpl { ElvishBranchbenderToken(int xValue) { super("Treefolk", "X/X Treefolk creature in addition to its other types, where X is the number of Elves you control"); @@ -121,4 +122,11 @@ class ElvishBranchbenderToken extends Token { power = new MageInt(xValue); toughness = new MageInt(xValue); } + public ElvishBranchbenderToken(final ElvishBranchbenderToken token) { + super(token); + } + + public ElvishBranchbenderToken copy() { + return new ElvishBranchbenderToken(this); + } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/e/EmbodimentOfFury.java b/Mage.Sets/src/mage/cards/e/EmbodimentOfFury.java index b058f3521c..ed0225c097 100644 --- a/Mage.Sets/src/mage/cards/e/EmbodimentOfFury.java +++ b/Mage.Sets/src/mage/cards/e/EmbodimentOfFury.java @@ -45,6 +45,7 @@ import mage.constants.Zone; import mage.filter.FilterPermanent; import mage.filter.common.FilterControlledLandPermanent; import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetPermanent; @@ -90,7 +91,7 @@ public class EmbodimentOfFury extends CardImpl { } } -class EmbodimentOfFuryToken extends Token { +class EmbodimentOfFuryToken extends TokenImpl { public EmbodimentOfFuryToken() { super("", "3/3 Elemental creature with haste"); @@ -101,4 +102,11 @@ class EmbodimentOfFuryToken extends Token { this.toughness = new MageInt(3); this.addAbility(HasteAbility.getInstance()); } + public EmbodimentOfFuryToken(final EmbodimentOfFuryToken token) { + super(token); + } + + public EmbodimentOfFuryToken copy() { + return new EmbodimentOfFuryToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/e/EmbodimentOfInsight.java b/Mage.Sets/src/mage/cards/e/EmbodimentOfInsight.java index 28cba15533..13481664da 100644 --- a/Mage.Sets/src/mage/cards/e/EmbodimentOfInsight.java +++ b/Mage.Sets/src/mage/cards/e/EmbodimentOfInsight.java @@ -45,6 +45,7 @@ import mage.constants.Zone; import mage.filter.FilterPermanent; import mage.filter.common.FilterControlledLandPermanent; import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetPermanent; @@ -90,7 +91,7 @@ public class EmbodimentOfInsight extends CardImpl { } } -class EmbodimentOfInsightToken extends Token { +class EmbodimentOfInsightToken extends TokenImpl { public EmbodimentOfInsightToken() { super("", "3/3 Elemental creature with haste"); @@ -101,4 +102,11 @@ class EmbodimentOfInsightToken extends Token { this.toughness = new MageInt(3); this.addAbility(HasteAbility.getInstance()); } + public EmbodimentOfInsightToken(final EmbodimentOfInsightToken token) { + super(token); + } + + public EmbodimentOfInsightToken copy() { + return new EmbodimentOfInsightToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/e/EnsoulArtifact.java b/Mage.Sets/src/mage/cards/e/EnsoulArtifact.java index c123e75752..42c01e7895 100644 --- a/Mage.Sets/src/mage/cards/e/EnsoulArtifact.java +++ b/Mage.Sets/src/mage/cards/e/EnsoulArtifact.java @@ -41,6 +41,7 @@ import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Outcome; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetPermanent; import mage.target.common.TargetArtifactPermanent; @@ -80,7 +81,7 @@ public class EnsoulArtifact extends CardImpl { } } -class EnsoulArtifactToken extends Token { +class EnsoulArtifactToken extends TokenImpl { EnsoulArtifactToken() { super("", "5/5"); @@ -88,4 +89,11 @@ class EnsoulArtifactToken extends Token { power = new MageInt(5); toughness = new MageInt(5); } + public EnsoulArtifactToken(final EnsoulArtifactToken token) { + super(token); + } + + public EnsoulArtifactToken copy() { + return new EnsoulArtifactToken(this); + } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/e/EnsouledScimitar.java b/Mage.Sets/src/mage/cards/e/EnsouledScimitar.java index c7f62de116..cc5e75a674 100644 --- a/Mage.Sets/src/mage/cards/e/EnsouledScimitar.java +++ b/Mage.Sets/src/mage/cards/e/EnsouledScimitar.java @@ -43,6 +43,7 @@ import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Outcome; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -73,7 +74,7 @@ public class EnsouledScimitar extends CardImpl { } } -class EnsouledScimitarToken extends Token { +class EnsouledScimitarToken extends TokenImpl { public EnsouledScimitarToken() { super("Pincher", "1/5 Spirit artifact creature with flying"); @@ -86,4 +87,11 @@ class EnsouledScimitarToken extends Token { } + public EnsouledScimitarToken(final EnsouledScimitarToken token) { + super(token); + } + + public EnsouledScimitarToken copy() { + return new EnsouledScimitarToken(this); + } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/e/ErayoSoratamiAscendant.java b/Mage.Sets/src/mage/cards/e/ErayoSoratamiAscendant.java index 85c7867794..847af0db2b 100644 --- a/Mage.Sets/src/mage/cards/e/ErayoSoratamiAscendant.java +++ b/Mage.Sets/src/mage/cards/e/ErayoSoratamiAscendant.java @@ -43,6 +43,7 @@ import mage.constants.Zone; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.events.GameEvent.EventType; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.targetpointer.FixedTarget; import mage.watchers.common.CastSpellLastTurnWatcher; @@ -119,7 +120,7 @@ class ErayoSoratamiAscendantTriggeredAbility extends TriggeredAbilityImpl { } } -class ErayosEssence extends Token { +class ErayosEssence extends TokenImpl { ErayosEssence() { super("Erayo's Essence", ""); @@ -133,6 +134,13 @@ class ErayosEssence extends Token { effect.setText("counter that spell"); this.addAbility(new ErayosEssenceTriggeredAbility(effect)); } + public ErayosEssence(final ErayosEssence token) { + super(token); + } + + public ErayosEssence copy() { + return new ErayosEssence(this); + } } class ErayosEssenceTriggeredAbility extends TriggeredAbilityImpl { diff --git a/Mage.Sets/src/mage/cards/f/FaerieConclave.java b/Mage.Sets/src/mage/cards/f/FaerieConclave.java index 342ec5067f..91726fdd31 100644 --- a/Mage.Sets/src/mage/cards/f/FaerieConclave.java +++ b/Mage.Sets/src/mage/cards/f/FaerieConclave.java @@ -41,6 +41,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -66,7 +67,7 @@ public class FaerieConclave extends CardImpl { } } -class FaerieConclaveToken extends Token { +class FaerieConclaveToken extends TokenImpl { FaerieConclaveToken() { super("Faerie", "2/1 blue Faerie creature with flying"); cardType.add(CardType.CREATURE); @@ -76,4 +77,11 @@ class FaerieConclaveToken extends Token { toughness = new MageInt(1); this.addAbility(FlyingAbility.getInstance()); } + public FaerieConclaveToken(final FaerieConclaveToken token) { + super(token); + } + + public FaerieConclaveToken copy() { + return new FaerieConclaveToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/f/FaithfulSquire.java b/Mage.Sets/src/mage/cards/f/FaithfulSquire.java index 5b932817ee..91899b75cc 100644 --- a/Mage.Sets/src/mage/cards/f/FaithfulSquire.java +++ b/Mage.Sets/src/mage/cards/f/FaithfulSquire.java @@ -52,6 +52,7 @@ import mage.constants.Zone; import mage.counters.CounterType; import mage.filter.StaticFilters; import mage.game.events.GameEvent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetCreaturePermanent; @@ -91,7 +92,7 @@ public class FaithfulSquire extends CardImpl { } } -class KaisoMemoryOfLoyalty extends Token { +class KaisoMemoryOfLoyalty extends TokenImpl { KaisoMemoryOfLoyalty() { super("Kaiso, Memory of Loyalty", ""); @@ -113,4 +114,11 @@ class KaisoMemoryOfLoyalty extends Token { ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); } + public KaisoMemoryOfLoyalty(final KaisoMemoryOfLoyalty token) { + super(token); + } + + public KaisoMemoryOfLoyalty copy() { + return new KaisoMemoryOfLoyalty(this); + } } diff --git a/Mage.Sets/src/mage/cards/f/FendeepSummoner.java b/Mage.Sets/src/mage/cards/f/FendeepSummoner.java index 558b01bb47..5573da9132 100644 --- a/Mage.Sets/src/mage/cards/f/FendeepSummoner.java +++ b/Mage.Sets/src/mage/cards/f/FendeepSummoner.java @@ -41,6 +41,7 @@ import mage.constants.SubType; import mage.constants.Zone; import mage.filter.common.FilterLandPermanent; import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetLandPermanent; @@ -79,7 +80,7 @@ public class FendeepSummoner extends CardImpl { } } -class FendeepSummonerToken extends Token { +class FendeepSummonerToken extends TokenImpl { public FendeepSummonerToken() { super("", "3/5 Treefolk Warrior"); @@ -89,4 +90,11 @@ class FendeepSummonerToken extends Token { this.power = new MageInt(3); this.toughness = new MageInt(5); } + public FendeepSummonerToken(final FendeepSummonerToken token) { + super(token); + } + + public FendeepSummonerToken copy() { + return new FendeepSummonerToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/f/FigureOfDestiny.java b/Mage.Sets/src/mage/cards/f/FigureOfDestiny.java index 22456975e0..30e4ff9ff3 100644 --- a/Mage.Sets/src/mage/cards/f/FigureOfDestiny.java +++ b/Mage.Sets/src/mage/cards/f/FigureOfDestiny.java @@ -45,6 +45,7 @@ import mage.constants.SubType; import mage.constants.Zone; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -101,7 +102,7 @@ public class FigureOfDestiny extends CardImpl { return new FigureOfDestiny(this); } - private class FigureOfDestinyToken1 extends Token { + private class FigureOfDestinyToken1 extends TokenImpl { public FigureOfDestinyToken1() { super("Figure of Destiny", "Kithkin Spirit with base power and toughness 2/2"); @@ -114,9 +115,17 @@ public class FigureOfDestiny extends CardImpl { this.power = new MageInt(2); this.toughness = new MageInt(2); } + + public FigureOfDestinyToken1(final FigureOfDestinyToken1 token) { + super(token); + } + + public FigureOfDestinyToken1 copy() { + return new FigureOfDestinyToken1(this); + } } - private class FigureOfDestinyToken2 extends Token { + private class FigureOfDestinyToken2 extends TokenImpl { public FigureOfDestinyToken2() { super("Figure of Destiny", "Kithkin Spirit Warrior with base power and toughness 4/4"); @@ -130,9 +139,17 @@ public class FigureOfDestiny extends CardImpl { this.power = new MageInt(4); this.toughness = new MageInt(4); } + public FigureOfDestinyToken2(final FigureOfDestinyToken2 token) { + super(token); + } + + public FigureOfDestinyToken2 copy() { + return new FigureOfDestinyToken2(this); + } + } - private class FigureOfDestinyToken3 extends Token { + private class FigureOfDestinyToken3 extends TokenImpl { public FigureOfDestinyToken3() { super("Figure of Destiny", "Kithkin Spirit Warrior Avatar with base power and toughness 8/8, flying, and first strike"); @@ -149,5 +166,13 @@ public class FigureOfDestiny extends CardImpl { this.addAbility(FlyingAbility.getInstance()); this.addAbility(FirstStrikeAbility.getInstance()); } + + public FigureOfDestinyToken3(final FigureOfDestinyToken3 token) { + super(token); + } + + public FigureOfDestinyToken3 copy() { + return new FigureOfDestinyToken3(this); + } } } diff --git a/Mage.Sets/src/mage/cards/f/FistOfSuns.java b/Mage.Sets/src/mage/cards/f/FistOfSuns.java index fb23688111..f52801b0ab 100644 --- a/Mage.Sets/src/mage/cards/f/FistOfSuns.java +++ b/Mage.Sets/src/mage/cards/f/FistOfSuns.java @@ -34,6 +34,7 @@ import mage.abilities.condition.common.SourceIsSpellCondition; import mage.abilities.costs.AlternativeCostSourceAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.effects.common.continuous.WUBRGInsteadEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; @@ -50,7 +51,7 @@ public class FistOfSuns extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{3}"); // You may pay {W}{U}{B}{R}{G} rather than pay the mana cost for spells that you cast. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new FistOfSunsRuleEffect())); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new WUBRGInsteadEffect())); } public FistOfSuns(final FistOfSuns card) { @@ -63,42 +64,3 @@ public class FistOfSuns extends CardImpl { } } - -class FistOfSunsRuleEffect extends ContinuousEffectImpl { - - static AlternativeCostSourceAbility alternativeCastingCostAbility = new AlternativeCostSourceAbility(new ManaCostsImpl("{W}{U}{B}{R}{G}"), SourceIsSpellCondition.instance); - - public FistOfSunsRuleEffect() { - super(Duration.WhileOnBattlefield, Outcome.Detriment); - staticText = "You may pay {W}{U}{B}{R}{G} rather than pay the mana cost for spells that you cast"; - } - - public FistOfSunsRuleEffect(final FistOfSunsRuleEffect effect) { - super(effect); - } - - @Override - public FistOfSunsRuleEffect copy() { - return new FistOfSunsRuleEffect(this); - } - - @Override - public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { - controller.getAlternativeSourceCosts().add(alternativeCastingCostAbility); - return true; - } - return false; - } - - @Override - public boolean apply(Game game, Ability source) { - return false; - } - - @Override - public boolean hasLayer(Layer layer) { - return layer == Layer.RulesEffects; - } -} diff --git a/Mage.Sets/src/mage/cards/f/Flickerform.java b/Mage.Sets/src/mage/cards/f/Flickerform.java index 391d965e99..f1bbbbba8b 100644 --- a/Mage.Sets/src/mage/cards/f/Flickerform.java +++ b/Mage.Sets/src/mage/cards/f/Flickerform.java @@ -50,6 +50,7 @@ import mage.filter.predicate.mageobject.SubtypePredicate; import mage.game.ExileZone; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.Target; import mage.target.TargetPermanent; diff --git a/Mage.Sets/src/mage/cards/f/ForbiddingWatchtower.java b/Mage.Sets/src/mage/cards/f/ForbiddingWatchtower.java index ec251ae86a..1d713481d0 100644 --- a/Mage.Sets/src/mage/cards/f/ForbiddingWatchtower.java +++ b/Mage.Sets/src/mage/cards/f/ForbiddingWatchtower.java @@ -40,6 +40,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -71,7 +72,7 @@ public class ForbiddingWatchtower extends CardImpl { } } -class ForbiddingWatchtowerToken extends Token { +class ForbiddingWatchtowerToken extends TokenImpl { ForbiddingWatchtowerToken() { super("Soldier", "1/5 white Soldier creature"); cardType.add(CardType.CREATURE); @@ -81,4 +82,11 @@ class ForbiddingWatchtowerToken extends Token { power = new MageInt(1); toughness = new MageInt(5); } + public ForbiddingWatchtowerToken(final ForbiddingWatchtowerToken token) { + super(token); + } + + public ForbiddingWatchtowerToken copy() { + return new ForbiddingWatchtowerToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/f/ForiysianTotem.java b/Mage.Sets/src/mage/cards/f/ForiysianTotem.java index 501aefb947..88356403cc 100644 --- a/Mage.Sets/src/mage/cards/f/ForiysianTotem.java +++ b/Mage.Sets/src/mage/cards/f/ForiysianTotem.java @@ -45,6 +45,7 @@ import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; import mage.filter.common.FilterCreaturePermanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -79,7 +80,7 @@ public class ForiysianTotem extends CardImpl { } -class ForiysianTotemToken extends Token { +class ForiysianTotemToken extends TokenImpl { public ForiysianTotemToken() { super("", "4/4 red Giant artifact creature with trample"); @@ -91,4 +92,11 @@ class ForiysianTotemToken extends Token { toughness = new MageInt(4); this.addAbility(TrampleAbility.getInstance()); } + public ForiysianTotemToken(final ForiysianTotemToken token) { + super(token); + } + + public ForiysianTotemToken copy() { + return new ForiysianTotemToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/f/FowlPlay.java b/Mage.Sets/src/mage/cards/f/FowlPlay.java index 1493f8fcda..2aa7e833f1 100644 --- a/Mage.Sets/src/mage/cards/f/FowlPlay.java +++ b/Mage.Sets/src/mage/cards/f/FowlPlay.java @@ -42,6 +42,7 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetCreaturePermanent; @@ -80,7 +81,7 @@ public class FowlPlay extends CardImpl { } } -class FowlPlayToken extends Token { +class FowlPlayToken extends TokenImpl { public FowlPlayToken() { super("Chicken", "a Chicken with base power and toughness 1/1 with no abilities"); @@ -89,4 +90,11 @@ class FowlPlayToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + public FowlPlayToken(final FowlPlayToken token) { + super(token); + } + + public FowlPlayToken copy() { + return new FowlPlayToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/f/FuneralPyre.java b/Mage.Sets/src/mage/cards/f/FuneralPyre.java index b0459e80a2..133ec1de64 100644 --- a/Mage.Sets/src/mage/cards/f/FuneralPyre.java +++ b/Mage.Sets/src/mage/cards/f/FuneralPyre.java @@ -37,6 +37,7 @@ import mage.constants.CardType; import mage.constants.Outcome; import mage.game.Game; import mage.game.permanent.token.SpiritWhiteToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; import mage.target.common.TargetCardInGraveyard; diff --git a/Mage.Sets/src/mage/cards/g/GarbageElementalC.java b/Mage.Sets/src/mage/cards/g/GarbageElementalC.java index 98787e370e..560aed815f 100644 --- a/Mage.Sets/src/mage/cards/g/GarbageElementalC.java +++ b/Mage.Sets/src/mage/cards/g/GarbageElementalC.java @@ -42,6 +42,7 @@ import mage.filter.FilterPermanent; import mage.filter.predicate.permanent.CounterPredicate; import mage.game.Game; import mage.game.permanent.token.GoblinToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; diff --git a/Mage.Sets/src/mage/cards/g/GeistSnatch.java b/Mage.Sets/src/mage/cards/g/GeistSnatch.java index 6d7b17c0ea..7a9ff6ae80 100644 --- a/Mage.Sets/src/mage/cards/g/GeistSnatch.java +++ b/Mage.Sets/src/mage/cards/g/GeistSnatch.java @@ -37,6 +37,7 @@ import mage.constants.Outcome; import mage.filter.StaticFilters; import mage.game.Game; import mage.game.permanent.token.SpiritBlueToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetSpell; diff --git a/Mage.Sets/src/mage/cards/g/GeminiEngine.java b/Mage.Sets/src/mage/cards/g/GeminiEngine.java index d7939a3a13..473f186f55 100644 --- a/Mage.Sets/src/mage/cards/g/GeminiEngine.java +++ b/Mage.Sets/src/mage/cards/g/GeminiEngine.java @@ -43,6 +43,7 @@ import mage.constants.Outcome; import mage.game.Game; import mage.game.permanent.Permanent; import mage.game.permanent.token.GeminiEngineTwinToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; import mage.target.targetpointer.FixedTarget; diff --git a/Mage.Sets/src/mage/cards/g/GenjuOfTheCedars.java b/Mage.Sets/src/mage/cards/g/GenjuOfTheCedars.java index 0153a52c20..96a4d79531 100644 --- a/Mage.Sets/src/mage/cards/g/GenjuOfTheCedars.java +++ b/Mage.Sets/src/mage/cards/g/GenjuOfTheCedars.java @@ -42,6 +42,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.filter.common.FilterLandPermanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetPermanent; import mage.target.common.TargetLandPermanent; @@ -85,7 +86,7 @@ public class GenjuOfTheCedars extends CardImpl { return new GenjuOfTheCedars(this); } - private static class SpiritToken extends Token { + private static class SpiritToken extends TokenImpl { SpiritToken() { super("", "4/4 green Spirit creature"); @@ -95,5 +96,13 @@ public class GenjuOfTheCedars extends CardImpl { power = new MageInt(4); toughness = new MageInt(4); } + + public SpiritToken(final SpiritToken token) { + super(token); + } + + public SpiritToken copy() { + return new SpiritToken(this); + } } } diff --git a/Mage.Sets/src/mage/cards/g/GenjuOfTheFalls.java b/Mage.Sets/src/mage/cards/g/GenjuOfTheFalls.java index bed91096ec..c8d40d5154 100644 --- a/Mage.Sets/src/mage/cards/g/GenjuOfTheFalls.java +++ b/Mage.Sets/src/mage/cards/g/GenjuOfTheFalls.java @@ -42,6 +42,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.filter.common.FilterLandPermanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetPermanent; import mage.target.common.TargetLandPermanent; @@ -83,7 +84,7 @@ public class GenjuOfTheFalls extends CardImpl { return new GenjuOfTheFalls(this); } - private static class SpiritToken extends Token { + private static class SpiritToken extends TokenImpl { SpiritToken() { super("Spirit", "3/2 blue Spirit creature with flying"); @@ -94,5 +95,13 @@ public class GenjuOfTheFalls extends CardImpl { toughness = new MageInt(2); addAbility(FlyingAbility.getInstance()); } + + public SpiritToken(final SpiritToken token) { + super(token); + } + + public SpiritToken copy() { + return new SpiritToken(this); + } } } diff --git a/Mage.Sets/src/mage/cards/g/GenjuOfTheFens.java b/Mage.Sets/src/mage/cards/g/GenjuOfTheFens.java index 7f0fc40ab7..512920bd75 100644 --- a/Mage.Sets/src/mage/cards/g/GenjuOfTheFens.java +++ b/Mage.Sets/src/mage/cards/g/GenjuOfTheFens.java @@ -43,6 +43,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.filter.common.FilterLandPermanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetPermanent; import mage.target.common.TargetLandPermanent; @@ -84,7 +85,7 @@ public class GenjuOfTheFens extends CardImpl { return new GenjuOfTheFens(this); } - private static class SpiritToken extends Token { + private static class SpiritToken extends TokenImpl { SpiritToken() { super("Spirit", "2/2 black Spirit creature with \"{B}: This creature gets +1/+1 until end of turn.\""); @@ -95,5 +96,13 @@ public class GenjuOfTheFens extends CardImpl { toughness = new MageInt(2); addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 1, Duration.EndOfTurn), new ManaCostsImpl("{B}"))); } + + public SpiritToken(final SpiritToken token) { + super(token); + } + + public SpiritToken copy() { + return new SpiritToken(this); + } } } diff --git a/Mage.Sets/src/mage/cards/g/GenjuOfTheFields.java b/Mage.Sets/src/mage/cards/g/GenjuOfTheFields.java index c73a4bfd1a..279e91389c 100644 --- a/Mage.Sets/src/mage/cards/g/GenjuOfTheFields.java +++ b/Mage.Sets/src/mage/cards/g/GenjuOfTheFields.java @@ -44,6 +44,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.filter.common.FilterLandPermanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetPermanent; import mage.target.common.TargetLandPermanent; @@ -90,7 +91,7 @@ public class GenjuOfTheFields extends CardImpl { return new GenjuOfTheFields(this); } - private static class SpiritToken extends Token { + private static class SpiritToken extends TokenImpl { SpiritToken() { super("Spirit", "2/5 white Spirit creature"); @@ -100,5 +101,12 @@ public class GenjuOfTheFields extends CardImpl { power = new MageInt(2); toughness = new MageInt(5); } + public SpiritToken(final SpiritToken token) { + super(token); + } + + public SpiritToken copy() { + return new SpiritToken(this); + } } } diff --git a/Mage.Sets/src/mage/cards/g/GenjuOfTheRealm.java b/Mage.Sets/src/mage/cards/g/GenjuOfTheRealm.java index 8840c596d8..9235c07049 100644 --- a/Mage.Sets/src/mage/cards/g/GenjuOfTheRealm.java +++ b/Mage.Sets/src/mage/cards/g/GenjuOfTheRealm.java @@ -41,6 +41,7 @@ import mage.abilities.keyword.TrampleAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetPermanent; import mage.target.common.TargetLandPermanent; @@ -81,7 +82,7 @@ public class GenjuOfTheRealm extends CardImpl { return new GenjuOfTheRealm(this); } - private static class SpiritToken extends Token { + private static class SpiritToken extends TokenImpl { SpiritToken() { super("Spirit", "legendary 8/12 Spirit creature with trample"); @@ -97,5 +98,13 @@ public class GenjuOfTheRealm extends CardImpl { toughness = new MageInt(12); this.addAbility(TrampleAbility.getInstance()); } + + public SpiritToken(final SpiritToken token) { + super(token); + } + + public SpiritToken copy() { + return new SpiritToken(this); + } } } diff --git a/Mage.Sets/src/mage/cards/g/GenjuOfTheSpires.java b/Mage.Sets/src/mage/cards/g/GenjuOfTheSpires.java index 721d237917..bc97fcbd27 100644 --- a/Mage.Sets/src/mage/cards/g/GenjuOfTheSpires.java +++ b/Mage.Sets/src/mage/cards/g/GenjuOfTheSpires.java @@ -41,6 +41,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.filter.common.FilterLandPermanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetPermanent; import mage.target.common.TargetLandPermanent; @@ -82,7 +83,7 @@ public class GenjuOfTheSpires extends CardImpl { return new GenjuOfTheSpires(this); } - private static class SpiritToken extends Token { + private static class SpiritToken extends TokenImpl { SpiritToken() { super("Spirit", "6/1 red Spirit creature"); @@ -92,5 +93,12 @@ public class GenjuOfTheSpires extends CardImpl { power = new MageInt(6); toughness = new MageInt(1); } + public SpiritToken(final SpiritToken token) { + super(token); + } + + public SpiritToken copy() { + return new SpiritToken(this); + } } } diff --git a/Mage.Sets/src/mage/cards/g/GhituEncampment.java b/Mage.Sets/src/mage/cards/g/GhituEncampment.java index 55d061891d..ad75e03c89 100644 --- a/Mage.Sets/src/mage/cards/g/GhituEncampment.java +++ b/Mage.Sets/src/mage/cards/g/GhituEncampment.java @@ -41,6 +41,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -69,7 +70,7 @@ public class GhituEncampment extends CardImpl { } } -class GhituEncampmentToken extends Token { +class GhituEncampmentToken extends TokenImpl { public GhituEncampmentToken() { super("Warrior", "2/1 red Warrior creature with first strike"); @@ -82,4 +83,11 @@ class GhituEncampmentToken extends Token { this.addAbility(FirstStrikeAbility.getInstance()); } + public GhituEncampmentToken(final GhituEncampmentToken token) { + super(token); + } + + public GhituEncampmentToken copy() { + return new GhituEncampmentToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/g/GhoulcallerGisa.java b/Mage.Sets/src/mage/cards/g/GhoulcallerGisa.java index 3066f94535..95754f8e7c 100644 --- a/Mage.Sets/src/mage/cards/g/GhoulcallerGisa.java +++ b/Mage.Sets/src/mage/cards/g/GhoulcallerGisa.java @@ -45,6 +45,7 @@ import mage.constants.SubType; import mage.constants.SuperType; import mage.constants.Zone; import mage.filter.StaticFilters; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.game.permanent.token.ZombieToken; import mage.target.common.TargetControlledCreaturePermanent; diff --git a/Mage.Sets/src/mage/cards/g/GideonAllyOfZendikar.java b/Mage.Sets/src/mage/cards/g/GideonAllyOfZendikar.java index 4fe5badfd8..01d3fbd8e3 100644 --- a/Mage.Sets/src/mage/cards/g/GideonAllyOfZendikar.java +++ b/Mage.Sets/src/mage/cards/g/GideonAllyOfZendikar.java @@ -45,6 +45,7 @@ import mage.constants.Duration; import mage.constants.SuperType; import mage.game.command.emblems.GideonAllyOfZendikarEmblem; import mage.game.permanent.token.KnightAllyToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -84,7 +85,7 @@ public class GideonAllyOfZendikar extends CardImpl { } } -class GideonAllyOfZendikarToken extends Token { +class GideonAllyOfZendikarToken extends TokenImpl { public GideonAllyOfZendikarToken() { super("", "5/5 Human Soldier Ally creature with indestructible"); @@ -97,4 +98,11 @@ class GideonAllyOfZendikarToken extends Token { addAbility(IndestructibleAbility.getInstance()); } + public GideonAllyOfZendikarToken(final GideonAllyOfZendikarToken token) { + super(token); + } + + public GideonAllyOfZendikarToken copy() { + return new GideonAllyOfZendikarToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/g/GideonBattleForged.java b/Mage.Sets/src/mage/cards/g/GideonBattleForged.java index e048e7dcea..334fdf3a2d 100644 --- a/Mage.Sets/src/mage/cards/g/GideonBattleForged.java +++ b/Mage.Sets/src/mage/cards/g/GideonBattleForged.java @@ -52,6 +52,7 @@ import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.permanent.ControllerPredicate; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetCreaturePermanent; @@ -113,7 +114,7 @@ public class GideonBattleForged extends CardImpl { } } -class GideonBattleForgedToken extends Token { +class GideonBattleForgedToken extends TokenImpl { public GideonBattleForgedToken() { super("", "4/4 Human Soldier creature with indestructible"); @@ -124,7 +125,13 @@ class GideonBattleForgedToken extends Token { toughness = new MageInt(4); this.addAbility(IndestructibleAbility.getInstance()); } + public GideonBattleForgedToken(final GideonBattleForgedToken token) { + super(token); + } + public GideonBattleForgedToken copy() { + return new GideonBattleForgedToken(this); + } } class GideonBattleForgedAttacksIfAbleTargetEffect extends RequirementEffect { diff --git a/Mage.Sets/src/mage/cards/g/GideonChampionOfJustice.java b/Mage.Sets/src/mage/cards/g/GideonChampionOfJustice.java index f6f82329c6..667f71b81f 100644 --- a/Mage.Sets/src/mage/cards/g/GideonChampionOfJustice.java +++ b/Mage.Sets/src/mage/cards/g/GideonChampionOfJustice.java @@ -51,6 +51,7 @@ import mage.counters.CounterType; import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetOpponent; @@ -122,7 +123,7 @@ class GideonExileAllOtherPermanentsEffect extends OneShotEffect { } } -class GideonChampionOfJusticeToken extends Token { +class GideonChampionOfJusticeToken extends TokenImpl { public GideonChampionOfJusticeToken() { super("", "indestructible Human Soldier creature with power and toughness each equal to the number of loyalty counters on him"); @@ -135,5 +136,11 @@ class GideonChampionOfJusticeToken extends Token { this.addAbility(IndestructibleAbility.getInstance()); } + public GideonChampionOfJusticeToken(final GideonChampionOfJusticeToken token) { + super(token); + } + public GideonChampionOfJusticeToken copy() { + return new GideonChampionOfJusticeToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/g/GideonJura.java b/Mage.Sets/src/mage/cards/g/GideonJura.java index 8ec7dc0816..dc8e7a701d 100644 --- a/Mage.Sets/src/mage/cards/g/GideonJura.java +++ b/Mage.Sets/src/mage/cards/g/GideonJura.java @@ -49,6 +49,7 @@ import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.permanent.TappedPredicate; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetOpponent; @@ -101,7 +102,7 @@ public class GideonJura extends CardImpl { } -class GideonJuraToken extends Token { +class GideonJuraToken extends TokenImpl { public GideonJuraToken() { super("", "6/6 Human Soldier creature"); @@ -111,7 +112,13 @@ class GideonJuraToken extends Token { power = new MageInt(6); toughness = new MageInt(6); } + public GideonJuraToken(final GideonJuraToken token) { + super(token); + } + public GideonJuraToken copy() { + return new GideonJuraToken(this); + } } class GideonJuraEffect extends RequirementEffect { diff --git a/Mage.Sets/src/mage/cards/g/GideonMartialParagon.java b/Mage.Sets/src/mage/cards/g/GideonMartialParagon.java index 7610b63e3d..3ebfe1df4e 100644 --- a/Mage.Sets/src/mage/cards/g/GideonMartialParagon.java +++ b/Mage.Sets/src/mage/cards/g/GideonMartialParagon.java @@ -46,6 +46,7 @@ import mage.constants.Duration; import mage.constants.SuperType; import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterOpponentsCreaturePermanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -95,7 +96,7 @@ public class GideonMartialParagon extends CardImpl { } } -class GideonMartialParagonToken extends Token { +class GideonMartialParagonToken extends TokenImpl { public GideonMartialParagonToken() { super("", "5/5 Human Soldier creature with indestructible"); @@ -107,4 +108,11 @@ class GideonMartialParagonToken extends Token { addAbility(IndestructibleAbility.getInstance()); } + public GideonMartialParagonToken(final GideonMartialParagonToken token) { + super(token); + } + + public GideonMartialParagonToken copy() { + return new GideonMartialParagonToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/g/GideonOfTheTrials.java b/Mage.Sets/src/mage/cards/g/GideonOfTheTrials.java index ef7693fd51..d7a6b2103a 100644 --- a/Mage.Sets/src/mage/cards/g/GideonOfTheTrials.java +++ b/Mage.Sets/src/mage/cards/g/GideonOfTheTrials.java @@ -44,6 +44,7 @@ import mage.constants.SubType; import mage.constants.Duration; import mage.constants.SuperType; import mage.game.command.emblems.GideonOfTheTrialsEmblem; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetPermanent; @@ -90,7 +91,7 @@ public class GideonOfTheTrials extends CardImpl { } } -class GideonOfTheTrialsToken extends Token { +class GideonOfTheTrialsToken extends TokenImpl { public GideonOfTheTrialsToken() { super("", "a 4/4 Human Soldier creature with indestructible"); @@ -101,4 +102,11 @@ class GideonOfTheTrialsToken extends Token { toughness = new MageInt(4); this.addAbility(IndestructibleAbility.getInstance()); } + public GideonOfTheTrialsToken(final GideonOfTheTrialsToken token) { + super(token); + } + + public GideonOfTheTrialsToken copy() { + return new GideonOfTheTrialsToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/g/GlintHawkIdol.java b/Mage.Sets/src/mage/cards/g/GlintHawkIdol.java index da48620449..2b9cac2f38 100644 --- a/Mage.Sets/src/mage/cards/g/GlintHawkIdol.java +++ b/Mage.Sets/src/mage/cards/g/GlintHawkIdol.java @@ -42,6 +42,7 @@ import mage.filter.FilterPermanent; import mage.filter.common.FilterArtifactPermanent; import mage.filter.predicate.permanent.AnotherPredicate; import mage.filter.predicate.permanent.ControllerPredicate; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -78,7 +79,7 @@ public class GlintHawkIdol extends CardImpl { } -class GlintHawkIdolToken extends Token { +class GlintHawkIdolToken extends TokenImpl { GlintHawkIdolToken() { super("", "2/2 Bird artifact creature with flying"); cardType.add(CardType.ARTIFACT); @@ -88,4 +89,11 @@ class GlintHawkIdolToken extends Token { toughness = new MageInt(2); addAbility(FlyingAbility.getInstance()); } + public GlintHawkIdolToken(final GlintHawkIdolToken token) { + super(token); + } + + public GlintHawkIdolToken copy() { + return new GlintHawkIdolToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/g/GoblinSpymaster.java b/Mage.Sets/src/mage/cards/g/GoblinSpymaster.java index cd4448de52..cc4a09f442 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinSpymaster.java +++ b/Mage.Sets/src/mage/cards/g/GoblinSpymaster.java @@ -38,6 +38,7 @@ import mage.cards.CardSetInfo; import mage.constants.*; import mage.game.Game; import mage.game.permanent.token.SpyMasterGoblinToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; diff --git a/Mage.Sets/src/mage/cards/g/GolgariKeyrune.java b/Mage.Sets/src/mage/cards/g/GolgariKeyrune.java index 830bdad8e9..c9ad6fc405 100644 --- a/Mage.Sets/src/mage/cards/g/GolgariKeyrune.java +++ b/Mage.Sets/src/mage/cards/g/GolgariKeyrune.java @@ -41,6 +41,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -68,7 +69,7 @@ public class GolgariKeyrune extends CardImpl { return new GolgariKeyrune(this); } - private static class GolgariKeyruneToken extends Token { + private static class GolgariKeyruneToken extends TokenImpl { GolgariKeyruneToken() { super("", "2/2 black and green Insect artifact creature with deathtouch"); cardType.add(CardType.ARTIFACT); @@ -80,5 +81,12 @@ public class GolgariKeyrune extends CardImpl { toughness = new MageInt(2); this.addAbility(DeathtouchAbility.getInstance()); } + public GolgariKeyruneToken(final GolgariKeyruneToken token) { + super(token); + } + + public GolgariKeyruneToken copy() { + return new GolgariKeyruneToken(this); + } } } diff --git a/Mage.Sets/src/mage/cards/g/GroveOfTheGuardian.java b/Mage.Sets/src/mage/cards/g/GroveOfTheGuardian.java index fa34c809a4..47c949745b 100644 --- a/Mage.Sets/src/mage/cards/g/GroveOfTheGuardian.java +++ b/Mage.Sets/src/mage/cards/g/GroveOfTheGuardian.java @@ -47,6 +47,7 @@ import mage.constants.Zone; import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.predicate.Predicates; import mage.filter.predicate.permanent.TappedPredicate; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetControlledCreaturePermanent; @@ -84,7 +85,7 @@ public class GroveOfTheGuardian extends CardImpl { return new GroveOfTheGuardian(this); } - private static class ElementalToken extends Token { + private static class ElementalToken extends TokenImpl { ElementalToken() { super("Elemental", "8/8 green and white Elemental creature token with vigilance"); @@ -97,5 +98,12 @@ public class GroveOfTheGuardian extends CardImpl { toughness = new MageInt(8); this.addAbility(VigilanceAbility.getInstance()); } + public ElementalToken(final ElementalToken token) { + super(token); + } + + public ElementalToken copy() { + return new ElementalToken(this); + } } } diff --git a/Mage.Sets/src/mage/cards/g/GrunnTheLonelyKing.java b/Mage.Sets/src/mage/cards/g/GrunnTheLonelyKing.java new file mode 100644 index 0000000000..5f1b1c8f24 --- /dev/null +++ b/Mage.Sets/src/mage/cards/g/GrunnTheLonelyKing.java @@ -0,0 +1,60 @@ +package mage.cards.g; + +import java.util.UUID; + +import mage.MageInt; +import mage.abilities.common.AttacksAloneTriggeredAbility; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.condition.common.KickedCondition; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.dynamicvalue.common.SourcePermanentPowerCount; +import mage.abilities.dynamicvalue.common.SourcePermanentToughnessValue; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.KickerAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; +import mage.constants.SuperType; +import mage.counters.CounterType; + +/** + * @author JRHerlehy + * Created on 4/5/18. + */ +public class GrunnTheLonelyKing extends CardImpl { + + public GrunnTheLonelyKing(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}{G}"); + this.addSuperType(SuperType.LEGENDARY); + this.subtype.add(SubType.APE, SubType.WARRIOR); + + this.power = new MageInt(5); + this.toughness = new MageInt(5); + + //Kicker {3} (You may pay an additional {3} as you cast this spell.) + this.addAbility(new KickerAbility("{3}")); + + //If Grunn, the Lonely King was kicked, it enters the battlefield with five +1/+1 counters on it. + this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance(5)), KickedCondition.instance))); + + //Whenever Grunn attacks alone, double its power and toughness until end of turn. + SourcePermanentPowerCount power = new SourcePermanentPowerCount(); + SourcePermanentToughnessValue toughness = new SourcePermanentToughnessValue(); + Effect effect = new BoostSourceEffect(power, toughness, Duration.EndOfTurn, true); + effect.setText("double its power and toughness until end of turn"); + this.addAbility(new AttacksAloneTriggeredAbility(effect)); + } + + public GrunnTheLonelyKing(final GrunnTheLonelyKing card) { + super(card); + } + + @Override + public GrunnTheLonelyKing copy() { + return new GrunnTheLonelyKing(this); + } +} diff --git a/Mage.Sets/src/mage/cards/g/GruulKeyrune.java b/Mage.Sets/src/mage/cards/g/GruulKeyrune.java index 515f2dd219..2056cd559f 100644 --- a/Mage.Sets/src/mage/cards/g/GruulKeyrune.java +++ b/Mage.Sets/src/mage/cards/g/GruulKeyrune.java @@ -41,6 +41,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -69,7 +70,7 @@ public class GruulKeyrune extends CardImpl { return new GruulKeyrune(this); } - private static class GruulKeyruneToken extends Token { + private static class GruulKeyruneToken extends TokenImpl { GruulKeyruneToken() { super("Beast", "3/2 red and green Beast artifact creature with trample"); cardType.add(CardType.ARTIFACT); @@ -81,5 +82,13 @@ public class GruulKeyrune extends CardImpl { toughness = new MageInt(2); this.addAbility(TrampleAbility.getInstance()); } + public GruulKeyruneToken(final GruulKeyruneToken token) { + super(token); + } + + public GruulKeyruneToken copy() { + return new GruulKeyruneToken(this); + } + } } diff --git a/Mage.Sets/src/mage/cards/g/GruulWarPlow.java b/Mage.Sets/src/mage/cards/g/GruulWarPlow.java index c48adefaa9..853f70091c 100644 --- a/Mage.Sets/src/mage/cards/g/GruulWarPlow.java +++ b/Mage.Sets/src/mage/cards/g/GruulWarPlow.java @@ -42,6 +42,7 @@ import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; import mage.filter.StaticFilters; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -69,7 +70,7 @@ public class GruulWarPlow extends CardImpl { } } -class GruulWarPlowToken extends Token { +class GruulWarPlowToken extends TokenImpl { GruulWarPlowToken() { super("Juggernaut", "4/4 Juggernaut artifact creature"); @@ -79,4 +80,11 @@ class GruulWarPlowToken extends Token { power = new MageInt(4); toughness = new MageInt(4); } + public GruulWarPlowToken(final GruulWarPlowToken token) { + super(token); + } + + public GruulWarPlowToken copy() { + return new GruulWarPlowToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/g/GuardianIdol.java b/Mage.Sets/src/mage/cards/g/GuardianIdol.java index 13e0f88aae..3549c7c636 100644 --- a/Mage.Sets/src/mage/cards/g/GuardianIdol.java +++ b/Mage.Sets/src/mage/cards/g/GuardianIdol.java @@ -40,6 +40,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -69,7 +70,7 @@ public class GuardianIdol extends CardImpl { } } -class GuardianIdolGolemToken extends Token { +class GuardianIdolGolemToken extends TokenImpl { public GuardianIdolGolemToken() { super("Golem", "2/2 Golem artifact creature token"); @@ -79,4 +80,11 @@ class GuardianIdolGolemToken extends Token { power = new MageInt(2); toughness = new MageInt(2); } + public GuardianIdolGolemToken(final GuardianIdolGolemToken token) { + super(token); + } + + public GuardianIdolGolemToken copy() { + return new GuardianIdolGolemToken(this); + } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/g/GuardianZendikon.java b/Mage.Sets/src/mage/cards/g/GuardianZendikon.java index 8401aec9cd..a8d3d66af3 100644 --- a/Mage.Sets/src/mage/cards/g/GuardianZendikon.java +++ b/Mage.Sets/src/mage/cards/g/GuardianZendikon.java @@ -44,6 +44,7 @@ import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Outcome; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetPermanent; import mage.target.common.TargetLandPermanent; @@ -86,7 +87,7 @@ public class GuardianZendikon extends CardImpl { } } -class WallToken extends Token { +class WallToken extends TokenImpl { WallToken() { super("", "2/6 white wall creature with defender"); @@ -97,4 +98,11 @@ class WallToken extends Token { toughness = new MageInt(6); this.addAbility(DefenderAbility.getInstance()); } + public WallToken(final WallToken token) { + super(token); + } + + public WallToken copy() { + return new WallToken(this); + } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/h/HalcyonGlaze.java b/Mage.Sets/src/mage/cards/h/HalcyonGlaze.java index c6dd8430de..3d5c4da5ad 100644 --- a/Mage.Sets/src/mage/cards/h/HalcyonGlaze.java +++ b/Mage.Sets/src/mage/cards/h/HalcyonGlaze.java @@ -39,6 +39,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.filter.StaticFilters; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -66,7 +67,7 @@ public class HalcyonGlaze extends CardImpl { } } -class HalcyonGlazeToken extends Token { +class HalcyonGlazeToken extends TokenImpl { HalcyonGlazeToken() { super("", "4/4 Illusion creature with flying"); @@ -76,4 +77,11 @@ class HalcyonGlazeToken extends Token { toughness = new MageInt(4); this.addAbility(FlyingAbility.getInstance()); } + public HalcyonGlazeToken(final HalcyonGlazeToken token) { + super(token); + } + + public HalcyonGlazeToken copy() { + return new HalcyonGlazeToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/h/HauntedPlateMail.java b/Mage.Sets/src/mage/cards/h/HauntedPlateMail.java index 0bd7fd330b..53537ff439 100644 --- a/Mage.Sets/src/mage/cards/h/HauntedPlateMail.java +++ b/Mage.Sets/src/mage/cards/h/HauntedPlateMail.java @@ -46,6 +46,7 @@ import mage.constants.Duration; import mage.constants.Outcome; import mage.constants.Zone; import mage.filter.StaticFilters; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -82,7 +83,7 @@ public class HauntedPlateMail extends CardImpl { } } -class HauntedPlateMailToken extends Token { +class HauntedPlateMailToken extends TokenImpl { public HauntedPlateMailToken() { super("Spirit", "4/4 Spirit artifact creature that's no longer an Equipment"); @@ -92,4 +93,11 @@ class HauntedPlateMailToken extends Token { power = new MageInt(4); toughness = new MageInt(4); } + public HauntedPlateMailToken(final HauntedPlateMailToken token) { + super(token); + } + + public HauntedPlateMailToken copy() { + return new HauntedPlateMailToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/h/HiddenAncients.java b/Mage.Sets/src/mage/cards/h/HiddenAncients.java index f4c4e79309..3ee93bf641 100644 --- a/Mage.Sets/src/mage/cards/h/HiddenAncients.java +++ b/Mage.Sets/src/mage/cards/h/HiddenAncients.java @@ -41,6 +41,7 @@ import mage.constants.Duration; import mage.filter.FilterSpell; import mage.filter.StaticFilters; import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import java.util.UUID; @@ -78,7 +79,7 @@ public class HiddenAncients extends CardImpl { } } -class HiddenAncientsTreefolk extends Token { +class HiddenAncientsTreefolk extends TokenImpl { public HiddenAncientsTreefolk() { super("Treefolk", "5/5 Treefolk creature"); @@ -87,4 +88,11 @@ class HiddenAncientsTreefolk extends Token { power = new MageInt(5); toughness = new MageInt(5); } + public HiddenAncientsTreefolk(final HiddenAncientsTreefolk token) { + super(token); + } + + public HiddenAncientsTreefolk copy() { + return new HiddenAncientsTreefolk(this); + } } diff --git a/Mage.Sets/src/mage/cards/h/HiddenGibbons.java b/Mage.Sets/src/mage/cards/h/HiddenGibbons.java index 7902b14874..7895602ae5 100644 --- a/Mage.Sets/src/mage/cards/h/HiddenGibbons.java +++ b/Mage.Sets/src/mage/cards/h/HiddenGibbons.java @@ -41,6 +41,7 @@ import mage.constants.Duration; import mage.filter.FilterSpell; import mage.filter.StaticFilters; import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import java.util.UUID; @@ -78,7 +79,7 @@ public class HiddenGibbons extends CardImpl { } } -class HiddenGibbonsApe extends Token { +class HiddenGibbonsApe extends TokenImpl { public HiddenGibbonsApe() { super("Ape", "4/4 Ape creature"); @@ -87,4 +88,11 @@ class HiddenGibbonsApe extends Token { power = new MageInt(4); toughness = new MageInt(4); } + public HiddenGibbonsApe(final HiddenGibbonsApe token) { + super(token); + } + + public HiddenGibbonsApe copy() { + return new HiddenGibbonsApe(this); + } } diff --git a/Mage.Sets/src/mage/cards/h/HiddenGuerrillas.java b/Mage.Sets/src/mage/cards/h/HiddenGuerrillas.java index ad43c6217b..19c7087a31 100644 --- a/Mage.Sets/src/mage/cards/h/HiddenGuerrillas.java +++ b/Mage.Sets/src/mage/cards/h/HiddenGuerrillas.java @@ -41,6 +41,7 @@ import mage.constants.SubType; import mage.constants.Duration; import mage.filter.StaticFilters; import mage.filter.common.FilterArtifactSpell; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import java.util.UUID; @@ -72,7 +73,7 @@ public class HiddenGuerrillas extends CardImpl { } } -class HiddenGuerrillasSoldier extends Token { +class HiddenGuerrillasSoldier extends TokenImpl { public HiddenGuerrillasSoldier() { super("Soldier", "5/3 Soldier creature with trample"); @@ -82,4 +83,11 @@ class HiddenGuerrillasSoldier extends Token { toughness = new MageInt(3); this.addAbility(TrampleAbility.getInstance()); } + public HiddenGuerrillasSoldier(final HiddenGuerrillasSoldier token) { + super(token); + } + + public HiddenGuerrillasSoldier copy() { + return new HiddenGuerrillasSoldier(this); + } } diff --git a/Mage.Sets/src/mage/cards/h/HiddenHerd.java b/Mage.Sets/src/mage/cards/h/HiddenHerd.java index ec6cd0c0b1..ad4a74a717 100644 --- a/Mage.Sets/src/mage/cards/h/HiddenHerd.java +++ b/Mage.Sets/src/mage/cards/h/HiddenHerd.java @@ -44,6 +44,7 @@ import mage.filter.StaticFilters; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -105,7 +106,7 @@ class HiddenHerdAbility extends TriggeredAbilityImpl { } } -class HiddenHerdBeast extends Token { +class HiddenHerdBeast extends TokenImpl { public HiddenHerdBeast() { super("Beast", "3/3 Beast creature"); @@ -114,4 +115,11 @@ class HiddenHerdBeast extends Token { power = new MageInt(3); toughness = new MageInt(3); } + public HiddenHerdBeast(final HiddenHerdBeast token) { + super(token); + } + + public HiddenHerdBeast copy() { + return new HiddenHerdBeast(this); + } } diff --git a/Mage.Sets/src/mage/cards/h/HiddenSpider.java b/Mage.Sets/src/mage/cards/h/HiddenSpider.java index 04213732d8..0b019defbc 100644 --- a/Mage.Sets/src/mage/cards/h/HiddenSpider.java +++ b/Mage.Sets/src/mage/cards/h/HiddenSpider.java @@ -43,6 +43,7 @@ import mage.constants.Duration; import mage.filter.StaticFilters; import mage.filter.common.FilterCreatureSpell; import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import java.util.UUID; @@ -80,7 +81,7 @@ public class HiddenSpider extends CardImpl { } } -class HiddenSpiderToken extends Token { +class HiddenSpiderToken extends TokenImpl { public HiddenSpiderToken() { super("Spider", "3/5 Spider creature with reach"); @@ -90,4 +91,11 @@ class HiddenSpiderToken extends Token { toughness = new MageInt(5); this.addAbility(ReachAbility.getInstance()); } + public HiddenSpiderToken(final HiddenSpiderToken token) { + super(token); + } + + public HiddenSpiderToken copy() { + return new HiddenSpiderToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/h/HiredMuscle.java b/Mage.Sets/src/mage/cards/h/HiredMuscle.java index d1de460eff..8289ac2a18 100644 --- a/Mage.Sets/src/mage/cards/h/HiredMuscle.java +++ b/Mage.Sets/src/mage/cards/h/HiredMuscle.java @@ -50,6 +50,7 @@ import mage.constants.Zone; import mage.counters.CounterType; import mage.filter.StaticFilters; import mage.game.events.GameEvent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetCreaturePermanent; @@ -89,7 +90,7 @@ public class HiredMuscle extends CardImpl { } } -class Scarmaker extends Token { +class Scarmaker extends TokenImpl { Scarmaker() { super("Scarmaker", ""); @@ -108,4 +109,11 @@ class Scarmaker extends Token { ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); } + public Scarmaker(final Scarmaker token) { + super(token); + } + + public Scarmaker copy() { + return new Scarmaker(this); + } } diff --git a/Mage.Sets/src/mage/cards/h/HissingQuagmire.java b/Mage.Sets/src/mage/cards/h/HissingQuagmire.java index 1b9b123d88..8b4d928125 100644 --- a/Mage.Sets/src/mage/cards/h/HissingQuagmire.java +++ b/Mage.Sets/src/mage/cards/h/HissingQuagmire.java @@ -43,6 +43,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -77,7 +78,7 @@ public class HissingQuagmire extends CardImpl { } } -class HissingQuagmireToken extends Token { +class HissingQuagmireToken extends TokenImpl { public HissingQuagmireToken() { super("", "2/2 black and green Elemental creature with deathtouch"); @@ -89,4 +90,11 @@ class HissingQuagmireToken extends Token { toughness = new MageInt(2); addAbility(DeathtouchAbility.getInstance()); } + public HissingQuagmireToken(final HissingQuagmireToken token) { + super(token); + } + + public HissingQuagmireToken copy() { + return new HissingQuagmireToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/h/HomuraHumanAscendant.java b/Mage.Sets/src/mage/cards/h/HomuraHumanAscendant.java index 78ab35045f..fb875fb34c 100644 --- a/Mage.Sets/src/mage/cards/h/HomuraHumanAscendant.java +++ b/Mage.Sets/src/mage/cards/h/HomuraHumanAscendant.java @@ -52,6 +52,7 @@ import mage.constants.*; import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; @@ -127,7 +128,7 @@ class HomuraReturnFlippedSourceEffect extends OneShotEffect { } -class HomurasEssence2 extends Token { +class HomurasEssence2 extends TokenImpl { HomurasEssence2() { super("Homura's Essence", ""); @@ -146,4 +147,11 @@ class HomurasEssence2 extends Token { ability.addEffect(effect); this.addAbility(ability); } + public HomurasEssence2(final HomurasEssence2 token) { + super(token); + } + + public HomurasEssence2 copy() { + return new HomurasEssence2(this); + } } diff --git a/Mage.Sets/src/mage/cards/h/HornetCannon.java b/Mage.Sets/src/mage/cards/h/HornetCannon.java index f05993ea32..6f741f2c4a 100644 --- a/Mage.Sets/src/mage/cards/h/HornetCannon.java +++ b/Mage.Sets/src/mage/cards/h/HornetCannon.java @@ -43,6 +43,7 @@ import mage.constants.Zone; import mage.game.Game; import mage.game.permanent.Permanent; import mage.game.permanent.token.HornetToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.targetpointer.FixedTarget; diff --git a/Mage.Sets/src/mage/cards/h/HostileDesert.java b/Mage.Sets/src/mage/cards/h/HostileDesert.java index 5b6155a5da..91e34685e9 100644 --- a/Mage.Sets/src/mage/cards/h/HostileDesert.java +++ b/Mage.Sets/src/mage/cards/h/HostileDesert.java @@ -42,6 +42,7 @@ import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; import mage.filter.common.FilterLandCard; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetCardInYourGraveyard; @@ -74,7 +75,7 @@ public class HostileDesert extends CardImpl { } } -class HostileDesertToken extends Token { +class HostileDesertToken extends TokenImpl { public HostileDesertToken() { super("", "3/4 elemental creature"); @@ -83,4 +84,11 @@ class HostileDesertToken extends Token { power = new MageInt(3); toughness = new MageInt(4); } + public HostileDesertToken(final HostileDesertToken token) { + super(token); + } + + public HostileDesertToken copy() { + return new HostileDesertToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/h/HourOfNeed.java b/Mage.Sets/src/mage/cards/h/HourOfNeed.java index ec971df313..0b9911eab0 100644 --- a/Mage.Sets/src/mage/cards/h/HourOfNeed.java +++ b/Mage.Sets/src/mage/cards/h/HourOfNeed.java @@ -39,6 +39,7 @@ import mage.constants.Zone; import mage.game.Game; import mage.game.permanent.Permanent; import mage.game.permanent.token.HourOfNeedSphinxToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; import mage.target.common.TargetCreaturePermanent; diff --git a/Mage.Sets/src/mage/cards/h/HuntingWilds.java b/Mage.Sets/src/mage/cards/h/HuntingWilds.java index efe272e04a..acfd20d500 100644 --- a/Mage.Sets/src/mage/cards/h/HuntingWilds.java +++ b/Mage.Sets/src/mage/cards/h/HuntingWilds.java @@ -50,6 +50,7 @@ import mage.constants.SubType; import mage.filter.common.FilterLandCard; import mage.filter.predicate.mageobject.SubtypePredicate; import mage.game.Game; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetCardInLibrary; import mage.target.targetpointer.FixedTargets; @@ -125,7 +126,7 @@ class HuntingWildsEffect extends OneShotEffect { } } -class HuntingWildsToken extends Token { +class HuntingWildsToken extends TokenImpl { public HuntingWildsToken() { super("", "3/3 green creature with haste"); @@ -136,4 +137,11 @@ class HuntingWildsToken extends Token { this.addAbility(HasteAbility.getInstance()); } + public HuntingWildsToken(final HuntingWildsToken token) { + super(token); + } + + public HuntingWildsToken copy() { + return new HuntingWildsToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/h/Hydroform.java b/Mage.Sets/src/mage/cards/h/Hydroform.java index 66428d6c02..70615b1b73 100644 --- a/Mage.Sets/src/mage/cards/h/Hydroform.java +++ b/Mage.Sets/src/mage/cards/h/Hydroform.java @@ -36,6 +36,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetLandPermanent; @@ -64,7 +65,7 @@ public class Hydroform extends CardImpl { } } -class HydroformToken extends Token { +class HydroformToken extends TokenImpl { public HydroformToken() { super("", "3/3 Elemental creature with flying"); @@ -76,4 +77,11 @@ class HydroformToken extends Token { this.addAbility(FlyingAbility.getInstance()); } + public HydroformToken(final HydroformToken token) { + super(token); + } + + public HydroformToken copy() { + return new HydroformToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/i/IgnitionTeam.java b/Mage.Sets/src/mage/cards/i/IgnitionTeam.java index 6ccdb84dbd..84132dab69 100644 --- a/Mage.Sets/src/mage/cards/i/IgnitionTeam.java +++ b/Mage.Sets/src/mage/cards/i/IgnitionTeam.java @@ -48,6 +48,7 @@ import mage.counters.CounterType; import mage.filter.common.FilterLandPermanent; import mage.filter.predicate.permanent.TappedPredicate; import mage.game.Game; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetLandPermanent; @@ -116,7 +117,7 @@ class TappedLandsCount implements DynamicValue { } } -class IgnitionTeamToken extends Token { +class IgnitionTeamToken extends TokenImpl { public IgnitionTeamToken() { super("", "4/4 red Elemental creature"); @@ -127,4 +128,11 @@ class IgnitionTeamToken extends Token { this.power = new MageInt(4); this.toughness = new MageInt(4); } + public IgnitionTeamToken(final IgnitionTeamToken token) { + super(token); + } + + public IgnitionTeamToken copy() { + return new IgnitionTeamToken(this); + } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/i/InitiateOfBlood.java b/Mage.Sets/src/mage/cards/i/InitiateOfBlood.java index a49b7ae8d8..642e42a29b 100644 --- a/Mage.Sets/src/mage/cards/i/InitiateOfBlood.java +++ b/Mage.Sets/src/mage/cards/i/InitiateOfBlood.java @@ -45,6 +45,7 @@ import mage.constants.SuperType; import mage.constants.Zone; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.permanent.WasDealtDamageThisTurnPredicate; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetCreaturePermanent; @@ -89,7 +90,7 @@ public class InitiateOfBlood extends CardImpl { } } -class GokaTheUnjust extends Token { +class GokaTheUnjust extends TokenImpl { private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature that was dealt damage this turn"); @@ -112,4 +113,11 @@ class GokaTheUnjust extends Token { ability.addTarget(new TargetCreaturePermanent(filter)); this.addAbility(ability); } + public GokaTheUnjust(final GokaTheUnjust token) { + super(token); + } + + public GokaTheUnjust copy() { + return new GokaTheUnjust(this); + } } diff --git a/Mage.Sets/src/mage/cards/i/InkmothNexus.java b/Mage.Sets/src/mage/cards/i/InkmothNexus.java index 55f03caa4e..0d763abb83 100644 --- a/Mage.Sets/src/mage/cards/i/InkmothNexus.java +++ b/Mage.Sets/src/mage/cards/i/InkmothNexus.java @@ -43,6 +43,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -73,7 +74,7 @@ public class InkmothNexus extends CardImpl { } } -class InkmothNexusToken extends Token { +class InkmothNexusToken extends TokenImpl { public InkmothNexusToken() { super("Blinkmoth", "1/1 Blinkmoth artifact creature with flying and infect"); cardType.add(CardType.ARTIFACT); @@ -84,4 +85,11 @@ class InkmothNexusToken extends Token { this.addAbility(FlyingAbility.getInstance()); this.addAbility(InfectAbility.getInstance()); } + public InkmothNexusToken(final InkmothNexusToken token) { + super(token); + } + + public InkmothNexusToken copy() { + return new InkmothNexusToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/i/IzzetKeyrune.java b/Mage.Sets/src/mage/cards/i/IzzetKeyrune.java index ed143a5c97..995f72c9e5 100644 --- a/Mage.Sets/src/mage/cards/i/IzzetKeyrune.java +++ b/Mage.Sets/src/mage/cards/i/IzzetKeyrune.java @@ -45,6 +45,7 @@ import mage.constants.Duration; import mage.constants.Outcome; import mage.constants.Zone; import mage.game.Game; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; @@ -105,7 +106,7 @@ public class IzzetKeyrune extends CardImpl { } } - private static class IzzetKeyruneToken extends Token { + private static class IzzetKeyruneToken extends TokenImpl { IzzetKeyruneToken() { super("", "2/1 blue and red Elemental artifact creature"); cardType.add(CardType.ARTIFACT); @@ -116,6 +117,14 @@ public class IzzetKeyrune extends CardImpl { power = new MageInt(2); toughness = new MageInt(1); } + + public IzzetKeyruneToken(final IzzetKeyruneToken token) { + super(token); + } + + public IzzetKeyruneToken copy() { + return new IzzetKeyruneToken(this); + } } } diff --git a/Mage.Sets/src/mage/cards/j/JadeIdol.java b/Mage.Sets/src/mage/cards/j/JadeIdol.java index 3fa6bed3e8..babb7d2c66 100644 --- a/Mage.Sets/src/mage/cards/j/JadeIdol.java +++ b/Mage.Sets/src/mage/cards/j/JadeIdol.java @@ -38,6 +38,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.filter.StaticFilters; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -61,7 +62,7 @@ public class JadeIdol extends CardImpl { } -class JadeIdolToken extends Token { +class JadeIdolToken extends TokenImpl { JadeIdolToken() { super("", "4/4 Spirit artifact creature"); cardType.add(CardType.ARTIFACT); @@ -70,4 +71,11 @@ class JadeIdolToken extends Token { power = new MageInt(4); toughness = new MageInt(4); } + public JadeIdolToken(final JadeIdolToken token) { + super(token); + } + + public JadeIdolToken copy() { + return new JadeIdolToken(this); + } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/j/JadeStatue.java b/Mage.Sets/src/mage/cards/j/JadeStatue.java index 36d5ae7e5b..8ce07b711d 100644 --- a/Mage.Sets/src/mage/cards/j/JadeStatue.java +++ b/Mage.Sets/src/mage/cards/j/JadeStatue.java @@ -40,6 +40,7 @@ import mage.constants.SubType; import mage.constants.Duration; import mage.constants.TurnPhase; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -65,7 +66,7 @@ public class JadeStatue extends CardImpl { return new JadeStatue(this); } - private static class JadeStatueToken extends Token { + private static class JadeStatueToken extends TokenImpl { JadeStatueToken() { super("", "3/6 Golem artifact creature"); cardType.add(CardType.ARTIFACT); @@ -73,6 +74,13 @@ public class JadeStatue extends CardImpl { this.subtype.add(SubType.GOLEM); power = new MageInt(3); toughness = new MageInt(6); - } + } + public JadeStatueToken(final JadeStatueToken token) { + super(token); + } + + public JadeStatueToken copy() { + return new JadeStatueToken(this); + } } } diff --git a/Mage.Sets/src/mage/cards/j/JodahArchmageEternal.java b/Mage.Sets/src/mage/cards/j/JodahArchmageEternal.java index 574afe41de..ae7d16bf6b 100644 --- a/Mage.Sets/src/mage/cards/j/JodahArchmageEternal.java +++ b/Mage.Sets/src/mage/cards/j/JodahArchmageEternal.java @@ -35,6 +35,7 @@ import mage.abilities.condition.common.SourceIsSpellCondition; import mage.abilities.costs.AlternativeCostSourceAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.effects.common.continuous.WUBRGInsteadEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -60,7 +61,7 @@ public class JodahArchmageEternal extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // You may pay WUBRG rather than pay the mana cost for spells that you cast. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new JodahArchmageEternalRuleEffect())); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new WUBRGInsteadEffect())); } public JodahArchmageEternal(final JodahArchmageEternal card) { @@ -72,42 +73,3 @@ public class JodahArchmageEternal extends CardImpl { return new JodahArchmageEternal(this); } } - -class JodahArchmageEternalRuleEffect extends ContinuousEffectImpl { - - static AlternativeCostSourceAbility alternativeCastingCostAbility = new AlternativeCostSourceAbility(new ManaCostsImpl("{W}{U}{B}{R}{G}"), SourceIsSpellCondition.instance); - - public JodahArchmageEternalRuleEffect() { - super(Duration.WhileOnBattlefield, Outcome.Detriment); - staticText = "You may pay {W}{U}{B}{R}{G} rather than pay the mana cost for spells that you cast"; - } - - public JodahArchmageEternalRuleEffect(final JodahArchmageEternalRuleEffect effect) { - super(effect); - } - - @Override - public JodahArchmageEternalRuleEffect copy() { - return new JodahArchmageEternalRuleEffect(this); - } - - @Override - public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { - controller.getAlternativeSourceCosts().add(alternativeCastingCostAbility); - return true; - } - return false; - } - - @Override - public boolean apply(Game game, Ability source) { - return false; - } - - @Override - public boolean hasLayer(Layer layer) { - return layer == Layer.RulesEffects; - } -} diff --git a/Mage.Sets/src/mage/cards/j/JolraelEmpressOfBeasts.java b/Mage.Sets/src/mage/cards/j/JolraelEmpressOfBeasts.java index 6460529d80..bf3cf980d4 100644 --- a/Mage.Sets/src/mage/cards/j/JolraelEmpressOfBeasts.java +++ b/Mage.Sets/src/mage/cards/j/JolraelEmpressOfBeasts.java @@ -44,6 +44,7 @@ import mage.filter.FilterPermanent; import mage.filter.common.FilterLandPermanent; import mage.filter.predicate.permanent.ControllerIdPredicate; import mage.game.Game; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; import mage.target.TargetPlayer; @@ -110,7 +111,7 @@ class JolraelEmpressOfBeastsEffect extends OneShotEffect { } } -class JolraelLandsToken extends Token { +class JolraelLandsToken extends TokenImpl { public JolraelLandsToken() { super("", "3/3 creature"); @@ -118,4 +119,11 @@ class JolraelLandsToken extends Token { power = new MageInt(3); toughness = new MageInt(3); } + public JolraelLandsToken(final JolraelLandsToken token) { + super(token); + } + + public JolraelLandsToken copy() { + return new JolraelLandsToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/j/JushiApprentice.java b/Mage.Sets/src/mage/cards/j/JushiApprentice.java index ea198e2564..c1107af489 100644 --- a/Mage.Sets/src/mage/cards/j/JushiApprentice.java +++ b/Mage.Sets/src/mage/cards/j/JushiApprentice.java @@ -46,6 +46,7 @@ import mage.constants.SubType; import mage.constants.ComparisonType; import mage.constants.SuperType; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetPlayer; @@ -83,7 +84,7 @@ public class JushiApprentice extends CardImpl { } } -class TomoyaTheRevealer extends Token { +class TomoyaTheRevealer extends TokenImpl { TomoyaTheRevealer() { super("Tomoya the Revealer", ""); @@ -101,4 +102,11 @@ class TomoyaTheRevealer extends Token { ability.addTarget(new TargetPlayer()); this.addAbility(ability); } + public TomoyaTheRevealer(final TomoyaTheRevealer token) { + super(token); + } + + public TomoyaTheRevealer copy() { + return new TomoyaTheRevealer(this); + } } diff --git a/Mage.Sets/src/mage/cards/k/KamahlFistOfKrosa.java b/Mage.Sets/src/mage/cards/k/KamahlFistOfKrosa.java index 3d7ffda3fe..25c9d849ac 100644 --- a/Mage.Sets/src/mage/cards/k/KamahlFistOfKrosa.java +++ b/Mage.Sets/src/mage/cards/k/KamahlFistOfKrosa.java @@ -43,6 +43,7 @@ import mage.constants.Duration; import mage.constants.SuperType; import mage.constants.Zone; import mage.filter.StaticFilters; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetLandPermanent; @@ -87,7 +88,7 @@ public class KamahlFistOfKrosa extends CardImpl { } } -class KamahlFistOfKrosaLandToken extends Token { +class KamahlFistOfKrosaLandToken extends TokenImpl { public KamahlFistOfKrosaLandToken() { super("", "1/1 creature"); @@ -96,4 +97,11 @@ class KamahlFistOfKrosaLandToken extends Token { this.power = new MageInt(1); this.toughness = new MageInt(1); } + public KamahlFistOfKrosaLandToken(final KamahlFistOfKrosaLandToken token) { + super(token); + } + + public KamahlFistOfKrosaLandToken copy() { + return new KamahlFistOfKrosaLandToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/k/KamahlsSummons.java b/Mage.Sets/src/mage/cards/k/KamahlsSummons.java index 505c12a930..a621481a52 100644 --- a/Mage.Sets/src/mage/cards/k/KamahlsSummons.java +++ b/Mage.Sets/src/mage/cards/k/KamahlsSummons.java @@ -43,6 +43,7 @@ import mage.filter.FilterCard; import mage.filter.common.FilterCreatureCard; import mage.game.Game; import mage.game.permanent.token.BearToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; import mage.target.common.TargetCardInHand; diff --git a/Mage.Sets/src/mage/cards/k/KinTreeInvocation.java b/Mage.Sets/src/mage/cards/k/KinTreeInvocation.java index ce2d9bad3c..bc713542b1 100644 --- a/Mage.Sets/src/mage/cards/k/KinTreeInvocation.java +++ b/Mage.Sets/src/mage/cards/k/KinTreeInvocation.java @@ -28,6 +28,8 @@ package mage.cards.k; import java.util.UUID; + +import mage.MageInt; import mage.ObjectColor; import mage.abilities.AbilitiesImpl; import mage.abilities.Ability; @@ -40,6 +42,7 @@ import mage.constants.SubType; import mage.filter.StaticFilters; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.util.SubTypeList; @@ -91,18 +94,36 @@ class KinTreeInvocationCreateTokenEffect extends OneShotEffect { value = permanent.getToughness().getValue(); } } - - SubTypeList list = new SubTypeList(); - list.add(SubType.SPIRIT); - list.add(SubType.WARRIOR); - ObjectColor objectColor = new ObjectColor(); - objectColor.setBlack(true); - objectColor.setGreen(true); - Token token = new Token("Spirit Warrior", "X/X black and green Spirit Warrior creature token, where X is the greatest toughness among creatures you control", - objectColor, list, value, value, new AbilitiesImpl<>()); + Token token = new SpiritWarriorToken(value); token.getAbilities().newId(); // neccessary if token has ability like DevourAbility() token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId()); return true; } } + +class SpiritWarriorToken extends TokenImpl { + + public SpiritWarriorToken() { + this(1); + } + + public SpiritWarriorToken(int x) { + super("Spirit Warrior", "X/X black and green Spirit Warrior creature token, where X is the greatest toughness among creatures you control"); + this.cardType.add(CardType.CREATURE); + this.subtype.add(SubType.SPIRIT); + this.subtype.add(SubType.WARRIOR); + this.color.setBlack(true); + this.color.setGreen(true); + this.power = new MageInt(x); + this.toughness = new MageInt(x); + } + + public SpiritWarriorToken(final SpiritWarriorToken token) { + super(token); + } + + public SpiritWarriorToken copy() { + return new SpiritWarriorToken(this); + } +} diff --git a/Mage.Sets/src/mage/cards/k/KitsuneMystic.java b/Mage.Sets/src/mage/cards/k/KitsuneMystic.java index fc9f92c35c..c60ee324af 100644 --- a/Mage.Sets/src/mage/cards/k/KitsuneMystic.java +++ b/Mage.Sets/src/mage/cards/k/KitsuneMystic.java @@ -46,6 +46,7 @@ import mage.filter.predicate.mageobject.SubtypePredicate; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; @@ -82,7 +83,7 @@ public class KitsuneMystic extends CardImpl { } } -class AutumnTailKitsuneSage extends Token { +class AutumnTailKitsuneSage extends TokenImpl { private static final FilterEnchantmentPermanent filter = new FilterEnchantmentPermanent("Aura attached to a creature"); @@ -107,6 +108,13 @@ class AutumnTailKitsuneSage extends Token { ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); } + public AutumnTailKitsuneSage(final AutumnTailKitsuneSage token) { + super(token); + } + + public AutumnTailKitsuneSage copy() { + return new AutumnTailKitsuneSage(this); + } } class AutumnTailEffect extends OneShotEffect { diff --git a/Mage.Sets/src/mage/cards/k/KolaghanMonument.java b/Mage.Sets/src/mage/cards/k/KolaghanMonument.java index 8353e9a578..72c9d5112d 100644 --- a/Mage.Sets/src/mage/cards/k/KolaghanMonument.java +++ b/Mage.Sets/src/mage/cards/k/KolaghanMonument.java @@ -41,6 +41,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -70,7 +71,7 @@ public class KolaghanMonument extends CardImpl { return new KolaghanMonument(this); } - private class KolaghanMonumentToken extends Token { + private class KolaghanMonumentToken extends TokenImpl { KolaghanMonumentToken() { super("", "4/4 black and red Dragon artifact creature with flying"); cardType.add(CardType.ARTIFACT); @@ -82,5 +83,12 @@ public class KolaghanMonument extends CardImpl { toughness = new MageInt(4); this.addAbility(FlyingAbility.getInstance()); } + public KolaghanMonumentToken(final KolaghanMonumentToken token) { + super(token); + } + + public KolaghanMonumentToken copy() { + return new KolaghanMonumentToken(this); + } } } diff --git a/Mage.Sets/src/mage/cards/k/KormusBell.java b/Mage.Sets/src/mage/cards/k/KormusBell.java index 6eee0ad2e3..db2597e79c 100644 --- a/Mage.Sets/src/mage/cards/k/KormusBell.java +++ b/Mage.Sets/src/mage/cards/k/KormusBell.java @@ -36,6 +36,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.filter.FilterPermanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -66,7 +67,7 @@ public class KormusBell extends CardImpl { } } -class KormusBellToken extends Token { +class KormusBellToken extends TokenImpl { public KormusBellToken() { super("", "1/1 black creatures"); @@ -75,5 +76,11 @@ class KormusBellToken extends Token { toughness = new MageInt(1); color.setBlack(true); // black creatures } + public KormusBellToken(final KormusBellToken token) { + super(token); + } + public KormusBellToken copy() { + return new KormusBellToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/k/KothOfTheHammer.java b/Mage.Sets/src/mage/cards/k/KothOfTheHammer.java index 5141763228..ccef4aa556 100644 --- a/Mage.Sets/src/mage/cards/k/KothOfTheHammer.java +++ b/Mage.Sets/src/mage/cards/k/KothOfTheHammer.java @@ -49,6 +49,7 @@ import mage.filter.common.FilterLandPermanent; import mage.filter.predicate.mageobject.SubtypePredicate; import mage.filter.predicate.permanent.ControllerPredicate; import mage.game.command.emblems.KothOfTheHammerEmblem; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetLandPermanent; @@ -96,7 +97,7 @@ public class KothOfTheHammer extends CardImpl { } } -class KothOfTheHammerToken extends Token { +class KothOfTheHammerToken extends TokenImpl { public KothOfTheHammerToken() { super("Elemental", "4/4 red Elemental"); @@ -107,4 +108,11 @@ class KothOfTheHammerToken extends Token { this.power = new MageInt(4); this.toughness = new MageInt(4); } + public KothOfTheHammerToken(final KothOfTheHammerToken token) { + super(token); + } + + public KothOfTheHammerToken copy() { + return new KothOfTheHammerToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/k/KuonOgreAscendant.java b/Mage.Sets/src/mage/cards/k/KuonOgreAscendant.java index 7fdffcc0f2..355f199d46 100644 --- a/Mage.Sets/src/mage/cards/k/KuonOgreAscendant.java +++ b/Mage.Sets/src/mage/cards/k/KuonOgreAscendant.java @@ -44,6 +44,7 @@ import mage.constants.TargetController; import mage.constants.Zone; import mage.filter.StaticFilters; import mage.game.Game; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.watchers.common.CreaturesDiedWatcher; @@ -84,7 +85,7 @@ public class KuonOgreAscendant extends CardImpl { } } -class KuonsEssenceToken extends Token { +class KuonsEssenceToken extends TokenImpl { KuonsEssenceToken() { super("Kuon's Essence", ""); @@ -99,6 +100,13 @@ class KuonsEssenceToken extends Token { new SacrificeEffect(StaticFilters.FILTER_PERMANENT_CREATURE, 1, "that player"), TargetController.ANY, false, true)); } + public KuonsEssenceToken(final KuonsEssenceToken token) { + super(token); + } + + public KuonsEssenceToken copy() { + return new KuonsEssenceToken(this); + } } enum KuonOgreAscendantCondition implements Condition { diff --git a/Mage.Sets/src/mage/cards/l/LavaclawReaches.java b/Mage.Sets/src/mage/cards/l/LavaclawReaches.java index 849faa0647..40991bcef2 100644 --- a/Mage.Sets/src/mage/cards/l/LavaclawReaches.java +++ b/Mage.Sets/src/mage/cards/l/LavaclawReaches.java @@ -44,6 +44,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -75,7 +76,7 @@ public class LavaclawReaches extends CardImpl { } -class LavaclawReachesToken extends Token { +class LavaclawReachesToken extends TokenImpl { public LavaclawReachesToken() { super("", "2/2 black and red Elemental creature with \"{X}: This creature gets +X/+0 until end of turn.\""); @@ -87,5 +88,11 @@ class LavaclawReachesToken extends Token { toughness = new MageInt(2); addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(new ManacostVariableValue(), new StaticValue(0), Duration.EndOfTurn), new ManaCostsImpl("{X}"))); } + public LavaclawReachesToken(final LavaclawReachesToken token) { + super(token); + } + public LavaclawReachesToken copy() { + return new LavaclawReachesToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/l/LiegeOfTheTangle.java b/Mage.Sets/src/mage/cards/l/LiegeOfTheTangle.java index ed2d1246b3..1f5be18f12 100644 --- a/Mage.Sets/src/mage/cards/l/LiegeOfTheTangle.java +++ b/Mage.Sets/src/mage/cards/l/LiegeOfTheTangle.java @@ -47,6 +47,7 @@ import mage.game.events.DamagedPlayerEvent; import mage.game.events.GameEvent; import mage.game.events.GameEvent.EventType; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.Target; import mage.target.common.TargetLandPermanent; @@ -184,7 +185,7 @@ class LiegeOfTheTangleEffect extends ContinuousEffectImpl { } -class AwakeningLandToken extends Token { +class AwakeningLandToken extends TokenImpl { public AwakeningLandToken() { super("", "8/8 green Elemental creature"); @@ -194,6 +195,13 @@ class AwakeningLandToken extends Token { power = new MageInt(8); toughness = new MageInt(8); } + public AwakeningLandToken(final AwakeningLandToken token) { + super(token); + } + + public AwakeningLandToken copy() { + return new AwakeningLandToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/l/LifeDeath.java b/Mage.Sets/src/mage/cards/l/LifeDeath.java index e1e074316a..f7c9a6d741 100644 --- a/Mage.Sets/src/mage/cards/l/LifeDeath.java +++ b/Mage.Sets/src/mage/cards/l/LifeDeath.java @@ -43,6 +43,7 @@ import mage.constants.Zone; import mage.filter.StaticFilters; import mage.filter.common.FilterControlledLandPermanent; import mage.game.Game; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; import mage.target.Target; @@ -80,7 +81,7 @@ public class LifeDeath extends SplitCard { } } -class LifeLandToken extends Token { +class LifeLandToken extends TokenImpl { public LifeLandToken() { super("", "1/1 creatures"); @@ -88,6 +89,13 @@ class LifeLandToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + public LifeLandToken(final LifeLandToken token) { + super(token); + } + + public LifeLandToken copy() { + return new LifeLandToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/l/LifecraftAwakening.java b/Mage.Sets/src/mage/cards/l/LifecraftAwakening.java index 1cfc935515..771b532989 100644 --- a/Mage.Sets/src/mage/cards/l/LifecraftAwakening.java +++ b/Mage.Sets/src/mage/cards/l/LifecraftAwakening.java @@ -42,6 +42,7 @@ import mage.filter.common.FilterArtifactPermanent; import mage.filter.predicate.permanent.ControllerPredicate; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetArtifactPermanent; import mage.target.targetpointer.FixedTarget; @@ -109,7 +110,7 @@ class LifecraftAwakeningEffect extends OneShotEffect { } } -class LifecraftAwakeningToken extends Token { +class LifecraftAwakeningToken extends TokenImpl { LifecraftAwakeningToken() { super("", "0/0 Construct artifact creature"); @@ -120,4 +121,11 @@ class LifecraftAwakeningToken extends Token { this.power = new MageInt(0); this.toughness = new MageInt(0); } + public LifecraftAwakeningToken(final LifecraftAwakeningToken token) { + super(token); + } + + public LifecraftAwakeningToken copy() { + return new LifecraftAwakeningToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/l/LifesparkSpellbomb.java b/Mage.Sets/src/mage/cards/l/LifesparkSpellbomb.java index 9ef70285a3..33fd4a6a15 100644 --- a/Mage.Sets/src/mage/cards/l/LifesparkSpellbomb.java +++ b/Mage.Sets/src/mage/cards/l/LifesparkSpellbomb.java @@ -42,6 +42,7 @@ import mage.constants.CardType; import mage.constants.ColoredManaSymbol; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetLandPermanent; @@ -77,7 +78,7 @@ public class LifesparkSpellbomb extends CardImpl { } -class LifesparkSpellbombToken extends Token { +class LifesparkSpellbombToken extends TokenImpl { public LifesparkSpellbombToken() { super("", "3/3 creature"); @@ -86,4 +87,11 @@ class LifesparkSpellbombToken extends Token { this.power = new MageInt(3); this.toughness = new MageInt(3); } + public LifesparkSpellbombToken(final LifesparkSpellbombToken token) { + super(token); + } + + public LifesparkSpellbombToken copy() { + return new LifesparkSpellbombToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/l/Lignify.java b/Mage.Sets/src/mage/cards/l/Lignify.java index 3ca08be5d5..9d2c134924 100644 --- a/Mage.Sets/src/mage/cards/l/Lignify.java +++ b/Mage.Sets/src/mage/cards/l/Lignify.java @@ -41,6 +41,7 @@ import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Outcome; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; @@ -81,7 +82,7 @@ public class Lignify extends CardImpl { } } -class LignifyTreefolkToken extends Token { +class LignifyTreefolkToken extends TokenImpl { public LignifyTreefolkToken() { super("Treefolk", "a Treefolk with base power and toughness 0/4 with no abilities"); @@ -89,7 +90,13 @@ class LignifyTreefolkToken extends Token { subtype.add(SubType.TREEFOLK); power = new MageInt(0); toughness = new MageInt(4); + } + public LignifyTreefolkToken(final LignifyTreefolkToken token) { + super(token); + } + public LignifyTreefolkToken copy() { + return new LignifyTreefolkToken(this); } } diff --git a/Mage.Sets/src/mage/cards/l/LivingLands.java b/Mage.Sets/src/mage/cards/l/LivingLands.java index c2e3c79e7b..eb1d8b1b02 100644 --- a/Mage.Sets/src/mage/cards/l/LivingLands.java +++ b/Mage.Sets/src/mage/cards/l/LivingLands.java @@ -36,6 +36,7 @@ import mage.cards.CardSetInfo; import mage.constants.*; import mage.filter.common.FilterLandPermanent; import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import java.util.UUID; @@ -71,7 +72,7 @@ public class LivingLands extends CardImpl { } } -class LivingLandsToken extends Token { +class LivingLandsToken extends TokenImpl { public LivingLandsToken() { super("", "1/1 creatures"); @@ -79,4 +80,11 @@ class LivingLandsToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + public LivingLandsToken(final LivingLandsToken token) { + super(token); + } + + public LivingLandsToken copy() { + return new LivingLandsToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/l/LivingPlane.java b/Mage.Sets/src/mage/cards/l/LivingPlane.java index 66fe7e447e..d6b9f4ffca 100644 --- a/Mage.Sets/src/mage/cards/l/LivingPlane.java +++ b/Mage.Sets/src/mage/cards/l/LivingPlane.java @@ -38,6 +38,7 @@ import mage.constants.Duration; import mage.constants.SuperType; import mage.constants.Zone; import mage.filter.StaticFilters; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -64,7 +65,7 @@ public class LivingPlane extends CardImpl { } } -class LivingPlaneToken extends Token { +class LivingPlaneToken extends TokenImpl { public LivingPlaneToken() { super("Land", "1/1 creatures"); @@ -72,4 +73,11 @@ class LivingPlaneToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + public LivingPlaneToken(final LivingPlaneToken token) { + super(token); + } + + public LivingPlaneToken copy() { + return new LivingPlaneToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/l/LivingTerrain.java b/Mage.Sets/src/mage/cards/l/LivingTerrain.java index 481cbb393e..019471ebb0 100644 --- a/Mage.Sets/src/mage/cards/l/LivingTerrain.java +++ b/Mage.Sets/src/mage/cards/l/LivingTerrain.java @@ -37,6 +37,7 @@ import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetPermanent; import mage.target.common.TargetLandPermanent; @@ -73,7 +74,7 @@ public class LivingTerrain extends CardImpl { } } -class TreefolkToken extends Token { +class TreefolkToken extends TokenImpl { TreefolkToken() { super("Treefolk", "5/6 green Treefolk creature"); cardType.add(CardType.CREATURE); @@ -82,4 +83,11 @@ class TreefolkToken extends Token { power = new MageInt(5); toughness = new MageInt(6); } + public TreefolkToken(final TreefolkToken token) { + super(token); + } + + public TreefolkToken copy() { + return new TreefolkToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/l/LordOfTheUnreal.java b/Mage.Sets/src/mage/cards/l/LordOfTheUnreal.java index e31d47fac0..a6b810996d 100644 --- a/Mage.Sets/src/mage/cards/l/LordOfTheUnreal.java +++ b/Mage.Sets/src/mage/cards/l/LordOfTheUnreal.java @@ -62,6 +62,8 @@ public class LordOfTheUnreal extends CardImpl { this.power = new MageInt(2); this.toughness = new MageInt(2); + + // Illusion creatures you control get +1/+1 and have hexproof Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, filter, false)); ability.addEffect(new GainAbilityControlledEffect(HexproofAbility.getInstance(), Duration.WhileOnBattlefield, filter, false)); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/l/LumberingFalls.java b/Mage.Sets/src/mage/cards/l/LumberingFalls.java index 4e29df3460..893c2da341 100644 --- a/Mage.Sets/src/mage/cards/l/LumberingFalls.java +++ b/Mage.Sets/src/mage/cards/l/LumberingFalls.java @@ -42,6 +42,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -74,7 +75,7 @@ public class LumberingFalls extends CardImpl { } } -class LumberingFallsToken extends Token { +class LumberingFallsToken extends TokenImpl { public LumberingFallsToken() { super("", "3/3 green and blue Elemental creature with hexproof"); @@ -86,4 +87,11 @@ class LumberingFallsToken extends Token { toughness = new MageInt(3); addAbility(HexproofAbility.getInstance()); } + public LumberingFallsToken(final LumberingFallsToken token) { + super(token); + } + + public LumberingFallsToken copy() { + return new LumberingFallsToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/l/LurkingEvil.java b/Mage.Sets/src/mage/cards/l/LurkingEvil.java index 152b2df41f..8cfb3f8aa1 100644 --- a/Mage.Sets/src/mage/cards/l/LurkingEvil.java +++ b/Mage.Sets/src/mage/cards/l/LurkingEvil.java @@ -43,6 +43,7 @@ import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; import mage.game.Game; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; @@ -109,7 +110,7 @@ class LurkingEvilCost extends CostImpl { } } -class LurkingEvilToken extends Token { +class LurkingEvilToken extends TokenImpl { LurkingEvilToken() { super("Horror", "4/4 Horror creature with flying"); @@ -119,4 +120,11 @@ class LurkingEvilToken extends Token { cardType.add(CardType.CREATURE); this.addAbility(FlyingAbility.getInstance()); } + public LurkingEvilToken(final LurkingEvilToken token) { + super(token); + } + + public LurkingEvilToken copy() { + return new LurkingEvilToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/m/MarathWillOfTheWild.java b/Mage.Sets/src/mage/cards/m/MarathWillOfTheWild.java index cac2b03bc5..db1fc6326d 100644 --- a/Mage.Sets/src/mage/cards/m/MarathWillOfTheWild.java +++ b/Mage.Sets/src/mage/cards/m/MarathWillOfTheWild.java @@ -56,6 +56,7 @@ import mage.counters.CounterType; import mage.game.Game; import mage.game.permanent.Permanent; import mage.game.permanent.token.MarathWillOfTheWildElementalToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; import mage.target.common.TargetCreatureOrPlayer; diff --git a/Mage.Sets/src/mage/cards/m/MeganticSliver.java b/Mage.Sets/src/mage/cards/m/MeganticSliver.java index 0ad8b1539b..959b101d21 100644 --- a/Mage.Sets/src/mage/cards/m/MeganticSliver.java +++ b/Mage.Sets/src/mage/cards/m/MeganticSliver.java @@ -53,8 +53,7 @@ public class MeganticSliver extends CardImpl { this.toughness = new MageInt(3); // Sliver creatures you control get +3/+3. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, - new BoostControlledEffect(3, 3, Duration.WhileInGraveyard, StaticFilters.FILTER_PERMANENT_CREATURE_SLIVERS))); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(3, 3, Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURE_SLIVERS))); } public MeganticSliver(final MeganticSliver card) { diff --git a/Mage.Sets/src/mage/cards/m/MerfolkSovereign.java b/Mage.Sets/src/mage/cards/m/MerfolkSovereign.java index a733f6eefd..7b21cbf33a 100644 --- a/Mage.Sets/src/mage/cards/m/MerfolkSovereign.java +++ b/Mage.Sets/src/mage/cards/m/MerfolkSovereign.java @@ -69,6 +69,7 @@ public class MerfolkSovereign extends CardImpl { // Other Merfolk creatures you control get +1/+1. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, filter1, true))); + // {tap}: Target Merfolk creature can't be blocked this turn. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CantBeBlockedTargetEffect(), new TapSourceCost()); ability.addTarget(new TargetCreaturePermanent(filter2)); diff --git a/Mage.Sets/src/mage/cards/m/MishrasFactory.java b/Mage.Sets/src/mage/cards/m/MishrasFactory.java index 025ad71fe7..08d3375b12 100644 --- a/Mage.Sets/src/mage/cards/m/MishrasFactory.java +++ b/Mage.Sets/src/mage/cards/m/MishrasFactory.java @@ -43,6 +43,7 @@ import mage.constants.SubType; import mage.constants.Zone; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetCreaturePermanent; @@ -84,7 +85,7 @@ public class MishrasFactory extends CardImpl { } } -class AssemblyWorkerToken extends Token { +class AssemblyWorkerToken extends TokenImpl { public AssemblyWorkerToken() { super("Assembly-Worker", "2/2 Assembly-Worker artifact creature"); @@ -94,4 +95,11 @@ class AssemblyWorkerToken extends Token { power = new MageInt(2); toughness = new MageInt(2); } + public AssemblyWorkerToken(final AssemblyWorkerToken token) { + super(token); + } + + public AssemblyWorkerToken copy() { + return new AssemblyWorkerToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/m/MishrasGroundbreaker.java b/Mage.Sets/src/mage/cards/m/MishrasGroundbreaker.java index fd3ea4efac..4df644afc6 100644 --- a/Mage.Sets/src/mage/cards/m/MishrasGroundbreaker.java +++ b/Mage.Sets/src/mage/cards/m/MishrasGroundbreaker.java @@ -40,6 +40,7 @@ import mage.constants.CardType; import mage.constants.ColoredManaSymbol; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetLandPermanent; @@ -70,7 +71,7 @@ public class MishrasGroundbreaker extends CardImpl { } -class MishrasGroundbreakerToken extends Token { +class MishrasGroundbreakerToken extends TokenImpl { public MishrasGroundbreakerToken() { super("", "3/3 artifact creature"); @@ -79,4 +80,11 @@ class MishrasGroundbreakerToken extends Token { this.power = new MageInt(3); this.toughness = new MageInt(3); } + public MishrasGroundbreakerToken(final MishrasGroundbreakerToken token) { + super(token); + } + + public MishrasGroundbreakerToken copy() { + return new MishrasGroundbreakerToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/m/MongrelPack.java b/Mage.Sets/src/mage/cards/m/MongrelPack.java index 5ff149de1f..210a778217 100644 --- a/Mage.Sets/src/mage/cards/m/MongrelPack.java +++ b/Mage.Sets/src/mage/cards/m/MongrelPack.java @@ -39,6 +39,7 @@ import mage.constants.TurnPhase; import mage.constants.Zone; import mage.game.Game; import mage.game.events.GameEvent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -94,7 +95,7 @@ class MongrelPackAbility extends ZoneChangeTriggeredAbility { } } -class HoundToken extends Token { +class HoundToken extends TokenImpl { public HoundToken() { super("Hound", "1/1 green Hound creature token"); @@ -105,4 +106,12 @@ class HoundToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public HoundToken(final HoundToken token) { + super(token); + } + + public HoundToken copy() { + return new HoundToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/m/Mutavault.java b/Mage.Sets/src/mage/cards/m/Mutavault.java index 3f51864368..f5dfa79829 100644 --- a/Mage.Sets/src/mage/cards/m/Mutavault.java +++ b/Mage.Sets/src/mage/cards/m/Mutavault.java @@ -38,6 +38,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -67,7 +68,7 @@ public class Mutavault extends CardImpl { } } -class MutavaultToken extends Token { +class MutavaultToken extends TokenImpl { public MutavaultToken() { super("", "2/2 creature with all creature types"); @@ -76,4 +77,11 @@ class MutavaultToken extends Token { power = new MageInt(2); toughness = new MageInt(2); } + public MutavaultToken(final MutavaultToken token) { + super(token); + } + + public MutavaultToken copy() { + return new MutavaultToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/m/MythRealized.java b/Mage.Sets/src/mage/cards/m/MythRealized.java index f55bf8835c..95f4162b13 100644 --- a/Mage.Sets/src/mage/cards/m/MythRealized.java +++ b/Mage.Sets/src/mage/cards/m/MythRealized.java @@ -53,6 +53,7 @@ import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.CardTypePredicate; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; @@ -96,7 +97,7 @@ public class MythRealized extends CardImpl { } } -class MythRealizedToken extends Token { +class MythRealizedToken extends TokenImpl { public MythRealizedToken() { super("", "Monk Avatar creature in addition to its other types and gains \"This creature's power and toughness are each equal to the number of lore counters on it.\""); @@ -106,7 +107,13 @@ class MythRealizedToken extends Token { power = new MageInt(0); toughness = new MageInt(0); } + public MythRealizedToken(final MythRealizedToken token) { + super(token); + } + public MythRealizedToken copy() { + return new MythRealizedToken(this); + } } class MythRealizedSetPTEffect extends ContinuousEffectImpl { diff --git a/Mage.Sets/src/mage/cards/n/NahiriTheLithomancer.java b/Mage.Sets/src/mage/cards/n/NahiriTheLithomancer.java index a8e82d707f..86ede39fe1 100644 --- a/Mage.Sets/src/mage/cards/n/NahiriTheLithomancer.java +++ b/Mage.Sets/src/mage/cards/n/NahiriTheLithomancer.java @@ -50,6 +50,7 @@ import mage.game.Game; import mage.game.permanent.Permanent; import mage.game.permanent.token.KorSoldierToken; import mage.game.permanent.token.NahiriTheLithomancerEquipmentToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; import mage.target.Target; diff --git a/Mage.Sets/src/mage/cards/n/NantukoMonastery.java b/Mage.Sets/src/mage/cards/n/NantukoMonastery.java index 8607b53bf8..928b2dfcc2 100644 --- a/Mage.Sets/src/mage/cards/n/NantukoMonastery.java +++ b/Mage.Sets/src/mage/cards/n/NantukoMonastery.java @@ -43,6 +43,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -74,7 +75,7 @@ public class NantukoMonastery extends CardImpl { } } -class NantukoMonasteryToken extends Token { +class NantukoMonasteryToken extends TokenImpl { public NantukoMonasteryToken() { super("", "4/4 green and white Insect Monk creature with first strike"); @@ -87,4 +88,11 @@ class NantukoMonasteryToken extends Token { toughness = new MageInt(4); this.addAbility(FirstStrikeAbility.getInstance()); } + public NantukoMonasteryToken(final NantukoMonasteryToken token) { + super(token); + } + + public NantukoMonasteryToken copy() { + return new NantukoMonasteryToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/n/NaruMehaMasterWizard.java b/Mage.Sets/src/mage/cards/n/NaruMehaMasterWizard.java new file mode 100644 index 0000000000..6ff2848877 --- /dev/null +++ b/Mage.Sets/src/mage/cards/n/NaruMehaMasterWizard.java @@ -0,0 +1,102 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.cards.n; + +import java.util.UUID; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.CopyTargetSpellEffect; +import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.abilities.keyword.FlashAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; +import mage.constants.SuperType; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.FilterSpell; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.predicate.permanent.ControllerPredicate; +import mage.target.TargetSpell; + +/** + * @author JRHerlehy + * Created on 4/5/18. + */ +public class NaruMehaMasterWizard extends CardImpl { + + private static final FilterSpell spellFilter = new FilterSpell("instant or sorcery you control"); + private static final FilterCreaturePermanent wizardFilter = new FilterCreaturePermanent(SubType.WIZARD, "Wizards"); + + static { + wizardFilter.add(new ControllerPredicate(TargetController.YOU)); + spellFilter.add(new ControllerPredicate(TargetController.YOU)); + spellFilter.add(Predicates.or( + new CardTypePredicate(CardType.INSTANT), + new CardTypePredicate(CardType.SORCERY) + )); + } + + public NaruMehaMasterWizard(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}{U}"); + + this.addSuperType(SuperType.LEGENDARY); + this.subtype.add(SubType.HUMAN, SubType.WIZARD); + + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + //Flash + this.addAbility(FlashAbility.getInstance()); + + //When Naru Meha, Master Wizard enters the battlefield, copy target instant or sorcery spell you control. You may choose new targets for the copy. + Ability ability = new EntersBattlefieldTriggeredAbility(new CopyTargetSpellEffect()); + ability.addTarget(new TargetSpell(spellFilter)); + this.addAbility(ability); + + //Other Wizards you control get +1/+1. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, wizardFilter, true))); + } + + public NaruMehaMasterWizard(final NaruMehaMasterWizard card) { + super(card); + } + + @Override + public NaruMehaMasterWizard copy() { + return new NaruMehaMasterWizard(this); + } + +} diff --git a/Mage.Sets/src/mage/cards/n/NaturalEmergence.java b/Mage.Sets/src/mage/cards/n/NaturalEmergence.java index 16bed18320..ecb5fcd5a0 100644 --- a/Mage.Sets/src/mage/cards/n/NaturalEmergence.java +++ b/Mage.Sets/src/mage/cards/n/NaturalEmergence.java @@ -45,6 +45,7 @@ import mage.filter.common.FilterControlledEnchantmentPermanent; import mage.filter.common.FilterControlledLandPermanent; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.ColorPredicate; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -82,7 +83,7 @@ public class NaturalEmergence extends CardImpl { } } -class NaturalEmergenceToken extends Token { +class NaturalEmergenceToken extends TokenImpl { public NaturalEmergenceToken() { super("Land", "2/2 creatures with first strike"); @@ -91,4 +92,11 @@ class NaturalEmergenceToken extends Token { toughness = new MageInt(2); this.addAbility(FirstStrikeAbility.getInstance()); } + public NaturalEmergenceToken(final NaturalEmergenceToken token) { + super(token); + } + + public NaturalEmergenceToken copy() { + return new NaturalEmergenceToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/n/NaturesRevolt.java b/Mage.Sets/src/mage/cards/n/NaturesRevolt.java index bd42c02456..3eef22208d 100644 --- a/Mage.Sets/src/mage/cards/n/NaturesRevolt.java +++ b/Mage.Sets/src/mage/cards/n/NaturesRevolt.java @@ -37,6 +37,7 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Zone; import mage.filter.common.FilterLandPermanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -64,7 +65,7 @@ public class NaturesRevolt extends CardImpl { } } -class NaturesRevoltToken extends Token { +class NaturesRevoltToken extends TokenImpl { public NaturesRevoltToken() { super("Land", "2/2 creatures"); @@ -72,4 +73,11 @@ class NaturesRevoltToken extends Token { power = new MageInt(2); toughness = new MageInt(2); } + public NaturesRevoltToken(final NaturesRevoltToken token) { + super(token); + } + + public NaturesRevoltToken copy() { + return new NaturesRevoltToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/n/NeedleSpires.java b/Mage.Sets/src/mage/cards/n/NeedleSpires.java index 9f8455d187..30a9abd86f 100644 --- a/Mage.Sets/src/mage/cards/n/NeedleSpires.java +++ b/Mage.Sets/src/mage/cards/n/NeedleSpires.java @@ -43,6 +43,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -77,7 +78,7 @@ public class NeedleSpires extends CardImpl { } } -class NeedleSpiresToken extends Token { +class NeedleSpiresToken extends TokenImpl { public NeedleSpiresToken() { super("", "2/1 red and white Elemental creature with double strike"); @@ -89,4 +90,11 @@ class NeedleSpiresToken extends Token { toughness = new MageInt(1); addAbility(DoubleStrikeAbility.getInstance()); } + public NeedleSpiresToken(final NeedleSpiresToken token) { + super(token); + } + + public NeedleSpiresToken copy() { + return new NeedleSpiresToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/n/NezumiGraverobber.java b/Mage.Sets/src/mage/cards/n/NezumiGraverobber.java index 8c1104f6d5..c4a12bc7e2 100644 --- a/Mage.Sets/src/mage/cards/n/NezumiGraverobber.java +++ b/Mage.Sets/src/mage/cards/n/NezumiGraverobber.java @@ -47,6 +47,7 @@ import mage.constants.Zone; import mage.filter.FilterCard; import mage.filter.common.FilterCreatureCard; import mage.game.Game; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; import mage.target.Target; @@ -118,7 +119,7 @@ class NezumiGraverobberFlipEffect extends OneShotEffect { } -class NighteyesTheDesecratorToken extends Token { +class NighteyesTheDesecratorToken extends TokenImpl { NighteyesTheDesecratorToken() { super("Nighteyes the Desecrator", ""); @@ -134,4 +135,11 @@ class NighteyesTheDesecratorToken extends Token { ability.addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card from a graveyard"))); this.addAbility(ability); } + public NighteyesTheDesecratorToken(final NighteyesTheDesecratorToken token) { + super(token); + } + + public NighteyesTheDesecratorToken copy() { + return new NighteyesTheDesecratorToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/n/NezumiShortfang.java b/Mage.Sets/src/mage/cards/n/NezumiShortfang.java index 76528582ae..211c19ffda 100644 --- a/Mage.Sets/src/mage/cards/n/NezumiShortfang.java +++ b/Mage.Sets/src/mage/cards/n/NezumiShortfang.java @@ -43,6 +43,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.game.Game; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; import mage.target.common.TargetOpponent; @@ -83,7 +84,7 @@ public class NezumiShortfang extends CardImpl { } } -class StabwhiskerTheOdious extends Token { +class StabwhiskerTheOdious extends TokenImpl { StabwhiskerTheOdious() { super("Stabwhisker the Odious", ""); @@ -99,6 +100,13 @@ class StabwhiskerTheOdious extends Token { this.addAbility(new BeginningOfUpkeepTriggeredAbility( Zone.BATTLEFIELD, new StabwhiskerLoseLifeEffect(), TargetController.OPPONENT, false, true)); } + public StabwhiskerTheOdious(final StabwhiskerTheOdious token) { + super(token); + } + + public StabwhiskerTheOdious copy() { + return new StabwhiskerTheOdious(this); + } } class StabwhiskerLoseLifeEffect extends OneShotEffect { diff --git a/Mage.Sets/src/mage/cards/n/NissaStewardOfElements.java b/Mage.Sets/src/mage/cards/n/NissaStewardOfElements.java index 7c3806fea1..1b827c9bdb 100644 --- a/Mage.Sets/src/mage/cards/n/NissaStewardOfElements.java +++ b/Mage.Sets/src/mage/cards/n/NissaStewardOfElements.java @@ -50,6 +50,7 @@ import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.CardTypePredicate; import mage.filter.predicate.mageobject.ConvertedManaCostPredicate; import mage.game.Game; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; import mage.target.TargetPermanent; @@ -141,7 +142,7 @@ class NissaStewardOfElementsEffect extends OneShotEffect { } } -class NissaStewardOfElementsToken extends Token { +class NissaStewardOfElementsToken extends TokenImpl { public NissaStewardOfElementsToken() { super("", "5/5 Elemental creature with flying and haste"); @@ -152,4 +153,11 @@ class NissaStewardOfElementsToken extends Token { this.addAbility(FlyingAbility.getInstance()); this.addAbility(HasteAbility.getInstance()); } + public NissaStewardOfElementsToken(final NissaStewardOfElementsToken token) { + super(token); + } + + public NissaStewardOfElementsToken copy() { + return new NissaStewardOfElementsToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/n/NissaVitalForce.java b/Mage.Sets/src/mage/cards/n/NissaVitalForce.java index ab31057baf..1871a59af5 100644 --- a/Mage.Sets/src/mage/cards/n/NissaVitalForce.java +++ b/Mage.Sets/src/mage/cards/n/NissaVitalForce.java @@ -47,6 +47,7 @@ import mage.filter.common.FilterLandPermanent; import mage.filter.common.FilterPermanentCard; import mage.filter.predicate.permanent.ControllerPredicate; import mage.game.command.emblems.NissaVitalForceEmblem; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetCardInYourGraveyard; import mage.target.common.TargetLandPermanent; @@ -95,7 +96,7 @@ public class NissaVitalForce extends CardImpl { } } -class NissaVitalForceToken extends Token { +class NissaVitalForceToken extends TokenImpl { public NissaVitalForceToken() { super("", "5/5 Elemental creature with haste"); @@ -106,4 +107,11 @@ class NissaVitalForceToken extends Token { this.toughness = new MageInt(5); this.addAbility(HasteAbility.getInstance()); } + public NissaVitalForceToken(final NissaVitalForceToken token) { + super(token); + } + + public NissaVitalForceToken copy() { + return new NissaVitalForceToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/n/NissaWorldwaker.java b/Mage.Sets/src/mage/cards/n/NissaWorldwaker.java index 71c80637b0..2962d44c1c 100644 --- a/Mage.Sets/src/mage/cards/n/NissaWorldwaker.java +++ b/Mage.Sets/src/mage/cards/n/NissaWorldwaker.java @@ -45,6 +45,7 @@ import mage.filter.StaticFilters; import mage.filter.common.FilterControlledLandPermanent; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; import mage.target.TargetPermanent; @@ -138,7 +139,7 @@ class NissaWorldwakerSearchEffect extends OneShotEffect { } } -class NissaWorldwakerToken extends Token { +class NissaWorldwakerToken extends TokenImpl { public NissaWorldwakerToken() { super("", "4/4 Elemental creature with trample"); @@ -149,4 +150,11 @@ class NissaWorldwakerToken extends Token { this.toughness = new MageInt(4); this.addAbility(TrampleAbility.getInstance()); } + public NissaWorldwakerToken(final NissaWorldwakerToken token) { + super(token); + } + + public NissaWorldwakerToken copy() { + return new NissaWorldwakerToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/n/NotForgotten.java b/Mage.Sets/src/mage/cards/n/NotForgotten.java index 297468ccfe..7d59f97a5b 100644 --- a/Mage.Sets/src/mage/cards/n/NotForgotten.java +++ b/Mage.Sets/src/mage/cards/n/NotForgotten.java @@ -38,6 +38,7 @@ import mage.constants.Outcome; import mage.constants.Zone; import mage.game.Game; import mage.game.permanent.token.SpiritWhiteToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; import mage.target.common.TargetCardInGraveyard; diff --git a/Mage.Sets/src/mage/cards/n/NoyanDarRoilShaper.java b/Mage.Sets/src/mage/cards/n/NoyanDarRoilShaper.java index 52ca70e0e0..7a9586a761 100644 --- a/Mage.Sets/src/mage/cards/n/NoyanDarRoilShaper.java +++ b/Mage.Sets/src/mage/cards/n/NoyanDarRoilShaper.java @@ -50,6 +50,7 @@ import mage.filter.common.FilterControlledLandPermanent; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.CardTypePredicate; import mage.game.Game; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.Target; import mage.target.common.TargetControlledPermanent; @@ -130,7 +131,7 @@ class NoyanDarEffect extends OneShotEffect { } -class AwakenElementalToken extends Token { +class AwakenElementalToken extends TokenImpl { public AwakenElementalToken() { super("", "0/0 Elemental creature with haste"); @@ -142,4 +143,11 @@ class AwakenElementalToken extends Token { this.addAbility(HasteAbility.getInstance()); } + public AwakenElementalToken(final AwakenElementalToken token) { + super(token); + } + + public AwakenElementalToken copy() { + return new AwakenElementalToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/o/OjutaiMonument.java b/Mage.Sets/src/mage/cards/o/OjutaiMonument.java index 2d1c16e439..d17dd2e1b4 100644 --- a/Mage.Sets/src/mage/cards/o/OjutaiMonument.java +++ b/Mage.Sets/src/mage/cards/o/OjutaiMonument.java @@ -41,6 +41,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -70,7 +71,7 @@ public class OjutaiMonument extends CardImpl { return new OjutaiMonument(this); } - private static class OjutaiMonumentToken extends Token { + private static class OjutaiMonumentToken extends TokenImpl { OjutaiMonumentToken() { super("", "4/4 white and blue Dragon artifact creature with flying"); cardType.add(CardType.ARTIFACT); @@ -82,5 +83,13 @@ public class OjutaiMonument extends CardImpl { toughness = new MageInt(4); this.addAbility(FlyingAbility.getInstance()); } + + public OjutaiMonumentToken(final OjutaiMonumentToken token) { + super(token); + } + + public OjutaiMonumentToken copy() { + return new OjutaiMonumentToken(this); + } } } diff --git a/Mage.Sets/src/mage/cards/o/Omnibian.java b/Mage.Sets/src/mage/cards/o/Omnibian.java index 521fca3b56..943ed6b4c7 100644 --- a/Mage.Sets/src/mage/cards/o/Omnibian.java +++ b/Mage.Sets/src/mage/cards/o/Omnibian.java @@ -39,6 +39,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetCreaturePermanent; @@ -71,7 +72,7 @@ public class Omnibian extends CardImpl { } } -class OmnibianFrogToken extends Token { +class OmnibianFrogToken extends TokenImpl { public OmnibianFrogToken() { super("", "3/3 Frog"); @@ -79,4 +80,11 @@ class OmnibianFrogToken extends Token { this.power = new MageInt(3); this.toughness = new MageInt(3); } + public OmnibianFrogToken(final OmnibianFrogToken token) { + super(token); + } + + public OmnibianFrogToken copy() { + return new OmnibianFrogToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/o/OozeFlux.java b/Mage.Sets/src/mage/cards/o/OozeFlux.java index d33ebcc25b..194779d735 100644 --- a/Mage.Sets/src/mage/cards/o/OozeFlux.java +++ b/Mage.Sets/src/mage/cards/o/OozeFlux.java @@ -43,6 +43,7 @@ import mage.counters.CounterType; import mage.filter.common.FilterControlledCreaturePermanent; import mage.game.Game; import mage.game.permanent.token.OozeToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** diff --git a/Mage.Sets/src/mage/cards/o/OozeGarden.java b/Mage.Sets/src/mage/cards/o/OozeGarden.java index 6968753340..e099dacc10 100644 --- a/Mage.Sets/src/mage/cards/o/OozeGarden.java +++ b/Mage.Sets/src/mage/cards/o/OozeGarden.java @@ -28,6 +28,8 @@ package mage.cards.o; import java.util.UUID; + +import mage.MageInt; import mage.ObjectColor; import mage.abilities.AbilitiesImpl; import mage.abilities.Ability; @@ -47,6 +49,7 @@ import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.SubtypePredicate; import mage.game.Game; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetControlledCreaturePermanent; import mage.util.SubTypeList; @@ -105,17 +108,33 @@ class OozeGardenCreateTokenEffect extends OneShotEffect { value = ((SacrificeTargetCost)cost).getPermanents().get(0).getPower().getValue(); } } - SubTypeList list = new SubTypeList(); - list.add(SubType.OOZE); - Token token = new Token("Ooze", "X/X green Ooze creature token, where X is the sacrificed creature's power", ObjectColor.GREEN, list, value, value, new AbilitiesImpl<>()) { - - - }; + Token token = new OozeToken(value); token.getAbilities().newId(); // neccessary if token has ability like DevourAbility() token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId()); return true; } - - } +class OozeToken extends TokenImpl { + + public OozeToken() { + this(1); + } + + public OozeToken(int x) { + super("Ooze", "X/X green Ooze creature token, where X is the sacrificed creature's power"); + this.cardType.add(CardType.CREATURE); + this.color.addColor(ObjectColor.GREEN); + this.subtype.add(SubType.OOZE); + this.toughness = new MageInt(x); + this.power = new MageInt(x); + } + + public OozeToken(final OozeToken token) { + super(token); + } + + public OozeToken copy() { + return new OozeToken(this); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/o/OpalArchangel.java b/Mage.Sets/src/mage/cards/o/OpalArchangel.java index 23319578f8..6a9f6ee042 100644 --- a/Mage.Sets/src/mage/cards/o/OpalArchangel.java +++ b/Mage.Sets/src/mage/cards/o/OpalArchangel.java @@ -42,6 +42,7 @@ import mage.constants.SubType; import mage.constants.Duration; import mage.filter.StaticFilters; import mage.filter.common.FilterCreatureSpell; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import java.util.UUID; @@ -73,7 +74,7 @@ public class OpalArchangel extends CardImpl { } } -class OpalArchangelToken extends Token { +class OpalArchangelToken extends TokenImpl { public OpalArchangelToken() { super("Angel", "5/5 Angel creature with flying and vigilance"); @@ -84,4 +85,11 @@ class OpalArchangelToken extends Token { this.addAbility(FlyingAbility.getInstance()); this.addAbility(VigilanceAbility.getInstance()); } + public OpalArchangelToken(final OpalArchangelToken token) { + super(token); + } + + public OpalArchangelToken copy() { + return new OpalArchangelToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/o/OpalCaryatid.java b/Mage.Sets/src/mage/cards/o/OpalCaryatid.java index 84b4422d73..fc8da28d49 100644 --- a/Mage.Sets/src/mage/cards/o/OpalCaryatid.java +++ b/Mage.Sets/src/mage/cards/o/OpalCaryatid.java @@ -40,6 +40,7 @@ import mage.constants.SubType; import mage.constants.Duration; import mage.filter.StaticFilters; import mage.filter.common.FilterCreatureSpell; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import java.util.UUID; @@ -71,7 +72,7 @@ public class OpalCaryatid extends CardImpl { } } -class OpalCaryatidSoldier extends Token { +class OpalCaryatidSoldier extends TokenImpl { public OpalCaryatidSoldier() { super("Soldier", "2/2 Soldier creature"); @@ -80,4 +81,11 @@ class OpalCaryatidSoldier extends Token { power = new MageInt(2); toughness = new MageInt(2); } + public OpalCaryatidSoldier(final OpalCaryatidSoldier token) { + super(token); + } + + public OpalCaryatidSoldier copy() { + return new OpalCaryatidSoldier(this); + } } diff --git a/Mage.Sets/src/mage/cards/o/OpalChampion.java b/Mage.Sets/src/mage/cards/o/OpalChampion.java index cbc0db8d28..012ba7d184 100644 --- a/Mage.Sets/src/mage/cards/o/OpalChampion.java +++ b/Mage.Sets/src/mage/cards/o/OpalChampion.java @@ -41,6 +41,7 @@ import mage.constants.SubType; import mage.constants.Duration; import mage.filter.StaticFilters; import mage.filter.common.FilterCreatureSpell; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import java.util.UUID; @@ -72,7 +73,7 @@ public class OpalChampion extends CardImpl { } } -class OpalChampionKnight extends Token { +class OpalChampionKnight extends TokenImpl { public OpalChampionKnight() { super("Knight", "3/3 Knight creature with first strike"); @@ -82,4 +83,11 @@ class OpalChampionKnight extends Token { toughness = new MageInt(3); this.addAbility(FirstStrikeAbility.getInstance()); } + public OpalChampionKnight(final OpalChampionKnight token) { + super(token); + } + + public OpalChampionKnight copy() { + return new OpalChampionKnight(this); + } } diff --git a/Mage.Sets/src/mage/cards/o/OpalGargoyle.java b/Mage.Sets/src/mage/cards/o/OpalGargoyle.java index f224dc74f7..048ebd360a 100644 --- a/Mage.Sets/src/mage/cards/o/OpalGargoyle.java +++ b/Mage.Sets/src/mage/cards/o/OpalGargoyle.java @@ -41,6 +41,7 @@ import mage.constants.SubType; import mage.constants.Duration; import mage.filter.StaticFilters; import mage.filter.common.FilterCreatureSpell; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import java.util.UUID; @@ -72,7 +73,7 @@ public class OpalGargoyle extends CardImpl { } } -class OpalGargoyleToken extends Token { +class OpalGargoyleToken extends TokenImpl { public OpalGargoyleToken() { super("Gargoyle", "2/2 Gargoyle creature with flying"); @@ -82,4 +83,11 @@ class OpalGargoyleToken extends Token { toughness = new MageInt(2); this.addAbility(FlyingAbility.getInstance()); } + public OpalGargoyleToken(final OpalGargoyleToken token) { + super(token); + } + + public OpalGargoyleToken copy() { + return new OpalGargoyleToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/o/OpalGuardian.java b/Mage.Sets/src/mage/cards/o/OpalGuardian.java index 9681bd3fd8..54f3c861f1 100644 --- a/Mage.Sets/src/mage/cards/o/OpalGuardian.java +++ b/Mage.Sets/src/mage/cards/o/OpalGuardian.java @@ -43,6 +43,7 @@ import mage.constants.SubType; import mage.constants.Duration; import mage.filter.StaticFilters; import mage.filter.common.FilterCreatureSpell; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import java.util.UUID; @@ -74,7 +75,7 @@ public class OpalGuardian extends CardImpl { } } -class OpalGuardianGargoyle extends Token { +class OpalGuardianGargoyle extends TokenImpl { public OpalGuardianGargoyle() { super("Gargoyle", "3/4 Gargoyle creature with flying and protection from red"); cardType.add(CardType.CREATURE); @@ -84,4 +85,11 @@ class OpalGuardianGargoyle extends Token { this.addAbility(FlyingAbility.getInstance()); this.addAbility(ProtectionAbility.from(ObjectColor.RED)); } + public OpalGuardianGargoyle(final OpalGuardianGargoyle token) { + super(token); + } + + public OpalGuardianGargoyle copy() { + return new OpalGuardianGargoyle(this); + } } diff --git a/Mage.Sets/src/mage/cards/o/OrochiEggwatcher.java b/Mage.Sets/src/mage/cards/o/OrochiEggwatcher.java index a203ac4ac6..a9b5d91b22 100644 --- a/Mage.Sets/src/mage/cards/o/OrochiEggwatcher.java +++ b/Mage.Sets/src/mage/cards/o/OrochiEggwatcher.java @@ -52,6 +52,7 @@ import mage.constants.Zone; import static mage.filter.StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT; import mage.filter.common.FilterControlledCreaturePermanent; import mage.game.permanent.token.SnakeToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetCreaturePermanent; @@ -90,7 +91,7 @@ public class OrochiEggwatcher extends CardImpl { } } -class ShidakoBroodmistress extends Token { +class ShidakoBroodmistress extends TokenImpl { ShidakoBroodmistress() { super("Shidako, Broodmistress", ""); @@ -111,4 +112,11 @@ class ShidakoBroodmistress extends Token { ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); } + public ShidakoBroodmistress(final ShidakoBroodmistress token) { + super(token); + } + + public ShidakoBroodmistress copy() { + return new ShidakoBroodmistress(this); + } } diff --git a/Mage.Sets/src/mage/cards/o/OrzhovKeyrune.java b/Mage.Sets/src/mage/cards/o/OrzhovKeyrune.java index 13d8d91f48..7c01d1d743 100644 --- a/Mage.Sets/src/mage/cards/o/OrzhovKeyrune.java +++ b/Mage.Sets/src/mage/cards/o/OrzhovKeyrune.java @@ -41,6 +41,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -69,7 +70,7 @@ public class OrzhovKeyrune extends CardImpl { return new OrzhovKeyrune(this); } - private static class OrzhovKeyruneToken extends Token { + private static class OrzhovKeyruneToken extends TokenImpl { OrzhovKeyruneToken() { super("Thrull", "1/4 white and black Thrull artifact creature with lifelink"); cardType.add(CardType.ARTIFACT); @@ -81,5 +82,12 @@ public class OrzhovKeyrune extends CardImpl { toughness = new MageInt(4); this.addAbility(LifelinkAbility.getInstance()); } + public OrzhovKeyruneToken(final OrzhovKeyruneToken token) { + super(token); + } + + public OrzhovKeyruneToken copy() { + return new OrzhovKeyruneToken(this); + } } } diff --git a/Mage.Sets/src/mage/cards/o/OverseerOfTheDamned.java b/Mage.Sets/src/mage/cards/o/OverseerOfTheDamned.java index 17d82dbc08..572d1f3824 100644 --- a/Mage.Sets/src/mage/cards/o/OverseerOfTheDamned.java +++ b/Mage.Sets/src/mage/cards/o/OverseerOfTheDamned.java @@ -44,6 +44,7 @@ import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.Predicates; import mage.filter.predicate.permanent.ControllerPredicate; import mage.filter.predicate.permanent.TokenPredicate; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.game.permanent.token.ZombieToken; import mage.target.common.TargetCreaturePermanent; diff --git a/Mage.Sets/src/mage/cards/p/PhyrexianTotem.java b/Mage.Sets/src/mage/cards/p/PhyrexianTotem.java index d34591cee9..88f7b7319f 100644 --- a/Mage.Sets/src/mage/cards/p/PhyrexianTotem.java +++ b/Mage.Sets/src/mage/cards/p/PhyrexianTotem.java @@ -47,6 +47,7 @@ import mage.filter.common.FilterControlledPermanent; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.targetpointer.FixedTarget; @@ -77,7 +78,7 @@ public class PhyrexianTotem extends CardImpl { return new PhyrexianTotem(this); } - private static class PhyrexianTotemToken extends Token { + private static class PhyrexianTotemToken extends TokenImpl { PhyrexianTotemToken() { super("Horror", "5/5 black Horror artifact creature with trample"); cardType.add(CardType.ARTIFACT); @@ -88,6 +89,13 @@ public class PhyrexianTotem extends CardImpl { toughness = new MageInt(5); this.addAbility(TrampleAbility.getInstance()); } + public PhyrexianTotemToken(final PhyrexianTotemToken token) { + super(token); + } + + public PhyrexianTotemToken copy() { + return new PhyrexianTotemToken(this); + } } } diff --git a/Mage.Sets/src/mage/cards/p/PonybackBrigade.java b/Mage.Sets/src/mage/cards/p/PonybackBrigade.java index d5d5fdc546..a756d1a528 100644 --- a/Mage.Sets/src/mage/cards/p/PonybackBrigade.java +++ b/Mage.Sets/src/mage/cards/p/PonybackBrigade.java @@ -43,6 +43,7 @@ import mage.game.events.GameEvent; import mage.game.events.GameEvent.EventType; import mage.game.permanent.Permanent; import mage.game.permanent.token.GoblinToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** diff --git a/Mage.Sets/src/mage/cards/p/PrideOfTheClouds.java b/Mage.Sets/src/mage/cards/p/PrideOfTheClouds.java index 3afa71fcdb..723826854b 100644 --- a/Mage.Sets/src/mage/cards/p/PrideOfTheClouds.java +++ b/Mage.Sets/src/mage/cards/p/PrideOfTheClouds.java @@ -46,6 +46,7 @@ import mage.constants.Zone; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.mageobject.AbilityPredicate; import mage.filter.predicate.permanent.AnotherPredicate; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** * @@ -87,7 +88,7 @@ public class PrideOfTheClouds extends CardImpl { return new PrideOfTheClouds(this); } - private static class BirdToken extends Token { + private static class BirdToken extends TokenImpl { public BirdToken() { super("Bird", "1/1 white and blue Bird creature token with flying"); @@ -99,6 +100,12 @@ public class PrideOfTheClouds extends CardImpl { toughness = new MageInt(1); addAbility(FlyingAbility.getInstance()); } - + public BirdToken(final BirdToken token) { + super(token); + } + + public BirdToken copy() { + return new BirdToken(this); + } } } diff --git a/Mage.Sets/src/mage/cards/r/RagingRavine.java b/Mage.Sets/src/mage/cards/r/RagingRavine.java index 03c27be370..a1b428685f 100644 --- a/Mage.Sets/src/mage/cards/r/RagingRavine.java +++ b/Mage.Sets/src/mage/cards/r/RagingRavine.java @@ -48,6 +48,7 @@ import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; import mage.counters.CounterType; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -85,7 +86,7 @@ public class RagingRavine extends CardImpl { } -class RagingRavineToken extends Token { +class RagingRavineToken extends TokenImpl { public RagingRavineToken() { super("", "3/3 red and green Elemental creature"); @@ -96,4 +97,11 @@ class RagingRavineToken extends Token { power = new MageInt(3); toughness = new MageInt(3); } + public RagingRavineToken(final RagingRavineToken token) { + super(token); + } + + public RagingRavineToken copy() { + return new RagingRavineToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/r/RakdosKeyrune.java b/Mage.Sets/src/mage/cards/r/RakdosKeyrune.java index 321ebd38a1..6eecf65d36 100644 --- a/Mage.Sets/src/mage/cards/r/RakdosKeyrune.java +++ b/Mage.Sets/src/mage/cards/r/RakdosKeyrune.java @@ -41,6 +41,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -68,7 +69,7 @@ public class RakdosKeyrune extends CardImpl { return new RakdosKeyrune(this); } - private static class RakdosKeyruneToken extends Token { + private static class RakdosKeyruneToken extends TokenImpl { RakdosKeyruneToken() { super("", "3/1 black and red Devil artifact creature with first strike"); cardType.add(CardType.ARTIFACT); @@ -80,5 +81,12 @@ public class RakdosKeyrune extends CardImpl { toughness = new MageInt(1); this.addAbility(FirstStrikeAbility.getInstance()); } + public RakdosKeyruneToken(final RakdosKeyruneToken token) { + super(token); + } + + public RakdosKeyruneToken copy() { + return new RakdosKeyruneToken(this); + } } } diff --git a/Mage.Sets/src/mage/cards/r/Riddleform.java b/Mage.Sets/src/mage/cards/r/Riddleform.java index f00e2e3cf4..421a9f7585 100644 --- a/Mage.Sets/src/mage/cards/r/Riddleform.java +++ b/Mage.Sets/src/mage/cards/r/Riddleform.java @@ -46,6 +46,7 @@ import mage.constants.Zone; import mage.filter.FilterSpell; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -83,7 +84,7 @@ public class Riddleform extends CardImpl { } } -class RiddleformToken extends Token { +class RiddleformToken extends TokenImpl { public RiddleformToken() { super("", "3/3 Sphinx creature with flying"); @@ -94,4 +95,11 @@ class RiddleformToken extends Token { toughness = new MageInt(3); addAbility(FlyingAbility.getInstance()); } + public RiddleformToken(final RiddleformToken token) { + super(token); + } + + public RiddleformToken copy() { + return new RiddleformToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/r/RiptideReplicator.java b/Mage.Sets/src/mage/cards/r/RiptideReplicator.java index d536c3a500..05a14b4499 100644 --- a/Mage.Sets/src/mage/cards/r/RiptideReplicator.java +++ b/Mage.Sets/src/mage/cards/r/RiptideReplicator.java @@ -49,6 +49,7 @@ import mage.constants.Zone; import mage.counters.CounterType; import mage.game.Game; import mage.game.permanent.token.RiptideReplicatorToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** diff --git a/Mage.Sets/src/mage/cards/r/RiseOfTheHobgoblins.java b/Mage.Sets/src/mage/cards/r/RiseOfTheHobgoblins.java index f480d83f2f..fd96b97ad2 100644 --- a/Mage.Sets/src/mage/cards/r/RiseOfTheHobgoblins.java +++ b/Mage.Sets/src/mage/cards/r/RiseOfTheHobgoblins.java @@ -53,6 +53,7 @@ import mage.filter.predicate.mageobject.ColorPredicate; import mage.filter.predicate.permanent.ControllerPredicate; import mage.game.Game; import mage.game.permanent.token.GoblinSoldierToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; diff --git a/Mage.Sets/src/mage/cards/r/RudeAwakening.java b/Mage.Sets/src/mage/cards/r/RudeAwakening.java index 977405927f..e12cda24da 100644 --- a/Mage.Sets/src/mage/cards/r/RudeAwakening.java +++ b/Mage.Sets/src/mage/cards/r/RudeAwakening.java @@ -38,6 +38,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.filter.common.FilterControlledLandPermanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -73,7 +74,7 @@ public class RudeAwakening extends CardImpl { } } -class RudeAwakeningToken extends Token { +class RudeAwakeningToken extends TokenImpl { public RudeAwakeningToken() { super("", "2/2 creatures"); @@ -81,5 +82,12 @@ class RudeAwakeningToken extends Token { power = new MageInt(2); toughness = new MageInt(2); } + public RudeAwakeningToken(final RudeAwakeningToken token) { + super(token); + } + + public RudeAwakeningToken copy() { + return new RudeAwakeningToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/r/RuneTailKitsuneAscendant.java b/Mage.Sets/src/mage/cards/r/RuneTailKitsuneAscendant.java index 88c92e74d8..c804c9c0e4 100644 --- a/Mage.Sets/src/mage/cards/r/RuneTailKitsuneAscendant.java +++ b/Mage.Sets/src/mage/cards/r/RuneTailKitsuneAscendant.java @@ -43,6 +43,7 @@ import mage.constants.Zone; import mage.filter.common.FilterControlledCreatureInPlay; import mage.game.Game; import mage.game.events.GameEvent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; @@ -108,7 +109,7 @@ class RuneTailKitsuneAscendantFlipAbility extends StateTriggeredAbility { } -class RuneTailEssence extends Token { +class RuneTailEssence extends TokenImpl { RuneTailEssence() { super("Rune-Tail's Essence", ""); @@ -121,4 +122,11 @@ class RuneTailEssence extends Token { this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new PreventAllDamageToAllEffect(Duration.WhileOnBattlefield, new FilterControlledCreatureInPlay("creatures you control")))); } + public RuneTailEssence(final RuneTailEssence token) { + super(token); + } + + public RuneTailEssence copy() { + return new RuneTailEssence(this); + } } diff --git a/Mage.Sets/src/mage/cards/r/RustedRelic.java b/Mage.Sets/src/mage/cards/r/RustedRelic.java index 5776ef48e7..b0dba2bc34 100644 --- a/Mage.Sets/src/mage/cards/r/RustedRelic.java +++ b/Mage.Sets/src/mage/cards/r/RustedRelic.java @@ -40,6 +40,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -67,7 +68,7 @@ public class RustedRelic extends CardImpl { } } -class RustedRelicToken extends Token { +class RustedRelicToken extends TokenImpl { public RustedRelicToken() { super("Rusted Relic", "5/5 Golem artifact creature"); @@ -76,4 +77,11 @@ class RustedRelicToken extends Token { power = new MageInt(5); toughness = new MageInt(5); } + public RustedRelicToken(final RustedRelicToken token) { + super(token); + } + + public RustedRelicToken copy() { + return new RustedRelicToken(this); + } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/s/SaprolingBurst.java b/Mage.Sets/src/mage/cards/s/SaprolingBurst.java index 0ffde66bec..8615b09cb6 100644 --- a/Mage.Sets/src/mage/cards/s/SaprolingBurst.java +++ b/Mage.Sets/src/mage/cards/s/SaprolingBurst.java @@ -48,6 +48,7 @@ import mage.game.Game; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; import mage.game.permanent.token.SaprolingBurstToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.util.CardUtil; diff --git a/Mage.Sets/src/mage/cards/s/SarkhanTheMad.java b/Mage.Sets/src/mage/cards/s/SarkhanTheMad.java index bd2621b3bd..68278b8fec 100644 --- a/Mage.Sets/src/mage/cards/s/SarkhanTheMad.java +++ b/Mage.Sets/src/mage/cards/s/SarkhanTheMad.java @@ -49,6 +49,7 @@ import mage.filter.predicate.mageobject.SubtypePredicate; import mage.game.Game; import mage.game.permanent.Permanent; import mage.game.permanent.token.DragonToken2; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; import mage.target.Target; diff --git a/Mage.Sets/src/mage/cards/s/SarpadianEmpiresVolVii.java b/Mage.Sets/src/mage/cards/s/SarpadianEmpiresVolVii.java index 7ad03a350c..8c6222e09b 100644 --- a/Mage.Sets/src/mage/cards/s/SarpadianEmpiresVolVii.java +++ b/Mage.Sets/src/mage/cards/s/SarpadianEmpiresVolVii.java @@ -47,6 +47,7 @@ import mage.game.permanent.token.CitizenToken; import mage.game.permanent.token.GoblinToken; import mage.game.permanent.token.SaprolingToken; import mage.game.permanent.token.ThrullToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; diff --git a/Mage.Sets/src/mage/cards/s/SasayaOrochiAscendant.java b/Mage.Sets/src/mage/cards/s/SasayaOrochiAscendant.java index 87d5e655d0..2fb49c8775 100644 --- a/Mage.Sets/src/mage/cards/s/SasayaOrochiAscendant.java +++ b/Mage.Sets/src/mage/cards/s/SasayaOrochiAscendant.java @@ -51,6 +51,7 @@ import mage.filter.predicate.mageobject.NamePredicate; import mage.filter.predicate.permanent.PermanentIdPredicate; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; @@ -115,7 +116,7 @@ class SasayaOrochiAscendantFlipEffect extends OneShotEffect { } } -class SasayasEssence extends Token { +class SasayasEssence extends TokenImpl { SasayasEssence() { super("Sasaya's Essence", ""); @@ -129,6 +130,13 @@ class SasayasEssence extends Token { new SasayasEssenceManaEffectEffect(), new FilterControlledLandPermanent(), SetTargetPointer.PERMANENT)); } + public SasayasEssence(final SasayasEssence token) { + super(token); + } + + public SasayasEssence copy() { + return new SasayasEssence(this); + } } class SasayasEssenceManaEffectEffect extends ManaEffect { diff --git a/Mage.Sets/src/mage/cards/s/SealAway.java b/Mage.Sets/src/mage/cards/s/SealAway.java new file mode 100644 index 0000000000..4b360558e5 --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/SealAway.java @@ -0,0 +1,82 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.cards.s; + +import java.util.UUID; + +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.delayed.OnLeaveReturnExiledToBattlefieldAbility; +import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; +import mage.abilities.effects.common.ExileUntilSourceLeavesEffect; +import mage.abilities.keyword.FlashAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.cards.c.CastOut; +import mage.constants.CardType; +import mage.constants.TargetController; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.ControllerPredicate; +import mage.filter.predicate.permanent.TappedPredicate; +import mage.target.TargetPermanent; + +/** + * @author JRHerlehy + * Created on 4/4/18. + */ +public class SealAway extends CardImpl { + + private final static FilterCreaturePermanent filter = new FilterCreaturePermanent("tapped creature"); + + static { + filter.add(new ControllerPredicate(TargetController.OPPONENT)); + filter.add(new TappedPredicate()); + } + + public SealAway(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}"); + + //Flash + this.addAbility(FlashAbility.getInstance()); + + //When Seal Away enters the battlefield, exile target tapped creature an opponent controls until Seal Away leaves the battlefield. + Ability ability = new EntersBattlefieldTriggeredAbility(new ExileUntilSourceLeavesEffect(filter.getMessage())); + ability.addTarget(new TargetPermanent(filter)); + ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new OnLeaveReturnExiledToBattlefieldAbility())); + this.addAbility(ability); + } + + public SealAway(final SealAway card) { + super(card); + } + + @Override + public SealAway copy() { + return new SealAway(this); + } +} diff --git a/Mage.Sets/src/mage/cards/s/SelesnyaKeyrune.java b/Mage.Sets/src/mage/cards/s/SelesnyaKeyrune.java index 92fa7a39b4..a4953b972c 100644 --- a/Mage.Sets/src/mage/cards/s/SelesnyaKeyrune.java +++ b/Mage.Sets/src/mage/cards/s/SelesnyaKeyrune.java @@ -40,6 +40,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -67,7 +68,7 @@ public class SelesnyaKeyrune extends CardImpl { return new SelesnyaKeyrune(this); } - private static class SelesnyaKeyruneToken extends Token { + private static class SelesnyaKeyruneToken extends TokenImpl { SelesnyaKeyruneToken() { super("", "3/3 green and white Wolf artifact creature"); cardType.add(CardType.ARTIFACT); @@ -78,5 +79,12 @@ public class SelesnyaKeyrune extends CardImpl { power = new MageInt(3); toughness = new MageInt(3); } + public SelesnyaKeyruneToken(final SelesnyaKeyruneToken token) { + super(token); + } + + public SelesnyaKeyruneToken copy() { + return new SelesnyaKeyruneToken(this); + } } } diff --git a/Mage.Sets/src/mage/cards/s/SerraDisciple.java b/Mage.Sets/src/mage/cards/s/SerraDisciple.java index 647b4f3c8e..c17765a303 100644 --- a/Mage.Sets/src/mage/cards/s/SerraDisciple.java +++ b/Mage.Sets/src/mage/cards/s/SerraDisciple.java @@ -24,15 +24,15 @@ public class SerraDisciple extends CardImpl { power = new MageInt(1); toughness = new MageInt(1); + // Flying, first strike addAbility(FlyingAbility.getInstance()); - addAbility(FirstStrikeAbility.getInstance()); + // Whenever you cast a historic spell, Serra Disciple gets +1/+1 until end of turn Ability ability = new SpellCastControllerTriggeredAbility(new BoostSourceEffect(1, 1, Duration.EndOfTurn), new FilterHistoricSpell(), false, "Whenever you cast a historic spell, {this} gets +1/+1 until end of turn"); addAbility(ability); - } public SerraDisciple(final SerraDisciple serraDisciple){ diff --git a/Mage.Sets/src/mage/cards/s/ShamblingVent.java b/Mage.Sets/src/mage/cards/s/ShamblingVent.java index 6002b57ba5..5a3797253b 100644 --- a/Mage.Sets/src/mage/cards/s/ShamblingVent.java +++ b/Mage.Sets/src/mage/cards/s/ShamblingVent.java @@ -42,6 +42,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -75,7 +76,7 @@ public class ShamblingVent extends CardImpl { } } -class ShamblingVentToken extends Token { +class ShamblingVentToken extends TokenImpl { public ShamblingVentToken() { super("", "2/3 white and black Elemental creature with lifelink"); @@ -87,4 +88,11 @@ class ShamblingVentToken extends Token { toughness = new MageInt(3); addAbility(LifelinkAbility.getInstance()); } + public ShamblingVentToken(final ShamblingVentToken token) { + super(token); + } + + public ShamblingVentToken copy() { + return new ShamblingVentToken(this); + } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/s/SiegeOfTowers.java b/Mage.Sets/src/mage/cards/s/SiegeOfTowers.java index 5b77a51ff9..58d437f0f5 100644 --- a/Mage.Sets/src/mage/cards/s/SiegeOfTowers.java +++ b/Mage.Sets/src/mage/cards/s/SiegeOfTowers.java @@ -39,6 +39,7 @@ import mage.constants.Duration; import mage.constants.SubType; import mage.filter.common.FilterLandPermanent; import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetPermanent; @@ -78,11 +79,18 @@ public class SiegeOfTowers extends CardImpl { } } -class SiegeOfTowersToken extends Token { +class SiegeOfTowersToken extends TokenImpl { public SiegeOfTowersToken() { super("", "3/1 creature"); cardType.add(CardType.CREATURE); power = new MageInt(3); toughness = new MageInt(1); } + public SiegeOfTowersToken(final SiegeOfTowersToken token) { + super(token); + } + + public SiegeOfTowersToken copy() { + return new SiegeOfTowersToken(this); + } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/s/SilumgarMonument.java b/Mage.Sets/src/mage/cards/s/SilumgarMonument.java index 4c9369748d..49904cfbe1 100644 --- a/Mage.Sets/src/mage/cards/s/SilumgarMonument.java +++ b/Mage.Sets/src/mage/cards/s/SilumgarMonument.java @@ -41,6 +41,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -70,7 +71,7 @@ public class SilumgarMonument extends CardImpl { return new SilumgarMonument(this); } -private static class OjutaiMonumentToken extends Token { + private static class OjutaiMonumentToken extends TokenImpl { OjutaiMonumentToken() { super("", "4/4 blue and black Dragon artifact creature with flying"); cardType.add(CardType.ARTIFACT); @@ -82,5 +83,12 @@ private static class OjutaiMonumentToken extends Token { toughness = new MageInt(4); this.addAbility(FlyingAbility.getInstance()); } + public OjutaiMonumentToken(final OjutaiMonumentToken token) { + super(token); + } + + public OjutaiMonumentToken copy() { + return new OjutaiMonumentToken(this); + } } } diff --git a/Mage.Sets/src/mage/cards/s/SimicKeyrune.java b/Mage.Sets/src/mage/cards/s/SimicKeyrune.java index 37145a0ba1..d0bab04e89 100644 --- a/Mage.Sets/src/mage/cards/s/SimicKeyrune.java +++ b/Mage.Sets/src/mage/cards/s/SimicKeyrune.java @@ -41,6 +41,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -69,7 +70,7 @@ public class SimicKeyrune extends CardImpl { return new SimicKeyrune(this); } - private static class SimicKeyruneToken extends Token { + private static class SimicKeyruneToken extends TokenImpl { SimicKeyruneToken() { super("Crab", "2/3 green and blue Crab artifact creature with hexproof"); cardType.add(CardType.ARTIFACT); @@ -81,5 +82,13 @@ public class SimicKeyrune extends CardImpl { toughness = new MageInt(3); this.addAbility(HexproofAbility.getInstance()); } + + public SimicKeyruneToken(final SimicKeyruneToken token) { + super(token); + } + + public SimicKeyruneToken copy() { + return new SimicKeyruneToken(this); + } } } diff --git a/Mage.Sets/src/mage/cards/s/SkarrgGuildmage.java b/Mage.Sets/src/mage/cards/s/SkarrgGuildmage.java index ec7d216e75..c21d85e4de 100644 --- a/Mage.Sets/src/mage/cards/s/SkarrgGuildmage.java +++ b/Mage.Sets/src/mage/cards/s/SkarrgGuildmage.java @@ -43,6 +43,7 @@ import mage.constants.Duration; import mage.constants.Zone; import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledLandPermanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetPermanent; @@ -81,7 +82,7 @@ public class SkarrgGuildmage extends CardImpl { } } -class SkarrgGuildmageToken extends Token { +class SkarrgGuildmageToken extends TokenImpl { public SkarrgGuildmageToken() { super("", "4/4 Elemental creature"); @@ -91,4 +92,11 @@ class SkarrgGuildmageToken extends Token { this.power = new MageInt(4); this.toughness = new MageInt(4); } + public SkarrgGuildmageToken(final SkarrgGuildmageToken token) { + super(token); + } + + public SkarrgGuildmageToken copy() { + return new SkarrgGuildmageToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/s/Skinshifter.java b/Mage.Sets/src/mage/cards/s/Skinshifter.java index 6b6ef5edf1..c9359e55c8 100644 --- a/Mage.Sets/src/mage/cards/s/Skinshifter.java +++ b/Mage.Sets/src/mage/cards/s/Skinshifter.java @@ -42,6 +42,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -82,7 +83,7 @@ public class Skinshifter extends CardImpl { return new Skinshifter(this); } - private class RhinoToken extends Token { + private class RhinoToken extends TokenImpl { public RhinoToken() { super("Rhino", "Rhino with base power and toughness 4/4 and gains trample"); @@ -94,9 +95,16 @@ public class Skinshifter extends CardImpl { this.toughness = new MageInt(4); this.addAbility(TrampleAbility.getInstance()); } + public RhinoToken(final RhinoToken token) { + super(token); + } + + public RhinoToken copy() { + return new RhinoToken(this); + } } - private class BirdToken extends Token { + private class BirdToken extends TokenImpl { public BirdToken() { super("Bird", "Bird with base power and toughness 2/2 and gains flying"); @@ -108,9 +116,16 @@ public class Skinshifter extends CardImpl { this.toughness = new MageInt(2); this.addAbility(FlyingAbility.getInstance()); } + public BirdToken(final BirdToken token) { + super(token); + } + + public BirdToken copy() { + return new BirdToken(this); + } } - private class PlantToken extends Token { + private class PlantToken extends TokenImpl { public PlantToken() { super("Plant", "Plant with base power and toughness 0/8"); @@ -121,5 +136,12 @@ public class Skinshifter extends CardImpl { this.power = new MageInt(0); this.toughness = new MageInt(8); } + public PlantToken(final PlantToken token) { + super(token); + } + + public PlantToken copy() { + return new PlantToken(this); + } } } diff --git a/Mage.Sets/src/mage/cards/s/Soilshaper.java b/Mage.Sets/src/mage/cards/s/Soilshaper.java index 241be986d8..592e0a936b 100644 --- a/Mage.Sets/src/mage/cards/s/Soilshaper.java +++ b/Mage.Sets/src/mage/cards/s/Soilshaper.java @@ -39,6 +39,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.filter.StaticFilters; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetLandPermanent; @@ -72,7 +73,7 @@ public class Soilshaper extends CardImpl { } -class SoilshaperToken extends Token { +class SoilshaperToken extends TokenImpl { public SoilshaperToken() { super("", "3/3 creature"); @@ -81,4 +82,11 @@ class SoilshaperToken extends Token { this.power = new MageInt(3); this.toughness = new MageInt(3); } + public SoilshaperToken(final SoilshaperToken token) { + super(token); + } + + public SoilshaperToken copy() { + return new SoilshaperToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/s/SpikeTiller.java b/Mage.Sets/src/mage/cards/s/SpikeTiller.java index f34e199014..8256c563b7 100644 --- a/Mage.Sets/src/mage/cards/s/SpikeTiller.java +++ b/Mage.Sets/src/mage/cards/s/SpikeTiller.java @@ -44,6 +44,7 @@ import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; import mage.counters.CounterType; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetLandPermanent; @@ -88,7 +89,7 @@ public class SpikeTiller extends CardImpl { } } -class SpikeTillerToken extends Token { +class SpikeTillerToken extends TokenImpl { public SpikeTillerToken() { super("", "2/2 creature"); @@ -96,4 +97,11 @@ class SpikeTillerToken extends Token { power = new MageInt(2); toughness = new MageInt(2); } + public SpikeTillerToken(final SpikeTillerToken token) { + super(token); + } + + public SpikeTillerToken copy() { + return new SpikeTillerToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/s/StalkingStones.java b/Mage.Sets/src/mage/cards/s/StalkingStones.java index c404a1d8f8..9307f46b96 100644 --- a/Mage.Sets/src/mage/cards/s/StalkingStones.java +++ b/Mage.Sets/src/mage/cards/s/StalkingStones.java @@ -38,6 +38,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -62,7 +63,7 @@ public class StalkingStones extends CardImpl { } } -class StalkingStonesToken extends Token { +class StalkingStonesToken extends TokenImpl { public StalkingStonesToken() { super("Elemental", "3/3 Elemental artifact"); @@ -72,4 +73,11 @@ class StalkingStonesToken extends Token { this.power = new MageInt(3); this.toughness = new MageInt(3); } + public StalkingStonesToken(final StalkingStonesToken token) { + super(token); + } + + public StalkingStonesToken copy() { + return new StalkingStonesToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/s/StillLife.java b/Mage.Sets/src/mage/cards/s/StillLife.java index dd07546df2..1d0d2814c2 100644 --- a/Mage.Sets/src/mage/cards/s/StillLife.java +++ b/Mage.Sets/src/mage/cards/s/StillLife.java @@ -38,6 +38,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -64,7 +65,7 @@ public class StillLife extends CardImpl { } } -class StillLifeCentaur extends Token { +class StillLifeCentaur extends TokenImpl { public StillLifeCentaur() { super("Centaur", "4/3 Centaur creature token"); @@ -73,4 +74,11 @@ class StillLifeCentaur extends Token { power = new MageInt(4); toughness = new MageInt(3); } + public StillLifeCentaur(final StillLifeCentaur token) { + super(token); + } + + public StillLifeCentaur copy() { + return new StillLifeCentaur(this); + } } diff --git a/Mage.Sets/src/mage/cards/s/StirringWildwood.java b/Mage.Sets/src/mage/cards/s/StirringWildwood.java index f534e1a1d9..e89f9d3ab4 100644 --- a/Mage.Sets/src/mage/cards/s/StirringWildwood.java +++ b/Mage.Sets/src/mage/cards/s/StirringWildwood.java @@ -43,6 +43,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -70,7 +71,7 @@ public class StirringWildwood extends CardImpl { } -class StirringWildwoodToken extends Token { +class StirringWildwoodToken extends TokenImpl { public StirringWildwoodToken() { super("", "3/4 green and white Elemental creature with reach"); @@ -82,5 +83,12 @@ class StirringWildwoodToken extends Token { toughness = new MageInt(4); addAbility(ReachAbility.getInstance()); } + public StirringWildwoodToken(final StirringWildwoodToken token) { + super(token); + } + + public StirringWildwoodToken copy() { + return new StirringWildwoodToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/s/StudentOfElements.java b/Mage.Sets/src/mage/cards/s/StudentOfElements.java index 425d136421..e13d758607 100644 --- a/Mage.Sets/src/mage/cards/s/StudentOfElements.java +++ b/Mage.Sets/src/mage/cards/s/StudentOfElements.java @@ -45,6 +45,7 @@ import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -108,7 +109,7 @@ class StudentOfElementsHasFlyingAbility extends StateTriggeredAbility { } -class TobitaMasterOfWinds extends Token { +class TobitaMasterOfWinds extends TokenImpl { TobitaMasterOfWinds() { super("Tobita, Master of Winds", ""); @@ -124,4 +125,11 @@ class TobitaMasterOfWinds extends Token { this.addAbility(new SimpleStaticAbility( Zone.BATTLEFIELD, new GainAbilityControlledEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield, new FilterCreaturePermanent()))); } + public TobitaMasterOfWinds(final TobitaMasterOfWinds token) { + super(token); + } + + public TobitaMasterOfWinds copy() { + return new TobitaMasterOfWinds(this); + } } diff --git a/Mage.Sets/src/mage/cards/s/SvogthosTheRestlessTomb.java b/Mage.Sets/src/mage/cards/s/SvogthosTheRestlessTomb.java index 8d569f9170..82d4e66228 100644 --- a/Mage.Sets/src/mage/cards/s/SvogthosTheRestlessTomb.java +++ b/Mage.Sets/src/mage/cards/s/SvogthosTheRestlessTomb.java @@ -44,6 +44,7 @@ import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; import mage.filter.common.FilterCreatureCard; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -73,7 +74,7 @@ public class SvogthosTheRestlessTomb extends CardImpl { } } -class SvogthosToken extends Token { +class SvogthosToken extends TokenImpl { public SvogthosToken() { super("", "black and green Plant Zombie creature with \"This creature's power and toughness are each equal to the number of creature cards in your graveyard.\""); @@ -87,4 +88,11 @@ class SvogthosToken extends Token { CardsInControllerGraveyardCount count = new CardsInControllerGraveyardCount(new FilterCreatureCard("creature cards")); this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetPowerToughnessSourceEffect(count, Duration.EndOfGame))); } + public SvogthosToken(final SvogthosToken token) { + super(token); + } + + public SvogthosToken copy() { + return new SvogthosToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/s/SwanSong.java b/Mage.Sets/src/mage/cards/s/SwanSong.java index c8f7780d09..801b18412c 100644 --- a/Mage.Sets/src/mage/cards/s/SwanSong.java +++ b/Mage.Sets/src/mage/cards/s/SwanSong.java @@ -39,6 +39,7 @@ import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.CardTypePredicate; import mage.game.Game; import mage.game.permanent.token.SwanSongBirdToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.game.stack.Spell; import mage.target.TargetSpell; diff --git a/Mage.Sets/src/mage/cards/t/TemptWithVengeance.java b/Mage.Sets/src/mage/cards/t/TemptWithVengeance.java index 5c48e08471..8402c8a479 100644 --- a/Mage.Sets/src/mage/cards/t/TemptWithVengeance.java +++ b/Mage.Sets/src/mage/cards/t/TemptWithVengeance.java @@ -36,6 +36,7 @@ import mage.constants.CardType; import mage.constants.Outcome; import mage.game.Game; import mage.game.permanent.token.TemptWithVengeanceElementalToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; diff --git a/Mage.Sets/src/mage/cards/t/TestamentOfFaith.java b/Mage.Sets/src/mage/cards/t/TestamentOfFaith.java index d464947870..ccb4f8b630 100644 --- a/Mage.Sets/src/mage/cards/t/TestamentOfFaith.java +++ b/Mage.Sets/src/mage/cards/t/TestamentOfFaith.java @@ -47,6 +47,7 @@ import mage.constants.SubLayer; import mage.constants.Zone; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -175,7 +176,7 @@ class TestamentOfFaithBecomesCreatureSourceEffect extends ContinuousEffectImpl i } -class TestamentOfFaithToken extends Token { +class TestamentOfFaithToken extends TokenImpl { TestamentOfFaithToken() { super("Wall", "X/X Wall creature with defender"); cardType.add(CardType.CREATURE); @@ -183,4 +184,11 @@ class TestamentOfFaithToken extends Token { color.setWhite(true); this.addAbility(DefenderAbility.getInstance()); } + public TestamentOfFaithToken(final TestamentOfFaithToken token) { + super(token); + } + + public TestamentOfFaithToken copy() { + return new TestamentOfFaithToken(this); + } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/t/TezzeretsTouch.java b/Mage.Sets/src/mage/cards/t/TezzeretsTouch.java index 036a72bcc8..881cb3e90d 100644 --- a/Mage.Sets/src/mage/cards/t/TezzeretsTouch.java +++ b/Mage.Sets/src/mage/cards/t/TezzeretsTouch.java @@ -43,6 +43,7 @@ import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Outcome; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetPermanent; import mage.target.common.TargetArtifactPermanent; @@ -84,7 +85,7 @@ public class TezzeretsTouch extends CardImpl { } } -class TezzeretsTouchToken extends Token { +class TezzeretsTouchToken extends TokenImpl { TezzeretsTouchToken() { super("", "5/5"); @@ -92,4 +93,11 @@ class TezzeretsTouchToken extends Token { power = new MageInt(5); toughness = new MageInt(5); } + public TezzeretsTouchToken(final TezzeretsTouchToken token) { + super(token); + } + + public TezzeretsTouchToken copy() { + return new TezzeretsTouchToken(this); + } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/t/TheloniteDruid.java b/Mage.Sets/src/mage/cards/t/TheloniteDruid.java index 92c4875151..3cd6579b7e 100644 --- a/Mage.Sets/src/mage/cards/t/TheloniteDruid.java +++ b/Mage.Sets/src/mage/cards/t/TheloniteDruid.java @@ -42,6 +42,7 @@ import mage.constants.*; import static mage.filter.StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT; import mage.filter.common.FilterControlledLandPermanent; import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetControlledCreaturePermanent; @@ -86,7 +87,7 @@ public class TheloniteDruid extends CardImpl { } } -class TheloniteDruidLandToken extends Token { +class TheloniteDruidLandToken extends TokenImpl { public TheloniteDruidLandToken() { super("", "2/3 creatures"); @@ -94,4 +95,11 @@ class TheloniteDruidLandToken extends Token { power = new MageInt(2); toughness = new MageInt(3); } + public TheloniteDruidLandToken(final TheloniteDruidLandToken token) { + super(token); + } + + public TheloniteDruidLandToken copy() { + return new TheloniteDruidLandToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/t/ThroneOfEmpires.java b/Mage.Sets/src/mage/cards/t/ThroneOfEmpires.java index 229aedff4f..a601a4fb87 100644 --- a/Mage.Sets/src/mage/cards/t/ThroneOfEmpires.java +++ b/Mage.Sets/src/mage/cards/t/ThroneOfEmpires.java @@ -41,6 +41,7 @@ import mage.constants.Zone; import mage.game.Game; import mage.game.permanent.Permanent; import mage.game.permanent.token.SoldierToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** diff --git a/Mage.Sets/src/mage/cards/t/ThunderTotem.java b/Mage.Sets/src/mage/cards/t/ThunderTotem.java index 78f1abe540..814d667953 100644 --- a/Mage.Sets/src/mage/cards/t/ThunderTotem.java +++ b/Mage.Sets/src/mage/cards/t/ThunderTotem.java @@ -41,6 +41,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -71,7 +72,7 @@ public class ThunderTotem extends CardImpl { return new ThunderTotem(this); } -private static class ThunderTotemToken extends Token { + private static class ThunderTotemToken extends TokenImpl { ThunderTotemToken() { super("", "2/2 white Spirit artifact creature with flying and first strike"); cardType.add(CardType.ARTIFACT); @@ -83,5 +84,12 @@ private static class ThunderTotemToken extends Token { this.addAbility(FlyingAbility.getInstance()); this.addAbility(FirstStrikeAbility.getInstance()); } + public ThunderTotemToken(final ThunderTotemToken token) { + super(token); + } + + public ThunderTotemToken copy() { + return new ThunderTotemToken(this); + } } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/t/TidalWave.java b/Mage.Sets/src/mage/cards/t/TidalWave.java index 7c98cb4351..dfc99c2a00 100644 --- a/Mage.Sets/src/mage/cards/t/TidalWave.java +++ b/Mage.Sets/src/mage/cards/t/TidalWave.java @@ -39,6 +39,7 @@ import mage.constants.Outcome; import mage.game.Game; import mage.game.permanent.Permanent; import mage.game.permanent.token.TidalWaveWallToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.targetpointer.FixedTarget; diff --git a/Mage.Sets/src/mage/cards/t/TombstoneStairwell.java b/Mage.Sets/src/mage/cards/t/TombstoneStairwell.java index e2e6216f74..3eecff272f 100644 --- a/Mage.Sets/src/mage/cards/t/TombstoneStairwell.java +++ b/Mage.Sets/src/mage/cards/t/TombstoneStairwell.java @@ -51,6 +51,7 @@ import mage.game.events.GameEvent.EventType; import mage.game.events.ZoneChangeEvent; import mage.game.permanent.Permanent; import mage.game.permanent.token.TombspawnZombieToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; import mage.target.targetpointer.FixedTarget; diff --git a/Mage.Sets/src/mage/cards/t/TreetopVillage.java b/Mage.Sets/src/mage/cards/t/TreetopVillage.java index 9dede10e44..339ccdea95 100644 --- a/Mage.Sets/src/mage/cards/t/TreetopVillage.java +++ b/Mage.Sets/src/mage/cards/t/TreetopVillage.java @@ -41,6 +41,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -66,7 +67,7 @@ public class TreetopVillage extends CardImpl { } } -class ApeToken extends Token { +class ApeToken extends TokenImpl { ApeToken() { super("Ape", "3/3 green Ape creature with trample"); cardType.add(CardType.CREATURE); @@ -76,4 +77,11 @@ class ApeToken extends Token { toughness = new MageInt(3); this.addAbility(TrampleAbility.getInstance()); } + public ApeToken(final ApeToken token) { + super(token); + } + + public ApeToken copy() { + return new ApeToken(this); + } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/t/TurnBurn.java b/Mage.Sets/src/mage/cards/t/TurnBurn.java index de2d0b8f55..6409e7061f 100644 --- a/Mage.Sets/src/mage/cards/t/TurnBurn.java +++ b/Mage.Sets/src/mage/cards/t/TurnBurn.java @@ -38,6 +38,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.SpellAbilityType; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetCreatureOrPlayer; import mage.target.common.TargetCreaturePermanent; @@ -76,7 +77,7 @@ public class TurnBurn extends SplitCard { return new TurnBurn(this); } - private static class WeirdToken extends Token { + private static class WeirdToken extends TokenImpl { private WeirdToken() { super("Weird", "a red Weird with base power and toughness 0/1"); @@ -86,6 +87,13 @@ public class TurnBurn extends SplitCard { power = new MageInt(0); toughness = new MageInt(1); } + public WeirdToken(final WeirdToken token) { + super(token); + } + + public WeirdToken copy() { + return new WeirdToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/v/VastwoodAnimist.java b/Mage.Sets/src/mage/cards/v/VastwoodAnimist.java index 9141df6cf5..86d7431e56 100644 --- a/Mage.Sets/src/mage/cards/v/VastwoodAnimist.java +++ b/Mage.Sets/src/mage/cards/v/VastwoodAnimist.java @@ -43,6 +43,7 @@ import mage.filter.common.FilterControlledLandPermanent; import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.SubtypePredicate; import mage.game.Game; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetControlledPermanent; @@ -109,7 +110,7 @@ class VastwoodAnimistEffect extends OneShotEffect { } } -class VastwoodAnimistElementalToken extends Token { +class VastwoodAnimistElementalToken extends TokenImpl { VastwoodAnimistElementalToken(int amount) { super("", "X/X Elemental creature, where X is the number of Allies you control"); @@ -118,4 +119,11 @@ class VastwoodAnimistElementalToken extends Token { power = new MageInt(amount); toughness = new MageInt(amount); } + public VastwoodAnimistElementalToken(final VastwoodAnimistElementalToken token) { + super(token); + } + + public VastwoodAnimistElementalToken copy() { + return new VastwoodAnimistElementalToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/v/VastwoodZendikon.java b/Mage.Sets/src/mage/cards/v/VastwoodZendikon.java index 317f83910b..23acc3dda6 100644 --- a/Mage.Sets/src/mage/cards/v/VastwoodZendikon.java +++ b/Mage.Sets/src/mage/cards/v/VastwoodZendikon.java @@ -39,6 +39,7 @@ import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetPermanent; import mage.target.common.TargetLandPermanent; @@ -81,7 +82,7 @@ public class VastwoodZendikon extends CardImpl { } } -class VastwoodElementalToken extends Token { +class VastwoodElementalToken extends TokenImpl { VastwoodElementalToken() { super("", "6/4 green Elemental creature"); cardType.add(CardType.CREATURE); @@ -90,4 +91,11 @@ class VastwoodElementalToken extends Token { power = new MageInt(6); toughness = new MageInt(4); } + public VastwoodElementalToken(final VastwoodElementalToken token) { + super(token); + } + + public VastwoodElementalToken copy() { + return new VastwoodElementalToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/v/VerdantTouch.java b/Mage.Sets/src/mage/cards/v/VerdantTouch.java index ccad706907..691fcd328c 100644 --- a/Mage.Sets/src/mage/cards/v/VerdantTouch.java +++ b/Mage.Sets/src/mage/cards/v/VerdantTouch.java @@ -35,6 +35,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetLandPermanent; @@ -65,7 +66,7 @@ public class VerdantTouch extends CardImpl { } } -class VerdantTouchLandToken extends Token { +class VerdantTouchLandToken extends TokenImpl { public VerdantTouchLandToken() { super("", "2/2 creature"); @@ -74,4 +75,11 @@ class VerdantTouchLandToken extends Token { this.power = new MageInt(2); this.toughness = new MageInt(2); } + public VerdantTouchLandToken(final VerdantTouchLandToken token) { + super(token); + } + + public VerdantTouchLandToken copy() { + return new VerdantTouchLandToken(this); + } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/v/VerixBladewing.java b/Mage.Sets/src/mage/cards/v/VerixBladewing.java new file mode 100644 index 0000000000..6174f137da --- /dev/null +++ b/Mage.Sets/src/mage/cards/v/VerixBladewing.java @@ -0,0 +1,54 @@ +package mage.cards.v; + +import java.util.UUID; + +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.condition.common.KickedCondition; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.KickerAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.SuperType; +import mage.game.permanent.token.KaroxBladewingDragonToken; + +/** + * @author JRHerlehy + * Created on 4/5/18. + */ +public class VerixBladewing extends CardImpl { + + public VerixBladewing(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}{R}"); + this.addSuperType(SuperType.LEGENDARY); + this.subtype.add(SubType.DRAGON); + + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Kicker {3} + this.addAbility(new KickerAbility("{3}")); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // When Verix Bladewing enters the battlefield, if it was kicked, create Karox Bladewing, + // a legendary 4/4 red Dragon creature token with flying. + this.addAbility(new EntersBattlefieldTriggeredAbility(new ConditionalOneShotEffect( + new CreateTokenEffect(new KaroxBladewingDragonToken()), KickedCondition.instance, + "create Karox Bladewing, a legendary 4/4 red Dragon creature token with flying."))); + } + + public VerixBladewing(final VerixBladewing card) { + super(card); + } + + @Override + public VerixBladewing copy() { + return new VerixBladewing(this); + } +} diff --git a/Mage.Sets/src/mage/cards/v/Vivify.java b/Mage.Sets/src/mage/cards/v/Vivify.java index 92d1010c8c..0ee535ed74 100644 --- a/Mage.Sets/src/mage/cards/v/Vivify.java +++ b/Mage.Sets/src/mage/cards/v/Vivify.java @@ -35,6 +35,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.common.TargetLandPermanent; @@ -64,7 +65,7 @@ public class Vivify extends CardImpl { } } -class AnimatedLand extends Token { +class AnimatedLand extends TokenImpl { public AnimatedLand() { super("", "3/3 creature"); @@ -72,4 +73,11 @@ class AnimatedLand extends Token { this.power = new MageInt(3); this.toughness = new MageInt(3); } + public AnimatedLand(final AnimatedLand token) { + super(token); + } + + public AnimatedLand copy() { + return new AnimatedLand(this); + } } diff --git a/Mage.Sets/src/mage/cards/v/VolrathsLaboratory.java b/Mage.Sets/src/mage/cards/v/VolrathsLaboratory.java index 098118bce0..bf8d69228b 100644 --- a/Mage.Sets/src/mage/cards/v/VolrathsLaboratory.java +++ b/Mage.Sets/src/mage/cards/v/VolrathsLaboratory.java @@ -45,6 +45,7 @@ import mage.constants.Outcome; import mage.constants.SubType; import mage.constants.Zone; import mage.game.Game; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.game.permanent.token.VolrathsLaboratoryToken; diff --git a/Mage.Sets/src/mage/cards/w/WaitingInTheWeeds.java b/Mage.Sets/src/mage/cards/w/WaitingInTheWeeds.java index 1bf0993879..09e78278c9 100644 --- a/Mage.Sets/src/mage/cards/w/WaitingInTheWeeds.java +++ b/Mage.Sets/src/mage/cards/w/WaitingInTheWeeds.java @@ -40,6 +40,7 @@ import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.SubtypePredicate; import mage.filter.predicate.permanent.TappedPredicate; import mage.game.Game; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.game.permanent.token.WaitingInTheWeedsCatToken; import mage.players.Player; diff --git a/Mage.Sets/src/mage/cards/w/WanderingFumarole.java b/Mage.Sets/src/mage/cards/w/WanderingFumarole.java index 2532d52021..ec32a284a2 100644 --- a/Mage.Sets/src/mage/cards/w/WanderingFumarole.java +++ b/Mage.Sets/src/mage/cards/w/WanderingFumarole.java @@ -43,6 +43,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -78,7 +79,7 @@ public class WanderingFumarole extends CardImpl { } } -class WanderingFumaroleToken extends Token { +class WanderingFumaroleToken extends TokenImpl { public WanderingFumaroleToken() { super("", "1/4 blue and red Elemental creature with \"0: Switch this creature's power and toughness until end of turn.\""); @@ -90,4 +91,11 @@ class WanderingFumaroleToken extends Token { toughness = new MageInt(4); addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new SwitchPowerToughnessSourceEffect(Duration.EndOfTurn), new ManaCostsImpl("{0}"))); } + public WanderingFumaroleToken(final WanderingFumaroleToken token) { + super(token); + } + + public WanderingFumaroleToken copy() { + return new WanderingFumaroleToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/w/WardenOfTheFirstTree.java b/Mage.Sets/src/mage/cards/w/WardenOfTheFirstTree.java index ac74f23e22..ddd3e3fbe5 100644 --- a/Mage.Sets/src/mage/cards/w/WardenOfTheFirstTree.java +++ b/Mage.Sets/src/mage/cards/w/WardenOfTheFirstTree.java @@ -48,6 +48,7 @@ import mage.constants.Zone; import mage.counters.CounterType; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -107,7 +108,7 @@ public class WardenOfTheFirstTree extends CardImpl { } } -class WardenOfTheFirstTree1 extends Token { +class WardenOfTheFirstTree1 extends TokenImpl { public WardenOfTheFirstTree1() { super("Warden of the First Tree", "Human Warrior with base power and toughness 3/3"); @@ -118,9 +119,16 @@ class WardenOfTheFirstTree1 extends Token { this.power = new MageInt(3); this.toughness = new MageInt(3); } + public WardenOfTheFirstTree1(final WardenOfTheFirstTree1 token) { + super(token); + } + + public WardenOfTheFirstTree1 copy() { + return new WardenOfTheFirstTree1(this); + } } -class WardenOfTheFirstTree2 extends Token { +class WardenOfTheFirstTree2 extends TokenImpl { public WardenOfTheFirstTree2() { super("Warden of the First Tree", "Human Spirit Warrior with trample and lifelink"); @@ -135,4 +143,11 @@ class WardenOfTheFirstTree2 extends Token { this.addAbility(TrampleAbility.getInstance()); this.addAbility(LifelinkAbility.getInstance()); } + public WardenOfTheFirstTree2(final WardenOfTheFirstTree2 token) { + super(token); + } + + public WardenOfTheFirstTree2 copy() { + return new WardenOfTheFirstTree2(this); + } } diff --git a/Mage.Sets/src/mage/cards/w/WardenOfTheWall.java b/Mage.Sets/src/mage/cards/w/WardenOfTheWall.java index 89b846074e..fbae08a367 100644 --- a/Mage.Sets/src/mage/cards/w/WardenOfTheWall.java +++ b/Mage.Sets/src/mage/cards/w/WardenOfTheWall.java @@ -42,6 +42,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -73,7 +74,7 @@ public class WardenOfTheWall extends CardImpl { } } -class GargoyleToken extends Token { +class GargoyleToken extends TokenImpl { public GargoyleToken() { super("", "2/3 Gargoyle artifact creature with flying"); @@ -84,5 +85,12 @@ class GargoyleToken extends Token { toughness = new MageInt(3); addAbility(FlyingAbility.getInstance()); } + public GargoyleToken(final GargoyleToken token) { + super(token); + } + + public GargoyleToken copy() { + return new GargoyleToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/w/WarrenWeirding.java b/Mage.Sets/src/mage/cards/w/WarrenWeirding.java index bc205a14bb..418a253265 100644 --- a/Mage.Sets/src/mage/cards/w/WarrenWeirding.java +++ b/Mage.Sets/src/mage/cards/w/WarrenWeirding.java @@ -49,6 +49,7 @@ import mage.filter.predicate.permanent.ControllerIdPredicate; import mage.game.Game; import mage.game.permanent.Permanent; import mage.game.permanent.token.GoblinRogueToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; import mage.target.TargetPlayer; diff --git a/Mage.Sets/src/mage/cards/w/Waylay.java b/Mage.Sets/src/mage/cards/w/Waylay.java index 795197e929..35672078da 100644 --- a/Mage.Sets/src/mage/cards/w/Waylay.java +++ b/Mage.Sets/src/mage/cards/w/Waylay.java @@ -41,6 +41,7 @@ import mage.constants.CardType; import mage.constants.Outcome; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.game.permanent.token.WaylayToken; import mage.target.targetpointer.FixedTargets; diff --git a/Mage.Sets/src/mage/cards/w/WeatherseedTotem.java b/Mage.Sets/src/mage/cards/w/WeatherseedTotem.java index 75299b739b..f0527ed334 100644 --- a/Mage.Sets/src/mage/cards/w/WeatherseedTotem.java +++ b/Mage.Sets/src/mage/cards/w/WeatherseedTotem.java @@ -47,6 +47,7 @@ import mage.constants.SubType; import mage.constants.Zone; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -98,7 +99,7 @@ class WeatherseedTotemCondition implements Condition { } } -class WeatherseedTotemToken extends Token { +class WeatherseedTotemToken extends TokenImpl { public WeatherseedTotemToken() { super("", "5/3 green Treefolk artifact creature with trample"); @@ -110,4 +111,11 @@ class WeatherseedTotemToken extends Token { toughness = new MageInt(3); this.addAbility(TrampleAbility.getInstance()); } + public WeatherseedTotemToken(final WeatherseedTotemToken token) { + super(token); + } + + public WeatherseedTotemToken copy() { + return new WeatherseedTotemToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/w/WindZendikon.java b/Mage.Sets/src/mage/cards/w/WindZendikon.java index b37dec0063..44b4444888 100644 --- a/Mage.Sets/src/mage/cards/w/WindZendikon.java +++ b/Mage.Sets/src/mage/cards/w/WindZendikon.java @@ -40,6 +40,7 @@ import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetPermanent; import mage.target.common.TargetLandPermanent; @@ -81,7 +82,7 @@ public class WindZendikon extends CardImpl { return new WindZendikon(this); } - class ElementalToken extends Token { + class ElementalToken extends TokenImpl { ElementalToken() { super("", "2/2 blue Elemental creature with flying"); cardType.add(CardType.CREATURE); @@ -91,5 +92,12 @@ public class WindZendikon extends CardImpl { toughness = new MageInt(2); addAbility(FlyingAbility.getInstance()); } + public ElementalToken(final ElementalToken token) { + super(token); + } + + public ElementalToken copy() { + return new ElementalToken(this); + } } } diff --git a/Mage.Sets/src/mage/cards/w/WoodwraithCorrupter.java b/Mage.Sets/src/mage/cards/w/WoodwraithCorrupter.java index 306d63197b..539048481f 100644 --- a/Mage.Sets/src/mage/cards/w/WoodwraithCorrupter.java +++ b/Mage.Sets/src/mage/cards/w/WoodwraithCorrupter.java @@ -43,6 +43,7 @@ import mage.constants.SubType; import mage.constants.Zone; import mage.filter.common.FilterLandPermanent; import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.TargetPermanent; @@ -85,7 +86,7 @@ public class WoodwraithCorrupter extends CardImpl { } } -class WoodwraithCorrupterToken extends Token { +class WoodwraithCorrupterToken extends TokenImpl { public WoodwraithCorrupterToken() { super("", "4/4 black and green Elemental Horror creature"); @@ -95,4 +96,11 @@ class WoodwraithCorrupterToken extends Token { power = new MageInt(4); toughness = new MageInt(4); } + public WoodwraithCorrupterToken(final WoodwraithCorrupterToken token) { + super(token); + } + + public WoodwraithCorrupterToken copy() { + return new WoodwraithCorrupterToken(this); + } } diff --git a/Mage.Sets/src/mage/cards/x/XanthicStatue.java b/Mage.Sets/src/mage/cards/x/XanthicStatue.java index 3e36f90a9c..95ffa9d654 100644 --- a/Mage.Sets/src/mage/cards/x/XanthicStatue.java +++ b/Mage.Sets/src/mage/cards/x/XanthicStatue.java @@ -38,6 +38,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Zone; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** @@ -64,7 +65,7 @@ public class XanthicStatue extends CardImpl { } } -class XanthicStatueCreature extends Token { +class XanthicStatueCreature extends TokenImpl { public XanthicStatueCreature() { super("Xanthic Statue", "8/8 Golem artifact creature with trample"); @@ -75,4 +76,11 @@ class XanthicStatueCreature extends Token { this.addAbility(TrampleAbility.getInstance()); } + public XanthicStatueCreature(final XanthicStatueCreature token) { + super(token); + } + + public XanthicStatueCreature copy() { + return new XanthicStatueCreature(this); + } } diff --git a/Mage.Sets/src/mage/cards/z/ZhalfirinVoid.java b/Mage.Sets/src/mage/cards/z/ZhalfirinVoid.java new file mode 100644 index 0000000000..33e5c1c36d --- /dev/null +++ b/Mage.Sets/src/mage/cards/z/ZhalfirinVoid.java @@ -0,0 +1,62 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.cards.z; + +import java.util.UUID; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.keyword.ScryEffect; +import mage.abilities.mana.ColorlessManaAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; + +/** + * + * @author Rystan + */ +public class ZhalfirinVoid extends CardImpl { + + public ZhalfirinVoid(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); + + // When Zhalfirin Void enters the battlefield, scry 1. + this.addAbility(new EntersBattlefieldTriggeredAbility(new ScryEffect(1))); + + // {T}: Add {C} to you mana pool. + this.addAbility(new ColorlessManaAbility()); + } + + public ZhalfirinVoid(final ZhalfirinVoid card) { + super(card); + } + + @Override + public ZhalfirinVoid copy() { + return new ZhalfirinVoid(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Dominaria.java b/Mage.Sets/src/mage/sets/Dominaria.java index 1700021932..8954236819 100644 --- a/Mage.Sets/src/mage/sets/Dominaria.java +++ b/Mage.Sets/src/mage/sets/Dominaria.java @@ -53,19 +53,37 @@ public class Dominaria extends ExpansionSet { this.numBoosterRare = 1; this.ratioBoosterMythic = 8; + cards.add(new SetCardInfo("Academy Drake", 40, Rarity.UNCOMMON, mage.cards.a.AcademyDrake.class)); + cards.add(new SetCardInfo("Arvad the Cursed", 191, Rarity.UNCOMMON, mage.cards.a.ArvadTheCursed.class)); + cards.add(new SetCardInfo("Baird, Steward of Argive", 4, Rarity.UNCOMMON, mage.cards.b.BairdStewardOfArgive.class)); cards.add(new SetCardInfo("Benalish Marshal", 10, Rarity.UNCOMMON, mage.cards.b.BenalishMarshal.class)); + cards.add(new SetCardInfo("Cabal Evangel", 78, Rarity.COMMON, mage.cards.c.CabalEvangel.class)); + cards.add(new SetCardInfo("Cast Down", 81, Rarity.UNCOMMON, mage.cards.c.CastDown.class)); cards.add(new SetCardInfo("Charge", 11, Rarity.COMMON, mage.cards.c.Charge.class)); + cards.add(new SetCardInfo("Dub", 999, Rarity.SPECIAL, mage.cards.d.Dub.class)); //TODO: Update once full spoiler + cards.add(new SetCardInfo("Gilded Lotus", 215, Rarity.RARE, mage.cards.g.GildedLotus.class)); + cards.add(new SetCardInfo("Goblin Warchief", 130, Rarity.UNCOMMON, mage.cards.g.GoblinWarchief.class)); + cards.add(new SetCardInfo("Grunn, the Lonely King", 165, Rarity.UNCOMMON, mage.cards.g.GrunnTheLonelyKing.class)); + cards.add(new SetCardInfo("Homarid Explorer", 53, Rarity.UNCOMMON, mage.cards.h.HomaridExplorer.class)); + cards.add(new SetCardInfo("Icy Manipulator", 219, Rarity.UNCOMMON, mage.cards.i.IcyManipulator.class)); cards.add(new SetCardInfo("Invoke the Divine", 13, Rarity.COMMON, mage.cards.i.InvokeTheDivine.class)); cards.add(new SetCardInfo("Jhoira, Weatherlight Captain", 200, Rarity.MYTHIC, mage.cards.j.JhoiraWeatherlightCaptain.class)); + cards.add(new SetCardInfo("Jodah, Archmage Eternal", 198, Rarity.RARE, mage.cards.j.JodahArchmageEternal.class)); + cards.add(new SetCardInfo("Juggernaut", 222, Rarity.UNCOMMON, mage.cards.j.Juggernaut.class)); cards.add(new SetCardInfo("Karn, Scion of Urza", 554, Rarity.MYTHIC, mage.cards.k.KarnScionOfUrza.class)); cards.add(new SetCardInfo("Knight of Grace", 23, Rarity.UNCOMMON, mage.cards.k.KnightOfGrace.class)); - cards.add(new SetCardInfo("Lyra Dawnbringer", 14, Rarity.MYTHIC, mage.cards.l.LyraDawnbringer.class)); - cards.add(new SetCardInfo("Serra Disciple", 34, Rarity.COMMON, mage.cards.s.SerraDisciple.class)); cards.add(new SetCardInfo("Knight of Malice", 52, Rarity.UNCOMMON, mage.cards.k.KnightOfMalice.class)); - cards.add(new SetCardInfo("Homarid Explorer", 53, Rarity.UNCOMMON, mage.cards.h.HomaridExplorer.class)); - cards.add(new SetCardInfo("Opt", 60, Rarity.COMMON, mage.cards.o.Opt.class)); - cards.add(new SetCardInfo("Academy Drake", 40, Rarity.UNCOMMON, mage.cards.a.AcademyDrake.class)); - cards.add(new SetCardInfo("Cast Down", 81, Rarity.UNCOMMON, mage.cards.c.CastDown.class)); cards.add(new SetCardInfo("Llanowar Elves", 168, Rarity.COMMON, mage.cards.l.LlanowarElves.class)); + cards.add(new SetCardInfo("Lyra Dawnbringer", 14, Rarity.MYTHIC, mage.cards.l.LyraDawnbringer.class)); + cards.add(new SetCardInfo("Meandering River", 274, Rarity.COMMON, mage.cards.m.MeanderingRiver.class)); + cards.add(new SetCardInfo("Naru Meha, Master Wizard", 59, Rarity.MYTHIC, mage.cards.n.NaruMehaMasterWizard.class)); + cards.add(new SetCardInfo("Opt", 60, Rarity.COMMON, mage.cards.o.Opt.class)); + cards.add(new SetCardInfo("Seal Away", 31, Rarity.UNCOMMON, mage.cards.s.SealAway.class)); + cards.add(new SetCardInfo("Serra Angel", 33, Rarity.UNCOMMON, mage.cards.s.SerraAngel.class)); + cards.add(new SetCardInfo("Serra Disciple", 34, Rarity.COMMON, mage.cards.s.SerraDisciple.class)); + cards.add(new SetCardInfo("Syncopate", 67, Rarity.UNCOMMON, mage.cards.s.Syncopate.class)); + cards.add(new SetCardInfo("Thorn Elemental", 185, Rarity.UNCOMMON, mage.cards.t.ThornElemental.class)); + cards.add(new SetCardInfo("Verix Bladewing", 149, Rarity.MYTHIC, mage.cards.v.VerixBladewing.class)); + cards.add(new SetCardInfo("Zhalfirin Void", 249, Rarity.UNCOMMON, mage.cards.z.ZhalfirinVoid.class)); } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/activated/TokenActivatedAbilityTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/activated/TokenImplActivatedAbilityTest.java similarity index 97% rename from Mage.Tests/src/test/java/org/mage/test/cards/abilities/activated/TokenActivatedAbilityTest.java rename to Mage.Tests/src/test/java/org/mage/test/cards/abilities/activated/TokenImplActivatedAbilityTest.java index 4c51e467d8..af19dd96d9 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/activated/TokenActivatedAbilityTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/activated/TokenImplActivatedAbilityTest.java @@ -38,7 +38,7 @@ import org.mage.test.serverside.base.CardTestPlayerBase; * * @author LevelX2 */ -public class TokenActivatedAbilityTest extends CardTestPlayerBase { +public class TokenImplActivatedAbilityTest extends CardTestPlayerBase { /** * Check that activated ability of created token works diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/copy/CopyCreatureCardToTokenTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/copy/CopyCreatureCardToTokenImplTest.java similarity index 96% rename from Mage.Tests/src/test/java/org/mage/test/cards/copy/CopyCreatureCardToTokenTest.java rename to Mage.Tests/src/test/java/org/mage/test/cards/copy/CopyCreatureCardToTokenImplTest.java index d7295c0960..02341d56f5 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/copy/CopyCreatureCardToTokenTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/copy/CopyCreatureCardToTokenImplTest.java @@ -14,7 +14,7 @@ import org.mage.test.serverside.base.CardTestPlayerBase; * * @author LevelX2 */ -public class CopyCreatureCardToTokenTest extends CardTestPlayerBase { +public class CopyCreatureCardToTokenImplTest extends CardTestPlayerBase { /** * Unesh, Criosphinx Sovereign did not have his ETB effect trigger when he diff --git a/Mage/src/main/java/mage/abilities/costs/OptionalAdditionalCostImpl.java b/Mage/src/main/java/mage/abilities/costs/OptionalAdditionalCostImpl.java index 6b7b7e320f..e64b8873e0 100644 --- a/Mage/src/main/java/mage/abilities/costs/OptionalAdditionalCostImpl.java +++ b/Mage/src/main/java/mage/abilities/costs/OptionalAdditionalCostImpl.java @@ -30,9 +30,8 @@ package mage.abilities.costs; /** * * @author LevelX2 - * @param */ -public class OptionalAdditionalCostImpl extends CostsImpl implements OptionalAdditionalCost { +public class OptionalAdditionalCostImpl extends CostsImpl implements OptionalAdditionalCost { protected String name; protected String reminderText; diff --git a/Mage/src/main/java/mage/abilities/effects/common/CopyTokenEffect.java b/Mage/src/main/java/mage/abilities/effects/common/CopyTokenEffect.java index 3207be060e..56463f3927 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/CopyTokenEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/CopyTokenEffect.java @@ -5,6 +5,7 @@ import mage.abilities.effects.ContinuousEffectImpl; import mage.constants.*; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; public class CopyTokenEffect extends ContinuousEffectImpl { diff --git a/Mage/src/main/java/mage/abilities/effects/common/CreateTokenEffect.java b/Mage/src/main/java/mage/abilities/effects/common/CreateTokenEffect.java index 05712cd92e..46b82048c0 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/CreateTokenEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/CreateTokenEffect.java @@ -37,6 +37,7 @@ import mage.constants.Outcome; import mage.constants.Zone; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.targetpointer.FixedTarget; import mage.util.CardUtil; diff --git a/Mage/src/main/java/mage/abilities/effects/common/CreateTokenTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/CreateTokenTargetEffect.java index 418b9e7593..2d37250007 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/CreateTokenTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/CreateTokenTargetEffect.java @@ -7,6 +7,7 @@ import mage.abilities.dynamicvalue.common.StaticValue; import mage.abilities.effects.OneShotEffect; import mage.constants.Outcome; import mage.game.Game; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.util.CardUtil; diff --git a/Mage/src/main/java/mage/abilities/effects/common/FlipSourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/FlipSourceEffect.java index 2ed186cd42..aaa4679372 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/FlipSourceEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/FlipSourceEffect.java @@ -8,6 +8,7 @@ import mage.abilities.effects.OneShotEffect; import mage.constants.Outcome; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.players.Player; diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureAllEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureAllEffect.java index ce9b5c41a4..9eb451177d 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureAllEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureAllEffect.java @@ -39,6 +39,7 @@ import mage.constants.SubLayer; import mage.filter.FilterPermanent; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import java.util.HashSet; diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureAttachedEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureAttachedEffect.java index da2e7b4a5e..54845d9d40 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureAttachedEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureAttachedEffect.java @@ -32,6 +32,7 @@ import mage.abilities.effects.ContinuousEffectImpl; import mage.constants.*; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect.java index 9b62e1e933..9d65371d2c 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect.java @@ -33,6 +33,7 @@ import mage.abilities.effects.ContinuousEffectImpl; import mage.constants.*; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureSourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureSourceEffect.java index 344b38bb32..72e0ccf17c 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureSourceEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureSourceEffect.java @@ -34,6 +34,7 @@ import mage.abilities.effects.ContinuousEffectImpl; import mage.constants.*; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /** diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureTargetEffect.java index b95e5b79e5..abbaea4720 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureTargetEffect.java @@ -33,6 +33,7 @@ import mage.abilities.effects.ContinuousEffectImpl; import mage.constants.*; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.Target; import mage.util.CardUtil; diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/WUBRGInsteadEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/WUBRGInsteadEffect.java new file mode 100644 index 0000000000..cd853bc24e --- /dev/null +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/WUBRGInsteadEffect.java @@ -0,0 +1,84 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.abilities.effects.common.continuous; + +import mage.abilities.Ability; +import mage.abilities.condition.common.SourceIsSpellCondition; +import mage.abilities.costs.AlternativeCostSourceAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.constants.Duration; +import mage.constants.Layer; +import mage.constants.Outcome; +import mage.constants.SubLayer; +import mage.game.Game; +import mage.players.Player; + +/** + * @author JRHerlehy + * Created on 4/4/18. + */ +public class WUBRGInsteadEffect extends ContinuousEffectImpl { + + static AlternativeCostSourceAbility alternativeCastingCostAbility = new AlternativeCostSourceAbility(new ManaCostsImpl("{W}{U}{B}{R}{G}"), SourceIsSpellCondition.instance); + + public WUBRGInsteadEffect() { + super(Duration.WhileOnBattlefield, Outcome.Detriment); + staticText = "You may pay {W}{U}{B}{R}{G} rather than pay the mana cost for spells that you cast"; + } + + public WUBRGInsteadEffect(final WUBRGInsteadEffect effect) { + super(effect); + } + + @Override + public WUBRGInsteadEffect copy() { + return new WUBRGInsteadEffect(this); + } + + @Override + public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + controller.getAlternativeSourceCosts().add(alternativeCastingCostAbility); + return true; + } + return false; + } + + @Override + public boolean apply(Game game, Ability source) { + return false; + } + + @Override + public boolean hasLayer(Layer layer) { + return layer == Layer.RulesEffects; + } + +} diff --git a/Mage/src/main/java/mage/abilities/keyword/AwakenAbility.java b/Mage/src/main/java/mage/abilities/keyword/AwakenAbility.java index 71bd01757f..cc7fae9726 100644 --- a/Mage/src/main/java/mage/abilities/keyword/AwakenAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/AwakenAbility.java @@ -48,6 +48,7 @@ import mage.constants.Zone; import mage.counters.CounterType; import mage.filter.common.FilterControlledLandPermanent; import mage.game.Game; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.target.Target; import mage.target.common.TargetControlledPermanent; @@ -158,7 +159,7 @@ public class AwakenAbility extends SpellAbility { } -class AwakenElementalToken extends Token { +class AwakenElementalToken extends TokenImpl { public AwakenElementalToken() { super("", "0/0 Elemental creature with haste"); @@ -170,4 +171,12 @@ class AwakenElementalToken extends Token { this.addAbility(HasteAbility.getInstance()); } + + public AwakenElementalToken(final AwakenElementalToken token) { + super(token); + } + + public AwakenElementalToken copy() { + return new AwakenElementalToken(this); + } } diff --git a/Mage/src/main/java/mage/constants/SubType.java b/Mage/src/main/java/mage/constants/SubType.java index 42c07015a3..3e021fab54 100644 --- a/Mage/src/main/java/mage/constants/SubType.java +++ b/Mage/src/main/java/mage/constants/SubType.java @@ -123,7 +123,7 @@ public enum SubType { ELEMENTAL("Elemental", SubTypeSet.CreatureType), ELEPHANT("Elephant", SubTypeSet.CreatureType), ELF("Elf", SubTypeSet.CreatureType), - ELVES("Elves", SubTypeSet.CreatureType), + ELVES("Elves", SubTypeSet.CreatureType, true), // Un-sets ELK("Elk", SubTypeSet.CreatureType), EYE("Eye", SubTypeSet.CreatureType), EWOK("Ewok", SubTypeSet.CreatureType, true), // Star Wars diff --git a/Mage/src/main/java/mage/game/permanent/token/ATATToken.java b/Mage/src/main/java/mage/game/permanent/token/ATATToken.java index e282ed722b..d922acfa4f 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ATATToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ATATToken.java @@ -37,7 +37,7 @@ import mage.abilities.effects.common.CreateTokenEffect; * * @author spjspj */ -public class ATATToken extends Token { +public class ATATToken extends TokenImpl { public ATATToken() { super("AT-AT", "5/5 white artifact AT-AT creature tokens with \"When this creature dies, create two 1/1 white Trooper creature tokens.\"", 5, 5); @@ -48,5 +48,13 @@ public class ATATToken extends Token { addAbility(new DiesTriggeredAbility(new CreateTokenEffect(new TrooperToken(), 2))); subtype.add(SubType.ATAT); } + + public ATATToken(final ATATToken token) { + super(token); + } + + public ATATToken copy() { + return new ATATToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/AbhorrentOverlordHarpyToken.java b/Mage/src/main/java/mage/game/permanent/token/AbhorrentOverlordHarpyToken.java index aea4aa9903..ace77ce752 100644 --- a/Mage/src/main/java/mage/game/permanent/token/AbhorrentOverlordHarpyToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/AbhorrentOverlordHarpyToken.java @@ -37,7 +37,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class AbhorrentOverlordHarpyToken extends Token { +public class AbhorrentOverlordHarpyToken extends TokenImpl { public AbhorrentOverlordHarpyToken() { super("Harpy", "1/1 black Harpy creature tokens with flying"); @@ -49,4 +49,12 @@ public class AbhorrentOverlordHarpyToken extends Token { this.addAbility(FlyingAbility.getInstance()); } + + public AbhorrentOverlordHarpyToken(final AbhorrentOverlordHarpyToken token) { + super(token); + } + + public AbhorrentOverlordHarpyToken copy() { + return new AbhorrentOverlordHarpyToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/AerieWorshippersBirdToken.java b/Mage/src/main/java/mage/game/permanent/token/AerieWorshippersBirdToken.java index 160c4d4047..6ce726b7a1 100644 --- a/Mage/src/main/java/mage/game/permanent/token/AerieWorshippersBirdToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/AerieWorshippersBirdToken.java @@ -38,7 +38,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class AerieWorshippersBirdToken extends Token { +public class AerieWorshippersBirdToken extends TokenImpl { public AerieWorshippersBirdToken() { super("Bird", "2/2 blue Bird enchantment creature token with flying"); @@ -52,5 +52,13 @@ public class AerieWorshippersBirdToken extends Token { this.setOriginalExpansionSetCode("BNG"); this.setTokenType(2); } + + public AerieWorshippersBirdToken(final AerieWorshippersBirdToken token) { + super(token); + } + + public AerieWorshippersBirdToken copy() { + return new AerieWorshippersBirdToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/AkoumStonewakerElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/AkoumStonewakerElementalToken.java index 81f406e432..91ee184fee 100644 --- a/Mage/src/main/java/mage/game/permanent/token/AkoumStonewakerElementalToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/AkoumStonewakerElementalToken.java @@ -38,7 +38,7 @@ import mage.abilities.keyword.TrampleAbility; * * @author spjspj */ -public class AkoumStonewakerElementalToken extends Token { +public class AkoumStonewakerElementalToken extends TokenImpl { public AkoumStonewakerElementalToken() { super("Elemental", "3/1 red Elemental creature token with trample and haste"); @@ -52,5 +52,13 @@ public class AkoumStonewakerElementalToken extends Token { this.setOriginalExpansionSetCode("BFZ"); this.setTokenType(1); } + + public AkoumStonewakerElementalToken(final AkoumStonewakerElementalToken token) { + super(token); + } + + public AkoumStonewakerElementalToken copy() { + return new AkoumStonewakerElementalToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/AkroanSoldierToken.java b/Mage/src/main/java/mage/game/permanent/token/AkroanSoldierToken.java index b74428880f..17edfe81de 100644 --- a/Mage/src/main/java/mage/game/permanent/token/AkroanSoldierToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/AkroanSoldierToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.HasteAbility; * * @author spjspj */ -public class AkroanSoldierToken extends Token { +public class AkroanSoldierToken extends TokenImpl { public AkroanSoldierToken() { super("Soldier", "1/1 red Soldier creature token with haste"); @@ -48,4 +48,12 @@ public class AkroanSoldierToken extends Token { toughness = new MageInt(1); this.addAbility(HasteAbility.getInstance()); } + + public AkroanSoldierToken(final AkroanSoldierToken token) { + super(token); + } + + public AkroanSoldierToken copy() { + return new AkroanSoldierToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/AngelToken.java b/Mage/src/main/java/mage/game/permanent/token/AngelToken.java index c86ba86678..455e5f2dac 100644 --- a/Mage/src/main/java/mage/game/permanent/token/AngelToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/AngelToken.java @@ -8,7 +8,7 @@ import mage.abilities.keyword.FlyingAbility; import mage.constants.CardType; import mage.constants.SubType; -public class AngelToken extends Token { +public class AngelToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -17,7 +17,7 @@ public class AngelToken extends Token { } public AngelToken() { - this(null); + this((String)null); } public AngelToken(String setCode) { @@ -32,4 +32,12 @@ public class AngelToken extends Token { toughness = new MageInt(4); addAbility(FlyingAbility.getInstance()); } + + public AngelToken(final AngelToken token) { + super(token); + } + + public AngelToken copy() { + return new AngelToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/AnotherSpiritToken.java b/Mage/src/main/java/mage/game/permanent/token/AnotherSpiritToken.java index 58cb310943..5c740f16f9 100644 --- a/Mage/src/main/java/mage/game/permanent/token/AnotherSpiritToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/AnotherSpiritToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class AnotherSpiritToken extends Token { +public class AnotherSpiritToken extends TokenImpl { public AnotherSpiritToken() { super("Spirit", "3/3 white Spirit creature token with flying"); @@ -47,5 +47,11 @@ public class AnotherSpiritToken extends Token { toughness = new MageInt(3); this.addAbility(FlyingAbility.getInstance()); } + public AnotherSpiritToken(final AnotherSpiritToken token) { + super(token); + } + public AnotherSpiritToken copy() { + return new AnotherSpiritToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/AnthousaWarriorToken.java b/Mage/src/main/java/mage/game/permanent/token/AnthousaWarriorToken.java index a87434bc81..d7e4d9a19c 100644 --- a/Mage/src/main/java/mage/game/permanent/token/AnthousaWarriorToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/AnthousaWarriorToken.java @@ -36,7 +36,7 @@ import mage.MageInt; * * @author spjspj */ -public class AnthousaWarriorToken extends Token { +public class AnthousaWarriorToken extends TokenImpl { public AnthousaWarriorToken() { super("", "2/2 Warrior creatures"); @@ -46,5 +46,12 @@ public class AnthousaWarriorToken extends Token { toughness = new MageInt(2); } + public AnthousaWarriorToken(final AnthousaWarriorToken token) { + super(token); + } + + public AnthousaWarriorToken copy() { + return new AnthousaWarriorToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/ApeToken.java b/Mage/src/main/java/mage/game/permanent/token/ApeToken.java index a100952596..8d293135fc 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ApeToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ApeToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class ApeToken extends Token { +public class ApeToken extends TokenImpl { public ApeToken() { super("Ape", "2/2 green Ape creature token"); @@ -45,4 +45,12 @@ public class ApeToken extends Token { power = new MageInt(2); toughness = new MageInt(2); } + + public ApeToken(final ApeToken token) { + super(token); + } + + public ApeToken copy() { + return new ApeToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/ArchitectOfTheUntamedBeastToken.java b/Mage/src/main/java/mage/game/permanent/token/ArchitectOfTheUntamedBeastToken.java index 180a592d2f..7e52bf4187 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ArchitectOfTheUntamedBeastToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ArchitectOfTheUntamedBeastToken.java @@ -36,7 +36,7 @@ import mage.MageInt; * * @author spjspj */ -public class ArchitectOfTheUntamedBeastToken extends Token { +public class ArchitectOfTheUntamedBeastToken extends TokenImpl { public ArchitectOfTheUntamedBeastToken() { super("Beast", "6/6 colorless Beast artifact creature token"); @@ -46,5 +46,13 @@ public class ArchitectOfTheUntamedBeastToken extends Token { power = new MageInt(6); toughness = new MageInt(6); } + + public ArchitectOfTheUntamedBeastToken(final ArchitectOfTheUntamedBeastToken token) { + super(token); + } + + public ArchitectOfTheUntamedBeastToken copy() { + return new ArchitectOfTheUntamedBeastToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/AssassinToken.java b/Mage/src/main/java/mage/game/permanent/token/AssassinToken.java index 47f25b10e7..c3a78c1c05 100644 --- a/Mage/src/main/java/mage/game/permanent/token/AssassinToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/AssassinToken.java @@ -38,7 +38,7 @@ import mage.abilities.effects.common.LoseGameTargetPlayerEffect; * * @author spjspj */ -public class AssassinToken extends Token { +public class AssassinToken extends TokenImpl { public AssassinToken() { super("Assassin", "1/1 black Assassin creature tokens with \"Whenever this creature deals combat damage to a player, that player loses the game.\""); @@ -49,5 +49,13 @@ public class AssassinToken extends Token { toughness = new MageInt(1); addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new LoseGameTargetPlayerEffect(), false, true)); } + + public AssassinToken(final AssassinToken token) { + super(token); + } + + public AssassinToken copy() { + return new AssassinToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/AssemblyWorkerToken.java b/Mage/src/main/java/mage/game/permanent/token/AssemblyWorkerToken.java index 1de7c226aa..3425261e89 100644 --- a/Mage/src/main/java/mage/game/permanent/token/AssemblyWorkerToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/AssemblyWorkerToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class AssemblyWorkerToken extends Token { +public class AssemblyWorkerToken extends TokenImpl { public AssemblyWorkerToken() { super("Assembly-Worker", "2/2 Assembly-Worker artifact creature"); @@ -45,4 +45,12 @@ public class AssemblyWorkerToken extends Token { power = new MageInt(2); toughness = new MageInt(2); } + + public AssemblyWorkerToken(final AssemblyWorkerToken token) { + super(token); + } + + public AssemblyWorkerToken copy() { + return new AssemblyWorkerToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/AvatarToken.java b/Mage/src/main/java/mage/game/permanent/token/AvatarToken.java index 7148509b88..52376adfaa 100644 --- a/Mage/src/main/java/mage/game/permanent/token/AvatarToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/AvatarToken.java @@ -46,7 +46,7 @@ import mage.players.Player; * * @author spjspj */ -public class AvatarToken extends Token { +public class AvatarToken extends TokenImpl { public AvatarToken() { super("Avatar", "white Avatar creature token with \"This creature's power and toughness are each equal to your life total.\""); @@ -55,6 +55,14 @@ public class AvatarToken extends Token { color.setWhite(true); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new AvatarTokenEffect())); } + + public AvatarToken(final AvatarToken token) { + super(token); + } + + public AvatarToken copy() { + return new AvatarToken(this); + } } class AvatarTokenEffect extends ContinuousEffectImpl { diff --git a/Mage/src/main/java/mage/game/permanent/token/BalduvianToken.java b/Mage/src/main/java/mage/game/permanent/token/BalduvianToken.java index bc979dc26c..d4a8c55e91 100644 --- a/Mage/src/main/java/mage/game/permanent/token/BalduvianToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/BalduvianToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.HasteAbility; * * @author spjspj */ -public class BalduvianToken extends Token { +public class BalduvianToken extends TokenImpl { public BalduvianToken() { super("Graveborn", "3/1 black and red Graveborn creature token with haste"); @@ -48,4 +48,12 @@ public class BalduvianToken extends Token { subtype.add(SubType.GRAVEBORN); addAbility(HasteAbility.getInstance()); } + + public BalduvianToken(final BalduvianToken token) { + super(token); + } + + public BalduvianToken copy() { + return new BalduvianToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/BaruFistOfKrosaToken.java b/Mage/src/main/java/mage/game/permanent/token/BaruFistOfKrosaToken.java index 4e8493f456..a6803fd20a 100644 --- a/Mage/src/main/java/mage/game/permanent/token/BaruFistOfKrosaToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/BaruFistOfKrosaToken.java @@ -36,7 +36,7 @@ import mage.MageInt; * * @author spjspj */ -public class BaruFistOfKrosaToken extends Token { +public class BaruFistOfKrosaToken extends TokenImpl { public BaruFistOfKrosaToken() { this(1); @@ -50,5 +50,13 @@ public class BaruFistOfKrosaToken extends Token { power = new MageInt(xValue); toughness = new MageInt(xValue); } + + public BaruFistOfKrosaToken(final BaruFistOfKrosaToken token) { + super(token); + } + + public BaruFistOfKrosaToken copy() { + return new BaruFistOfKrosaToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/BatToken.java b/Mage/src/main/java/mage/game/permanent/token/BatToken.java index 7f6acbdf58..a62ecd7c7b 100644 --- a/Mage/src/main/java/mage/game/permanent/token/BatToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/BatToken.java @@ -5,7 +5,7 @@ import mage.abilities.keyword.FlyingAbility; import mage.constants.CardType; import mage.constants.SubType; -public class BatToken extends Token { +public class BatToken extends TokenImpl { public BatToken() { super("Bat", "1/1 black Bat creature token with flying"); @@ -18,4 +18,11 @@ public class BatToken extends Token { this.setOriginalExpansionSetCode("MMA"); } + public BatToken(final BatToken token) { + super(token); + } + + public BatToken copy() { + return new BatToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/BearToken.java b/Mage/src/main/java/mage/game/permanent/token/BearToken.java index a54e86137a..b0b6214e80 100644 --- a/Mage/src/main/java/mage/game/permanent/token/BearToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/BearToken.java @@ -36,7 +36,7 @@ import mage.constants.SubType; * * @author BetaSteward_at_googlemail.com */ -public class BearToken extends Token { +public class BearToken extends TokenImpl { public BearToken() { super("Bear", "2/2 green Bear creature token"); @@ -47,4 +47,11 @@ public class BearToken extends Token { toughness = new MageInt(2); } + public BearToken(final BearToken token) { + super(token); + } + + public BearToken copy() { + return new BearToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/BearsCompanionBearToken.java b/Mage/src/main/java/mage/game/permanent/token/BearsCompanionBearToken.java index 84135d0079..bb3ef58c79 100644 --- a/Mage/src/main/java/mage/game/permanent/token/BearsCompanionBearToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/BearsCompanionBearToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class BearsCompanionBearToken extends Token { +public class BearsCompanionBearToken extends TokenImpl { public BearsCompanionBearToken() { super("Bear", "4/4 green Bear creature token"); @@ -46,5 +46,11 @@ public class BearsCompanionBearToken extends Token { power = new MageInt(4); toughness = new MageInt(4); } + public BearsCompanionBearToken(final BearsCompanionBearToken token) { + super(token); + } + public BearsCompanionBearToken copy() { + return new BearsCompanionBearToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/BeastToken.java b/Mage/src/main/java/mage/game/permanent/token/BeastToken.java index 5e416b6ed1..7bb5ab5dca 100644 --- a/Mage/src/main/java/mage/game/permanent/token/BeastToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/BeastToken.java @@ -38,7 +38,7 @@ import mage.constants.SubType; * * @author BetaSteward_at_googlemail.com */ -public class BeastToken extends Token { +public class BeastToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); diff --git a/Mage/src/main/java/mage/game/permanent/token/BeastToken2.java b/Mage/src/main/java/mage/game/permanent/token/BeastToken2.java index 7bba12d976..ac205e801d 100644 --- a/Mage/src/main/java/mage/game/permanent/token/BeastToken2.java +++ b/Mage/src/main/java/mage/game/permanent/token/BeastToken2.java @@ -38,7 +38,7 @@ import mage.constants.SubType; * * @author LoneFox */ -public class BeastToken2 extends Token { +public class BeastToken2 extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); diff --git a/Mage/src/main/java/mage/game/permanent/token/BeastToken3.java b/Mage/src/main/java/mage/game/permanent/token/BeastToken3.java index 74300155e6..f5d79e6cc7 100644 --- a/Mage/src/main/java/mage/game/permanent/token/BeastToken3.java +++ b/Mage/src/main/java/mage/game/permanent/token/BeastToken3.java @@ -35,7 +35,7 @@ import mage.constants.SubType; * * @author fireshoes */ -public class BeastToken3 extends Token { +public class BeastToken3 extends TokenImpl { public BeastToken3() { this(null, 0); diff --git a/Mage/src/main/java/mage/game/permanent/token/BeckonApparitionToken.java b/Mage/src/main/java/mage/game/permanent/token/BeckonApparitionToken.java index 41e5ca8fba..652d94c850 100644 --- a/Mage/src/main/java/mage/game/permanent/token/BeckonApparitionToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/BeckonApparitionToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class BeckonApparitionToken extends Token { +public class BeckonApparitionToken extends TokenImpl { public BeckonApparitionToken() { super("Spirit", "1/1 white and black Spirit creature token with flying"); @@ -49,4 +49,12 @@ public class BeckonApparitionToken extends Token { toughness = new MageInt(1); this.addAbility(FlyingAbility.getInstance()); } + public BeckonApparitionToken(final BeckonApparitionToken token) { + super(token); + } + + public BeckonApparitionToken copy() { + return new BeckonApparitionToken(this); + } + } diff --git a/Mage/src/main/java/mage/game/permanent/token/BirdSoldierToken.java b/Mage/src/main/java/mage/game/permanent/token/BirdSoldierToken.java index e5db23fa9d..435921807b 100644 --- a/Mage/src/main/java/mage/game/permanent/token/BirdSoldierToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/BirdSoldierToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class BirdSoldierToken extends Token { +public class BirdSoldierToken extends TokenImpl { public BirdSoldierToken() { super("Bird Soldier", "1/1 white Bird Soldier creature with flying"); @@ -49,4 +49,12 @@ public class BirdSoldierToken extends Token { addAbility(FlyingAbility.getInstance()); } + + public BirdSoldierToken(final BirdSoldierToken token) { + super(token); + } + + public BirdSoldierToken copy() { + return new BirdSoldierToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/BirdToken.java b/Mage/src/main/java/mage/game/permanent/token/BirdToken.java index e918308843..92101b5dd3 100644 --- a/Mage/src/main/java/mage/game/permanent/token/BirdToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/BirdToken.java @@ -38,7 +38,7 @@ import mage.constants.SubType; * * @author LoneFox */ -public class BirdToken extends Token { +public class BirdToken extends TokenImpl { public BirdToken() { super("Bird", "1/1 white Bird creature token with flying"); diff --git a/Mage/src/main/java/mage/game/permanent/token/BoarToken.java b/Mage/src/main/java/mage/game/permanent/token/BoarToken.java index 0661651b57..9f4e9c7836 100644 --- a/Mage/src/main/java/mage/game/permanent/token/BoarToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/BoarToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class BoarToken extends Token { +public class BoarToken extends TokenImpl { public BoarToken() { super("Boar", "3/3 green Boar creature token"); @@ -45,4 +45,12 @@ public class BoarToken extends Token { power = new MageInt(3); toughness = new MageInt(3); } + + public BoarToken(final BoarToken token) { + super(token); + } + + public BoarToken copy() { + return new BoarToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/BrainiacToken.java b/Mage/src/main/java/mage/game/permanent/token/BrainiacToken.java index 39d87fee1b..bf3e694b76 100644 --- a/Mage/src/main/java/mage/game/permanent/token/BrainiacToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/BrainiacToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class BrainiacToken extends Token { +public class BrainiacToken extends TokenImpl { public BrainiacToken() { super("Brainiac", "1/1 red Brainiac creature token"); @@ -45,4 +45,12 @@ public class BrainiacToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public BrainiacToken(final BrainiacToken token) { + super(token); + } + + public BrainiacToken copy() { + return new BrainiacToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/BreedingPitThrullToken.java b/Mage/src/main/java/mage/game/permanent/token/BreedingPitThrullToken.java index 04976cc413..00c4e8ff67 100644 --- a/Mage/src/main/java/mage/game/permanent/token/BreedingPitThrullToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/BreedingPitThrullToken.java @@ -35,7 +35,7 @@ import mage.constants.SubType; * * @author spjspj */ -public class BreedingPitThrullToken extends Token { +public class BreedingPitThrullToken extends TokenImpl { public BreedingPitThrullToken() { super("Thrull", "0/1 black Thrull creature token"); @@ -45,4 +45,12 @@ public class BreedingPitThrullToken extends Token { power = new MageInt(0); toughness = new MageInt(1); } + + public BreedingPitThrullToken(final BreedingPitThrullToken token) { + super(token); + } + + public BreedingPitThrullToken copy() { + return new BreedingPitThrullToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/BrokenVisageSpiritToken.java b/Mage/src/main/java/mage/game/permanent/token/BrokenVisageSpiritToken.java index 9108b920c5..af64bf698d 100644 --- a/Mage/src/main/java/mage/game/permanent/token/BrokenVisageSpiritToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/BrokenVisageSpiritToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj & L_J */ -public class BrokenVisageSpiritToken extends Token { +public class BrokenVisageSpiritToken extends TokenImpl { public BrokenVisageSpiritToken() { this(0,0); @@ -49,4 +49,12 @@ public class BrokenVisageSpiritToken extends Token { power = new MageInt(tokenPower); toughness = new MageInt(tokenToughness); } + + public BrokenVisageSpiritToken(final BrokenVisageSpiritToken token) { + super(token); + } + + public BrokenVisageSpiritToken copy() { + return new BrokenVisageSpiritToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/BroodKeeperDragonToken.java b/Mage/src/main/java/mage/game/permanent/token/BroodKeeperDragonToken.java index cee7d55e6b..b0487c7ac3 100644 --- a/Mage/src/main/java/mage/game/permanent/token/BroodKeeperDragonToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/BroodKeeperDragonToken.java @@ -41,7 +41,7 @@ import mage.constants.Zone; * * @author spjspj */ -public class BroodKeeperDragonToken extends Token { +public class BroodKeeperDragonToken extends TokenImpl { public BroodKeeperDragonToken() { super("Dragon", "2/2 red Dragon creature token with flying. It has \"{R}: This creature gets +1/+0 until end of turn.\""); @@ -55,4 +55,12 @@ public class BroodKeeperDragonToken extends Token { this.addAbility(FlyingAbility.getInstance()); this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl("{R}"))); } + + public BroodKeeperDragonToken(final BroodKeeperDragonToken token) { + super(token); + } + + public BroodKeeperDragonToken copy() { + return new BroodKeeperDragonToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/ButterflyToken.java b/Mage/src/main/java/mage/game/permanent/token/ButterflyToken.java index a7ea17d877..e021ec68b1 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ButterflyToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ButterflyToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class ButterflyToken extends Token { +public class ButterflyToken extends TokenImpl { public ButterflyToken() { super("Butterfly", "1/1 green Insect creature token with flying named Butterfly"); @@ -47,4 +47,12 @@ public class ButterflyToken extends Token { toughness = new MageInt(1); addAbility(FlyingAbility.getInstance()); } + + public ButterflyToken(final ButterflyToken token) { + super(token); + } + + public ButterflyToken copy() { + return new ButterflyToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/CallTheSkyBreakerElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/CallTheSkyBreakerElementalToken.java index 1595e4c128..92c6d00be6 100644 --- a/Mage/src/main/java/mage/game/permanent/token/CallTheSkyBreakerElementalToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/CallTheSkyBreakerElementalToken.java @@ -36,7 +36,7 @@ import mage.constants.SubType; * * @author spjspj */ -public class CallTheSkyBreakerElementalToken extends Token { +public class CallTheSkyBreakerElementalToken extends TokenImpl { public CallTheSkyBreakerElementalToken() { super("Elemental", "5/5 blue and red Elemental creature token with flying"); @@ -51,4 +51,12 @@ public class CallTheSkyBreakerElementalToken extends Token { toughness = new MageInt(5); this.addAbility(FlyingAbility.getInstance()); } + + public CallTheSkyBreakerElementalToken(final CallTheSkyBreakerElementalToken token) { + super(token); + } + + public CallTheSkyBreakerElementalToken copy() { + return new CallTheSkyBreakerElementalToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/CamaridToken.java b/Mage/src/main/java/mage/game/permanent/token/CamaridToken.java index 8da6341b16..36d0271410 100644 --- a/Mage/src/main/java/mage/game/permanent/token/CamaridToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/CamaridToken.java @@ -34,7 +34,7 @@ import mage.constants.SubType; * * @author spjspj */ -public class CamaridToken extends Token { +public class CamaridToken extends TokenImpl { public CamaridToken() { super("Camarid", "1/1 blue Camarid creature tokens"); @@ -45,4 +45,12 @@ public class CamaridToken extends Token { this.getSubtype(null).add(SubType.CAMARID); this.addCardType(CardType.CREATURE); } + + public CamaridToken(final CamaridToken token) { + super(token); + } + + public CamaridToken copy() { + return new CamaridToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/CaribouToken.java b/Mage/src/main/java/mage/game/permanent/token/CaribouToken.java index 17deaabd3f..e62ac8352e 100644 --- a/Mage/src/main/java/mage/game/permanent/token/CaribouToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/CaribouToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class CaribouToken extends Token { +public class CaribouToken extends TokenImpl { public CaribouToken() { super("Caribou", "0/1 white Caribou creature token"); @@ -45,4 +45,12 @@ public class CaribouToken extends Token { power = new MageInt(0); toughness = new MageInt(1); } + + public CaribouToken(final CaribouToken token) { + super(token); + } + + public CaribouToken copy() { + return new CaribouToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/CarnivoreToken.java b/Mage/src/main/java/mage/game/permanent/token/CarnivoreToken.java index 9cd40a0a87..3ecd377c10 100644 --- a/Mage/src/main/java/mage/game/permanent/token/CarnivoreToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/CarnivoreToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class CarnivoreToken extends Token { +public class CarnivoreToken extends TokenImpl { public CarnivoreToken() { super("Carnivore", "3/1 red Beast creature token"); @@ -45,4 +45,12 @@ public class CarnivoreToken extends Token { power = new MageInt(3); toughness = new MageInt(1); } + + public CarnivoreToken(final CarnivoreToken token) { + super(token); + } + + public CarnivoreToken copy() { + return new CarnivoreToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/CarrionBlackInsectToken.java b/Mage/src/main/java/mage/game/permanent/token/CarrionBlackInsectToken.java index e9224511de..96f06dcf15 100644 --- a/Mage/src/main/java/mage/game/permanent/token/CarrionBlackInsectToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/CarrionBlackInsectToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author TheElk801 */ -public class CarrionBlackInsectToken extends Token { +public class CarrionBlackInsectToken extends TokenImpl { public CarrionBlackInsectToken() { super("Insect", "0/1 black Insect creature token"); @@ -45,4 +45,12 @@ public class CarrionBlackInsectToken extends Token { power = new MageInt(0); toughness = new MageInt(1); } + public CarrionBlackInsectToken(final CarrionBlackInsectToken token) { + super(token); + } + + public CarrionBlackInsectToken copy() { + return new CarrionBlackInsectToken(this); + } + } diff --git a/Mage/src/main/java/mage/game/permanent/token/CatSoldierCreatureToken.java b/Mage/src/main/java/mage/game/permanent/token/CatSoldierCreatureToken.java index 97d8373769..d1e9c38032 100644 --- a/Mage/src/main/java/mage/game/permanent/token/CatSoldierCreatureToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/CatSoldierCreatureToken.java @@ -31,13 +31,12 @@ import mage.MageInt; import mage.abilities.keyword.VigilanceAbility; import mage.constants.CardType; import mage.constants.SubType; -import mage.game.permanent.token.Token; /** * * @author LevelX2 */ -public class CatSoldierCreatureToken extends Token { +public class CatSoldierCreatureToken extends TokenImpl { public CatSoldierCreatureToken() { super("Cat Soldier", "1/1 white Cat Soldier creature token with vigilance"); @@ -52,4 +51,12 @@ public class CatSoldierCreatureToken extends Token { this.addAbility(VigilanceAbility.getInstance()); this.setOriginalExpansionSetCode("BNG"); } + + public CatSoldierCreatureToken(final CatSoldierCreatureToken token) { + super(token); + } + + public CatSoldierCreatureToken copy() { + return new CatSoldierCreatureToken(this); + } } \ No newline at end of file diff --git a/Mage/src/main/java/mage/game/permanent/token/CatToken.java b/Mage/src/main/java/mage/game/permanent/token/CatToken.java index 817e9e5780..52c5ff44b7 100644 --- a/Mage/src/main/java/mage/game/permanent/token/CatToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/CatToken.java @@ -39,7 +39,7 @@ import mage.constants.SubType; * * @author LoneFox */ -public class CatToken extends Token { +public class CatToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -65,4 +65,13 @@ public class CatToken extends Token { power = new MageInt(2); toughness = new MageInt(2); } + + public CatToken(final CatToken token) { + super(token); + } + + public CatToken copy() { + return new CatToken(this); + } + } diff --git a/Mage/src/main/java/mage/game/permanent/token/CatToken2.java b/Mage/src/main/java/mage/game/permanent/token/CatToken2.java index 91f7f086e7..28c67a2f63 100644 --- a/Mage/src/main/java/mage/game/permanent/token/CatToken2.java +++ b/Mage/src/main/java/mage/game/permanent/token/CatToken2.java @@ -37,17 +37,13 @@ import mage.constants.SubType; * * @author fireshoes */ -public class CatToken2 extends Token { +public class CatToken2 extends TokenImpl { public CatToken2() { - this(null, 0); + this((String)null); } - + public CatToken2(String setCode) { - this(setCode, 0); - } - - public CatToken2(String setCode, int tokenType) { super("Cat", "1/1 white Cat creature token with lifelink"); setOriginalExpansionSetCode("AKH"); cardType.add(CardType.CREATURE); @@ -57,4 +53,12 @@ public class CatToken2 extends Token { toughness = new MageInt(1); addAbility(LifelinkAbility.getInstance()); } + public CatToken2(final CatToken2 token) { + super(token); + } + + public CatToken2 copy() { + return new CatToken2(this); + } + } diff --git a/Mage/src/main/java/mage/game/permanent/token/CatWarriorToken.java b/Mage/src/main/java/mage/game/permanent/token/CatWarriorToken.java index 1d04241095..147b1ab620 100644 --- a/Mage/src/main/java/mage/game/permanent/token/CatWarriorToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/CatWarriorToken.java @@ -35,7 +35,7 @@ import mage.constants.SubType; * * @author spjspj */ -public class CatWarriorToken extends Token { +public class CatWarriorToken extends TokenImpl { public CatWarriorToken() { super("Cat Warrior", "2/2 green Cat Warrior creature token with forestwalk"); @@ -48,4 +48,12 @@ public class CatWarriorToken extends Token { this.addCardType(CardType.CREATURE); this.addAbility(new ForestwalkAbility()); } + + public CatWarriorToken(final CatWarriorToken token) { + super(token); + } + + public CatWarriorToken copy() { + return new CatWarriorToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/CentaurEnchantmentCreatureToken.java b/Mage/src/main/java/mage/game/permanent/token/CentaurEnchantmentCreatureToken.java index 275c4088f9..83d5d93c9f 100644 --- a/Mage/src/main/java/mage/game/permanent/token/CentaurEnchantmentCreatureToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/CentaurEnchantmentCreatureToken.java @@ -30,13 +30,12 @@ package mage.game.permanent.token; import mage.MageInt; import mage.constants.CardType; import mage.constants.SubType; -import mage.game.permanent.token.Token; /** * * @author LevelX2 */ -public class CentaurEnchantmentCreatureToken extends Token { +public class CentaurEnchantmentCreatureToken extends TokenImpl { public CentaurEnchantmentCreatureToken() { super("Centaur", "3/3 green Centaur enchantment creature token"); @@ -48,4 +47,12 @@ public class CentaurEnchantmentCreatureToken extends Token { toughness = new MageInt(3); this.setOriginalExpansionSetCode("BNG"); } + + public CentaurEnchantmentCreatureToken(final CentaurEnchantmentCreatureToken token) { + super(token); + } + + public CentaurEnchantmentCreatureToken copy() { + return new CentaurEnchantmentCreatureToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/CentaurToken.java b/Mage/src/main/java/mage/game/permanent/token/CentaurToken.java index 578ef67768..2e70aad6b4 100644 --- a/Mage/src/main/java/mage/game/permanent/token/CentaurToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/CentaurToken.java @@ -40,7 +40,7 @@ import mage.util.RandomUtil; * * @author LevelX2 */ -public class CentaurToken extends Token { +public class CentaurToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -58,4 +58,11 @@ public class CentaurToken extends Token { toughness = new MageInt(3); } + public CentaurToken(final CentaurToken token) { + super(token); + } + + public CentaurToken copy() { + return new CentaurToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/ChasmSkulkerSquidToken.java b/Mage/src/main/java/mage/game/permanent/token/ChasmSkulkerSquidToken.java index 9cd1ee70c2..92b6696340 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ChasmSkulkerSquidToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ChasmSkulkerSquidToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.IslandwalkAbility; * * @author spjspj */ -public class ChasmSkulkerSquidToken extends Token { +public class ChasmSkulkerSquidToken extends TokenImpl { public ChasmSkulkerSquidToken() { super("Squid", "1/1 blue Squid creature token with islandwalk"); @@ -50,4 +50,11 @@ public class ChasmSkulkerSquidToken extends Token { this.addAbility(new IslandwalkAbility()); } + public ChasmSkulkerSquidToken(final ChasmSkulkerSquidToken token) { + super(token); + } + + public ChasmSkulkerSquidToken copy() { + return new ChasmSkulkerSquidToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/CitizenToken.java b/Mage/src/main/java/mage/game/permanent/token/CitizenToken.java index b1bc366b6f..65dbbf24d6 100644 --- a/Mage/src/main/java/mage/game/permanent/token/CitizenToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/CitizenToken.java @@ -36,7 +36,7 @@ import mage.constants.SubType; * * @author Quercitron */ -public class CitizenToken extends Token { +public class CitizenToken extends TokenImpl { public CitizenToken() { super("Citizen", "1/1 white Citizen creature token"); @@ -47,5 +47,12 @@ public class CitizenToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } - + + public CitizenToken(final CitizenToken token) { + super(token); + } + + public CitizenToken copy() { + return new CitizenToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/CloudSpriteToken.java b/Mage/src/main/java/mage/game/permanent/token/CloudSpriteToken.java index 8e6323301f..e04b3242ab 100644 --- a/Mage/src/main/java/mage/game/permanent/token/CloudSpriteToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/CloudSpriteToken.java @@ -37,7 +37,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class CloudSpriteToken extends Token { +public class CloudSpriteToken extends TokenImpl { public CloudSpriteToken() { super("Cloud Sprite", "1/1 blue faerie creature token named Cloud Sprite with flying and \"Cloud Sprite can block only creatures with flying.\""); @@ -51,4 +51,12 @@ public class CloudSpriteToken extends Token { this.addAbility(FlyingAbility.getInstance()); this.addAbility(new CanBlockOnlyFlyingAbility()); } + + public CloudSpriteToken(final CloudSpriteToken token) { + super(token); + } + + public CloudSpriteToken copy() { + return new CloudSpriteToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/ClueArtifactToken.java b/Mage/src/main/java/mage/game/permanent/token/ClueArtifactToken.java index a269c524c5..590568f02c 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ClueArtifactToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ClueArtifactToken.java @@ -44,7 +44,7 @@ import java.util.List; /** * */ -public class ClueArtifactToken extends Token { +public class ClueArtifactToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); diff --git a/Mage/src/main/java/mage/game/permanent/token/ConstructToken.java b/Mage/src/main/java/mage/game/permanent/token/ConstructToken.java index 6c4d51096f..30c1a633fb 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ConstructToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ConstructToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.DefenderAbility; * * @author spjspj */ -public class ConstructToken extends Token { +public class ConstructToken extends TokenImpl { public ConstructToken() { this("CNS"); @@ -53,4 +53,12 @@ public class ConstructToken extends Token { addAbility(DefenderAbility.getInstance()); } + + public ConstructToken(final ConstructToken token) { + super(token); + } + + public ConstructToken copy() { + return new ConstructToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/CoralBarrierSquidToken.java b/Mage/src/main/java/mage/game/permanent/token/CoralBarrierSquidToken.java index a78c9d8056..eadc4e5d9d 100644 --- a/Mage/src/main/java/mage/game/permanent/token/CoralBarrierSquidToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/CoralBarrierSquidToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.IslandwalkAbility; * * @author spjspj */ -public class CoralBarrierSquidToken extends Token { +public class CoralBarrierSquidToken extends TokenImpl { public CoralBarrierSquidToken() { super("Squid", "1/1 blue Squid creature token with islandwalk"); @@ -49,5 +49,11 @@ public class CoralBarrierSquidToken extends Token { this.addAbility(new IslandwalkAbility()); } + public CoralBarrierSquidToken(final CoralBarrierSquidToken token) { + super(token); + } + public CoralBarrierSquidToken copy() { + return new CoralBarrierSquidToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/CorpseweftZombieToken.java b/Mage/src/main/java/mage/game/permanent/token/CorpseweftZombieToken.java index 188493fda9..c63875ac35 100644 --- a/Mage/src/main/java/mage/game/permanent/token/CorpseweftZombieToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/CorpseweftZombieToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class CorpseweftZombieToken extends Token { +public class CorpseweftZombieToken extends TokenImpl { public CorpseweftZombieToken() { this(2,2); @@ -50,4 +50,12 @@ public class CorpseweftZombieToken extends Token { this.power = new MageInt(power); this.toughness = new MageInt(toughness); } + + public CorpseweftZombieToken(final CorpseweftZombieToken token) { + super(token); + } + + public CorpseweftZombieToken copy() { + return new CorpseweftZombieToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/CorruptedZendikonOozeToken.java b/Mage/src/main/java/mage/game/permanent/token/CorruptedZendikonOozeToken.java index 6df769b69d..f81e0c3bfc 100644 --- a/Mage/src/main/java/mage/game/permanent/token/CorruptedZendikonOozeToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/CorruptedZendikonOozeToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class CorruptedZendikonOozeToken extends Token { +public class CorruptedZendikonOozeToken extends TokenImpl { public CorruptedZendikonOozeToken() { super("Ooze", "3/3 black Ooze creature"); @@ -45,5 +45,11 @@ public class CorruptedZendikonOozeToken extends Token { this.power = new MageInt(3); this.toughness = new MageInt(3); } + public CorruptedZendikonOozeToken(final CorruptedZendikonOozeToken token) { + super(token); + } + public CorruptedZendikonOozeToken copy() { + return new CorruptedZendikonOozeToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/CreakwoodLiegeToken.java b/Mage/src/main/java/mage/game/permanent/token/CreakwoodLiegeToken.java index 11699a7019..3f0c89d42d 100644 --- a/Mage/src/main/java/mage/game/permanent/token/CreakwoodLiegeToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/CreakwoodLiegeToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class CreakwoodLiegeToken extends Token { +public class CreakwoodLiegeToken extends TokenImpl { public CreakwoodLiegeToken() { super("Worm", "1/1 black and green Worm creature token"); @@ -46,4 +46,12 @@ public class CreakwoodLiegeToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public CreakwoodLiegeToken(final CreakwoodLiegeToken token) { + super(token); + } + + public CreakwoodLiegeToken copy() { + return new CreakwoodLiegeToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/CrestedSunmareToken.java b/Mage/src/main/java/mage/game/permanent/token/CrestedSunmareToken.java index 4bcb277751..884cb97ad4 100644 --- a/Mage/src/main/java/mage/game/permanent/token/CrestedSunmareToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/CrestedSunmareToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class CrestedSunmareToken extends Token { +public class CrestedSunmareToken extends TokenImpl { public CrestedSunmareToken() { super("Horse", "5/5 white Horse creature token"); @@ -45,4 +45,12 @@ public class CrestedSunmareToken extends Token { subtype.add(SubType.HORSE); cardType.add(CardType.CREATURE); } + + public CrestedSunmareToken(final CrestedSunmareToken token) { + super(token); + } + + public CrestedSunmareToken copy() { + return new CrestedSunmareToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/CribSwapShapeshifterWhiteToken.java b/Mage/src/main/java/mage/game/permanent/token/CribSwapShapeshifterWhiteToken.java index 9058f6c631..6b10184069 100644 --- a/Mage/src/main/java/mage/game/permanent/token/CribSwapShapeshifterWhiteToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/CribSwapShapeshifterWhiteToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.ChangelingAbility; * * @author spjspj */ -public class CribSwapShapeshifterWhiteToken extends Token { +public class CribSwapShapeshifterWhiteToken extends TokenImpl { public CribSwapShapeshifterWhiteToken() { super("Shapeshifter", "1/1 colorless Shapeshifter creature token with changeling"); @@ -47,4 +47,12 @@ public class CribSwapShapeshifterWhiteToken extends Token { toughness = new MageInt(1); addAbility(ChangelingAbility.getInstance()); } + + public CribSwapShapeshifterWhiteToken(final CribSwapShapeshifterWhiteToken token) { + super(token); + } + + public CribSwapShapeshifterWhiteToken copy() { + return new CribSwapShapeshifterWhiteToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/CrushOfTentaclesToken.java b/Mage/src/main/java/mage/game/permanent/token/CrushOfTentaclesToken.java index 68b84ac610..c403041c1b 100644 --- a/Mage/src/main/java/mage/game/permanent/token/CrushOfTentaclesToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/CrushOfTentaclesToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class CrushOfTentaclesToken extends Token { +public class CrushOfTentaclesToken extends TokenImpl { public CrushOfTentaclesToken() { super("Octopus", "8/8 blue Octopus creature"); @@ -46,4 +46,12 @@ public class CrushOfTentaclesToken extends Token { this.power = new MageInt(8); this.toughness = new MageInt(8); } + public CrushOfTentaclesToken(final CrushOfTentaclesToken token) { + super(token); + } + + public CrushOfTentaclesToken copy() { + return new CrushOfTentaclesToken(this); + } + } diff --git a/Mage/src/main/java/mage/game/permanent/token/CurseOfTheSwineBoarToken.java b/Mage/src/main/java/mage/game/permanent/token/CurseOfTheSwineBoarToken.java index 1f9e692913..59e3596d7e 100644 --- a/Mage/src/main/java/mage/game/permanent/token/CurseOfTheSwineBoarToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/CurseOfTheSwineBoarToken.java @@ -36,7 +36,7 @@ import mage.MageInt; * * @author spjspj */ -public class CurseOfTheSwineBoarToken extends Token { +public class CurseOfTheSwineBoarToken extends TokenImpl { public CurseOfTheSwineBoarToken() { super("Boar", "2/2 green Boar creature token"); @@ -46,5 +46,13 @@ public class CurseOfTheSwineBoarToken extends Token { power = new MageInt(2); toughness = new MageInt(2); } + + public CurseOfTheSwineBoarToken(final CurseOfTheSwineBoarToken token) { + super(token); + } + + public CurseOfTheSwineBoarToken copy() { + return new CurseOfTheSwineBoarToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/DarettiConstructToken.java b/Mage/src/main/java/mage/game/permanent/token/DarettiConstructToken.java index 5cda40be04..3b3d3a2032 100644 --- a/Mage/src/main/java/mage/game/permanent/token/DarettiConstructToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/DarettiConstructToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.DefenderAbility; * * @author spjspj */ -public class DarettiConstructToken extends Token { +public class DarettiConstructToken extends TokenImpl { public DarettiConstructToken() { this("CNS"); @@ -53,4 +53,12 @@ public class DarettiConstructToken extends Token { addAbility(DefenderAbility.getInstance()); } + + public DarettiConstructToken(final DarettiConstructToken token) { + super(token); + } + + public DarettiConstructToken copy() { + return new DarettiConstructToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/DaxosSpiritToken.java b/Mage/src/main/java/mage/game/permanent/token/DaxosSpiritToken.java index 51192985f8..f06833b713 100644 --- a/Mage/src/main/java/mage/game/permanent/token/DaxosSpiritToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/DaxosSpiritToken.java @@ -48,7 +48,7 @@ import mage.players.Player; * * @author spjspj */ -public class DaxosSpiritToken extends Token { +public class DaxosSpiritToken extends TokenImpl { public DaxosSpiritToken() { super("Spirit", "white and black Spirit enchantment creature token with \"This creature's power and toughness are each equal to the number of experience counters you have.\""); @@ -63,6 +63,14 @@ public class DaxosSpiritToken extends Token { toughness = new MageInt(0); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DaxosSpiritSetPTEffect())); } + + public DaxosSpiritToken(final DaxosSpiritToken token) { + super(token); + } + + public DaxosSpiritToken copy() { + return new DaxosSpiritToken(this); + } } class DaxosSpiritSetPTEffect extends ContinuousEffectImpl { diff --git a/Mage/src/main/java/mage/game/permanent/token/DeadlyGrubToken.java b/Mage/src/main/java/mage/game/permanent/token/DeadlyGrubToken.java index 979359d9b3..10824529a0 100644 --- a/Mage/src/main/java/mage/game/permanent/token/DeadlyGrubToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/DeadlyGrubToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.ShroudAbility; * * @author spjspj */ -public class DeadlyGrubToken extends Token { +public class DeadlyGrubToken extends TokenImpl { public DeadlyGrubToken() { super("Insect", "6/1 green Insect creature token with shroud"); @@ -47,4 +47,12 @@ public class DeadlyGrubToken extends Token { toughness = new MageInt(1); this.addAbility(ShroudAbility.getInstance()); } + + public DeadlyGrubToken(final DeadlyGrubToken token) { + super(token); + } + + public DeadlyGrubToken copy() { + return new DeadlyGrubToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/DeathpactAngelToken.java b/Mage/src/main/java/mage/game/permanent/token/DeathpactAngelToken.java index afec4f66e4..cdf002a95e 100644 --- a/Mage/src/main/java/mage/game/permanent/token/DeathpactAngelToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/DeathpactAngelToken.java @@ -45,7 +45,7 @@ import mage.target.common.TargetCardInYourGraveyard; * * @author spjspj */ -public class DeathpactAngelToken extends Token { +public class DeathpactAngelToken extends TokenImpl { private static final FilterCreatureCard filter = new FilterCreatureCard("card named Deathpact Angel from your graveyard"); @@ -72,4 +72,11 @@ public class DeathpactAngelToken extends Token { this.addAbility(ability); } + public DeathpactAngelToken(final DeathpactAngelToken token) { + super(token); + } + + public DeathpactAngelToken copy() { + return new DeathpactAngelToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/DeathtouchRatToken.java b/Mage/src/main/java/mage/game/permanent/token/DeathtouchRatToken.java index 7f52a9aaaa..91cf8cf3d7 100644 --- a/Mage/src/main/java/mage/game/permanent/token/DeathtouchRatToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/DeathtouchRatToken.java @@ -36,7 +36,7 @@ import mage.constants.SubType; * * @author Saga */ -public class DeathtouchRatToken extends Token { +public class DeathtouchRatToken extends TokenImpl { public DeathtouchRatToken() { super("Rat", "1/1 black Rat creature token with deathtouch"); @@ -48,4 +48,12 @@ public class DeathtouchRatToken extends Token { this.toughness = new MageInt(1); this.addAbility(DeathtouchAbility.getInstance()); } + + public DeathtouchRatToken(final DeathtouchRatToken token) { + super(token); + } + + public DeathtouchRatToken copy() { + return new DeathtouchRatToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/DeathtouchSnakeToken.java b/Mage/src/main/java/mage/game/permanent/token/DeathtouchSnakeToken.java index a9c5e45255..a11d1fee31 100644 --- a/Mage/src/main/java/mage/game/permanent/token/DeathtouchSnakeToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/DeathtouchSnakeToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.DeathtouchAbility; * * @author spjspj */ -public class DeathtouchSnakeToken extends Token { +public class DeathtouchSnakeToken extends TokenImpl { public DeathtouchSnakeToken() { super("Snake", "1/1 green Snake creature token with deathtouch"); @@ -47,4 +47,12 @@ public class DeathtouchSnakeToken extends Token { toughness = new MageInt(1); addAbility(DeathtouchAbility.getInstance()); } + + public DeathtouchSnakeToken(final DeathtouchSnakeToken token) { + super(token); + } + + public DeathtouchSnakeToken copy() { + return new DeathtouchSnakeToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/DefenderPlantToken.java b/Mage/src/main/java/mage/game/permanent/token/DefenderPlantToken.java index b1915879c1..2cb66b2248 100644 --- a/Mage/src/main/java/mage/game/permanent/token/DefenderPlantToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/DefenderPlantToken.java @@ -36,7 +36,7 @@ import mage.constants.SubType; * * @author TheElk801 */ -public class DefenderPlantToken extends Token { +public class DefenderPlantToken extends TokenImpl { public DefenderPlantToken() { this(null, 0); @@ -56,4 +56,12 @@ public class DefenderPlantToken extends Token { this.addAbility(DefenderAbility.getInstance()); } + + public DefenderPlantToken(final DefenderPlantToken token) { + super(token); + } + + public DefenderPlantToken copy() { + return new DefenderPlantToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/DemonToken.java b/Mage/src/main/java/mage/game/permanent/token/DemonToken.java index ea7fc60f5b..6889c0290f 100644 --- a/Mage/src/main/java/mage/game/permanent/token/DemonToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/DemonToken.java @@ -38,7 +38,7 @@ import mage.constants.SubType; * * @author LoneFox */ -public class DemonToken extends Token { +public class DemonToken extends TokenImpl { public DemonToken() { super("Demon", "5/5 black Demon creature token with flying"); diff --git a/Mage/src/main/java/mage/game/permanent/token/DeserterToken.java b/Mage/src/main/java/mage/game/permanent/token/DeserterToken.java index ec4daf2b44..33ae2e16bd 100644 --- a/Mage/src/main/java/mage/game/permanent/token/DeserterToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/DeserterToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class DeserterToken extends Token { +public class DeserterToken extends TokenImpl { public DeserterToken() { super("Deserter", "0/1 white Deserter creature token"); @@ -45,4 +45,12 @@ public class DeserterToken extends Token { power = new MageInt(0); toughness = new MageInt(1); } + + public DeserterToken(final DeserterToken token) { + super(token); + } + + public DeserterToken copy() { + return new DeserterToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/DevastatingSummonsElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/DevastatingSummonsElementalToken.java index 8529088e4e..055477d308 100644 --- a/Mage/src/main/java/mage/game/permanent/token/DevastatingSummonsElementalToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/DevastatingSummonsElementalToken.java @@ -34,7 +34,7 @@ import mage.constants.SubType; * * @author spjspj */ -public class DevastatingSummonsElementalToken extends Token { +public class DevastatingSummonsElementalToken extends TokenImpl { public DevastatingSummonsElementalToken() { super("Elemental", "X/X red Elemental creature"); @@ -42,4 +42,12 @@ public class DevastatingSummonsElementalToken extends Token { color.setRed(true); subtype.add(SubType.ELEMENTAL); } + + public DevastatingSummonsElementalToken(final DevastatingSummonsElementalToken token) { + super(token); + } + + public DevastatingSummonsElementalToken copy() { + return new DevastatingSummonsElementalToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/DevilToken.java b/Mage/src/main/java/mage/game/permanent/token/DevilToken.java index 47dcf6d93f..7c6dd1a53e 100644 --- a/Mage/src/main/java/mage/game/permanent/token/DevilToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/DevilToken.java @@ -42,7 +42,7 @@ import mage.target.common.TargetCreatureOrPlayer; * * @author fireshoes */ -public class DevilToken extends Token { +public class DevilToken extends TokenImpl { public DevilToken() { super("Devil", "1/1 red Devil creature with \"When this creature dies, it deals 1 damage to target creature or player.\""); @@ -58,4 +58,12 @@ public class DevilToken extends Token { ability.addTarget(new TargetCreatureOrPlayer()); this.addAbility(ability); } + + public DevilToken(final DevilToken token) { + super(token); + } + + public DevilToken copy() { + return new DevilToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/DinOfTheFireherdToken.java b/Mage/src/main/java/mage/game/permanent/token/DinOfTheFireherdToken.java index 1e38c8c1bb..68b11b58c1 100644 --- a/Mage/src/main/java/mage/game/permanent/token/DinOfTheFireherdToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/DinOfTheFireherdToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class DinOfTheFireherdToken extends Token { +public class DinOfTheFireherdToken extends TokenImpl { public DinOfTheFireherdToken() { super("Elemental", "5/5 black and red Elemental creature"); @@ -46,4 +46,12 @@ public class DinOfTheFireherdToken extends Token { power = new MageInt(5); toughness = new MageInt(5); } + + public DinOfTheFireherdToken(final DinOfTheFireherdToken token) { + super(token); + } + + public DinOfTheFireherdToken copy() { + return new DinOfTheFireherdToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/DinosaurToken.java b/Mage/src/main/java/mage/game/permanent/token/DinosaurToken.java index 8ba4b59073..782e56af56 100644 --- a/Mage/src/main/java/mage/game/permanent/token/DinosaurToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/DinosaurToken.java @@ -36,7 +36,7 @@ import mage.constants.SubType; * * @author TheElk801 */ -public class DinosaurToken extends Token { +public class DinosaurToken extends TokenImpl { public DinosaurToken() { super("Dinosaur", "3/3 green Dinosaur creature token with trample"); @@ -47,4 +47,12 @@ public class DinosaurToken extends Token { toughness = new MageInt(3); addAbility(TrampleAbility.getInstance()); } + + public DinosaurToken(final DinosaurToken token) { + super(token); + } + + public DinosaurToken copy() { + return new DinosaurToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/DjinnMonkToken.java b/Mage/src/main/java/mage/game/permanent/token/DjinnMonkToken.java index 3cb23cc235..8b648aa9cd 100644 --- a/Mage/src/main/java/mage/game/permanent/token/DjinnMonkToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/DjinnMonkToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class DjinnMonkToken extends Token { +public class DjinnMonkToken extends TokenImpl { public DjinnMonkToken() { super("Djinn Monk", "2/2 blue Djinn Monk creature token with flying"); @@ -48,4 +48,12 @@ public class DjinnMonkToken extends Token { toughness = new MageInt(2); addAbility(FlyingAbility.getInstance()); } + + public DjinnMonkToken(final DjinnMonkToken token) { + super(token); + } + + public DjinnMonkToken copy() { + return new DjinnMonkToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/DjinnToken.java b/Mage/src/main/java/mage/game/permanent/token/DjinnToken.java index dcfa3bda34..79fbb204be 100644 --- a/Mage/src/main/java/mage/game/permanent/token/DjinnToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/DjinnToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class DjinnToken extends Token { +public class DjinnToken extends TokenImpl { public DjinnToken() { super("Djinn", "5/5 colorless Djinn artifact creature token with flying"); @@ -47,4 +47,12 @@ public class DjinnToken extends Token { toughness = new MageInt(5); addAbility(FlyingAbility.getInstance()); } + + public DjinnToken(final DjinnToken token) { + super(token); + } + + public DjinnToken copy() { + return new DjinnToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/DokaiWeaverofLifeToken.java b/Mage/src/main/java/mage/game/permanent/token/DokaiWeaverofLifeToken.java index 5d74281ff3..32c95253a2 100644 --- a/Mage/src/main/java/mage/game/permanent/token/DokaiWeaverofLifeToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/DokaiWeaverofLifeToken.java @@ -43,7 +43,7 @@ import mage.filter.common.FilterControlledPermanent; * * @author spjspj */ -public class DokaiWeaverofLifeToken extends Token { +public class DokaiWeaverofLifeToken extends TokenImpl { final static FilterControlledPermanent filterLands = new FilterControlledLandPermanent("lands you control"); @@ -57,4 +57,12 @@ public class DokaiWeaverofLifeToken extends Token { DynamicValue controlledLands = new PermanentsOnBattlefieldCount(filterLands); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostSourceEffect(controlledLands, controlledLands, Duration.WhileOnBattlefield))); } + + public DokaiWeaverofLifeToken(final DokaiWeaverofLifeToken token) { + super(token); + } + + public DokaiWeaverofLifeToken copy() { + return new DokaiWeaverofLifeToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/DovescapeToken.java b/Mage/src/main/java/mage/game/permanent/token/DovescapeToken.java index 3cd64164d6..ce278daa26 100644 --- a/Mage/src/main/java/mage/game/permanent/token/DovescapeToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/DovescapeToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class DovescapeToken extends Token { +public class DovescapeToken extends TokenImpl { public DovescapeToken() { super("Bird", "1/1 white and blue Bird creature token with flying"); @@ -48,4 +48,11 @@ public class DovescapeToken extends Token { toughness = new MageInt(1); this.addAbility(FlyingAbility.getInstance()); } + public DovescapeToken(final DovescapeToken token) { + super(token); + } + + public DovescapeToken copy() { + return new DovescapeToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/DragonBroodmotherDragonToken.java b/Mage/src/main/java/mage/game/permanent/token/DragonBroodmotherDragonToken.java index dbd0e12b1c..ab75430696 100644 --- a/Mage/src/main/java/mage/game/permanent/token/DragonBroodmotherDragonToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/DragonBroodmotherDragonToken.java @@ -38,7 +38,7 @@ import mage.constants.SubType; * * @author spjspj */ -public class DragonBroodmotherDragonToken extends Token { +public class DragonBroodmotherDragonToken extends TokenImpl { public DragonBroodmotherDragonToken() { super("Dragon", "1/1 red and green Dragon creature token with flying and devour 2"); @@ -51,4 +51,12 @@ public class DragonBroodmotherDragonToken extends Token { addAbility(FlyingAbility.getInstance()); addAbility(new DevourAbility(DevourEffect.DevourFactor.Devour2)); } + + public DragonBroodmotherDragonToken(final DragonBroodmotherDragonToken token) { + super(token); + } + + public DragonBroodmotherDragonToken copy() { + return new DragonBroodmotherDragonToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/DragonEggDragonToken.java b/Mage/src/main/java/mage/game/permanent/token/DragonEggDragonToken.java index fd9ceca27c..11e36d2b12 100644 --- a/Mage/src/main/java/mage/game/permanent/token/DragonEggDragonToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/DragonEggDragonToken.java @@ -41,7 +41,7 @@ import mage.constants.Zone; * * @author spjspj */ -public class DragonEggDragonToken extends Token { +public class DragonEggDragonToken extends TokenImpl { public DragonEggDragonToken() { super("Dragon", "2/2 red Dragon creature token with flying that has \"{R}: This creature gets +1/+0 until end of turn"); @@ -55,4 +55,12 @@ public class DragonEggDragonToken extends Token { addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl("{R}"))); } + + public DragonEggDragonToken(final DragonEggDragonToken token) { + super(token); + } + + public DragonEggDragonToken copy() { + return new DragonEggDragonToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/DragonToken.java b/Mage/src/main/java/mage/game/permanent/token/DragonToken.java index 8ac9bd92e9..125243d346 100644 --- a/Mage/src/main/java/mage/game/permanent/token/DragonToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/DragonToken.java @@ -40,7 +40,7 @@ import mage.constants.SubType; * * @author BetaSteward_at_googlemail.com */ -public class DragonToken extends Token { +public class DragonToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -67,4 +67,12 @@ public class DragonToken extends Token { toughness = new MageInt(4); addAbility(FlyingAbility.getInstance()); } + + public DragonToken(final DragonToken token) { + super(token); + } + + public DragonToken copy() { + return new DragonToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/DragonToken2.java b/Mage/src/main/java/mage/game/permanent/token/DragonToken2.java index ca5a62ed0e..797c1127f7 100644 --- a/Mage/src/main/java/mage/game/permanent/token/DragonToken2.java +++ b/Mage/src/main/java/mage/game/permanent/token/DragonToken2.java @@ -39,7 +39,7 @@ import mage.constants.SubType; * * @author LoneFox */ -public class DragonToken2 extends Token { +public class DragonToken2 extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -48,14 +48,10 @@ public class DragonToken2 extends Token { } public DragonToken2() { - this(null, 0); + this((String)null); } public DragonToken2(String setCode) { - this(setCode, 0); - } - - public DragonToken2(String setCode, int tokenType) { super("Dragon", "5/5 red Dragon creature token with flying"); availableImageSetCodes = tokenImageSets; setOriginalExpansionSetCode(setCode); @@ -66,4 +62,12 @@ public class DragonToken2 extends Token { toughness = new MageInt(5); addAbility(FlyingAbility.getInstance()); } + + public DragonToken2(final DragonToken2 token) { + super(token); + } + + public DragonToken2 copy() { + return new DragonToken2(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/DragonTokenGold.java b/Mage/src/main/java/mage/game/permanent/token/DragonTokenGold.java index b2e3f69fd3..bdefe85c85 100644 --- a/Mage/src/main/java/mage/game/permanent/token/DragonTokenGold.java +++ b/Mage/src/main/java/mage/game/permanent/token/DragonTokenGold.java @@ -40,7 +40,7 @@ import mage.constants.SubType; * * @author Saga */ -public class DragonTokenGold extends Token { +public class DragonTokenGold extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -67,4 +67,12 @@ public class DragonTokenGold extends Token { toughness = new MageInt(4); addAbility(FlyingAbility.getInstance()); } + + public DragonTokenGold(final DragonTokenGold token) { + super(token); + } + + public DragonTokenGold copy() { + return new DragonTokenGold(this); + } } \ No newline at end of file diff --git a/Mage/src/main/java/mage/game/permanent/token/DrakeToken.java b/Mage/src/main/java/mage/game/permanent/token/DrakeToken.java index 7791224ffa..fca92799fb 100644 --- a/Mage/src/main/java/mage/game/permanent/token/DrakeToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/DrakeToken.java @@ -37,7 +37,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author North */ -public class DrakeToken extends Token { +public class DrakeToken extends TokenImpl { public DrakeToken() { super("Drake", "2/2 blue Drake creature token with flying"); @@ -50,4 +50,12 @@ public class DrakeToken extends Token { this.addAbility(FlyingAbility.getInstance()); } + + public DrakeToken(final DrakeToken token) { + super(token); + } + + public DrakeToken copy() { + return new DrakeToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/DroidToken.java b/Mage/src/main/java/mage/game/permanent/token/DroidToken.java index 3d641d44ff..62d0f38774 100644 --- a/Mage/src/main/java/mage/game/permanent/token/DroidToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/DroidToken.java @@ -37,7 +37,7 @@ import mage.constants.SubType; * * @author Styxo */ -public class DroidToken extends Token { +public class DroidToken extends TokenImpl { public DroidToken() { super("Droid", "1/1 colorless Droid creature token"); @@ -50,4 +50,12 @@ public class DroidToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public DroidToken(final DroidToken token) { + super(token); + } + + public DroidToken copy() { + return new DroidToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/DuneBroodNephilimToken.java b/Mage/src/main/java/mage/game/permanent/token/DuneBroodNephilimToken.java index 042bb3076c..419fe94335 100644 --- a/Mage/src/main/java/mage/game/permanent/token/DuneBroodNephilimToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/DuneBroodNephilimToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class DuneBroodNephilimToken extends Token { +public class DuneBroodNephilimToken extends TokenImpl { public DuneBroodNephilimToken() { super("Sand", "1/1 colorless Sand creature token"); @@ -44,4 +44,11 @@ public class DuneBroodNephilimToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + public DuneBroodNephilimToken(final DuneBroodNephilimToken token) { + super(token); + } + + public DuneBroodNephilimToken copy() { + return new DuneBroodNephilimToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/EdgarMarkovToken.java b/Mage/src/main/java/mage/game/permanent/token/EdgarMarkovToken.java index 363237897a..fb84b3ddac 100644 --- a/Mage/src/main/java/mage/game/permanent/token/EdgarMarkovToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/EdgarMarkovToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class EdgarMarkovToken extends Token { +public class EdgarMarkovToken extends TokenImpl { public EdgarMarkovToken() { super("Vampire", "1/1 black Vampire creature token"); @@ -45,4 +45,12 @@ public class EdgarMarkovToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public EdgarMarkovToken(final EdgarMarkovToken token) { + super(token); + } + + public EdgarMarkovToken copy() { + return new EdgarMarkovToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/EldraziHorrorToken.java b/Mage/src/main/java/mage/game/permanent/token/EldraziHorrorToken.java index c0b47cb077..6bb54e8671 100644 --- a/Mage/src/main/java/mage/game/permanent/token/EldraziHorrorToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/EldraziHorrorToken.java @@ -38,7 +38,7 @@ import mage.constants.SubType; * * @author escplan9 (Derek Monturo - dmontur1 at gmail dot com) */ -public class EldraziHorrorToken extends Token { +public class EldraziHorrorToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -55,4 +55,12 @@ public class EldraziHorrorToken extends Token { toughness = new MageInt(2); availableImageSetCodes = tokenImageSets; } + + public EldraziHorrorToken(final EldraziHorrorToken token) { + super(token); + } + + public EldraziHorrorToken copy() { + return new EldraziHorrorToken(this); + } } \ No newline at end of file diff --git a/Mage/src/main/java/mage/game/permanent/token/EldraziScionToken.java b/Mage/src/main/java/mage/game/permanent/token/EldraziScionToken.java index 4b9f85e8b6..444f39fbdc 100644 --- a/Mage/src/main/java/mage/game/permanent/token/EldraziScionToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/EldraziScionToken.java @@ -44,7 +44,7 @@ import mage.util.RandomUtil; * * @author fireshoes */ -public class EldraziScionToken extends Token { +public class EldraziScionToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); diff --git a/Mage/src/main/java/mage/game/permanent/token/EldraziSpawnToken.java b/Mage/src/main/java/mage/game/permanent/token/EldraziSpawnToken.java index 25bdb78ae3..59d0162ef2 100644 --- a/Mage/src/main/java/mage/game/permanent/token/EldraziSpawnToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/EldraziSpawnToken.java @@ -44,7 +44,7 @@ import mage.util.RandomUtil; * * @author BetaSteward_at_googlemail.com */ -public class EldraziSpawnToken extends Token { +public class EldraziSpawnToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -65,4 +65,12 @@ public class EldraziSpawnToken extends Token { // Get one of the three possible token images this.setTokenType(RandomUtil.nextInt(3) + 1); } + + public EldraziSpawnToken(final EldraziSpawnToken token) { + super(token); + } + + public EldraziSpawnToken copy() { + return new EldraziSpawnToken(this); + } } \ No newline at end of file diff --git a/Mage/src/main/java/mage/game/permanent/token/EldraziToken.java b/Mage/src/main/java/mage/game/permanent/token/EldraziToken.java index 9207580b52..29b2d1e440 100644 --- a/Mage/src/main/java/mage/game/permanent/token/EldraziToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/EldraziToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class EldraziToken extends Token { +public class EldraziToken extends TokenImpl { public EldraziToken() { super("Eldrazi", "10/10 colorless Eldrazi creature token"); @@ -44,4 +44,12 @@ public class EldraziToken extends Token { power = new MageInt(10); toughness = new MageInt(10); } + + public EldraziToken(final EldraziToken token) { + super(token); + } + + public EldraziToken copy() { + return new EldraziToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/ElementalAppealElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/ElementalAppealElementalToken.java index 16bc84a54b..f823da7dbe 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ElementalAppealElementalToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ElementalAppealElementalToken.java @@ -37,7 +37,7 @@ import mage.constants.SubType; * * @author spjspj */ -public class ElementalAppealElementalToken extends Token { +public class ElementalAppealElementalToken extends TokenImpl { public ElementalAppealElementalToken() { super("Elemental", "7/1 red Elemental creature token with trample and haste"); @@ -49,4 +49,12 @@ public class ElementalAppealElementalToken extends Token { addAbility(TrampleAbility.getInstance()); addAbility(HasteAbility.getInstance()); } + + public ElementalAppealElementalToken(final ElementalAppealElementalToken token) { + super(token); + } + + public ElementalAppealElementalToken copy() { + return new ElementalAppealElementalToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/ElementalCatToken.java b/Mage/src/main/java/mage/game/permanent/token/ElementalCatToken.java index 7b4e39878a..eb16cb9666 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ElementalCatToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ElementalCatToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.HasteAbility; * * @author spjspj */ -public class ElementalCatToken extends Token { +public class ElementalCatToken extends TokenImpl { public ElementalCatToken() { super("Elemental Cat", "1/1 red Elemental Cat creature token"); @@ -48,4 +48,12 @@ public class ElementalCatToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public ElementalCatToken(final ElementalCatToken token) { + super(token); + } + + public ElementalCatToken copy() { + return new ElementalCatToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/ElementalMasteryElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/ElementalMasteryElementalToken.java index 2e667b58d8..50ce0ee2d8 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ElementalMasteryElementalToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ElementalMasteryElementalToken.java @@ -36,7 +36,7 @@ import mage.constants.SubType; * * @author spjspj */ -public class ElementalMasteryElementalToken extends Token { +public class ElementalMasteryElementalToken extends TokenImpl { public ElementalMasteryElementalToken() { super("Elemental", "1/1 red Elemental creature token with haste"); @@ -47,4 +47,11 @@ public class ElementalMasteryElementalToken extends Token { toughness = new MageInt(1); addAbility(HasteAbility.getInstance()); } + public ElementalMasteryElementalToken(final ElementalMasteryElementalToken token) { + super(token); + } + + public ElementalMasteryElementalToken copy() { + return new ElementalMasteryElementalToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/ElementalShamanToken.java b/Mage/src/main/java/mage/game/permanent/token/ElementalShamanToken.java index 81543e2e12..4ba4d2803f 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ElementalShamanToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ElementalShamanToken.java @@ -38,7 +38,7 @@ import mage.constants.SubType; * * @author Styxo */ -public class ElementalShamanToken extends Token { +public class ElementalShamanToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -62,4 +62,11 @@ public class ElementalShamanToken extends Token { toughness = new MageInt(1); } + public ElementalShamanToken(final ElementalShamanToken token) { + super(token); + } + + public ElementalShamanToken copy() { + return new ElementalShamanToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/ElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/ElementalToken.java index 05b7cbbb02..7e9089baf0 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ElementalToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ElementalToken.java @@ -40,7 +40,7 @@ import mage.constants.SubType; * * @author magenoxx */ -public class ElementalToken extends Token { +public class ElementalToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -78,4 +78,12 @@ public class ElementalToken extends Token { if (hasHaste) this.addAbility(HasteAbility.getInstance()); } + + public ElementalToken(final ElementalToken token) { + super(token); + } + + public ElementalToken copy() { + return new ElementalToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/ElephantResurgenceToken.java b/Mage/src/main/java/mage/game/permanent/token/ElephantResurgenceToken.java index 06f4a20770..2d8ff61a2d 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ElephantResurgenceToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ElephantResurgenceToken.java @@ -41,7 +41,7 @@ import mage.filter.common.FilterCreatureCard; * * @author TheElk801 */ -public class ElephantResurgenceToken extends Token { +public class ElephantResurgenceToken extends TokenImpl { public ElephantResurgenceToken() { super("Elephant", "green Elephant creature token. Those creatures have \"This creature's power and toughness are each equal to the number of creature cards in its controller's graveyard.\""); @@ -58,4 +58,12 @@ public class ElephantResurgenceToken extends Token { .setText("This creature's power and toughness are each equal to the number of creature cards in its controller's graveyard.") )); } + + public ElephantResurgenceToken(final ElephantResurgenceToken token) { + super(token); + } + + public ElephantResurgenceToken copy() { + return new ElephantResurgenceToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/ElephantToken.java b/Mage/src/main/java/mage/game/permanent/token/ElephantToken.java index 853d3e9b55..9fa0e9f002 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ElephantToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ElephantToken.java @@ -39,7 +39,7 @@ import mage.constants.SubType; * * @author BetaSteward_at_googlemail.com */ -public class ElephantToken extends Token { +public class ElephantToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -48,14 +48,10 @@ public class ElephantToken extends Token { } public ElephantToken() { - this(null, 0); + this((String)null); } public ElephantToken(String setCode) { - this(setCode, 0); - } - - public ElephantToken(String setCode, int tokenType) { super("Elephant", "3/3 green Elephant creature token"); availableImageSetCodes = tokenImageSets; setOriginalExpansionSetCode(setCode); @@ -66,4 +62,12 @@ public class ElephantToken extends Token { toughness = new MageInt(3); } + public ElephantToken(final ElephantToken token) { + super(token); + } + + public ElephantToken copy() { + return new ElephantToken(this); + } + } \ No newline at end of file diff --git a/Mage/src/main/java/mage/game/permanent/token/ElfToken.java b/Mage/src/main/java/mage/game/permanent/token/ElfToken.java index 2df9697392..02a91edaf3 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ElfToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ElfToken.java @@ -38,7 +38,7 @@ import mage.constants.SubType; * * @author Loki */ -public class ElfToken extends Token { +public class ElfToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); diff --git a/Mage/src/main/java/mage/game/permanent/token/EmptyToken.java b/Mage/src/main/java/mage/game/permanent/token/EmptyToken.java index 058290e6f4..13637bff30 100644 --- a/Mage/src/main/java/mage/game/permanent/token/EmptyToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/EmptyToken.java @@ -30,9 +30,17 @@ package mage.game.permanent.token; /** * @author nantuko */ -public class EmptyToken extends Token { +public class EmptyToken extends TokenImpl { public EmptyToken() { super("", ""); } + + public EmptyToken(final EmptyToken token) { + super(token); + } + + public EmptyToken copy() { + return new EmptyToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/ErrandOfDutyKnightToken.java b/Mage/src/main/java/mage/game/permanent/token/ErrandOfDutyKnightToken.java index acd818a06e..1405cc051e 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ErrandOfDutyKnightToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ErrandOfDutyKnightToken.java @@ -36,7 +36,7 @@ import mage.constants.SubType; * * @author L_J */ -public class ErrandOfDutyKnightToken extends Token { +public class ErrandOfDutyKnightToken extends TokenImpl { public ErrandOfDutyKnightToken() { super("Knight", "1/1 white Knight creature token with banding"); @@ -47,4 +47,12 @@ public class ErrandOfDutyKnightToken extends Token { toughness = new MageInt(1); this.addAbility(BandingAbility.getInstance()); } + + public ErrandOfDutyKnightToken(final ErrandOfDutyKnightToken token) { + super(token); + } + + public ErrandOfDutyKnightToken copy() { + return new ErrandOfDutyKnightToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/EtheriumCellToken.java b/Mage/src/main/java/mage/game/permanent/token/EtheriumCellToken.java index 98441f97f5..e99cf6c1db 100644 --- a/Mage/src/main/java/mage/game/permanent/token/EtheriumCellToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/EtheriumCellToken.java @@ -39,7 +39,7 @@ import mage.constants.Zone; * * @author spjspj */ -public class EtheriumCellToken extends Token { +public class EtheriumCellToken extends TokenImpl { public EtheriumCellToken() { super("Etherium Cell", "colorless artifact token named Etherium Cell which has \"{T}, Sacrifice this artifact: Add one mana of any color to your mana pool.\""); @@ -51,4 +51,12 @@ public class EtheriumCellToken extends Token { this.addAbility(ability); } + + public EtheriumCellToken(final EtheriumCellToken token) { + super(token); + } + + public EtheriumCellToken copy() { + return new EtheriumCellToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/EwokToken.java b/Mage/src/main/java/mage/game/permanent/token/EwokToken.java index 651f96d196..3b1bb6ade8 100644 --- a/Mage/src/main/java/mage/game/permanent/token/EwokToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/EwokToken.java @@ -36,7 +36,7 @@ import mage.constants.SubType; * * @author Styxo */ -public class EwokToken extends Token { +public class EwokToken extends TokenImpl { public EwokToken() { super("Ewok", "1/1 green Ewok creature tokens", 1, 1); @@ -46,4 +46,12 @@ public class EwokToken extends Token { subtype.add(SubType.EWOK); color.setGreen(true); } + + public EwokToken(final EwokToken token) { + super(token); + } + + public EwokToken copy() { + return new EwokToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/EyesOfTheWisentElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/EyesOfTheWisentElementalToken.java index e3816179f5..027fab5eb3 100644 --- a/Mage/src/main/java/mage/game/permanent/token/EyesOfTheWisentElementalToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/EyesOfTheWisentElementalToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class EyesOfTheWisentElementalToken extends Token { +public class EyesOfTheWisentElementalToken extends TokenImpl { public EyesOfTheWisentElementalToken() { super("Elemental", "4/4 green Elemental creature token"); @@ -48,4 +48,11 @@ public class EyesOfTheWisentElementalToken extends Token { setTokenType(1); } + public EyesOfTheWisentElementalToken(final EyesOfTheWisentElementalToken token) { + super(token); + } + + public EyesOfTheWisentElementalToken copy() { + return new EyesOfTheWisentElementalToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/FaerieRogueToken.java b/Mage/src/main/java/mage/game/permanent/token/FaerieRogueToken.java index b48d23fd00..e8cea5333f 100644 --- a/Mage/src/main/java/mage/game/permanent/token/FaerieRogueToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/FaerieRogueToken.java @@ -41,7 +41,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author LoneFox */ -public class FaerieRogueToken extends Token { +public class FaerieRogueToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -61,4 +61,12 @@ public class FaerieRogueToken extends Token { availableImageSetCodes = tokenImageSets; } + + public FaerieRogueToken(final FaerieRogueToken token) { + super(token); + } + + public FaerieRogueToken copy() { + return new FaerieRogueToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/FaerieToken.java b/Mage/src/main/java/mage/game/permanent/token/FaerieToken.java index 9f7a163329..d23705e974 100644 --- a/Mage/src/main/java/mage/game/permanent/token/FaerieToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/FaerieToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class FaerieToken extends Token { +public class FaerieToken extends TokenImpl { public FaerieToken() { super("Faerie", "1/1 blue Faerie creature tokens with flying"); @@ -47,4 +47,12 @@ public class FaerieToken extends Token { toughness = new MageInt(1); this.addAbility(FlyingAbility.getInstance()); } + + public FaerieToken(final FaerieToken token) { + super(token); + } + + public FaerieToken copy() { + return new FaerieToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/FesteringGoblinToken.java b/Mage/src/main/java/mage/game/permanent/token/FesteringGoblinToken.java index 24170449a1..5a190953dd 100644 --- a/Mage/src/main/java/mage/game/permanent/token/FesteringGoblinToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/FesteringGoblinToken.java @@ -40,7 +40,7 @@ import mage.target.common.TargetCreaturePermanent; * * @author spjspj */ -public class FesteringGoblinToken extends Token { +public 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.\""); @@ -56,4 +56,12 @@ public class FesteringGoblinToken extends Token { ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); } + + public FesteringGoblinToken(final FesteringGoblinToken token) { + super(token); + } + + public FesteringGoblinToken copy() { + return new FesteringGoblinToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/FleshCarverHorrorToken.java b/Mage/src/main/java/mage/game/permanent/token/FleshCarverHorrorToken.java index f67d197ce5..f8f2ff3c1f 100644 --- a/Mage/src/main/java/mage/game/permanent/token/FleshCarverHorrorToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/FleshCarverHorrorToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class FleshCarverHorrorToken extends Token { +public class FleshCarverHorrorToken extends TokenImpl { public FleshCarverHorrorToken() { this(1); @@ -49,6 +49,13 @@ public class FleshCarverHorrorToken extends Token { subtype.add(SubType.HORROR); power = new MageInt(xValue); toughness = new MageInt(xValue); + } + public FleshCarverHorrorToken(final FleshCarverHorrorToken token) { + super(token); + } + + public FleshCarverHorrorToken copy() { + return new FleshCarverHorrorToken(this); } } diff --git a/Mage/src/main/java/mage/game/permanent/token/FlurryOfHornsMinotaurToken.java b/Mage/src/main/java/mage/game/permanent/token/FlurryOfHornsMinotaurToken.java index 4369dfa8b4..4e9e18da4a 100644 --- a/Mage/src/main/java/mage/game/permanent/token/FlurryOfHornsMinotaurToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/FlurryOfHornsMinotaurToken.java @@ -37,7 +37,7 @@ import mage.abilities.keyword.HasteAbility; * * @author spjspj */ -public class FlurryOfHornsMinotaurToken extends Token { +public class FlurryOfHornsMinotaurToken extends TokenImpl { public FlurryOfHornsMinotaurToken() { super("Minotaur", "2/3 red Minotaur creature tokens with haste"); @@ -49,4 +49,12 @@ public class FlurryOfHornsMinotaurToken extends Token { toughness = new MageInt(3); addAbility(HasteAbility.getInstance()); } + + public FlurryOfHornsMinotaurToken(final FlurryOfHornsMinotaurToken token) { + super(token); + } + + public FlurryOfHornsMinotaurToken copy() { + return new FlurryOfHornsMinotaurToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/ForlornPseudammaZombieToken.java b/Mage/src/main/java/mage/game/permanent/token/ForlornPseudammaZombieToken.java index 5f8b0c09d6..e546d7738b 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ForlornPseudammaZombieToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ForlornPseudammaZombieToken.java @@ -36,7 +36,7 @@ import mage.MageInt; * * @author spjspj */ -public class ForlornPseudammaZombieToken extends Token { +public class ForlornPseudammaZombieToken extends TokenImpl { public ForlornPseudammaZombieToken() { super("Zombie", "2/2 black Zombie enchantment creature token"); @@ -48,5 +48,13 @@ public class ForlornPseudammaZombieToken extends Token { toughness = new MageInt(2); this.setOriginalExpansionSetCode("BNG"); } + + public ForlornPseudammaZombieToken(final ForlornPseudammaZombieToken token) { + super(token); + } + + public ForlornPseudammaZombieToken copy() { + return new ForlornPseudammaZombieToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/FreyaliseLlanowarsFuryToken.java b/Mage/src/main/java/mage/game/permanent/token/FreyaliseLlanowarsFuryToken.java index 61c18f4cf1..429a5d4376 100644 --- a/Mage/src/main/java/mage/game/permanent/token/FreyaliseLlanowarsFuryToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/FreyaliseLlanowarsFuryToken.java @@ -40,7 +40,7 @@ import mage.abilities.mana.GreenManaAbility; * * @author spjspj */ -public class FreyaliseLlanowarsFuryToken extends Token { +public class FreyaliseLlanowarsFuryToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -71,4 +71,12 @@ public class FreyaliseLlanowarsFuryToken extends Token { // {T}: Add {G} to your mana pool. this.addAbility(new GreenManaAbility()); } + + public FreyaliseLlanowarsFuryToken(final FreyaliseLlanowarsFuryToken token) { + super(token); + } + + public FreyaliseLlanowarsFuryToken copy() { + return new FreyaliseLlanowarsFuryToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/FrogToken.java b/Mage/src/main/java/mage/game/permanent/token/FrogToken.java index 1ce60811c5..c6f0cc5976 100644 --- a/Mage/src/main/java/mage/game/permanent/token/FrogToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/FrogToken.java @@ -36,7 +36,7 @@ import mage.MageInt; * * @author nantuko */ -public class FrogToken extends Token { +public class FrogToken extends TokenImpl { public FrogToken() { super("Frog", "1/1 blue Frog creature token"); @@ -46,5 +46,11 @@ public class FrogToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + public FrogToken(final FrogToken token) { + super(token); + } + public FrogToken copy() { + return new FrogToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/GargoyleToken.java b/Mage/src/main/java/mage/game/permanent/token/GargoyleToken.java index 8afaa674f1..baa9ce6948 100644 --- a/Mage/src/main/java/mage/game/permanent/token/GargoyleToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/GargoyleToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class GargoyleToken extends Token { +public class GargoyleToken extends TokenImpl { public GargoyleToken() { super("Gargoyle", "3/4 colorless Gargoyle artifact creature token with flying"); @@ -48,4 +48,11 @@ public class GargoyleToken extends Token { addAbility(FlyingAbility.getInstance()); } + public GargoyleToken(final GargoyleToken token) { + super(token); + } + + public GargoyleToken copy() { + return new GargoyleToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/GarrukApexPredatorBeastToken.java b/Mage/src/main/java/mage/game/permanent/token/GarrukApexPredatorBeastToken.java index 8dc0703d34..a2211ce07e 100644 --- a/Mage/src/main/java/mage/game/permanent/token/GarrukApexPredatorBeastToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/GarrukApexPredatorBeastToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.DeathtouchAbility; * * @author spjspj */ -public class GarrukApexPredatorBeastToken extends Token { +public class GarrukApexPredatorBeastToken extends TokenImpl { public GarrukApexPredatorBeastToken() { super("Beast", "3/3 black Beast creature token with deathtouch"); @@ -52,4 +52,11 @@ public class GarrukApexPredatorBeastToken extends Token { } + public GarrukApexPredatorBeastToken(final GarrukApexPredatorBeastToken token) { + super(token); + } + + public GarrukApexPredatorBeastToken copy() { + return new GarrukApexPredatorBeastToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/GeminiEngineTwinToken.java b/Mage/src/main/java/mage/game/permanent/token/GeminiEngineTwinToken.java index b7f169cde1..951b7f611f 100644 --- a/Mage/src/main/java/mage/game/permanent/token/GeminiEngineTwinToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/GeminiEngineTwinToken.java @@ -4,7 +4,7 @@ import mage.MageInt; import mage.constants.CardType; import mage.constants.SubType; -public class GeminiEngineTwinToken extends Token { +public class GeminiEngineTwinToken extends TokenImpl { public GeminiEngineTwinToken(int power, int toughness) { super("Twin", "colorless Construct artifact creature token named Twin that's attacking. Its power is equal to Gemini Engine's power and its toughness is equal to Gemini Engine's toughness."); @@ -14,4 +14,12 @@ public class GeminiEngineTwinToken extends Token { this.power = new MageInt(power); this.toughness = new MageInt(toughness); } + + public GeminiEngineTwinToken(final GeminiEngineTwinToken token) { + super(token); + } + + public GeminiEngineTwinToken copy() { + return new GeminiEngineTwinToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/GermToken.java b/Mage/src/main/java/mage/game/permanent/token/GermToken.java index a81b8d1a98..57b6bf4d24 100644 --- a/Mage/src/main/java/mage/game/permanent/token/GermToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/GermToken.java @@ -37,7 +37,7 @@ import mage.constants.SubType; /** * @author spjspj */ -public class GermToken extends Token { +public class GermToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); diff --git a/Mage/src/main/java/mage/game/permanent/token/GiantBaitingGiantWarriorToken.java b/Mage/src/main/java/mage/game/permanent/token/GiantBaitingGiantWarriorToken.java index ea1c123e94..7389d22db4 100644 --- a/Mage/src/main/java/mage/game/permanent/token/GiantBaitingGiantWarriorToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/GiantBaitingGiantWarriorToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.HasteAbility; * * @author spjspj */ -public class GiantBaitingGiantWarriorToken extends Token { +public class GiantBaitingGiantWarriorToken extends TokenImpl { public GiantBaitingGiantWarriorToken() { super("Giant Warrior", "4/4 red and green Giant Warrior creature token with haste"); @@ -49,4 +49,12 @@ public class GiantBaitingGiantWarriorToken extends Token { toughness = new MageInt(4); this.addAbility(HasteAbility.getInstance()); } + + public GiantBaitingGiantWarriorToken(final GiantBaitingGiantWarriorToken token) { + super(token); + } + + public GiantBaitingGiantWarriorToken copy() { + return new GiantBaitingGiantWarriorToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/GiantChickenToken.java b/Mage/src/main/java/mage/game/permanent/token/GiantChickenToken.java index 8b814efdc0..6610d6fe91 100644 --- a/Mage/src/main/java/mage/game/permanent/token/GiantChickenToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/GiantChickenToken.java @@ -36,7 +36,7 @@ import mage.constants.SubType; * @author ciaccona007 */ -public class GiantChickenToken extends Token { +public class GiantChickenToken extends TokenImpl { public GiantChickenToken() { super("Giant Chicken", "4/4 red Giant Chicken creature token"); @@ -47,4 +47,12 @@ public class GiantChickenToken extends Token { power = new MageInt(4); toughness = new MageInt(4); } + + public GiantChickenToken(final GiantChickenToken token) { + super(token); + } + + public GiantChickenToken copy() { + return new GiantChickenToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/GiantToken.java b/Mage/src/main/java/mage/game/permanent/token/GiantToken.java index b7906df470..116e7caa14 100644 --- a/Mage/src/main/java/mage/game/permanent/token/GiantToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/GiantToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class GiantToken extends Token { +public class GiantToken extends TokenImpl { public GiantToken() { super("Giant", "4/4 red Giant creature token"); @@ -45,4 +45,12 @@ public class GiantToken extends Token { power = new MageInt(4); toughness = new MageInt(4); } + + public GiantToken(final GiantToken token) { + super(token); + } + + public GiantToken copy() { + return new GiantToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/GiantWarriorToken.java b/Mage/src/main/java/mage/game/permanent/token/GiantWarriorToken.java index 40d5e06ac1..eb5df8a1bb 100644 --- a/Mage/src/main/java/mage/game/permanent/token/GiantWarriorToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/GiantWarriorToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class GiantWarriorToken extends Token { +public class GiantWarriorToken extends TokenImpl { public GiantWarriorToken() { super("Giant Warrior", "5/5 white Giant Warrior creature token"); @@ -46,4 +46,12 @@ public class GiantWarriorToken extends Token { power = new MageInt(5); toughness = new MageInt(5); } + + public GiantWarriorToken(final GiantWarriorToken token) { + super(token); + } + + public GiantWarriorToken copy() { + return new GiantWarriorToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/GnomeToken.java b/Mage/src/main/java/mage/game/permanent/token/GnomeToken.java index d7cc93d726..424007e54c 100644 --- a/Mage/src/main/java/mage/game/permanent/token/GnomeToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/GnomeToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class GnomeToken extends Token { +public class GnomeToken extends TokenImpl { public GnomeToken() { super("Gnome", "1/1 colorless Gnome artifact creature token"); @@ -45,4 +45,12 @@ public class GnomeToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public GnomeToken(final GnomeToken token) { + super(token); + } + + public GnomeToken copy() { + return new GnomeToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/GoatToken.java b/Mage/src/main/java/mage/game/permanent/token/GoatToken.java index 1a4392885f..623af62fdf 100644 --- a/Mage/src/main/java/mage/game/permanent/token/GoatToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/GoatToken.java @@ -39,7 +39,7 @@ import mage.constants.SubType; * * @author LoneFox */ -public class GoatToken extends Token { +public class GoatToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -65,4 +65,12 @@ public class GoatToken extends Token { power = new MageInt(0); toughness = new MageInt(1); } + + public GoatToken(final GoatToken token) { + super(token); + } + + public GoatToken copy() { + return new GoatToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/GoblinRogueToken.java b/Mage/src/main/java/mage/game/permanent/token/GoblinRogueToken.java index b2f5c52f25..d9d6e59f38 100644 --- a/Mage/src/main/java/mage/game/permanent/token/GoblinRogueToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/GoblinRogueToken.java @@ -37,7 +37,7 @@ import mage.MageInt; * * @author LoneFox */ -public class GoblinRogueToken extends Token { +public class GoblinRogueToken extends TokenImpl { public GoblinRogueToken() { super("Goblin Rogue", "1/1 black Goblin Rogue creature token"); @@ -49,4 +49,12 @@ public class GoblinRogueToken extends Token { toughness = new MageInt(1); availableImageSetCodes.addAll(Arrays.asList("LRW", "MMA")); } + + public GoblinRogueToken(final GoblinRogueToken token) { + super(token); + } + + public GoblinRogueToken copy() { + return new GoblinRogueToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/GoblinScoutsToken.java b/Mage/src/main/java/mage/game/permanent/token/GoblinScoutsToken.java index 781ec5e7e6..47fa75c5f2 100644 --- a/Mage/src/main/java/mage/game/permanent/token/GoblinScoutsToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/GoblinScoutsToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.MountainwalkAbility; * * @author spjspj */ -public class GoblinScoutsToken extends Token { +public class GoblinScoutsToken extends TokenImpl { public GoblinScoutsToken() { super("Goblin Scout", "1/1 red Goblin Scout creature tokens with mountainwalk"); @@ -49,4 +49,12 @@ public class GoblinScoutsToken extends Token { this.addAbility(new MountainwalkAbility()); } + + public GoblinScoutsToken(final GoblinScoutsToken token) { + super(token); + } + + public GoblinScoutsToken copy() { + return new GoblinScoutsToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/GoblinSoldierToken.java b/Mage/src/main/java/mage/game/permanent/token/GoblinSoldierToken.java index 3f8fbd3fed..35555114ca 100644 --- a/Mage/src/main/java/mage/game/permanent/token/GoblinSoldierToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/GoblinSoldierToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class GoblinSoldierToken extends Token { +public class GoblinSoldierToken extends TokenImpl { public GoblinSoldierToken() { super("Goblin Soldier", "1/1 red and white Goblin Soldier creature tokens"); @@ -47,4 +47,12 @@ public class GoblinSoldierToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + public GoblinSoldierToken(final GoblinSoldierToken token) { + super(token); + } + + public GoblinSoldierToken copy() { + return new GoblinSoldierToken(this); + } + } diff --git a/Mage/src/main/java/mage/game/permanent/token/GoblinToken.java b/Mage/src/main/java/mage/game/permanent/token/GoblinToken.java index 94751395ad..52f5a2a3bd 100644 --- a/Mage/src/main/java/mage/game/permanent/token/GoblinToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/GoblinToken.java @@ -38,7 +38,7 @@ import mage.constants.SubType; * * @author North */ -public class GoblinToken extends Token { +public class GoblinToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -65,4 +65,12 @@ public class GoblinToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public GoblinToken(final GoblinToken token) { + super(token); + } + + public GoblinToken copy() { + return new GoblinToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/GoblinTrenchesToken.java b/Mage/src/main/java/mage/game/permanent/token/GoblinTrenchesToken.java index 601ea5a686..bcd794808c 100644 --- a/Mage/src/main/java/mage/game/permanent/token/GoblinTrenchesToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/GoblinTrenchesToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class GoblinTrenchesToken extends Token { +public class GoblinTrenchesToken extends TokenImpl { public GoblinTrenchesToken() { super("Goblin Soldier", "1/1 red and white Goblin Soldier creature tokens"); @@ -47,4 +47,12 @@ public class GoblinTrenchesToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public GoblinTrenchesToken(final GoblinTrenchesToken token) { + super(token); + } + + public GoblinTrenchesToken copy() { + return new GoblinTrenchesToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/GodFavoredGeneralSoldierToken.java b/Mage/src/main/java/mage/game/permanent/token/GodFavoredGeneralSoldierToken.java index 4b3a6275bd..5abcbefc17 100644 --- a/Mage/src/main/java/mage/game/permanent/token/GodFavoredGeneralSoldierToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/GodFavoredGeneralSoldierToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class GodFavoredGeneralSoldierToken extends Token { +public class GodFavoredGeneralSoldierToken extends TokenImpl { public GodFavoredGeneralSoldierToken() { super("Soldier", "1/1 white Soldier enchantment creature token"); @@ -48,4 +48,12 @@ public class GodFavoredGeneralSoldierToken extends Token { toughness = new MageInt(1); this.setOriginalExpansionSetCode("BNG"); } + + public GodFavoredGeneralSoldierToken(final GodFavoredGeneralSoldierToken token) { + super(token); + } + + public GodFavoredGeneralSoldierToken copy() { + return new GodFavoredGeneralSoldierToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/GodSireBeastToken.java b/Mage/src/main/java/mage/game/permanent/token/GodSireBeastToken.java index d5afbb5f71..a07a32c470 100644 --- a/Mage/src/main/java/mage/game/permanent/token/GodSireBeastToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/GodSireBeastToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class GodSireBeastToken extends Token { +public class GodSireBeastToken extends TokenImpl { public GodSireBeastToken() { super("Beast", "8/8 Beast creature token that's red, green, and white"); @@ -47,4 +47,12 @@ public class GodSireBeastToken extends Token { power = new MageInt(8); toughness = new MageInt(8); } + + public GodSireBeastToken(final GodSireBeastToken token) { + super(token); + } + + public GodSireBeastToken copy() { + return new GodSireBeastToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/GoldForgeGarrisonGolemToken.java b/Mage/src/main/java/mage/game/permanent/token/GoldForgeGarrisonGolemToken.java index 4cbf82d830..686f006955 100644 --- a/Mage/src/main/java/mage/game/permanent/token/GoldForgeGarrisonGolemToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/GoldForgeGarrisonGolemToken.java @@ -13,7 +13,7 @@ import mage.constants.SubType; * * @author LevelX2 */ -public class GoldForgeGarrisonGolemToken extends Token { +public class GoldForgeGarrisonGolemToken extends TokenImpl { public GoldForgeGarrisonGolemToken() { super("Golem", "4/4 colorless Golem artifact creature token"); @@ -25,4 +25,12 @@ public class GoldForgeGarrisonGolemToken extends Token { toughness = new MageInt(4); } + + public GoldForgeGarrisonGolemToken(final GoldForgeGarrisonGolemToken token) { + super(token); + } + + public GoldForgeGarrisonGolemToken copy() { + return new GoldForgeGarrisonGolemToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/GoldToken.java b/Mage/src/main/java/mage/game/permanent/token/GoldToken.java index 41b5a8ddd2..e6661dbb4e 100644 --- a/Mage/src/main/java/mage/game/permanent/token/GoldToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/GoldToken.java @@ -41,7 +41,7 @@ import mage.constants.Zone; * * @author LevelX2 */ -public class GoldToken extends Token { +public class GoldToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); static { @@ -49,14 +49,10 @@ public class GoldToken extends Token { } public GoldToken() { - this(null, 0); + this((String)null); } public GoldToken(String setCode) { - this(setCode, 0); - } - - public GoldToken(String setCode, int tokenType) { super("Gold", "colorless artifact token named Gold with \"Sacrifice this artifact: Add one mana of any color to your mana pool.\""); availableImageSetCodes = tokenImageSets; setOriginalExpansionSetCode(setCode); @@ -64,4 +60,12 @@ public class GoldToken extends Token { this.addAbility(new SimpleManaAbility(Zone.BATTLEFIELD, new AddManaOfAnyColorEffect(), new SacrificeSourceCost())); } + + public GoldToken(final GoldToken token) { + super(token); + } + + public GoldToken copy() { + return new GoldToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/GoldmeadowHarrierToken.java b/Mage/src/main/java/mage/game/permanent/token/GoldmeadowHarrierToken.java index d66c630ea0..77e6c38ebe 100644 --- a/Mage/src/main/java/mage/game/permanent/token/GoldmeadowHarrierToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/GoldmeadowHarrierToken.java @@ -42,7 +42,7 @@ import mage.target.common.TargetCreaturePermanent; * * @author spjspj */ -public class GoldmeadowHarrierToken extends Token { +public 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.\""); @@ -59,4 +59,12 @@ public class GoldmeadowHarrierToken extends Token { ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); } + + public GoldmeadowHarrierToken(final GoldmeadowHarrierToken token) { + super(token); + } + + public GoldmeadowHarrierToken copy() { + return new GoldmeadowHarrierToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/GolemToken.java b/Mage/src/main/java/mage/game/permanent/token/GolemToken.java index 2f9e97af1d..2ce83267cd 100644 --- a/Mage/src/main/java/mage/game/permanent/token/GolemToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/GolemToken.java @@ -39,7 +39,7 @@ import mage.MageInt; * * @author North */ -public class GolemToken extends Token { +public class GolemToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -48,7 +48,7 @@ public class GolemToken extends Token { } public GolemToken() { - this(null); + this((String)null); } public GolemToken(String setCode) { @@ -62,4 +62,12 @@ public class GolemToken extends Token { availableImageSetCodes = tokenImageSets; } + + public GolemToken(final GolemToken token) { + super(token); + } + + public GolemToken copy() { + return new GolemToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/GremlinToken.java b/Mage/src/main/java/mage/game/permanent/token/GremlinToken.java index 57aa68d1f7..90dc38e044 100644 --- a/Mage/src/main/java/mage/game/permanent/token/GremlinToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/GremlinToken.java @@ -35,7 +35,7 @@ import mage.constants.SubType; * * @author Styxo */ -public class GremlinToken extends Token { +public class GremlinToken extends TokenImpl { public GremlinToken() { super("Gremlin", "2/2 red Gremlin creature token"); @@ -46,4 +46,12 @@ public class GremlinToken extends Token { power = new MageInt(2); toughness = new MageInt(2); } + + public GremlinToken(final GremlinToken token) { + super(token); + } + + public GremlinToken copy() { + return new GremlinToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/GriffinToken.java b/Mage/src/main/java/mage/game/permanent/token/GriffinToken.java index b71d93dbb6..a1b9b22520 100644 --- a/Mage/src/main/java/mage/game/permanent/token/GriffinToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/GriffinToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class GriffinToken extends Token { +public class GriffinToken extends TokenImpl { public GriffinToken() { super("Griffin", "2/2 white Griffin creature token with flying"); @@ -49,4 +49,12 @@ public class GriffinToken extends Token { this.addAbility(FlyingAbility.getInstance()); } + public GriffinToken(final GriffinToken token) { + super(token); + } + + public GriffinToken copy() { + return new GriffinToken(this); + } + } diff --git a/Mage/src/main/java/mage/game/permanent/token/GrovetenderDruidsPlantToken.java b/Mage/src/main/java/mage/game/permanent/token/GrovetenderDruidsPlantToken.java index 7d963d96b1..c31ef0cf33 100644 --- a/Mage/src/main/java/mage/game/permanent/token/GrovetenderDruidsPlantToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/GrovetenderDruidsPlantToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class GrovetenderDruidsPlantToken extends Token { +public class GrovetenderDruidsPlantToken extends TokenImpl { public GrovetenderDruidsPlantToken() { super("Plant", "1/1 green Plant creature"); @@ -46,4 +46,12 @@ public class GrovetenderDruidsPlantToken extends Token { toughness = new MageInt(1); this.setOriginalExpansionSetCode("BFZ"); } + + public GrovetenderDruidsPlantToken(final GrovetenderDruidsPlantToken token) { + super(token); + } + + public GrovetenderDruidsPlantToken copy() { + return new GrovetenderDruidsPlantToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/GuardianIdolGolemToken.java b/Mage/src/main/java/mage/game/permanent/token/GuardianIdolGolemToken.java index 0459807fb7..656feb4610 100644 --- a/Mage/src/main/java/mage/game/permanent/token/GuardianIdolGolemToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/GuardianIdolGolemToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class GuardianIdolGolemToken extends Token { +public class GuardianIdolGolemToken extends TokenImpl { public GuardianIdolGolemToken() { super("Golem", "2/2 Golem artifact creature token"); @@ -45,4 +45,12 @@ public class GuardianIdolGolemToken extends Token { power = new MageInt(2); toughness = new MageInt(2); } + + public GuardianIdolGolemToken(final GuardianIdolGolemToken token) { + super(token); + } + + public GuardianIdolGolemToken copy() { + return new GuardianIdolGolemToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/GutterGrimeToken.java b/Mage/src/main/java/mage/game/permanent/token/GutterGrimeToken.java index 3b2cdcdf22..e06ad31741 100644 --- a/Mage/src/main/java/mage/game/permanent/token/GutterGrimeToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/GutterGrimeToken.java @@ -46,15 +46,14 @@ import mage.game.permanent.Permanent; * * @author spjspj */ -public class GutterGrimeToken extends Token { +public class GutterGrimeToken extends TokenImpl { public GutterGrimeToken() { - this (null); + this ((UUID)null); power = new MageInt(3); toughness = new MageInt(3); } - public GutterGrimeToken(UUID sourceId) { super("Ooze", "green Ooze creature token with \"This creature's power and toughness are each equal to the number of slime counters on Gutter Grime.\""); cardType.add(CardType.CREATURE); @@ -65,6 +64,14 @@ public class GutterGrimeToken extends Token { this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SetPowerToughnessSourceEffect(new GutterGrimeCounters(sourceId), Duration.WhileOnBattlefield))); } + public GutterGrimeToken(final GutterGrimeToken token) { + super(token); + } + + public GutterGrimeToken copy() { + return new GutterGrimeToken(this); + } + class GutterGrimeCounters implements DynamicValue { private final UUID sourceId; diff --git a/Mage/src/main/java/mage/game/permanent/token/HammerOfPurphorosGolemToken.java b/Mage/src/main/java/mage/game/permanent/token/HammerOfPurphorosGolemToken.java index e8d76eaa5d..aa4bd17bd9 100644 --- a/Mage/src/main/java/mage/game/permanent/token/HammerOfPurphorosGolemToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/HammerOfPurphorosGolemToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class HammerOfPurphorosGolemToken extends Token { +public class HammerOfPurphorosGolemToken extends TokenImpl { public HammerOfPurphorosGolemToken() { super("Golem", "3/3 colorless Golem enchantment artifact creature token"); @@ -47,4 +47,12 @@ public class HammerOfPurphorosGolemToken extends Token { power = new MageInt(3); toughness = new MageInt(3); } + + public HammerOfPurphorosGolemToken(final HammerOfPurphorosGolemToken token) { + super(token); + } + + public HammerOfPurphorosGolemToken copy() { + return new HammerOfPurphorosGolemToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/HauntedAngelToken.java b/Mage/src/main/java/mage/game/permanent/token/HauntedAngelToken.java index a6dde5dd44..7af9972840 100644 --- a/Mage/src/main/java/mage/game/permanent/token/HauntedAngelToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/HauntedAngelToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class HauntedAngelToken extends Token { +public class HauntedAngelToken extends TokenImpl { public HauntedAngelToken() { super("Angel", "3/3 black Angel creature token with flying"); @@ -47,4 +47,12 @@ public class HauntedAngelToken extends Token { toughness = new MageInt(3); this.addAbility(FlyingAbility.getInstance()); } + + public HauntedAngelToken(final HauntedAngelToken token) { + super(token); + } + + public HauntedAngelToken copy() { + return new HauntedAngelToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/HazezonTamarSandWarriorToken.java b/Mage/src/main/java/mage/game/permanent/token/HazezonTamarSandWarriorToken.java index e544e5d003..8c568263be 100644 --- a/Mage/src/main/java/mage/game/permanent/token/HazezonTamarSandWarriorToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/HazezonTamarSandWarriorToken.java @@ -35,7 +35,7 @@ import mage.constants.SubType; * * @author spjspj */ -public class HazezonTamarSandWarriorToken extends Token { +public class HazezonTamarSandWarriorToken extends TokenImpl { public HazezonTamarSandWarriorToken() { super("Sand Warrior", "1/1 Sand Warrior creature tokens that are red, green, and white"); @@ -48,4 +48,12 @@ public class HazezonTamarSandWarriorToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public HazezonTamarSandWarriorToken(final HazezonTamarSandWarriorToken token) { + super(token); + } + + public HazezonTamarSandWarriorToken copy() { + return new HazezonTamarSandWarriorToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/HeliodGodOfTheSunToken.java b/Mage/src/main/java/mage/game/permanent/token/HeliodGodOfTheSunToken.java index a6ccc85b75..e86944de35 100644 --- a/Mage/src/main/java/mage/game/permanent/token/HeliodGodOfTheSunToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/HeliodGodOfTheSunToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class HeliodGodOfTheSunToken extends Token { +public class HeliodGodOfTheSunToken extends TokenImpl { public HeliodGodOfTheSunToken() { super("Cleric", "2/1 white Cleric enchantment creature token"); @@ -48,4 +48,12 @@ public class HeliodGodOfTheSunToken extends Token { this.power = new MageInt(2); this.toughness = new MageInt(1); } + + public HeliodGodOfTheSunToken(final HeliodGodOfTheSunToken token) { + super(token); + } + + public HeliodGodOfTheSunToken copy() { + return new HeliodGodOfTheSunToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/HellionHasteToken.java b/Mage/src/main/java/mage/game/permanent/token/HellionHasteToken.java index 06b3ed4b39..8fe7b0a3ac 100644 --- a/Mage/src/main/java/mage/game/permanent/token/HellionHasteToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/HellionHasteToken.java @@ -36,7 +36,7 @@ import mage.constants.SubType; * * @author spjspj */ -public class HellionHasteToken extends Token { +public class HellionHasteToken extends TokenImpl { public HellionHasteToken() { super("Hellion", "4/4 red Hellion creature token with haste"); @@ -47,4 +47,11 @@ public class HellionHasteToken extends Token { toughness = new MageInt(4); addAbility(HasteAbility.getInstance()); } + public HellionHasteToken(final HellionHasteToken token) { + super(token); + } + + public HellionHasteToken copy() { + return new HellionHasteToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/HellionToken.java b/Mage/src/main/java/mage/game/permanent/token/HellionToken.java index 31eed72112..4ff78f8aa7 100644 --- a/Mage/src/main/java/mage/game/permanent/token/HellionToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/HellionToken.java @@ -35,7 +35,7 @@ import mage.constants.SubType; * * @author spjspj */ -public class HellionToken extends Token { +public class HellionToken extends TokenImpl { public HellionToken() { super("Hellion", "4/4 red Hellion creature token"); @@ -45,4 +45,12 @@ public class HellionToken extends Token { power = new MageInt(4); toughness = new MageInt(4); } + + public HellionToken(final HellionToken token) { + super(token); + } + + public HellionToken copy() { + return new HellionToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/HippoToken.java b/Mage/src/main/java/mage/game/permanent/token/HippoToken.java index 814140d980..0b58bfe242 100644 --- a/Mage/src/main/java/mage/game/permanent/token/HippoToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/HippoToken.java @@ -35,7 +35,7 @@ import mage.constants.SubType; * * @author Styxo */ -public class HippoToken extends Token { +public class HippoToken extends TokenImpl { public HippoToken() { super("Hippo", "1/1 green Hippo creature token"); @@ -47,4 +47,12 @@ public class HippoToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public HippoToken(final HippoToken token) { + super(token); + } + + public HippoToken copy() { + return new HippoToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/HippoToken2.java b/Mage/src/main/java/mage/game/permanent/token/HippoToken2.java index cefd402e35..a2c98b16b1 100644 --- a/Mage/src/main/java/mage/game/permanent/token/HippoToken2.java +++ b/Mage/src/main/java/mage/game/permanent/token/HippoToken2.java @@ -35,7 +35,7 @@ import mage.constants.SubType; /** * @author Stravant */ -public class HippoToken2 extends Token { +public class HippoToken2 extends TokenImpl { public HippoToken2() { super("Hippo", "3/3 green Hippo creature token"); @@ -45,5 +45,11 @@ public class HippoToken2 extends Token { power = new MageInt(3); toughness = new MageInt(3); } + public HippoToken2(final HippoToken2 token) { + super(token); + } + public HippoToken2 copy() { + return new HippoToken2(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/HomunculusToken.java b/Mage/src/main/java/mage/game/permanent/token/HomunculusToken.java index 4485b36b4f..4136945d9e 100644 --- a/Mage/src/main/java/mage/game/permanent/token/HomunculusToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/HomunculusToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class HomunculusToken extends Token { +public class HomunculusToken extends TokenImpl { public HomunculusToken() { super("Homunculus", "0/1 blue Homunculus artifact creature token"); @@ -47,4 +47,12 @@ public class HomunculusToken extends Token { toughness = new MageInt(1); } + public HomunculusToken(final HomunculusToken token) { + super(token); + } + + public HomunculusToken copy() { + return new HomunculusToken(this); + } + } diff --git a/Mage/src/main/java/mage/game/permanent/token/HornetNestInsectToken.java b/Mage/src/main/java/mage/game/permanent/token/HornetNestInsectToken.java index fc4267e7d2..0343d8106b 100644 --- a/Mage/src/main/java/mage/game/permanent/token/HornetNestInsectToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/HornetNestInsectToken.java @@ -37,7 +37,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class HornetNestInsectToken extends Token { +public class HornetNestInsectToken extends TokenImpl { public HornetNestInsectToken() { super("Insect", "1/1 green Insect creature tokens with flying and deathtouch"); @@ -51,4 +51,12 @@ public class HornetNestInsectToken extends Token { this.addAbility(FlyingAbility.getInstance()); this.addAbility(DeathtouchAbility.getInstance()); } + + public HornetNestInsectToken(final HornetNestInsectToken token) { + super(token); + } + + public HornetNestInsectToken copy() { + return new HornetNestInsectToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/HornetQueenInsectToken.java b/Mage/src/main/java/mage/game/permanent/token/HornetQueenInsectToken.java index be57d6d360..4f8af8d6f9 100644 --- a/Mage/src/main/java/mage/game/permanent/token/HornetQueenInsectToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/HornetQueenInsectToken.java @@ -37,7 +37,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class HornetQueenInsectToken extends Token { +public class HornetQueenInsectToken extends TokenImpl { public HornetQueenInsectToken() { super("Insect", "1/1 green Insect creature token with flying and deathtouch"); @@ -50,4 +50,12 @@ public class HornetQueenInsectToken extends Token { addAbility(FlyingAbility.getInstance()); addAbility(DeathtouchAbility.getInstance()); } + + public HornetQueenInsectToken(final HornetQueenInsectToken token) { + super(token); + } + + public HornetQueenInsectToken copy() { + return new HornetQueenInsectToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/HornetToken.java b/Mage/src/main/java/mage/game/permanent/token/HornetToken.java index 6f050255e4..4dcec93fe1 100644 --- a/Mage/src/main/java/mage/game/permanent/token/HornetToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/HornetToken.java @@ -38,7 +38,7 @@ import mage.constants.SubType; * * @author FenrisulfrX */ -public class HornetToken extends Token { +public class HornetToken extends TokenImpl { public HornetToken() { this("DDE"); @@ -54,5 +54,13 @@ public class HornetToken extends Token { toughness = new MageInt(1); addAbility(FlyingAbility.getInstance()); addAbility(HasteAbility.getInstance()); - } + } + + public HornetToken(final HornetToken token) { + super(token); + } + + public HornetToken copy() { + return new HornetToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/HorrorToken.java b/Mage/src/main/java/mage/game/permanent/token/HorrorToken.java index d14678bded..729e358fe8 100644 --- a/Mage/src/main/java/mage/game/permanent/token/HorrorToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/HorrorToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class HorrorToken extends Token { +public class HorrorToken extends TokenImpl { public HorrorToken() { super("Horror", "4/4 black Horror creature token"); @@ -45,4 +45,12 @@ public class HorrorToken extends Token { power = new MageInt(4); toughness = new MageInt(4); } + + public HorrorToken(final HorrorToken token) { + super(token); + } + + public HorrorToken copy() { + return new HorrorToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/HoundToken.java b/Mage/src/main/java/mage/game/permanent/token/HoundToken.java index 992b197439..d11e3febfe 100644 --- a/Mage/src/main/java/mage/game/permanent/token/HoundToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/HoundToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class HoundToken extends Token { +public class HoundToken extends TokenImpl { public HoundToken() { super("Hound", "1/1 green Hound creature token"); @@ -46,4 +46,12 @@ public class HoundToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public HoundToken(final HoundToken token) { + super(token); + } + + public HoundToken copy() { + return new HoundToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/HourOfNeedSphinxToken.java b/Mage/src/main/java/mage/game/permanent/token/HourOfNeedSphinxToken.java index 64ec7246a2..72f6dcaf0c 100644 --- a/Mage/src/main/java/mage/game/permanent/token/HourOfNeedSphinxToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/HourOfNeedSphinxToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class HourOfNeedSphinxToken extends Token { +public class HourOfNeedSphinxToken extends TokenImpl { public HourOfNeedSphinxToken() { super("Sphinx", "4/4 blue Sphinx creature token with flying"); @@ -48,4 +48,12 @@ public class HourOfNeedSphinxToken extends Token { toughness = new MageInt(4); addAbility(FlyingAbility.getInstance()); } + + public HourOfNeedSphinxToken(final HourOfNeedSphinxToken token) { + super(token); + } + + public HourOfNeedSphinxToken copy() { + return new HourOfNeedSphinxToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/HumanClericToken.java b/Mage/src/main/java/mage/game/permanent/token/HumanClericToken.java index 969938731e..9ff7450f25 100644 --- a/Mage/src/main/java/mage/game/permanent/token/HumanClericToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/HumanClericToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class HumanClericToken extends Token { +public class HumanClericToken extends TokenImpl { public HumanClericToken() { super("Human Cleric", "1/1 white and black Human Cleric creature token"); @@ -47,4 +47,11 @@ public class HumanClericToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + public HumanClericToken(final HumanClericToken token) { + super(token); + } + + public HumanClericToken copy() { + return new HumanClericToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/HumanSoldierToken.java b/Mage/src/main/java/mage/game/permanent/token/HumanSoldierToken.java index 2b2fbe7fc3..1792c3e9cc 100644 --- a/Mage/src/main/java/mage/game/permanent/token/HumanSoldierToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/HumanSoldierToken.java @@ -4,7 +4,7 @@ import mage.MageInt; import mage.constants.CardType; import mage.constants.SubType; -public class HumanSoldierToken extends Token { +public class HumanSoldierToken extends TokenImpl { public HumanSoldierToken() { super("Human Soldier", "1/1 white Human Soldier creature token"); @@ -15,4 +15,12 @@ public class HumanSoldierToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public HumanSoldierToken(final HumanSoldierToken token) { + super(token); + } + + public HumanSoldierToken copy() { + return new HumanSoldierToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/HumanToken.java b/Mage/src/main/java/mage/game/permanent/token/HumanToken.java index e846da968b..793f8a7438 100644 --- a/Mage/src/main/java/mage/game/permanent/token/HumanToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/HumanToken.java @@ -37,7 +37,7 @@ import mage.MageInt; * * @author LoneFox */ -public class HumanToken extends Token { +public class HumanToken extends TokenImpl { public HumanToken() { super("Human", "1/1 white Human creature token"); diff --git a/Mage/src/main/java/mage/game/permanent/token/HumanWizardToken.java b/Mage/src/main/java/mage/game/permanent/token/HumanWizardToken.java index 3725ae716f..b039785f5f 100644 --- a/Mage/src/main/java/mage/game/permanent/token/HumanWizardToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/HumanWizardToken.java @@ -4,7 +4,7 @@ import mage.MageInt; import mage.constants.CardType; import mage.constants.SubType; -public class HumanWizardToken extends Token { +public class HumanWizardToken extends TokenImpl { public HumanWizardToken() { super("Human Wizard", "1/1 blue Human Wizard creature token"); @@ -15,4 +15,12 @@ public class HumanWizardToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public HumanWizardToken(final HumanWizardToken token) { + super(token); + } + + public HumanWizardToken copy() { + return new HumanWizardToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/HuntedCentaurToken.java b/Mage/src/main/java/mage/game/permanent/token/HuntedCentaurToken.java index 373a928d2f..ce455137ac 100644 --- a/Mage/src/main/java/mage/game/permanent/token/HuntedCentaurToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/HuntedCentaurToken.java @@ -40,7 +40,7 @@ import mage.abilities.keyword.ProtectionAbility; * * @author LevelX2 */ -public class HuntedCentaurToken extends Token { +public class HuntedCentaurToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -58,4 +58,11 @@ public class HuntedCentaurToken extends Token { this.addAbility(ProtectionAbility.from(ObjectColor.BLACK)); } + public HuntedCentaurToken(final HuntedCentaurToken token) { + super(token); + } + + public HuntedCentaurToken copy() { + return new HuntedCentaurToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/HuntedDragonKnightToken.java b/Mage/src/main/java/mage/game/permanent/token/HuntedDragonKnightToken.java index 7b77bc2f37..d57998ad18 100644 --- a/Mage/src/main/java/mage/game/permanent/token/HuntedDragonKnightToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/HuntedDragonKnightToken.java @@ -12,7 +12,7 @@ import mage.constants.SubType; * * @author spjspj */ -public class HuntedDragonKnightToken extends Token { +public class HuntedDragonKnightToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -30,4 +30,12 @@ public class HuntedDragonKnightToken extends Token { toughness = new MageInt(2); this.addAbility(FirstStrikeAbility.getInstance()); } + + public HuntedDragonKnightToken(final HuntedDragonKnightToken token) { + super(token); + } + + public HuntedDragonKnightToken copy() { + return new HuntedDragonKnightToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/HunterToken.java b/Mage/src/main/java/mage/game/permanent/token/HunterToken.java index d4a6e58e9c..059585f3d3 100644 --- a/Mage/src/main/java/mage/game/permanent/token/HunterToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/HunterToken.java @@ -35,7 +35,7 @@ import mage.constants.SubType; * * @author spjspj */ -public class HunterToken extends Token { +public class HunterToken extends TokenImpl { public HunterToken() { super("Hunter", "4/4 red Hunter creature token", 4, 4); @@ -44,5 +44,13 @@ public class HunterToken extends Token { color.setRed(true); subtype.add(SubType.HUNTER); } + + public HunterToken(final HunterToken token) { + super(token); + } + + public HunterToken copy() { + return new HunterToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/HydraBroodmasterToken.java b/Mage/src/main/java/mage/game/permanent/token/HydraBroodmasterToken.java index 51174406c9..e5a22feae0 100644 --- a/Mage/src/main/java/mage/game/permanent/token/HydraBroodmasterToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/HydraBroodmasterToken.java @@ -36,7 +36,7 @@ import mage.MageInt; * * @author spjspj */ -public class HydraBroodmasterToken extends Token { +public class HydraBroodmasterToken extends TokenImpl { public HydraBroodmasterToken() { this(1,1); @@ -52,5 +52,12 @@ public class HydraBroodmasterToken extends Token { this.toughness = new MageInt(toughness); } + public HydraBroodmasterToken(final HydraBroodmasterToken token) { + super(token); + } + + public HydraBroodmasterToken copy() { + return new HydraBroodmasterToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/IllusionToken.java b/Mage/src/main/java/mage/game/permanent/token/IllusionToken.java index 6915af088c..83be973915 100644 --- a/Mage/src/main/java/mage/game/permanent/token/IllusionToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/IllusionToken.java @@ -34,7 +34,7 @@ import mage.MageInt; * * @author spjspj */ -public class IllusionToken extends Token { +public class IllusionToken extends TokenImpl { public IllusionToken() { super("Illusion", "2/2 blue Illusion creature token"); @@ -45,4 +45,12 @@ public class IllusionToken extends Token { power = new MageInt(2); toughness = new MageInt(2); } + + public IllusionToken(final IllusionToken token) { + super(token); + } + + public IllusionToken copy() { + return new IllusionToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/InexorableBlobOozeToken.java b/Mage/src/main/java/mage/game/permanent/token/InexorableBlobOozeToken.java index cd3e0e5831..325eb30dec 100644 --- a/Mage/src/main/java/mage/game/permanent/token/InexorableBlobOozeToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/InexorableBlobOozeToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class InexorableBlobOozeToken extends Token { +public class InexorableBlobOozeToken extends TokenImpl { public InexorableBlobOozeToken() { super("Ooze", "3/3 green Ooze creature token"); @@ -45,4 +45,12 @@ public class InexorableBlobOozeToken extends Token { power = new MageInt(3); toughness = new MageInt(3); } + + public InexorableBlobOozeToken(final InexorableBlobOozeToken token) { + super(token); + } + + public InexorableBlobOozeToken copy() { + return new InexorableBlobOozeToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/InsectInfectToken.java b/Mage/src/main/java/mage/game/permanent/token/InsectInfectToken.java index 87d6641bc1..28685057c0 100644 --- a/Mage/src/main/java/mage/game/permanent/token/InsectInfectToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/InsectInfectToken.java @@ -37,7 +37,7 @@ import mage.abilities.keyword.InfectAbility; * * @author nantuko */ -public class InsectInfectToken extends Token { +public class InsectInfectToken extends TokenImpl { public InsectInfectToken() { super("Insect", "1/1 green Insect creature token with infect"); @@ -49,4 +49,12 @@ public class InsectInfectToken extends Token { addAbility(InfectAbility.getInstance()); setOriginalExpansionSetCode("SOM"); } + + public InsectInfectToken(final InsectInfectToken token) { + super(token); + } + + public InsectInfectToken copy() { + return new InsectInfectToken(this); + } } \ No newline at end of file diff --git a/Mage/src/main/java/mage/game/permanent/token/InsectToken.java b/Mage/src/main/java/mage/game/permanent/token/InsectToken.java index 43b7b21de1..b96ec609d1 100644 --- a/Mage/src/main/java/mage/game/permanent/token/InsectToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/InsectToken.java @@ -39,7 +39,7 @@ import mage.constants.SubType; * * @author BetaSteward_at_googlemail.com */ -public class InsectToken extends Token { +public class InsectToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -48,7 +48,7 @@ public class InsectToken extends Token { } public InsectToken() { - this(null); + this((String)null); } public InsectToken(String setCode) { @@ -62,4 +62,12 @@ public class InsectToken extends Token { availableImageSetCodes = tokenImageSets; } + + public InsectToken(final InsectToken token) { + super(token); + } + + public InsectToken copy() { + return new InsectToken(this); + } } \ No newline at end of file diff --git a/Mage/src/main/java/mage/game/permanent/token/IxalanVampireToken.java b/Mage/src/main/java/mage/game/permanent/token/IxalanVampireToken.java index 82d97a4439..ca60f1747e 100644 --- a/Mage/src/main/java/mage/game/permanent/token/IxalanVampireToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/IxalanVampireToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.LifelinkAbility; * * @author TheElk801 */ -public class IxalanVampireToken extends Token { +public class IxalanVampireToken extends TokenImpl { public IxalanVampireToken() { super("Vampire", "1/1 white Vampire creature token with lifelink"); @@ -47,4 +47,12 @@ public class IxalanVampireToken extends Token { toughness = new MageInt(1); addAbility(LifelinkAbility.getInstance()); } + + public IxalanVampireToken(final IxalanVampireToken token) { + super(token); + } + + public IxalanVampireToken copy() { + return new IxalanVampireToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/JaceCunningCastawayIllusionToken.java b/Mage/src/main/java/mage/game/permanent/token/JaceCunningCastawayIllusionToken.java index 54b1a6700f..b5ad57036a 100644 --- a/Mage/src/main/java/mage/game/permanent/token/JaceCunningCastawayIllusionToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/JaceCunningCastawayIllusionToken.java @@ -43,7 +43,7 @@ import mage.target.targetpointer.FixedTarget; * * @author TheElk801 */ -public class JaceCunningCastawayIllusionToken extends Token { +public class JaceCunningCastawayIllusionToken extends TokenImpl { public JaceCunningCastawayIllusionToken() { super("Illusion", "2/2 blue Illusion creature token with \"When this creature becomes the target of a spell, sacrifice it.\""); @@ -56,6 +56,14 @@ public class JaceCunningCastawayIllusionToken extends Token { this.addAbility(new IllusionTokenTriggeredAbility()); } + + public JaceCunningCastawayIllusionToken(final JaceCunningCastawayIllusionToken token) { + super(token); + } + + public JaceCunningCastawayIllusionToken copy() { + return new JaceCunningCastawayIllusionToken(this); + } } class IllusionTokenTriggeredAbility extends TriggeredAbilityImpl { diff --git a/Mage/src/main/java/mage/game/permanent/token/JoinTheRanksSoldierToken.java b/Mage/src/main/java/mage/game/permanent/token/JoinTheRanksSoldierToken.java index 0e8e5e6b58..608dda4d3a 100644 --- a/Mage/src/main/java/mage/game/permanent/token/JoinTheRanksSoldierToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/JoinTheRanksSoldierToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class JoinTheRanksSoldierToken extends Token { +public class JoinTheRanksSoldierToken extends TokenImpl { public JoinTheRanksSoldierToken() { super("Soldier Ally", "1/1 white Soldier Ally creature token"); @@ -46,6 +46,13 @@ public class JoinTheRanksSoldierToken extends Token { subtype.add(SubType.ALLY); power = new MageInt(1); toughness = new MageInt(1); + } + public JoinTheRanksSoldierToken(final JoinTheRanksSoldierToken token) { + super(token); + } + + public JoinTheRanksSoldierToken copy() { + return new JoinTheRanksSoldierToken(this); } } diff --git a/Mage/src/main/java/mage/game/permanent/token/KaldraToken.java b/Mage/src/main/java/mage/game/permanent/token/KaldraToken.java index 79d8942b9b..6990478e1b 100644 --- a/Mage/src/main/java/mage/game/permanent/token/KaldraToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/KaldraToken.java @@ -36,7 +36,7 @@ import mage.constants.SuperType; * * @author spjspj */ -public class KaldraToken extends Token { +public class KaldraToken extends TokenImpl { public KaldraToken() { super("Kaldra", "legendary 4/4 colorless Avatar creature token named Kaldra"); @@ -46,4 +46,12 @@ public class KaldraToken extends Token { power = new MageInt(4); toughness = new MageInt(4); } + + public KaldraToken(final KaldraToken token) { + super(token); + } + + public KaldraToken copy() { + return new KaldraToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/KalitasVampireToken.java b/Mage/src/main/java/mage/game/permanent/token/KalitasVampireToken.java index c28435c239..64ec85efc6 100644 --- a/Mage/src/main/java/mage/game/permanent/token/KalitasVampireToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/KalitasVampireToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class KalitasVampireToken extends Token { +public class KalitasVampireToken extends TokenImpl { public KalitasVampireToken() { this(1,1); @@ -49,4 +49,12 @@ public class KalitasVampireToken extends Token { power = new MageInt(tokenPower); toughness = new MageInt(tokenToughness); } + + public KalitasVampireToken(final KalitasVampireToken token) { + super(token); + } + + public KalitasVampireToken copy() { + return new KalitasVampireToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/KalonianTwingroveTreefolkWarriorToken.java b/Mage/src/main/java/mage/game/permanent/token/KalonianTwingroveTreefolkWarriorToken.java index 45a6bfa663..9f8226728f 100644 --- a/Mage/src/main/java/mage/game/permanent/token/KalonianTwingroveTreefolkWarriorToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/KalonianTwingroveTreefolkWarriorToken.java @@ -42,7 +42,7 @@ import mage.filter.predicate.mageobject.SubtypePredicate; * * @author spjspj */ -public class KalonianTwingroveTreefolkWarriorToken extends Token { +public class KalonianTwingroveTreefolkWarriorToken extends TokenImpl { final static FilterControlledPermanent filterLands = new FilterControlledPermanent("Forests you control"); @@ -62,4 +62,12 @@ public class KalonianTwingroveTreefolkWarriorToken extends Token { this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SetPowerToughnessSourceEffect(new PermanentsOnBattlefieldCount(filterLands), Duration.WhileOnBattlefield))); } + + public KalonianTwingroveTreefolkWarriorToken(final KalonianTwingroveTreefolkWarriorToken token) { + super(token); + } + + public KalonianTwingroveTreefolkWarriorToken copy() { + return new KalonianTwingroveTreefolkWarriorToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/KarnConstructToken.java b/Mage/src/main/java/mage/game/permanent/token/KarnConstructToken.java index d7eaa86ca0..a4a3aaee44 100644 --- a/Mage/src/main/java/mage/game/permanent/token/KarnConstructToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/KarnConstructToken.java @@ -44,7 +44,7 @@ import mage.filter.predicate.mageobject.CardTypePredicate; * * @author spjspj */ -public class KarnConstructToken extends Token { +public class KarnConstructToken extends TokenImpl { private static final FilterControlledPermanent filter = new FilterControlledPermanent("artifacts you control"); @@ -72,4 +72,12 @@ public class KarnConstructToken extends Token { .setText("This creature gets +1/+1 for each artifact you control") )); } + + public KarnConstructToken(final KarnConstructToken token) { + super(token); + } + + public KarnConstructToken copy() { + return new KarnConstructToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/KaroxBladewingDragonToken.java b/Mage/src/main/java/mage/game/permanent/token/KaroxBladewingDragonToken.java new file mode 100644 index 0000000000..5830be0b35 --- /dev/null +++ b/Mage/src/main/java/mage/game/permanent/token/KaroxBladewingDragonToken.java @@ -0,0 +1,61 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.game.permanent.token; + +import mage.abilities.keyword.FlyingAbility; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.SuperType; + +/** + * @author JRHerlehy + * Created on 4/5/18. + */ +public class KaroxBladewingDragonToken extends TokenImpl { + + public KaroxBladewingDragonToken() { + super("Karox Bladewing", "legendary 4/4 red Dragon creature token with flying", 4, 4); + + this.setOriginalExpansionSetCode("DOM"); + + this.addSuperType(SuperType.LEGENDARY); + this.cardType.add(CardType.CREATURE); + this.subtype.add(SubType.DRAGON); + + this.addAbility(FlyingAbility.getInstance()); + } + + public KaroxBladewingDragonToken(final KaroxBladewingDragonToken token) { + super(token); + } + + @Override + public KaroxBladewingDragonToken copy() { + return new KaroxBladewingDragonToken(this); + } +} diff --git a/Mage/src/main/java/mage/game/permanent/token/KelpToken.java b/Mage/src/main/java/mage/game/permanent/token/KelpToken.java index 0b09164d4f..73a8986954 100644 --- a/Mage/src/main/java/mage/game/permanent/token/KelpToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/KelpToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.DefenderAbility; * * @author spjspj */ -public class KelpToken extends Token { +public class KelpToken extends TokenImpl { public KelpToken() { super("Kelp", "0/1 blue Plant Wall creature token with defender named Kelp"); @@ -50,4 +50,12 @@ public class KelpToken extends Token { this.addAbility(DefenderAbility.getInstance()); } + + public KelpToken(final KelpToken token) { + super(token); + } + + public KelpToken copy() { + return new KelpToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/KherKeepKoboldToken.java b/Mage/src/main/java/mage/game/permanent/token/KherKeepKoboldToken.java index f851b8d33f..15d77f129a 100644 --- a/Mage/src/main/java/mage/game/permanent/token/KherKeepKoboldToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/KherKeepKoboldToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class KherKeepKoboldToken extends Token { +public class KherKeepKoboldToken extends TokenImpl { public KherKeepKoboldToken() { super("Kobolds of Kher Keep", "0/1 red Kobold creature token named Kobolds of Kher Keep"); @@ -45,5 +45,11 @@ public class KherKeepKoboldToken extends Token { power = new MageInt(0); toughness = new MageInt(1); } + public KherKeepKoboldToken(final KherKeepKoboldToken token) { + super(token); + } + public KherKeepKoboldToken copy() { + return new KherKeepKoboldToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/KioraKrakenToken.java b/Mage/src/main/java/mage/game/permanent/token/KioraKrakenToken.java index 8787ceadbd..571810e084 100644 --- a/Mage/src/main/java/mage/game/permanent/token/KioraKrakenToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/KioraKrakenToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class KioraKrakenToken extends Token { +public class KioraKrakenToken extends TokenImpl { public KioraKrakenToken() { super("Kraken", "9/9 blue Kraken creature token"); @@ -46,4 +46,12 @@ public class KioraKrakenToken extends Token { toughness = new MageInt(9); this.setOriginalExpansionSetCode("BNG"); } + + public KioraKrakenToken(final KioraKrakenToken token) { + super(token); + } + + public KioraKrakenToken copy() { + return new KioraKrakenToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/KithkinToken.java b/Mage/src/main/java/mage/game/permanent/token/KithkinToken.java index 45e6644586..a3a4965169 100644 --- a/Mage/src/main/java/mage/game/permanent/token/KithkinToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/KithkinToken.java @@ -9,7 +9,7 @@ import mage.constants.SubType; * * @author Loki */ -public class KithkinToken extends Token { +public class KithkinToken extends TokenImpl { public KithkinToken() { super("Kithkin Soldier", "1/1 white Kithkin Soldier creature token"); @@ -21,4 +21,12 @@ public class KithkinToken extends Token { toughness = new MageInt(1); availableImageSetCodes.addAll(Arrays.asList("LRW", "SHM", "MMA")); } + + public KithkinToken(final KithkinToken token) { + super(token); + } + + public KithkinToken copy() { + return new KithkinToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/KnightAllyToken.java b/Mage/src/main/java/mage/game/permanent/token/KnightAllyToken.java index 57e353f063..8b2858e155 100644 --- a/Mage/src/main/java/mage/game/permanent/token/KnightAllyToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/KnightAllyToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class KnightAllyToken extends Token { +public class KnightAllyToken extends TokenImpl { public KnightAllyToken() { super("Knight Ally", "2/2 white Knight Ally creature token"); @@ -47,4 +47,13 @@ public class KnightAllyToken extends Token { power = new MageInt(2); toughness = new MageInt(2); } + + public KnightAllyToken(final KnightAllyToken token) { + super(token); + } + + public KnightAllyToken copy() { + return new KnightAllyToken(this); + } + } diff --git a/Mage/src/main/java/mage/game/permanent/token/KnightToken.java b/Mage/src/main/java/mage/game/permanent/token/KnightToken.java index d649fd78fe..ee9f395396 100644 --- a/Mage/src/main/java/mage/game/permanent/token/KnightToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/KnightToken.java @@ -12,7 +12,7 @@ import mage.constants.SubType; * * @author LevelX2 */ -public class KnightToken extends Token { +public class KnightToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -34,4 +34,12 @@ public class KnightToken extends Token { availableImageSetCodes = tokenImageSets; } + + public KnightToken(final KnightToken token) { + super(token); + } + + public KnightToken copy() { + return new KnightToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/KorAllyToken.java b/Mage/src/main/java/mage/game/permanent/token/KorAllyToken.java index 4aae560392..af080933a1 100644 --- a/Mage/src/main/java/mage/game/permanent/token/KorAllyToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/KorAllyToken.java @@ -4,7 +4,7 @@ import mage.MageInt; import mage.constants.CardType; import mage.constants.SubType; -public class KorAllyToken extends Token { +public class KorAllyToken extends TokenImpl { public KorAllyToken() { super("Kor Ally", "1/1 white Kor Ally creature token"); @@ -16,4 +16,12 @@ public class KorAllyToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public KorAllyToken(final KorAllyToken token) { + super(token); + } + + public KorAllyToken copy() { + return new KorAllyToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/KorSoldierToken.java b/Mage/src/main/java/mage/game/permanent/token/KorSoldierToken.java index b477c69eb5..f55e4c4592 100644 --- a/Mage/src/main/java/mage/game/permanent/token/KorSoldierToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/KorSoldierToken.java @@ -38,7 +38,7 @@ import mage.MageInt; * * @author LoneFox */ -public class KorSoldierToken extends Token { +public class KorSoldierToken extends TokenImpl { public KorSoldierToken() { super("Kor Soldier", "1/1 white Kor Soldier creature token"); @@ -48,5 +48,13 @@ public class KorSoldierToken extends Token { subtype.add(SubType.SOLDIER); power = new MageInt(1); toughness = new MageInt(1); - availableImageSetCodes.addAll(Arrays.asList("C14", "ZEN")); } + availableImageSetCodes.addAll(Arrays.asList("C14", "ZEN")); + } + public KorSoldierToken(final KorSoldierToken token) { + super(token); + } + + public KorSoldierToken copy() { + return new KorSoldierToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/LandMineToken.java b/Mage/src/main/java/mage/game/permanent/token/LandMineToken.java index bdef0d8c20..6566bca1a6 100644 --- a/Mage/src/main/java/mage/game/permanent/token/LandMineToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/LandMineToken.java @@ -44,7 +44,7 @@ import mage.target.common.TargetCreaturePermanent; * * @author spjspj */ -public class LandMineToken extends Token { +public class LandMineToken extends TokenImpl { private static final FilterAttackingCreature filter = new FilterAttackingCreature("attacking creature without flying"); @@ -62,4 +62,12 @@ public class LandMineToken extends Token { ability.addTarget(new TargetCreaturePermanent(filter)); this.addAbility(ability); } + + public LandMineToken(final LandMineToken token) { + super(token); + } + + public LandMineToken copy() { + return new LandMineToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/LeafdrakeRoostDrakeToken.java b/Mage/src/main/java/mage/game/permanent/token/LeafdrakeRoostDrakeToken.java index 09cf615aca..1698cd06ee 100644 --- a/Mage/src/main/java/mage/game/permanent/token/LeafdrakeRoostDrakeToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/LeafdrakeRoostDrakeToken.java @@ -39,7 +39,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class LeafdrakeRoostDrakeToken extends Token { +public class LeafdrakeRoostDrakeToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -67,5 +67,12 @@ public class LeafdrakeRoostDrakeToken extends Token { toughness = new MageInt(2); this.addAbility(FlyingAbility.getInstance()); } + + public LeafdrakeRoostDrakeToken(final LeafdrakeRoostDrakeToken token) { + super(token); + } + public LeafdrakeRoostDrakeToken copy() { + return new LeafdrakeRoostDrakeToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/LightningRagerToken.java b/Mage/src/main/java/mage/game/permanent/token/LightningRagerToken.java index dcdf510f5f..8c3a8624fb 100644 --- a/Mage/src/main/java/mage/game/permanent/token/LightningRagerToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/LightningRagerToken.java @@ -40,7 +40,7 @@ import mage.constants.TargetController; * * @author spjspj */ -public class LightningRagerToken extends Token { +public class LightningRagerToken extends TokenImpl { public LightningRagerToken() { super("Lightning Rager", "5/1 red Elemental creature token named Lightning Rager." @@ -55,4 +55,12 @@ public class LightningRagerToken extends Token { addAbility(HasteAbility.getInstance()); this.addAbility(new BeginningOfEndStepTriggeredAbility(new SacrificeSourceEffect(), TargetController.NEXT, false)); } + + public LightningRagerToken(final LightningRagerToken token) { + super(token); + } + + public LightningRagerToken copy() { + return new LightningRagerToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/LinvalaAngelToken.java b/Mage/src/main/java/mage/game/permanent/token/LinvalaAngelToken.java index aebcc9af26..4343d3c932 100644 --- a/Mage/src/main/java/mage/game/permanent/token/LinvalaAngelToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/LinvalaAngelToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class LinvalaAngelToken extends Token { +public class LinvalaAngelToken extends TokenImpl { public LinvalaAngelToken() { super("Angel", "3/3 white Angel creature token with flying"); @@ -48,4 +48,12 @@ public class LinvalaAngelToken extends Token { toughness = new MageInt(3); addAbility(FlyingAbility.getInstance()); } + + public LinvalaAngelToken(final LinvalaAngelToken token) { + super(token); + } + + public LinvalaAngelToken copy() { + return new LinvalaAngelToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/LizardToken.java b/Mage/src/main/java/mage/game/permanent/token/LizardToken.java index b83686ed81..270ec5129e 100644 --- a/Mage/src/main/java/mage/game/permanent/token/LizardToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/LizardToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class LizardToken extends Token { +public class LizardToken extends TokenImpl { public LizardToken() { super("Lizard", "2/2 green Lizard creature token"); @@ -45,4 +45,12 @@ public class LizardToken extends Token { power = new MageInt(2); toughness = new MageInt(2); } + + public LizardToken(final LizardToken token) { + super(token); + } + + public LizardToken copy() { + return new LizardToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/LlanowarElvesToken.java b/Mage/src/main/java/mage/game/permanent/token/LlanowarElvesToken.java index f67026c12a..aa5e3e7fa6 100644 --- a/Mage/src/main/java/mage/game/permanent/token/LlanowarElvesToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/LlanowarElvesToken.java @@ -36,7 +36,7 @@ import mage.abilities.mana.GreenManaAbility; * * @author spjspj */ -public class LlanowarElvesToken extends Token { +public class LlanowarElvesToken extends TokenImpl { public LlanowarElvesToken() { super("Llanowar Elves", "1/1 green Elf Druid creature token named Llanowar Elves with \"{T}: Add {G} to your mana pool.\""); @@ -50,4 +50,12 @@ public class LlanowarElvesToken extends Token { this.addAbility(new GreenManaAbility()); } + + public LlanowarElvesToken(final LlanowarElvesToken token) { + super(token); + } + + public LlanowarElvesToken copy() { + return new LlanowarElvesToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/MarathWillOfTheWildElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/MarathWillOfTheWildElementalToken.java index 325d3fc4a4..a4315bf9ef 100644 --- a/Mage/src/main/java/mage/game/permanent/token/MarathWillOfTheWildElementalToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/MarathWillOfTheWildElementalToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class MarathWillOfTheWildElementalToken extends Token { +public class MarathWillOfTheWildElementalToken extends TokenImpl { public MarathWillOfTheWildElementalToken() { super("Elemental", "X/X green Elemental creature token"); @@ -45,4 +45,12 @@ public class MarathWillOfTheWildElementalToken extends Token { power = new MageInt(0); toughness = new MageInt(0); } + + public MarathWillOfTheWildElementalToken(final MarathWillOfTheWildElementalToken token) { + super(token); + } + + public MarathWillOfTheWildElementalToken copy() { + return new MarathWillOfTheWildElementalToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/MarduStrikeLeaderWarriorToken.java b/Mage/src/main/java/mage/game/permanent/token/MarduStrikeLeaderWarriorToken.java index d75085fcd9..2db209cf0a 100644 --- a/Mage/src/main/java/mage/game/permanent/token/MarduStrikeLeaderWarriorToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/MarduStrikeLeaderWarriorToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class MarduStrikeLeaderWarriorToken extends Token { +public class MarduStrikeLeaderWarriorToken extends TokenImpl { public MarduStrikeLeaderWarriorToken() { super("Warrior", "2/1 black Warrior creature token"); @@ -46,4 +46,11 @@ public class MarduStrikeLeaderWarriorToken extends Token { toughness = new MageInt(1); } + public MarduStrikeLeaderWarriorToken(final MarduStrikeLeaderWarriorToken token) { + super(token); + } + + public MarduStrikeLeaderWarriorToken copy() { + return new MarduStrikeLeaderWarriorToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/MaritLageToken.java b/Mage/src/main/java/mage/game/permanent/token/MaritLageToken.java index ad00e11797..18e28a2808 100644 --- a/Mage/src/main/java/mage/game/permanent/token/MaritLageToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/MaritLageToken.java @@ -38,7 +38,7 @@ import mage.constants.SuperType; * * @author spjspj */ -public class MaritLageToken extends Token { +public class MaritLageToken extends TokenImpl { public MaritLageToken() { super("Marit Lage", "legendary 20/20 black Avatar creature token with flying and indestructible named Marit Lage"); @@ -55,4 +55,12 @@ public class MaritLageToken extends Token { this.addAbility(IndestructibleAbility.getInstance()); } + + public MaritLageToken(final MaritLageToken token) { + super(token); + } + + public MaritLageToken copy() { + return new MaritLageToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/MasterOfWavesElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/MasterOfWavesElementalToken.java index 213155bbeb..c49ecd27db 100644 --- a/Mage/src/main/java/mage/game/permanent/token/MasterOfWavesElementalToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/MasterOfWavesElementalToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class MasterOfWavesElementalToken extends Token { +public class MasterOfWavesElementalToken extends TokenImpl { public MasterOfWavesElementalToken() { super("Elemental", "1/0 blue Elemental creature"); @@ -47,4 +47,12 @@ public class MasterOfWavesElementalToken extends Token { this.power = new MageInt(1); this.toughness = new MageInt(0); } + + public MasterOfWavesElementalToken(final MasterOfWavesElementalToken token) { + super(token); + } + + public MasterOfWavesElementalToken copy() { + return new MasterOfWavesElementalToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/MelokuTheCloudedMirrorToken.java b/Mage/src/main/java/mage/game/permanent/token/MelokuTheCloudedMirrorToken.java index 245023dd23..fcee01d96c 100644 --- a/Mage/src/main/java/mage/game/permanent/token/MelokuTheCloudedMirrorToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/MelokuTheCloudedMirrorToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class MelokuTheCloudedMirrorToken extends Token { +public class MelokuTheCloudedMirrorToken extends TokenImpl { public MelokuTheCloudedMirrorToken() { super("Illusion", "1/1 blue Illusion creature token with flying"); @@ -47,4 +47,12 @@ public class MelokuTheCloudedMirrorToken extends Token { toughness = new MageInt(1); addAbility(FlyingAbility.getInstance()); } + + public MelokuTheCloudedMirrorToken(final MelokuTheCloudedMirrorToken token) { + super(token); + } + + public MelokuTheCloudedMirrorToken copy() { + return new MelokuTheCloudedMirrorToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/MercyKillingToken.java b/Mage/src/main/java/mage/game/permanent/token/MercyKillingToken.java index 8eee24b0dc..d9c11cd3e1 100644 --- a/Mage/src/main/java/mage/game/permanent/token/MercyKillingToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/MercyKillingToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class MercyKillingToken extends Token { +public class MercyKillingToken extends TokenImpl { public MercyKillingToken() { super("Elf Warrior", "1/1 green and white Elf Warrior creature token"); @@ -47,4 +47,12 @@ public class MercyKillingToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public MercyKillingToken(final MercyKillingToken token) { + super(token); + } + + public MercyKillingToken copy() { + return new MercyKillingToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/MerfolkHexproofToken.java b/Mage/src/main/java/mage/game/permanent/token/MerfolkHexproofToken.java index 53a6a70403..0c38802075 100644 --- a/Mage/src/main/java/mage/game/permanent/token/MerfolkHexproofToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/MerfolkHexproofToken.java @@ -16,10 +16,8 @@ import mage.constants.SubType; * @author TacomenX */ -public class MerfolkHexproofToken extends Token { - - - +public class MerfolkHexproofToken extends TokenImpl { + public MerfolkHexproofToken() { super("Merfolk", "1/1 blue Merfolk creature token with hexproof"); this.cardType.add(CardType.CREATURE); @@ -30,4 +28,12 @@ public class MerfolkHexproofToken extends Token { this.addAbility(HexproofAbility.getInstance()); } + public MerfolkHexproofToken(final MerfolkHexproofToken token) { + super(token); + } + + public MerfolkHexproofToken copy() { + return new MerfolkHexproofToken(this); + } + } \ No newline at end of file diff --git a/Mage/src/main/java/mage/game/permanent/token/MerfolkToken.java b/Mage/src/main/java/mage/game/permanent/token/MerfolkToken.java index 83eab8422c..4f3dfe932c 100644 --- a/Mage/src/main/java/mage/game/permanent/token/MerfolkToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/MerfolkToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class MerfolkToken extends Token { +public class MerfolkToken extends TokenImpl { public MerfolkToken() { super("Merfolk", "1/1 blue Merfolk creature token"); @@ -45,4 +45,12 @@ public class MerfolkToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public MerfolkToken(final MerfolkToken token) { + super(token); + } + + public MerfolkToken copy() { + return new MerfolkToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/MerfolkWizardToken.java b/Mage/src/main/java/mage/game/permanent/token/MerfolkWizardToken.java index c9d8e835d0..41f5b9ff5f 100644 --- a/Mage/src/main/java/mage/game/permanent/token/MerfolkWizardToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/MerfolkWizardToken.java @@ -8,7 +8,7 @@ import mage.constants.SubType; * * @author Loki */ -public class MerfolkWizardToken extends Token { +public class MerfolkWizardToken extends TokenImpl { public MerfolkWizardToken() { super("Merfolk Wizard", "1/1 blue Merfolk Wizard creature token"); @@ -19,4 +19,12 @@ public class MerfolkWizardToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public MerfolkWizardToken(final MerfolkWizardToken token) { + super(token); + } + + public MerfolkWizardToken copy() { + return new MerfolkWizardToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/MetallurgicSummoningsConstructToken.java b/Mage/src/main/java/mage/game/permanent/token/MetallurgicSummoningsConstructToken.java index e148918ef7..f9e94bf52f 100644 --- a/Mage/src/main/java/mage/game/permanent/token/MetallurgicSummoningsConstructToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/MetallurgicSummoningsConstructToken.java @@ -36,7 +36,7 @@ import mage.util.RandomUtil; * * @author spjspj */ -public class MetallurgicSummoningsConstructToken extends Token { +public class MetallurgicSummoningsConstructToken extends TokenImpl { public MetallurgicSummoningsConstructToken() { this (1); @@ -51,4 +51,11 @@ public class MetallurgicSummoningsConstructToken extends Token { power = new MageInt(xValue); toughness = new MageInt(xValue); } + public MetallurgicSummoningsConstructToken(final MetallurgicSummoningsConstructToken token) { + super(token); + } + + public MetallurgicSummoningsConstructToken copy() { + return new MetallurgicSummoningsConstructToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/MinionToken.java b/Mage/src/main/java/mage/game/permanent/token/MinionToken.java index c885889f5f..9742b4fe9c 100644 --- a/Mage/src/main/java/mage/game/permanent/token/MinionToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/MinionToken.java @@ -36,7 +36,7 @@ import mage.constants.SubType; * * @author FenrisulfrX */ -public class MinionToken extends Token { +public class MinionToken extends TokenImpl { public MinionToken() { this("DDE"); @@ -51,4 +51,12 @@ public class MinionToken extends Token { power = new MageInt(0); toughness = new MageInt(0); } + + public MinionToken(final MinionToken token) { + super(token); + } + + public MinionToken copy() { + return new MinionToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/MinionToken2.java b/Mage/src/main/java/mage/game/permanent/token/MinionToken2.java index 31a5aed644..6c4d801509 100644 --- a/Mage/src/main/java/mage/game/permanent/token/MinionToken2.java +++ b/Mage/src/main/java/mage/game/permanent/token/MinionToken2.java @@ -36,7 +36,7 @@ import mage.constants.SubType; * * @author Quercitron */ -public class MinionToken2 extends Token { +public class MinionToken2 extends TokenImpl { public MinionToken2() { this("PCY"); @@ -51,4 +51,12 @@ public class MinionToken2 extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public MinionToken2(final MinionToken2 token) { + super(token); + } + + public MinionToken2 copy() { + return new MinionToken2(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/MinorDemonToken.java b/Mage/src/main/java/mage/game/permanent/token/MinorDemonToken.java index 6d136c01d4..05c406725b 100644 --- a/Mage/src/main/java/mage/game/permanent/token/MinorDemonToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/MinorDemonToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class MinorDemonToken extends Token { +public class MinorDemonToken extends TokenImpl { public MinorDemonToken() { super("Minor Demon", "1/1 black and red Demon creature token named Minor Demon"); @@ -46,4 +46,12 @@ public class MinorDemonToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public MinorDemonToken(final MinorDemonToken token) { + super(token); + } + + public MinorDemonToken copy() { + return new MinorDemonToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/MoltenBirthElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/MoltenBirthElementalToken.java index f0ae482dd8..b8b6f84647 100644 --- a/Mage/src/main/java/mage/game/permanent/token/MoltenBirthElementalToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/MoltenBirthElementalToken.java @@ -36,7 +36,7 @@ import mage.util.RandomUtil; * * @author spjspj */ -public class MoltenBirthElementalToken extends Token { +public class MoltenBirthElementalToken extends TokenImpl { public MoltenBirthElementalToken() { super("Elemental", "1/1 red Elemental creature"); @@ -48,4 +48,12 @@ public class MoltenBirthElementalToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public MoltenBirthElementalToken(final MoltenBirthElementalToken token) { + super(token); + } + + public MoltenBirthElementalToken copy() { + return new MoltenBirthElementalToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/MonasteryMentorToken.java b/Mage/src/main/java/mage/game/permanent/token/MonasteryMentorToken.java index bcec81664d..9de17bf597 100644 --- a/Mage/src/main/java/mage/game/permanent/token/MonasteryMentorToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/MonasteryMentorToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.ProwessAbility; * * @author spjspj */ -public class MonasteryMentorToken extends Token { +public class MonasteryMentorToken extends TokenImpl { public MonasteryMentorToken() { super("Monk", "1/1 white Monk creature token with prowess"); @@ -47,4 +47,12 @@ public class MonasteryMentorToken extends Token { toughness = new MageInt(1); this.addAbility(new ProwessAbility()); } + + public MonasteryMentorToken(final MonasteryMentorToken token) { + super(token); + } + + public MonasteryMentorToken copy() { + return new MonasteryMentorToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/MyrToken.java b/Mage/src/main/java/mage/game/permanent/token/MyrToken.java index 11b46d905f..039d32d155 100644 --- a/Mage/src/main/java/mage/game/permanent/token/MyrToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/MyrToken.java @@ -8,7 +8,7 @@ import mage.MageInt; import mage.constants.CardType; import mage.constants.SubType; -public class MyrToken extends Token { +public class MyrToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -17,7 +17,7 @@ public class MyrToken extends Token { } public MyrToken() { - this(null); + this((String)null); } public MyrToken(String expansionSetCode) { @@ -31,4 +31,12 @@ public class MyrToken extends Token { availableImageSetCodes = tokenImageSets; } + + public MyrToken(final MyrToken token) { + super(token); + } + + public MyrToken copy() { + return new MyrToken(this); + } } \ No newline at end of file diff --git a/Mage/src/main/java/mage/game/permanent/token/MysticGenesisOozeToken.java b/Mage/src/main/java/mage/game/permanent/token/MysticGenesisOozeToken.java index 8af9bf8fcc..23b03f4a9f 100644 --- a/Mage/src/main/java/mage/game/permanent/token/MysticGenesisOozeToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/MysticGenesisOozeToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class MysticGenesisOozeToken extends Token { +public class MysticGenesisOozeToken extends TokenImpl { public MysticGenesisOozeToken() { this(0); @@ -49,4 +49,12 @@ public class MysticGenesisOozeToken extends Token { toughness = new MageInt(xValue); setOriginalExpansionSetCode("RTR"); } + + public MysticGenesisOozeToken(final MysticGenesisOozeToken token) { + super(token); + } + + public MysticGenesisOozeToken copy() { + return new MysticGenesisOozeToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/NahiriTheLithomancerEquipmentToken.java b/Mage/src/main/java/mage/game/permanent/token/NahiriTheLithomancerEquipmentToken.java index c2c0ac2822..a22b4acf57 100644 --- a/Mage/src/main/java/mage/game/permanent/token/NahiriTheLithomancerEquipmentToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/NahiriTheLithomancerEquipmentToken.java @@ -46,7 +46,7 @@ import mage.constants.Zone; * * @author spjspj */ -public class NahiriTheLithomancerEquipmentToken extends Token { +public class NahiriTheLithomancerEquipmentToken extends TokenImpl { public NahiriTheLithomancerEquipmentToken() { super("Stoneforged Blade", "colorless Equipment artifact token named Stoneforged Blade with indestructible, \"Equipped creature gets +5/+5 and has double strike,\" and equip {0}"); @@ -61,4 +61,12 @@ public class NahiriTheLithomancerEquipmentToken extends Token { this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(0))); } + + public NahiriTheLithomancerEquipmentToken(final NahiriTheLithomancerEquipmentToken token) { + super(token); + } + + public NahiriTheLithomancerEquipmentToken copy() { + return new NahiriTheLithomancerEquipmentToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/NestOfScarabsBlackInsectToken.java b/Mage/src/main/java/mage/game/permanent/token/NestOfScarabsBlackInsectToken.java index 6655e1fc44..8e90a6b14a 100644 --- a/Mage/src/main/java/mage/game/permanent/token/NestOfScarabsBlackInsectToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/NestOfScarabsBlackInsectToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class NestOfScarabsBlackInsectToken extends Token { +public class NestOfScarabsBlackInsectToken extends TokenImpl { public NestOfScarabsBlackInsectToken() { super("Insect", "1/1 black Insect creature token"); @@ -45,4 +45,12 @@ public class NestOfScarabsBlackInsectToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public NestOfScarabsBlackInsectToken(final NestOfScarabsBlackInsectToken token) { + super(token); + } + + public NestOfScarabsBlackInsectToken copy() { + return new NestOfScarabsBlackInsectToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/NighteyesTheDesecratorToken.java b/Mage/src/main/java/mage/game/permanent/token/NighteyesTheDesecratorToken.java index 49efc5c50c..5e47f709e7 100644 --- a/Mage/src/main/java/mage/game/permanent/token/NighteyesTheDesecratorToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/NighteyesTheDesecratorToken.java @@ -43,7 +43,7 @@ import mage.target.common.TargetCardInGraveyard; * * @author spjspj */ -public class NighteyesTheDesecratorToken extends Token { +public class NighteyesTheDesecratorToken extends TokenImpl { public NighteyesTheDesecratorToken() { super("Nighteyes the Desecrator", ""); @@ -59,4 +59,12 @@ public class NighteyesTheDesecratorToken extends Token { ability.addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card from a graveyard"))); this.addAbility(ability); } + + public NighteyesTheDesecratorToken(final NighteyesTheDesecratorToken token) { + super(token); + } + + public NighteyesTheDesecratorToken copy() { + return new NighteyesTheDesecratorToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/NightwingHorrorToken.java b/Mage/src/main/java/mage/game/permanent/token/NightwingHorrorToken.java index d51bdf0a37..c403a46feb 100644 --- a/Mage/src/main/java/mage/game/permanent/token/NightwingHorrorToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/NightwingHorrorToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class NightwingHorrorToken extends Token { +public class NightwingHorrorToken extends TokenImpl { public NightwingHorrorToken() { super("Horror", "1/1 blue and black Horror creature token with flying"); @@ -50,4 +50,12 @@ public class NightwingHorrorToken extends Token { // Flying this.addAbility(FlyingAbility.getInstance()); } + + public NightwingHorrorToken(final NightwingHorrorToken token) { + super(token); + } + + public NightwingHorrorToken copy() { + return new NightwingHorrorToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/NissaSageAnimistToken.java b/Mage/src/main/java/mage/game/permanent/token/NissaSageAnimistToken.java index f5a15e5589..970237db34 100644 --- a/Mage/src/main/java/mage/game/permanent/token/NissaSageAnimistToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/NissaSageAnimistToken.java @@ -35,7 +35,7 @@ import mage.constants.SuperType; * * @author spjspj */ -public class NissaSageAnimistToken extends Token { +public class NissaSageAnimistToken extends TokenImpl { public NissaSageAnimistToken() { super("Ashaya, the Awoken World", "legendary 4/4 green Elemental creature token named Ashaya, the Awoken World"); @@ -47,4 +47,12 @@ public class NissaSageAnimistToken extends Token { this.getSubtype(null).add(SubType.ELEMENTAL); this.addCardType(CardType.CREATURE); } + + public NissaSageAnimistToken(final NissaSageAnimistToken token) { + super(token); + } + + public NissaSageAnimistToken copy() { + return new NissaSageAnimistToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/OctopusToken.java b/Mage/src/main/java/mage/game/permanent/token/OctopusToken.java index 63c3990468..f0886b8fab 100644 --- a/Mage/src/main/java/mage/game/permanent/token/OctopusToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/OctopusToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class OctopusToken extends Token { +public class OctopusToken extends TokenImpl { public OctopusToken() { super("Octopus", "8/8 blue Octopus creature token"); @@ -46,4 +46,12 @@ public class OctopusToken extends Token { toughness = new MageInt(8); this.setOriginalExpansionSetCode("BFZ"); } + + public OctopusToken(final OctopusToken token) { + super(token); + } + + public OctopusToken copy() { + return new OctopusToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/OgreToken.java b/Mage/src/main/java/mage/game/permanent/token/OgreToken.java index a32e6075e0..ecc25928cc 100644 --- a/Mage/src/main/java/mage/game/permanent/token/OgreToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/OgreToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class OgreToken extends Token { +public class OgreToken extends TokenImpl { public OgreToken() { super("Ogre", "3/3 red Ogre creature"); @@ -45,4 +45,12 @@ public class OgreToken extends Token { power = new MageInt(3); toughness = new MageInt(3); } + + public OgreToken(final OgreToken token) { + super(token); + } + + public OgreToken copy() { + return new OgreToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/OmnathElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/OmnathElementalToken.java index d6c55c9cbe..952ba5e035 100644 --- a/Mage/src/main/java/mage/game/permanent/token/OmnathElementalToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/OmnathElementalToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class OmnathElementalToken extends Token { +public class OmnathElementalToken extends TokenImpl { public OmnathElementalToken() { super("Elemental", "5/5 red and green Elemental creature token"); @@ -49,4 +49,12 @@ public class OmnathElementalToken extends Token { power = new MageInt(5); toughness = new MageInt(5); } + public OmnathElementalToken(final OmnathElementalToken token) { + super(token); + } + + public OmnathElementalToken copy() { + return new OmnathElementalToken(this); + } + } diff --git a/Mage/src/main/java/mage/game/permanent/token/OneDozenEyesBeastToken.java b/Mage/src/main/java/mage/game/permanent/token/OneDozenEyesBeastToken.java index 9aebc235cf..dc936b7054 100644 --- a/Mage/src/main/java/mage/game/permanent/token/OneDozenEyesBeastToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/OneDozenEyesBeastToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class OneDozenEyesBeastToken extends Token { +public class OneDozenEyesBeastToken extends TokenImpl { public OneDozenEyesBeastToken() { super("Beast", "5/5 green Beast creature token"); @@ -46,4 +46,12 @@ public class OneDozenEyesBeastToken extends Token { toughness = new MageInt(5); } + public OneDozenEyesBeastToken(final OneDozenEyesBeastToken token) { + super(token); + } + + public OneDozenEyesBeastToken copy() { + return new OneDozenEyesBeastToken(this); + } + } diff --git a/Mage/src/main/java/mage/game/permanent/token/OonaQueenFaerieToken.java b/Mage/src/main/java/mage/game/permanent/token/OonaQueenFaerieToken.java index cd68f66ad0..ab99e931ca 100644 --- a/Mage/src/main/java/mage/game/permanent/token/OonaQueenFaerieToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/OonaQueenFaerieToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class OonaQueenFaerieToken extends Token { +public class OonaQueenFaerieToken extends TokenImpl { public OonaQueenFaerieToken() { super("Faerie Rogue", "1/1 blue and black Faerie Rogue creature token with flying"); @@ -49,4 +49,11 @@ public class OonaQueenFaerieToken extends Token { toughness = new MageInt(1); this.addAbility(FlyingAbility.getInstance()); } + public OonaQueenFaerieToken(final OonaQueenFaerieToken token) { + super(token); + } + + public OonaQueenFaerieToken copy() { + return new OonaQueenFaerieToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/Ooze2Token.java b/Mage/src/main/java/mage/game/permanent/token/Ooze2Token.java index 93fefc3e37..8e952c5c95 100644 --- a/Mage/src/main/java/mage/game/permanent/token/Ooze2Token.java +++ b/Mage/src/main/java/mage/game/permanent/token/Ooze2Token.java @@ -37,7 +37,7 @@ import mage.abilities.effects.common.CreateTokenEffect; * * @author spjspj */ -public class Ooze2Token extends Token { +public class Ooze2Token extends TokenImpl { public Ooze2Token() { super("Ooze", "2/2 green Ooze creature tokens with \"When this creature is put into a graveyard, create two 1/1 green Ooze creature tokens.\""); @@ -48,4 +48,12 @@ public class Ooze2Token extends Token { toughness = new MageInt(2); this.addAbility(new DiesTriggeredAbility(new CreateTokenEffect(new OozeToken(1, 1), 2), false)); } + + public Ooze2Token(final Ooze2Token token) { + super(token); + } + + public Ooze2Token copy() { + return new Ooze2Token(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/OozeToken.java b/Mage/src/main/java/mage/game/permanent/token/OozeToken.java index cf5c18d6d9..48c5f5beea 100644 --- a/Mage/src/main/java/mage/game/permanent/token/OozeToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/OozeToken.java @@ -4,7 +4,7 @@ import mage.MageInt; import mage.constants.CardType; import mage.constants.SubType; -public class OozeToken extends Token { +public class OozeToken extends TokenImpl { public OozeToken(int power, int toughness) { super("Ooze", power + "/" + toughness + " green ooze creature token"); @@ -23,4 +23,12 @@ public class OozeToken extends Token { power = new MageInt(0); toughness = new MageInt(0); } + + public OozeToken(final OozeToken token) { + super(token); + } + + public OozeToken copy() { + return new OozeToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/OphiomancerSnakeToken.java b/Mage/src/main/java/mage/game/permanent/token/OphiomancerSnakeToken.java index 0e6d7ca0f6..dfb9e0e6aa 100644 --- a/Mage/src/main/java/mage/game/permanent/token/OphiomancerSnakeToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/OphiomancerSnakeToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.DeathtouchAbility; * * @author spjspj */ -public class OphiomancerSnakeToken extends Token { +public class OphiomancerSnakeToken extends TokenImpl { public OphiomancerSnakeToken() { super("Snake", "1/1 black Snake creature token with deathtouch"); @@ -48,4 +48,11 @@ public class OphiomancerSnakeToken extends Token { this.addAbility(DeathtouchAbility.getInstance()); } + public OphiomancerSnakeToken(final OphiomancerSnakeToken token) { + super(token); + } + + public OphiomancerSnakeToken copy() { + return new OphiomancerSnakeToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/OrderedMigrationBirdToken.java b/Mage/src/main/java/mage/game/permanent/token/OrderedMigrationBirdToken.java index 12c7878011..267811e887 100644 --- a/Mage/src/main/java/mage/game/permanent/token/OrderedMigrationBirdToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/OrderedMigrationBirdToken.java @@ -36,7 +36,7 @@ import mage.constants.SubType; * * @author LoneFox */ -public class OrderedMigrationBirdToken extends Token { +public class OrderedMigrationBirdToken extends TokenImpl { public OrderedMigrationBirdToken() { super("Bird", "1/1 blue Bird creature token with flying"); @@ -47,4 +47,12 @@ public class OrderedMigrationBirdToken extends Token { toughness = new MageInt(1); addAbility(FlyingAbility.getInstance()); } + + public OrderedMigrationBirdToken(final OrderedMigrationBirdToken token) { + super(token); + } + + public OrderedMigrationBirdToken copy() { + return new OrderedMigrationBirdToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/OviyaPashiriSageLifecrafterToken.java b/Mage/src/main/java/mage/game/permanent/token/OviyaPashiriSageLifecrafterToken.java index 6a6ba3d58e..65b16d9b85 100644 --- a/Mage/src/main/java/mage/game/permanent/token/OviyaPashiriSageLifecrafterToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/OviyaPashiriSageLifecrafterToken.java @@ -37,7 +37,7 @@ import mage.util.RandomUtil; * * @author spjspj */ -public class OviyaPashiriSageLifecrafterToken extends Token { +public class OviyaPashiriSageLifecrafterToken extends TokenImpl { final static FilterControlledCreaturePermanent filterCreature = new FilterControlledCreaturePermanent("creatures you control"); @@ -55,4 +55,12 @@ public class OviyaPashiriSageLifecrafterToken extends Token { power = new MageInt(number); toughness = new MageInt(number); } + + public OviyaPashiriSageLifecrafterToken(final OviyaPashiriSageLifecrafterToken token) { + super(token); + } + + public OviyaPashiriSageLifecrafterToken copy() { + return new OviyaPashiriSageLifecrafterToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/OwlToken.java b/Mage/src/main/java/mage/game/permanent/token/OwlToken.java index 417e12c245..19e5e8dccc 100644 --- a/Mage/src/main/java/mage/game/permanent/token/OwlToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/OwlToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class OwlToken extends Token { +public class OwlToken extends TokenImpl { public OwlToken() { super("Bird", "1/1 blue Bird creature token with flying"); @@ -47,4 +47,12 @@ public class OwlToken extends Token { toughness = new MageInt(1); this.addAbility(FlyingAbility.getInstance()); } + + public OwlToken(final OwlToken token) { + super(token); + } + + public OwlToken copy() { + return new OwlToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/PatagiaViperSnakeToken.java b/Mage/src/main/java/mage/game/permanent/token/PatagiaViperSnakeToken.java index 48d10553b6..2a2c25fd7c 100644 --- a/Mage/src/main/java/mage/game/permanent/token/PatagiaViperSnakeToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/PatagiaViperSnakeToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class PatagiaViperSnakeToken extends Token { +public class PatagiaViperSnakeToken extends TokenImpl { public PatagiaViperSnakeToken() { super("Snake", "1/1 green and blue Snake creature token"); @@ -47,4 +47,12 @@ public class PatagiaViperSnakeToken extends Token { toughness = new MageInt(1); } + public PatagiaViperSnakeToken(final PatagiaViperSnakeToken token) { + super(token); + } + + public PatagiaViperSnakeToken copy() { + return new PatagiaViperSnakeToken(this); + } + } diff --git a/Mage/src/main/java/mage/game/permanent/token/PegasusToken.java b/Mage/src/main/java/mage/game/permanent/token/PegasusToken.java index 1733333a9f..9a9e8324da 100644 --- a/Mage/src/main/java/mage/game/permanent/token/PegasusToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/PegasusToken.java @@ -38,7 +38,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author LoneFox */ -public class PegasusToken extends Token { +public class PegasusToken extends TokenImpl { public PegasusToken() { super("Pegasus", "1/1 white Pegasus creature token with flying"); @@ -50,4 +50,12 @@ public class PegasusToken extends Token { addAbility(FlyingAbility.getInstance()); setOriginalExpansionSetCode("C14"); } + + public PegasusToken(final PegasusToken token) { + super(token); + } + + public PegasusToken copy() { + return new PegasusToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/PentaviteToken.java b/Mage/src/main/java/mage/game/permanent/token/PentaviteToken.java index e53ed24881..15cdaf2a9b 100644 --- a/Mage/src/main/java/mage/game/permanent/token/PentaviteToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/PentaviteToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class PentaviteToken extends Token { +public class PentaviteToken extends TokenImpl { public PentaviteToken() { super("Pentavite", "1/1 colorless Pentavite artifact creature token with flying"); @@ -48,4 +48,11 @@ public class PentaviteToken extends Token { this.addAbility(FlyingAbility.getInstance()); } + public PentaviteToken(final PentaviteToken token) { + super(token); + } + + public PentaviteToken copy() { + return new PentaviteToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/PenumbraBobcatToken.java b/Mage/src/main/java/mage/game/permanent/token/PenumbraBobcatToken.java index 9890e8b124..068bd48506 100644 --- a/Mage/src/main/java/mage/game/permanent/token/PenumbraBobcatToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/PenumbraBobcatToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class PenumbraBobcatToken extends Token { +public class PenumbraBobcatToken extends TokenImpl { public PenumbraBobcatToken() { super("Cat", "2/1 black Cat creature token"); @@ -45,4 +45,12 @@ public class PenumbraBobcatToken extends Token { power = new MageInt(2); toughness = new MageInt(1); } + + public PenumbraBobcatToken(final PenumbraBobcatToken token) { + super(token); + } + + public PenumbraBobcatToken copy() { + return new PenumbraBobcatToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/PenumbraKavuToken.java b/Mage/src/main/java/mage/game/permanent/token/PenumbraKavuToken.java index a68d76f931..f513d28611 100644 --- a/Mage/src/main/java/mage/game/permanent/token/PenumbraKavuToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/PenumbraKavuToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class PenumbraKavuToken extends Token { +public class PenumbraKavuToken extends TokenImpl { public PenumbraKavuToken() { super("Kavu", "3/3 black Kavu creature token"); @@ -45,4 +45,12 @@ public class PenumbraKavuToken extends Token { power = new MageInt(3); toughness = new MageInt(3); } + + public PenumbraKavuToken(final PenumbraKavuToken token) { + super(token); + } + + public PenumbraKavuToken copy() { + return new PenumbraKavuToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/PenumbraSpiderToken.java b/Mage/src/main/java/mage/game/permanent/token/PenumbraSpiderToken.java index bed3746093..64d9e91ac4 100644 --- a/Mage/src/main/java/mage/game/permanent/token/PenumbraSpiderToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/PenumbraSpiderToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.ReachAbility; * * @author spjspj */ -public class PenumbraSpiderToken extends Token { +public class PenumbraSpiderToken extends TokenImpl { public PenumbraSpiderToken() { @@ -48,4 +48,12 @@ public class PenumbraSpiderToken extends Token { toughness = new MageInt(4); addAbility(ReachAbility.getInstance()); } + + public PenumbraSpiderToken(final PenumbraSpiderToken token) { + super(token); + } + + public PenumbraSpiderToken copy() { + return new PenumbraSpiderToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/PenumbraWurmToken.java b/Mage/src/main/java/mage/game/permanent/token/PenumbraWurmToken.java index 7ed681f518..1b199e4a8f 100644 --- a/Mage/src/main/java/mage/game/permanent/token/PenumbraWurmToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/PenumbraWurmToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.TrampleAbility; * * @author spjspj */ -public class PenumbraWurmToken extends Token { +public class PenumbraWurmToken extends TokenImpl { public PenumbraWurmToken() { super("Wurm", "6/6 black Wurm creature token with trample"); @@ -48,4 +48,12 @@ public class PenumbraWurmToken extends Token { this.addAbility(TrampleAbility.getInstance()); } + + public PenumbraWurmToken(final PenumbraWurmToken token) { + super(token); + } + + public PenumbraWurmToken copy() { + return new PenumbraWurmToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/PestToken.java b/Mage/src/main/java/mage/game/permanent/token/PestToken.java index 3fc141f199..0684dc2e38 100644 --- a/Mage/src/main/java/mage/game/permanent/token/PestToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/PestToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class PestToken extends Token { +public class PestToken extends TokenImpl { public PestToken() { super("Pest", "0/1 colorless Pest artifact creature token"); @@ -46,4 +46,11 @@ public class PestToken extends Token { toughness = new MageInt(1); } + public PestToken(final PestToken token) { + super(token); + } + + public PestToken copy() { + return new PestToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/PharikaSnakeToken.java b/Mage/src/main/java/mage/game/permanent/token/PharikaSnakeToken.java index ae279bf775..437fce1d4d 100644 --- a/Mage/src/main/java/mage/game/permanent/token/PharikaSnakeToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/PharikaSnakeToken.java @@ -35,7 +35,7 @@ import mage.abilities.keyword.DeathtouchAbility; * * @author spjspj */ -public class PharikaSnakeToken extends Token { +public class PharikaSnakeToken extends TokenImpl { public PharikaSnakeToken() { super("Snake", "1/1 black and green Snake enchantment creature token with deathtouch", 1, 1); @@ -47,4 +47,11 @@ public class PharikaSnakeToken extends Token { color.setGreen(true); this.addAbility(DeathtouchAbility.getInstance()); } + public PharikaSnakeToken(final PharikaSnakeToken token) { + super(token); + } + + public PharikaSnakeToken copy() { + return new PharikaSnakeToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/PhyrexianRebirthHorrorToken.java b/Mage/src/main/java/mage/game/permanent/token/PhyrexianRebirthHorrorToken.java index c7f05e9862..64ffb4bd0c 100644 --- a/Mage/src/main/java/mage/game/permanent/token/PhyrexianRebirthHorrorToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/PhyrexianRebirthHorrorToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class PhyrexianRebirthHorrorToken extends Token { +public class PhyrexianRebirthHorrorToken extends TokenImpl { public PhyrexianRebirthHorrorToken() { super("Horror", "X/X colorless Horror artifact creature token"); @@ -45,4 +45,12 @@ public class PhyrexianRebirthHorrorToken extends Token { power = new MageInt(0); toughness = new MageInt(0); } + + public PhyrexianRebirthHorrorToken(final PhyrexianRebirthHorrorToken token) { + super(token); + } + + public PhyrexianRebirthHorrorToken copy() { + return new PhyrexianRebirthHorrorToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/PincherToken.java b/Mage/src/main/java/mage/game/permanent/token/PincherToken.java index 35c7e807b6..ea7bf26ca2 100644 --- a/Mage/src/main/java/mage/game/permanent/token/PincherToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/PincherToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class PincherToken extends Token { +public class PincherToken extends TokenImpl { public PincherToken() { super("Pincher", "2/2 colorless Pincher creature token"); @@ -46,5 +46,11 @@ public class PincherToken extends Token { toughness = new MageInt(2); } + public PincherToken(final PincherToken token) { + super(token); + } + public PincherToken copy() { + return new PincherToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/PirateToken.java b/Mage/src/main/java/mage/game/permanent/token/PirateToken.java index fe4d04270f..6641e301c6 100644 --- a/Mage/src/main/java/mage/game/permanent/token/PirateToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/PirateToken.java @@ -36,7 +36,7 @@ import mage.constants.SubType; * * @author TheElk801 */ -public class PirateToken extends Token { +public class PirateToken extends TokenImpl { public PirateToken() { super("Pirate", "2/2 black Pirate creature token with menace"); @@ -47,4 +47,12 @@ public class PirateToken extends Token { toughness = new MageInt(2); addAbility(new MenaceAbility()); } + + public PirateToken(final PirateToken token) { + super(token); + } + + public PirateToken copy() { + return new PirateToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/PlantToken.java b/Mage/src/main/java/mage/game/permanent/token/PlantToken.java index b6399a6f57..bec6aa61af 100644 --- a/Mage/src/main/java/mage/game/permanent/token/PlantToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/PlantToken.java @@ -35,7 +35,7 @@ import mage.MageInt; import mage.constants.CardType; import mage.constants.SubType; -public class PlantToken extends Token { +public class PlantToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -53,4 +53,12 @@ public class PlantToken extends Token { availableImageSetCodes = tokenImageSets; } + + public PlantToken(final PlantToken token) { + super(token); + } + + public PlantToken copy() { + return new PlantToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/PongifyApeToken.java b/Mage/src/main/java/mage/game/permanent/token/PongifyApeToken.java index e88c758ef0..fdf4982461 100644 --- a/Mage/src/main/java/mage/game/permanent/token/PongifyApeToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/PongifyApeToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class PongifyApeToken extends Token { +public class PongifyApeToken extends TokenImpl { public PongifyApeToken() { super("Ape", "3/3 green Ape creature token"); @@ -45,4 +45,12 @@ public class PongifyApeToken extends Token { power = new MageInt(3); toughness = new MageInt(3); } + + public PongifyApeToken(final PongifyApeToken token) { + super(token); + } + + public PongifyApeToken copy() { + return new PongifyApeToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/PrismToken.java b/Mage/src/main/java/mage/game/permanent/token/PrismToken.java index 814082f49a..5046c675d5 100644 --- a/Mage/src/main/java/mage/game/permanent/token/PrismToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/PrismToken.java @@ -38,7 +38,7 @@ import mage.constants.SubType; * * @author fireshoes */ -public class PrismToken extends Token { +public class PrismToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); diff --git a/Mage/src/main/java/mage/game/permanent/token/PromiseOfPowerDemonToken.java b/Mage/src/main/java/mage/game/permanent/token/PromiseOfPowerDemonToken.java index cd5fa9d064..9df33285fa 100644 --- a/Mage/src/main/java/mage/game/permanent/token/PromiseOfPowerDemonToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/PromiseOfPowerDemonToken.java @@ -36,11 +36,12 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class PromiseOfPowerDemonToken extends Token { +public class PromiseOfPowerDemonToken extends TokenImpl { public PromiseOfPowerDemonToken() { this(1); } + public PromiseOfPowerDemonToken(int xValue) { super("Demon", "X/X black Demon creature token with flying"); setOriginalExpansionSetCode("C14"); @@ -53,4 +54,12 @@ public class PromiseOfPowerDemonToken extends Token { addAbility(FlyingAbility.getInstance()); } + + public PromiseOfPowerDemonToken(final PromiseOfPowerDemonToken token) { + super(token); + } + + public PromiseOfPowerDemonToken copy() { + return new PromiseOfPowerDemonToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/ProsshKoboldToken.java b/Mage/src/main/java/mage/game/permanent/token/ProsshKoboldToken.java index cbc506185f..0da7d0e5bf 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ProsshKoboldToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ProsshKoboldToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class ProsshKoboldToken extends Token { +public class ProsshKoboldToken extends TokenImpl { public ProsshKoboldToken() { super("Kobolds of Kher Keep", "0/1 red Kobold creature tokens"); @@ -45,4 +45,12 @@ public class ProsshKoboldToken extends Token { power = new MageInt(0); toughness = new MageInt(1); } + + public ProsshKoboldToken(final ProsshKoboldToken token) { + super(token); + } + + public ProsshKoboldToken copy() { + return new ProsshKoboldToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/QueenMarchesaAssassinToken.java b/Mage/src/main/java/mage/game/permanent/token/QueenMarchesaAssassinToken.java index 44247fafd6..aff128d015 100644 --- a/Mage/src/main/java/mage/game/permanent/token/QueenMarchesaAssassinToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/QueenMarchesaAssassinToken.java @@ -37,7 +37,7 @@ import mage.abilities.keyword.HasteAbility; * * @author spjspj */ -public class QueenMarchesaAssassinToken extends Token { +public class QueenMarchesaAssassinToken extends TokenImpl { public QueenMarchesaAssassinToken() { super("Assassin", "1/1 black Assassin creature tokens with deathtouch and haste"); @@ -49,4 +49,12 @@ public class QueenMarchesaAssassinToken extends Token { addAbility(DeathtouchAbility.getInstance()); addAbility(HasteAbility.getInstance()); } + + public QueenMarchesaAssassinToken(final QueenMarchesaAssassinToken token) { + super(token); + } + + public QueenMarchesaAssassinToken copy() { + return new QueenMarchesaAssassinToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/QuestForTheGravelordZombieToken.java b/Mage/src/main/java/mage/game/permanent/token/QuestForTheGravelordZombieToken.java index a061e45fee..fccd47fc03 100644 --- a/Mage/src/main/java/mage/game/permanent/token/QuestForTheGravelordZombieToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/QuestForTheGravelordZombieToken.java @@ -36,7 +36,7 @@ import mage.constants.SubType; * * spjspj */ -public class QuestForTheGravelordZombieToken extends Token { +public class QuestForTheGravelordZombieToken extends TokenImpl { public QuestForTheGravelordZombieToken() { super("Zombie Giant", "5/5 black Zombie Giant creature token"); @@ -48,4 +48,12 @@ public class QuestForTheGravelordZombieToken extends Token { power = new MageInt(5); toughness = new MageInt(5); } + + public QuestForTheGravelordZombieToken(final QuestForTheGravelordZombieToken token) { + super(token); + } + + public QuestForTheGravelordZombieToken copy() { + return new QuestForTheGravelordZombieToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/RagavanToken.java b/Mage/src/main/java/mage/game/permanent/token/RagavanToken.java index fe59b66577..d3d0af43eb 100644 --- a/Mage/src/main/java/mage/game/permanent/token/RagavanToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/RagavanToken.java @@ -35,7 +35,7 @@ import mage.constants.SuperType; * * @author spjspj */ -public class RagavanToken extends Token { +public class RagavanToken extends TokenImpl { public RagavanToken() { super("Ragavan", "legendary 2/1 red Monkey creature token named Ragavan"); @@ -47,4 +47,12 @@ public class RagavanToken extends Token { this.getSubtype(null).add(SubType.MONKEY); this.addCardType(CardType.CREATURE); } + + public RagavanToken(final RagavanToken token) { + super(token); + } + + public RagavanToken copy() { + return new RagavanToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/RakdosGuildmageGoblinToken.java b/Mage/src/main/java/mage/game/permanent/token/RakdosGuildmageGoblinToken.java index df5137bb05..4a768fceda 100644 --- a/Mage/src/main/java/mage/game/permanent/token/RakdosGuildmageGoblinToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/RakdosGuildmageGoblinToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.HasteAbility; * * @author spjspj */ -public class RakdosGuildmageGoblinToken extends Token { +public class RakdosGuildmageGoblinToken extends TokenImpl { public RakdosGuildmageGoblinToken() { super("Goblin", "2/1 red Goblin creature token with haste"); @@ -47,4 +47,12 @@ public class RakdosGuildmageGoblinToken extends Token { toughness = new MageInt(1); this.addAbility(HasteAbility.getInstance()); } + + public RakdosGuildmageGoblinToken(final RakdosGuildmageGoblinToken token) { + super(token); + } + + public RakdosGuildmageGoblinToken copy() { + return new RakdosGuildmageGoblinToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/RakkaMarElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/RakkaMarElementalToken.java index e4a372f11f..4d77592324 100644 --- a/Mage/src/main/java/mage/game/permanent/token/RakkaMarElementalToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/RakkaMarElementalToken.java @@ -36,7 +36,7 @@ import mage.constants.SubType; * * @author spjspj */ -public class RakkaMarElementalToken extends Token { +public class RakkaMarElementalToken extends TokenImpl { public RakkaMarElementalToken () { super("Elemental", "3/1 red Elemental creature with Haste"); @@ -47,4 +47,12 @@ public class RakkaMarElementalToken extends Token { toughness = new MageInt(1); addAbility(HasteAbility.getInstance()); } + + public RakkaMarElementalToken(final RakkaMarElementalToken token) { + super(token); + } + + public RakkaMarElementalToken copy() { + return new RakkaMarElementalToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/RallyTheHordeWarriorToken.java b/Mage/src/main/java/mage/game/permanent/token/RallyTheHordeWarriorToken.java index b529fd1417..121d57be9f 100644 --- a/Mage/src/main/java/mage/game/permanent/token/RallyTheHordeWarriorToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/RallyTheHordeWarriorToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class RallyTheHordeWarriorToken extends Token { +public class RallyTheHordeWarriorToken extends TokenImpl { public RallyTheHordeWarriorToken() { super("Warrior", "1/1 red Warrior creature token"); @@ -45,4 +45,12 @@ public class RallyTheHordeWarriorToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public RallyTheHordeWarriorToken(final RallyTheHordeWarriorToken token) { + super(token); + } + + public RallyTheHordeWarriorToken copy() { + return new RallyTheHordeWarriorToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/RapidHybridizationToken.java b/Mage/src/main/java/mage/game/permanent/token/RapidHybridizationToken.java index 92a1cfb8db..5fab0e9290 100644 --- a/Mage/src/main/java/mage/game/permanent/token/RapidHybridizationToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/RapidHybridizationToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class RapidHybridizationToken extends Token { +public class RapidHybridizationToken extends TokenImpl { public RapidHybridizationToken() { super("Frog Lizard", "3/3 green Frog Lizard creature token"); @@ -51,4 +51,11 @@ public class RapidHybridizationToken extends Token { toughness = new MageInt(3); } + public RapidHybridizationToken(final RapidHybridizationToken token) { + super(token); + } + + public RapidHybridizationToken copy() { + return new RapidHybridizationToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/RatToken.java b/Mage/src/main/java/mage/game/permanent/token/RatToken.java index 264a4d686c..6b344077b7 100644 --- a/Mage/src/main/java/mage/game/permanent/token/RatToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/RatToken.java @@ -36,7 +36,7 @@ import mage.constants.SubType; * * @author LevelX2 */ -public class RatToken extends Token { +public class RatToken extends TokenImpl { public RatToken() { this("GTC"); @@ -51,5 +51,11 @@ public class RatToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + public RatToken(final RatToken token) { + super(token); + } + public RatToken copy() { + return new RatToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/RebelStarshipToken.java b/Mage/src/main/java/mage/game/permanent/token/RebelStarshipToken.java index 4cdc4265b8..d5b86cd9b5 100644 --- a/Mage/src/main/java/mage/game/permanent/token/RebelStarshipToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/RebelStarshipToken.java @@ -35,7 +35,7 @@ import mage.abilities.keyword.SpaceflightAbility; * * @author spjspj */ -public class RebelStarshipToken extends Token { +public class RebelStarshipToken extends TokenImpl { public RebelStarshipToken() { super("B-Wing", "2/3 blue Rebel Starship artifact creature tokens with spaceflight name B-Wing", 2, 3); @@ -47,4 +47,12 @@ public class RebelStarshipToken extends Token { subtype.add(SubType.REBEL); subtype.add(SubType.STARSHIP); } + + public RebelStarshipToken(final RebelStarshipToken token) { + super(token); + } + + public RebelStarshipToken copy() { + return new RebelStarshipToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/RebelToken.java b/Mage/src/main/java/mage/game/permanent/token/RebelToken.java index bb0d4162c2..7985ec0893 100644 --- a/Mage/src/main/java/mage/game/permanent/token/RebelToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/RebelToken.java @@ -34,7 +34,7 @@ import mage.constants.SubType; * * @author spjspj */ -public class RebelToken extends Token { +public class RebelToken extends TokenImpl { public RebelToken() { super("Rebel", "1/1 white Rebel creature token", 1, 1); @@ -43,4 +43,12 @@ public class RebelToken extends Token { color.setWhite(true); subtype.add(SubType.REBEL); } + + public RebelToken(final RebelToken token) { + super(token); + } + + public RebelToken copy() { + return new RebelToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/RedHumanToken.java b/Mage/src/main/java/mage/game/permanent/token/RedHumanToken.java index 72e40b74f2..6a64c15c2a 100644 --- a/Mage/src/main/java/mage/game/permanent/token/RedHumanToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/RedHumanToken.java @@ -36,7 +36,7 @@ import mage.ObjectColor; * * @author spjspj */ -public class RedHumanToken extends Token { +public class RedHumanToken extends TokenImpl { public RedHumanToken() { super("Human", "1/1 red Human creature token"); @@ -47,4 +47,12 @@ public class RedHumanToken extends Token { this.power = new MageInt(1); this.toughness = new MageInt(1); } + + public RedHumanToken(final RedHumanToken token) { + super(token); + } + + public RedHumanToken copy() { + return new RedHumanToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/ReefWormFishToken.java b/Mage/src/main/java/mage/game/permanent/token/ReefWormFishToken.java index 6e59edda2c..79361a0507 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ReefWormFishToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ReefWormFishToken.java @@ -37,7 +37,7 @@ import mage.abilities.effects.common.CreateTokenEffect; * * @author spjspj */ -public class ReefWormFishToken extends Token { +public class ReefWormFishToken extends TokenImpl { public ReefWormFishToken() { super("Fish", "3/3 blue Fish creature token with \"When this creature dies, create a 6/6 blue Whale creature token with \"When this creature dies, create a 9/9 blue Kraken creature token.\"\""); @@ -50,4 +50,12 @@ public class ReefWormFishToken extends Token { addAbility(new DiesTriggeredAbility(new CreateTokenEffect(new ReefWormWhaleToken()))); } + + public ReefWormFishToken(final ReefWormFishToken token) { + super(token); + } + + public ReefWormFishToken copy() { + return new ReefWormFishToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/ReefWormKrakenToken.java b/Mage/src/main/java/mage/game/permanent/token/ReefWormKrakenToken.java index 9eac554493..027568ceff 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ReefWormKrakenToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ReefWormKrakenToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class ReefWormKrakenToken extends Token { +public class ReefWormKrakenToken extends TokenImpl { public ReefWormKrakenToken() { super("Kraken", "9/9 blue Kraken creature token"); @@ -46,4 +46,12 @@ public class ReefWormKrakenToken extends Token { power = new MageInt(9); toughness = new MageInt(9); } + + public ReefWormKrakenToken(final ReefWormKrakenToken token) { + super(token); + } + + public ReefWormKrakenToken copy() { + return new ReefWormKrakenToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/ReefWormWhaleToken.java b/Mage/src/main/java/mage/game/permanent/token/ReefWormWhaleToken.java index 65cd3a7bf3..7910bdcfcd 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ReefWormWhaleToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ReefWormWhaleToken.java @@ -37,7 +37,7 @@ import mage.abilities.effects.common.CreateTokenEffect; * * @author spjspj */ -public class ReefWormWhaleToken extends Token { +public class ReefWormWhaleToken extends TokenImpl { public ReefWormWhaleToken() { super("Whale", "6/6 blue Whale creature token with \"When this creature dies, create a 9/9 blue Kraken creature token.\""); @@ -50,4 +50,12 @@ public class ReefWormWhaleToken extends Token { addAbility(new DiesTriggeredAbility(new CreateTokenEffect(new ReefWormKrakenToken()))); } + + public ReefWormWhaleToken(final ReefWormWhaleToken token) { + super(token); + } + + public ReefWormWhaleToken copy() { + return new ReefWormWhaleToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/ReflectionPureToken.java b/Mage/src/main/java/mage/game/permanent/token/ReflectionPureToken.java index 40967b3fff..74308d895e 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ReflectionPureToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ReflectionPureToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author SpikesCafe-google */ -public class ReflectionPureToken extends Token { +public class ReflectionPureToken extends TokenImpl { public ReflectionPureToken() { this(1); @@ -50,4 +50,12 @@ public class ReflectionPureToken extends Token { power = new MageInt(xValue); toughness = new MageInt(xValue); } + + public ReflectionPureToken(final ReflectionPureToken token) { + super(token); + } + + public ReflectionPureToken copy() { + return new ReflectionPureToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/ReflectionToken.java b/Mage/src/main/java/mage/game/permanent/token/ReflectionToken.java index e40da5e375..0db0288368 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ReflectionToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ReflectionToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class ReflectionToken extends Token { +public class ReflectionToken extends TokenImpl { public ReflectionToken() { super("Reflection", "2/2 white Reflection creature token"); @@ -46,4 +46,12 @@ public class ReflectionToken extends Token { power = new MageInt(2); toughness = new MageInt(2); } + + public ReflectionToken(final ReflectionToken token) { + super(token); + } + + public ReflectionToken copy() { + return new ReflectionToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/ReignOfThePitToken.java b/Mage/src/main/java/mage/game/permanent/token/ReignOfThePitToken.java index 21e11c9071..a16d9365ae 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ReignOfThePitToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ReignOfThePitToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class ReignOfThePitToken extends Token { +public class ReignOfThePitToken extends TokenImpl { public ReignOfThePitToken() { this(1); @@ -50,4 +50,12 @@ public class ReignOfThePitToken extends Token { cardType.add(CardType.CREATURE); this.addAbility(FlyingAbility.getInstance()); } + public ReignOfThePitToken(final ReignOfThePitToken token) { + super(token); + } + + public ReignOfThePitToken copy() { + return new ReignOfThePitToken(this); + } + } diff --git a/Mage/src/main/java/mage/game/permanent/token/RekindlingPhoenixToken.java b/Mage/src/main/java/mage/game/permanent/token/RekindlingPhoenixToken.java index c72d50f494..b76ec69549 100644 --- a/Mage/src/main/java/mage/game/permanent/token/RekindlingPhoenixToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/RekindlingPhoenixToken.java @@ -47,7 +47,7 @@ import mage.target.common.TargetCardInYourGraveyard; * * @author LevelX2 */ -public class RekindlingPhoenixToken extends Token { +public class RekindlingPhoenixToken extends TokenImpl { public RekindlingPhoenixToken() { super("Elemental", "0/1 red Elemental creature token with \"At the beginning of your upkeep, sacrifice this creature and return target card named Rekindling Phoenix from your graveyard to the battlefield. It gains haste until end of turn.\""); @@ -66,4 +66,12 @@ public class RekindlingPhoenixToken extends Token { ability.addTarget(new TargetCardInYourGraveyard(filter)); this.addAbility(ability); } + + public RekindlingPhoenixToken(final RekindlingPhoenixToken token) { + super(token); + } + + public RekindlingPhoenixToken copy() { + return new RekindlingPhoenixToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/RenownedWeaverSpiderToken.java b/Mage/src/main/java/mage/game/permanent/token/RenownedWeaverSpiderToken.java index 05c27e63c9..8cec529bfd 100644 --- a/Mage/src/main/java/mage/game/permanent/token/RenownedWeaverSpiderToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/RenownedWeaverSpiderToken.java @@ -37,7 +37,7 @@ import mage.abilities.keyword.ReachAbility; * * @author spjspj */ -public class RenownedWeaverSpiderToken extends Token { +public class RenownedWeaverSpiderToken extends TokenImpl { public RenownedWeaverSpiderToken() { super("Spider", "1/3 green Spider enchantment creature token with reach"); @@ -50,4 +50,12 @@ public class RenownedWeaverSpiderToken extends Token { toughness = new MageInt(3); this.addAbility(ReachAbility.getInstance()); } + + public RenownedWeaverSpiderToken(final RenownedWeaverSpiderToken token) { + super(token); + } + + public RenownedWeaverSpiderToken copy() { + return new RenownedWeaverSpiderToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/RevelOfTheFallenGodSatyrToken.java b/Mage/src/main/java/mage/game/permanent/token/RevelOfTheFallenGodSatyrToken.java index 14da9697bf..08db6cb25a 100644 --- a/Mage/src/main/java/mage/game/permanent/token/RevelOfTheFallenGodSatyrToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/RevelOfTheFallenGodSatyrToken.java @@ -37,7 +37,7 @@ import mage.abilities.keyword.HasteAbility; * * @author spjspj */ -public class RevelOfTheFallenGodSatyrToken extends Token { +public class RevelOfTheFallenGodSatyrToken extends TokenImpl { public RevelOfTheFallenGodSatyrToken() { super("Satyr", "2/2 red and green Satyr creature tokens with haste"); @@ -50,4 +50,12 @@ public class RevelOfTheFallenGodSatyrToken extends Token { toughness = new MageInt(2); addAbility(HasteAbility.getInstance()); } + + public RevelOfTheFallenGodSatyrToken(final RevelOfTheFallenGodSatyrToken token) { + super(token); + } + + public RevelOfTheFallenGodSatyrToken copy() { + return new RevelOfTheFallenGodSatyrToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/RhinoToken.java b/Mage/src/main/java/mage/game/permanent/token/RhinoToken.java index fbad63dec3..b16bfd2a32 100644 --- a/Mage/src/main/java/mage/game/permanent/token/RhinoToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/RhinoToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.TrampleAbility; * * @author spjspj */ -public class RhinoToken extends Token { +public class RhinoToken extends TokenImpl { public RhinoToken() { super("Rhino", "4/4 green Rhino creature token with trample"); @@ -47,4 +47,12 @@ public class RhinoToken extends Token { toughness = new MageInt(4); addAbility(TrampleAbility.getInstance()); } + + public RhinoToken(final RhinoToken token) { + super(token); + } + + public RhinoToken copy() { + return new RhinoToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/RhonassLastStandToken.java b/Mage/src/main/java/mage/game/permanent/token/RhonassLastStandToken.java index 067f4050f5..cda0aa08e5 100644 --- a/Mage/src/main/java/mage/game/permanent/token/RhonassLastStandToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/RhonassLastStandToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class RhonassLastStandToken extends Token { +public class RhonassLastStandToken extends TokenImpl { public RhonassLastStandToken() { super("Snake", "5/4 green Snake creature token"); @@ -45,4 +45,12 @@ public class RhonassLastStandToken extends Token { power = new MageInt(5); toughness = new MageInt(4); } + + public RhonassLastStandToken(final RhonassLastStandToken token) { + super(token); + } + + public RhonassLastStandToken copy() { + return new RhonassLastStandToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/RhysTheRedeemedToken.java b/Mage/src/main/java/mage/game/permanent/token/RhysTheRedeemedToken.java index 41149d7759..e683d43753 100644 --- a/Mage/src/main/java/mage/game/permanent/token/RhysTheRedeemedToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/RhysTheRedeemedToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class RhysTheRedeemedToken extends Token { +public class RhysTheRedeemedToken extends TokenImpl { public RhysTheRedeemedToken() { super("Elf Warrior", "1/1 green and white Elf Warrior creature token"); @@ -47,4 +47,12 @@ public class RhysTheRedeemedToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public RhysTheRedeemedToken(final RhysTheRedeemedToken token) { + super(token); + } + + public RhysTheRedeemedToken copy() { + return new RhysTheRedeemedToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/RiftmarkedKnightToken.java b/Mage/src/main/java/mage/game/permanent/token/RiftmarkedKnightToken.java index 8fa987ca0c..27ff1d57f0 100644 --- a/Mage/src/main/java/mage/game/permanent/token/RiftmarkedKnightToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/RiftmarkedKnightToken.java @@ -39,7 +39,7 @@ import mage.abilities.keyword.ProtectionAbility; * * @author spjspj */ -public class RiftmarkedKnightToken extends Token { +public class RiftmarkedKnightToken extends TokenImpl { public RiftmarkedKnightToken() { super("Knight", "2/2 black Knight creature token with flanking, protection from white, and haste"); @@ -52,4 +52,12 @@ public class RiftmarkedKnightToken extends Token { this.addAbility(new FlankingAbility()); this.addAbility(HasteAbility.getInstance()); } + + public RiftmarkedKnightToken(final RiftmarkedKnightToken token) { + super(token); + } + + public RiftmarkedKnightToken copy() { + return new RiftmarkedKnightToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/RiptideReplicatorToken.java b/Mage/src/main/java/mage/game/permanent/token/RiptideReplicatorToken.java index 3e3f2c28f0..3cbad8b40b 100644 --- a/Mage/src/main/java/mage/game/permanent/token/RiptideReplicatorToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/RiptideReplicatorToken.java @@ -36,7 +36,7 @@ import mage.constants.SubType; * * @author spjspj */ -public class RiptideReplicatorToken extends Token { +public class RiptideReplicatorToken extends TokenImpl { public RiptideReplicatorToken() { this(null, null, 1); @@ -53,4 +53,12 @@ public class RiptideReplicatorToken extends Token { power = new MageInt(x); toughness = new MageInt(x); } + + public RiptideReplicatorToken(final RiptideReplicatorToken token) { + super(token); + } + + public RiptideReplicatorToken copy() { + return new RiptideReplicatorToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/RiseOfEaglesBirdToken.java b/Mage/src/main/java/mage/game/permanent/token/RiseOfEaglesBirdToken.java index e739b77b40..cf8e2c4c8a 100644 --- a/Mage/src/main/java/mage/game/permanent/token/RiseOfEaglesBirdToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/RiseOfEaglesBirdToken.java @@ -37,7 +37,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class RiseOfEaglesBirdToken extends Token { +public class RiseOfEaglesBirdToken extends TokenImpl { public RiseOfEaglesBirdToken() { super("Bird", "2/2 blue Bird enchantment creature tokens with flying"); @@ -51,4 +51,12 @@ public class RiseOfEaglesBirdToken extends Token { toughness = new MageInt(2); addAbility(FlyingAbility.getInstance()); } + + public RiseOfEaglesBirdToken(final RiseOfEaglesBirdToken token) { + super(token); + } + + public RiseOfEaglesBirdToken copy() { + return new RiseOfEaglesBirdToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/RitualOfTheReturnedZombieToken.java b/Mage/src/main/java/mage/game/permanent/token/RitualOfTheReturnedZombieToken.java index d03b104efe..9f4af31936 100644 --- a/Mage/src/main/java/mage/game/permanent/token/RitualOfTheReturnedZombieToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/RitualOfTheReturnedZombieToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class RitualOfTheReturnedZombieToken extends Token { +public class RitualOfTheReturnedZombieToken extends TokenImpl { public RitualOfTheReturnedZombieToken() { this(1,1); @@ -50,4 +50,11 @@ public class RitualOfTheReturnedZombieToken extends Token { this.toughness = new MageInt(toughness); } + public RitualOfTheReturnedZombieToken(final RitualOfTheReturnedZombieToken token) { + super(token); + } + + public RitualOfTheReturnedZombieToken copy() { + return new RitualOfTheReturnedZombieToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/RocEggToken.java b/Mage/src/main/java/mage/game/permanent/token/RocEggToken.java index 450bc9bcb9..d88770ef9d 100644 --- a/Mage/src/main/java/mage/game/permanent/token/RocEggToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/RocEggToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class RocEggToken extends Token { +public class RocEggToken extends TokenImpl { public RocEggToken() { super("Bird", "3/3 white Bird creature token with flying"); @@ -47,4 +47,12 @@ public class RocEggToken extends Token { toughness = new MageInt(3); addAbility(FlyingAbility.getInstance()); } + + public RocEggToken(final RocEggToken token) { + super(token); + } + + public RocEggToken copy() { + return new RocEggToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/RoyalGuardToken.java b/Mage/src/main/java/mage/game/permanent/token/RoyalGuardToken.java index c479d10c8a..1248eb570b 100644 --- a/Mage/src/main/java/mage/game/permanent/token/RoyalGuardToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/RoyalGuardToken.java @@ -35,7 +35,7 @@ import mage.abilities.keyword.FirstStrikeAbility; * * @author spjspj */ -public class RoyalGuardToken extends Token { +public class RoyalGuardToken extends TokenImpl { public RoyalGuardToken() { super("Royal Guard", "2/2 red Soldier creature token with first strike named Royal Guard", 2, 2); @@ -45,4 +45,12 @@ public class RoyalGuardToken extends Token { addAbility(FirstStrikeAbility.getInstance()); subtype.add(SubType.SOLDIER); } + + public RoyalGuardToken(final RoyalGuardToken token) { + super(token); + } + + public RoyalGuardToken copy() { + return new RoyalGuardToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/RukhEggBirdToken.java b/Mage/src/main/java/mage/game/permanent/token/RukhEggBirdToken.java index 491932ee75..4281d64597 100644 --- a/Mage/src/main/java/mage/game/permanent/token/RukhEggBirdToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/RukhEggBirdToken.java @@ -36,7 +36,7 @@ import mage.constants.SubType; * * @author spjspj */ -public class RukhEggBirdToken extends Token { +public class RukhEggBirdToken extends TokenImpl { public RukhEggBirdToken() { this("ARN"); //there is no such token in either ARN, 8ED or 9ED @@ -53,5 +53,11 @@ public class RukhEggBirdToken extends Token { toughness = new MageInt(4); addAbility(FlyingAbility.getInstance()); } + public RukhEggBirdToken(final RukhEggBirdToken token) { + super(token); + } + public RukhEggBirdToken copy() { + return new RukhEggBirdToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/SaprolingBurstToken.java b/Mage/src/main/java/mage/game/permanent/token/SaprolingBurstToken.java index 754351ddb9..60639d32fd 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SaprolingBurstToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SaprolingBurstToken.java @@ -46,10 +46,10 @@ import mage.game.permanent.Permanent; * * @author spjspj */ -public class SaprolingBurstToken extends Token { +public class SaprolingBurstToken extends TokenImpl { public SaprolingBurstToken() { - this(null); + this((MageObjectReference)null); power = new MageInt(1); toughness = new MageInt(1); } @@ -61,6 +61,14 @@ public class SaprolingBurstToken extends Token { this.cardType.add(CardType.CREATURE); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SetPowerToughnessSourceEffect(new SaprolingBurstTokenDynamicValue(saprolingBurstMOR), Duration.WhileOnBattlefield))); } + + public SaprolingBurstToken(final SaprolingBurstToken token) { + super(token); + } + + public SaprolingBurstToken copy() { + return new SaprolingBurstToken(this); + } } class SaprolingBurstTokenDynamicValue implements DynamicValue { diff --git a/Mage/src/main/java/mage/game/permanent/token/SaprolingToken.java b/Mage/src/main/java/mage/game/permanent/token/SaprolingToken.java index 698a2393ad..8837db22f4 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SaprolingToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SaprolingToken.java @@ -40,7 +40,7 @@ import mage.util.RandomUtil; * * @author BetaSteward_at_googlemail.com */ -public class SaprolingToken extends Token { +public class SaprolingToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -88,4 +88,12 @@ public class SaprolingToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public SaprolingToken(final SaprolingToken token) { + super(token); + } + + public SaprolingToken copy() { + return new SaprolingToken(this); + } } \ No newline at end of file diff --git a/Mage/src/main/java/mage/game/permanent/token/SatyrNyxSmithElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/SatyrNyxSmithElementalToken.java index 1557111c73..d65c795fbc 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SatyrNyxSmithElementalToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SatyrNyxSmithElementalToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.HasteAbility; * * @author spjspj */ -public class SatyrNyxSmithElementalToken extends Token { +public class SatyrNyxSmithElementalToken extends TokenImpl { public SatyrNyxSmithElementalToken() { super("Elemental", "3/1 red Elemental enchantment creature token with haste"); @@ -49,4 +49,12 @@ public class SatyrNyxSmithElementalToken extends Token { this.addAbility(HasteAbility.getInstance()); this.setOriginalExpansionSetCode("BNG"); } + + public SatyrNyxSmithElementalToken(final SatyrNyxSmithElementalToken token) { + super(token); + } + + public SatyrNyxSmithElementalToken copy() { + return new SatyrNyxSmithElementalToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/SeedGuardianToken.java b/Mage/src/main/java/mage/game/permanent/token/SeedGuardianToken.java index 298202922d..659c66d02f 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SeedGuardianToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SeedGuardianToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class SeedGuardianToken extends Token { +public class SeedGuardianToken extends TokenImpl { public SeedGuardianToken() { this(1); @@ -51,4 +51,12 @@ public class SeedGuardianToken extends Token { toughness = new MageInt(xValue); } + + public SeedGuardianToken(final SeedGuardianToken token) { + super(token); + } + + public SeedGuardianToken copy() { + return new SeedGuardianToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/SekKuarDeathkeeperGravebornToken.java b/Mage/src/main/java/mage/game/permanent/token/SekKuarDeathkeeperGravebornToken.java index 89a8864a73..6b45a1c941 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SekKuarDeathkeeperGravebornToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SekKuarDeathkeeperGravebornToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.HasteAbility; * * @author spjspj */ -public class SekKuarDeathkeeperGravebornToken extends Token { +public class SekKuarDeathkeeperGravebornToken extends TokenImpl { public SekKuarDeathkeeperGravebornToken() { super("Graveborn", "3/1 black and red Graveborn creature token with haste"); @@ -48,4 +48,12 @@ public class SekKuarDeathkeeperGravebornToken extends Token { toughness = new MageInt(1); this.addAbility(HasteAbility.getInstance()); } + + public SekKuarDeathkeeperGravebornToken(final SekKuarDeathkeeperGravebornToken token) { + super(token); + } + + public SekKuarDeathkeeperGravebornToken copy() { + return new SekKuarDeathkeeperGravebornToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/SengirNosferatuBatToken.java b/Mage/src/main/java/mage/game/permanent/token/SengirNosferatuBatToken.java index 5b099b10c8..31fbc838b6 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SengirNosferatuBatToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SengirNosferatuBatToken.java @@ -51,7 +51,7 @@ import mage.target.common.TargetCardInExile; * * @author spjspj */ -public class SengirNosferatuBatToken extends Token { +public class SengirNosferatuBatToken extends TokenImpl { public SengirNosferatuBatToken() { super("Bat", "1/2 black Bat creature token with flying"); @@ -67,6 +67,14 @@ public class SengirNosferatuBatToken extends Token { ability.addCost(new SacrificeSourceCost()); this.addAbility(ability); } + + public SengirNosferatuBatToken(final SengirNosferatuBatToken token) { + super(token); + } + + public SengirNosferatuBatToken copy() { + return new SengirNosferatuBatToken(this); + } } class ReturnSengirNosferatuEffect extends OneShotEffect { diff --git a/Mage/src/main/java/mage/game/permanent/token/SerfToken.java b/Mage/src/main/java/mage/game/permanent/token/SerfToken.java index f083151c07..1e38785858 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SerfToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SerfToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class SerfToken extends Token { +public class SerfToken extends TokenImpl { public SerfToken() { super("Serf", "0/1 black Serf creature token"); @@ -45,4 +45,12 @@ public class SerfToken extends Token { power = new MageInt(0); toughness = new MageInt(1); } + + public SerfToken(final SerfToken token) { + super(token); + } + + public SerfToken copy() { + return new SerfToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/SerpentGeneratorSnakeToken.java b/Mage/src/main/java/mage/game/permanent/token/SerpentGeneratorSnakeToken.java index feb2f0d85f..0cad2d4d7f 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SerpentGeneratorSnakeToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SerpentGeneratorSnakeToken.java @@ -38,7 +38,7 @@ import mage.constants.SubType; * * @author BetaSteward_at_googlemail.com */ -public class SerpentGeneratorSnakeToken extends Token { +public class SerpentGeneratorSnakeToken extends TokenImpl { public SerpentGeneratorSnakeToken() { super("Snake", "1/1 colorless Snake artifact creature token with \"Whenever this creature deals damage to a player, that player gets a poison counter.\""); @@ -53,4 +53,12 @@ public class SerpentGeneratorSnakeToken extends Token { this.addAbility(new DealsDamageToAPlayerTriggeredAbility(effect, false, true)); } + public SerpentGeneratorSnakeToken(final SerpentGeneratorSnakeToken token) { + super(token); + } + + public SerpentGeneratorSnakeToken copy() { + return new SerpentGeneratorSnakeToken(this); + } + } diff --git a/Mage/src/main/java/mage/game/permanent/token/ServoToken.java b/Mage/src/main/java/mage/game/permanent/token/ServoToken.java index 09f37cf2d4..19694596ff 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ServoToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ServoToken.java @@ -39,7 +39,7 @@ import mage.util.RandomUtil; * * @author fireshoes */ -public class ServoToken extends Token { +public class ServoToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); diff --git a/Mage/src/main/java/mage/game/permanent/token/SheepToken.java b/Mage/src/main/java/mage/game/permanent/token/SheepToken.java index 5d20d01cd9..eff37d97f0 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SheepToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SheepToken.java @@ -35,7 +35,7 @@ import mage.constants.SubType; * * @author L_J */ -public class SheepToken extends Token { +public class SheepToken extends TokenImpl { public SheepToken() { super("Sheep", "0/1 green Sheep creature token"); @@ -45,4 +45,12 @@ public class SheepToken extends Token { power = new MageInt(0); toughness = new MageInt(1); } + + public SheepToken(final SheepToken token) { + super(token); + } + + public SheepToken copy() { + return new SheepToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/SkeletonToken.java b/Mage/src/main/java/mage/game/permanent/token/SkeletonToken.java index 846d28fe70..501c72bf1d 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SkeletonToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SkeletonToken.java @@ -9,7 +9,8 @@ import mage.constants.SubType; import mage.constants.ColoredManaSymbol; import mage.constants.Zone; -public class SkeletonToken extends Token { +public class SkeletonToken extends TokenImpl { + public SkeletonToken() { super("Skeleton", "1/1 black Skeleton creature with \"{B}: Regenerate this creature\""); cardType.add(CardType.CREATURE); @@ -19,4 +20,12 @@ public class SkeletonToken extends Token { toughness = new MageInt(1); this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateSourceEffect(), new ColoredManaCost(ColoredManaSymbol.B))); } + + public SkeletonToken(final SkeletonToken token) { + super(token); + } + + public SkeletonToken copy() { + return new SkeletonToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/SkywiseTeachingsToken.java b/Mage/src/main/java/mage/game/permanent/token/SkywiseTeachingsToken.java index 1240e07edd..6a354e2f88 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SkywiseTeachingsToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SkywiseTeachingsToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class SkywiseTeachingsToken extends Token { +public class SkywiseTeachingsToken extends TokenImpl { public SkywiseTeachingsToken() { super("Djinn Monk", "2/2 blue Djinn Monk creature token with flying"); @@ -48,4 +48,12 @@ public class SkywiseTeachingsToken extends Token { toughness = new MageInt(2); this.addAbility(FlyingAbility.getInstance()); } + + public SkywiseTeachingsToken(final SkywiseTeachingsToken token) { + super(token); + } + + public SkywiseTeachingsToken copy() { + return new SkywiseTeachingsToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/SliverToken.java b/Mage/src/main/java/mage/game/permanent/token/SliverToken.java index 837edf322c..5b30637345 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SliverToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SliverToken.java @@ -37,7 +37,7 @@ import mage.MageInt; * * @author LoneFox */ -public class SliverToken extends Token { +public class SliverToken extends TokenImpl { public SliverToken() { super("Sliver", "1/1 colorless Sliver creature token"); @@ -47,4 +47,12 @@ public class SliverToken extends Token { toughness = new MageInt(1); availableImageSetCodes.addAll(Arrays.asList("M14", "M15")); } + + public SliverToken(final SliverToken token) { + super(token); + } + + public SliverToken copy() { + return new SliverToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/SliversmithToken.java b/Mage/src/main/java/mage/game/permanent/token/SliversmithToken.java index 93bb22f1d2..5e55150e44 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SliversmithToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SliversmithToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class SliversmithToken extends Token { +public class SliversmithToken extends TokenImpl { public SliversmithToken() { super("Metallic Sliver", "1/1 colorless Sliver creature token named Metallic Sliver"); @@ -46,4 +46,12 @@ public class SliversmithToken extends Token { toughness = new MageInt(1); this.setOriginalExpansionSetCode("FUT"); } + + public SliversmithToken(final SliversmithToken token) { + super(token); + } + + public SliversmithToken copy() { + return new SliversmithToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/SnakeToken.java b/Mage/src/main/java/mage/game/permanent/token/SnakeToken.java index 922f3f57ef..944512339d 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SnakeToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SnakeToken.java @@ -39,7 +39,7 @@ import mage.constants.SubType; * * @author BetaSteward_at_googlemail.com */ -public class SnakeToken extends Token { +public class SnakeToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -48,7 +48,7 @@ public class SnakeToken extends Token { } public SnakeToken() { - this(null); + this((String)null); } public SnakeToken(String setCode) { @@ -64,4 +64,12 @@ public class SnakeToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public SnakeToken(final SnakeToken token) { + super(token); + } + + public SnakeToken copy() { + return new SnakeToken(this); + } } \ No newline at end of file diff --git a/Mage/src/main/java/mage/game/permanent/token/SoldierToken.java b/Mage/src/main/java/mage/game/permanent/token/SoldierToken.java index eec6d47f31..5960e94025 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SoldierToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SoldierToken.java @@ -39,7 +39,7 @@ import mage.util.RandomUtil; * * @author BetaSteward_at_googlemail.com */ -public class SoldierToken extends Token { +public class SoldierToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); diff --git a/Mage/src/main/java/mage/game/permanent/token/SoldierTokenWithHaste.java b/Mage/src/main/java/mage/game/permanent/token/SoldierTokenWithHaste.java index 0dfc964681..995613e3fa 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SoldierTokenWithHaste.java +++ b/Mage/src/main/java/mage/game/permanent/token/SoldierTokenWithHaste.java @@ -40,7 +40,7 @@ import mage.abilities.keyword.HasteAbility; * * @author LoneFox */ -public class SoldierTokenWithHaste extends Token { +public class SoldierTokenWithHaste extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); diff --git a/Mage/src/main/java/mage/game/permanent/token/SorinLordOfInnistradVampireToken.java b/Mage/src/main/java/mage/game/permanent/token/SorinLordOfInnistradVampireToken.java index ae50cc90ae..c079ab91dd 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SorinLordOfInnistradVampireToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SorinLordOfInnistradVampireToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.LifelinkAbility; * * @author spjspj */ -public class SorinLordOfInnistradVampireToken extends Token { +public class SorinLordOfInnistradVampireToken extends TokenImpl { public SorinLordOfInnistradVampireToken() { super("Vampire", "1/1 black Vampire creature token with lifelink"); @@ -48,4 +48,11 @@ public class SorinLordOfInnistradVampireToken extends Token { addAbility(LifelinkAbility.getInstance()); } + public SorinLordOfInnistradVampireToken(final SorinLordOfInnistradVampireToken token) { + super(token); + } + + public SorinLordOfInnistradVampireToken copy() { + return new SorinLordOfInnistradVampireToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/SorinSolemnVisitorVampireToken.java b/Mage/src/main/java/mage/game/permanent/token/SorinSolemnVisitorVampireToken.java index 84db3b5a1c..e9c590d454 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SorinSolemnVisitorVampireToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SorinSolemnVisitorVampireToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class SorinSolemnVisitorVampireToken extends Token { +public class SorinSolemnVisitorVampireToken extends TokenImpl { public SorinSolemnVisitorVampireToken() { super("Vampire", "2/2 black Vampire creature token with flying"); @@ -48,4 +48,12 @@ public class SorinSolemnVisitorVampireToken extends Token { toughness = new MageInt(2); addAbility(FlyingAbility.getInstance()); } + + public SorinSolemnVisitorVampireToken(final SorinSolemnVisitorVampireToken token) { + super(token); + } + + public SorinSolemnVisitorVampireToken copy() { + return new SorinSolemnVisitorVampireToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/SoundTheCallToken.java b/Mage/src/main/java/mage/game/permanent/token/SoundTheCallToken.java index d422985b2e..9550ff7898 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SoundTheCallToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SoundTheCallToken.java @@ -43,7 +43,7 @@ import mage.filter.predicate.mageobject.NamePredicate; * * @author TheElk801 */ -public class SoundTheCallToken extends Token { +public class SoundTheCallToken extends TokenImpl { private static final FilterCard filter = new FilterCard("card named Sound the Call"); @@ -67,4 +67,12 @@ public class SoundTheCallToken extends Token { )); } + public SoundTheCallToken(final SoundTheCallToken token) { + super(token); + } + + public SoundTheCallToken copy() { + return new SoundTheCallToken(this); + } + } diff --git a/Mage/src/main/java/mage/game/permanent/token/SparkElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/SparkElementalToken.java index 048877dc25..76dcff8cf3 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SparkElementalToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SparkElementalToken.java @@ -40,7 +40,7 @@ import mage.constants.TargetController; * * @author spjspj */ -public class SparkElementalToken extends Token { +public 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.\""); @@ -55,4 +55,12 @@ public class SparkElementalToken extends Token { this.addAbility(HasteAbility.getInstance()); this.addAbility(new BeginningOfEndStepTriggeredAbility(new SacrificeSourceEffect(), TargetController.ANY, false)); } + + public SparkElementalToken(final SparkElementalToken token) { + super(token); + } + + public SparkElementalToken copy() { + return new SparkElementalToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/SpawningGroundsBeastToken.java b/Mage/src/main/java/mage/game/permanent/token/SpawningGroundsBeastToken.java index 23bf83262e..297e0633a2 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SpawningGroundsBeastToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SpawningGroundsBeastToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.TrampleAbility; * * @author spjspj */ -public class SpawningGroundsBeastToken extends Token { +public class SpawningGroundsBeastToken extends TokenImpl { public SpawningGroundsBeastToken() { super("Beast", "5/5 green Beast creature token with trample"); @@ -48,4 +48,11 @@ public class SpawningGroundsBeastToken extends Token { this.addAbility(TrampleAbility.getInstance()); } + public SpawningGroundsBeastToken(final SpawningGroundsBeastToken token) { + super(token); + } + + public SpawningGroundsBeastToken copy() { + return new SpawningGroundsBeastToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/SpawningPitToken.java b/Mage/src/main/java/mage/game/permanent/token/SpawningPitToken.java index 94745eded5..7652d5085b 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SpawningPitToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SpawningPitToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class SpawningPitToken extends Token { +public class SpawningPitToken extends TokenImpl { public SpawningPitToken() { super("Spawn", "2/2 colorless Spawn artifact creature token"); @@ -45,4 +45,12 @@ public class SpawningPitToken extends Token { power = new MageInt(2); toughness = new MageInt(2); } + + public SpawningPitToken(final SpawningPitToken token) { + super(token); + } + + public SpawningPitToken copy() { + return new SpawningPitToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/SpiderToken.java b/Mage/src/main/java/mage/game/permanent/token/SpiderToken.java index b91873fa8d..21fc6b4bd9 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SpiderToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SpiderToken.java @@ -17,7 +17,7 @@ import mage.constants.SubType; * * @author fireshoes */ -public class SpiderToken extends Token { +public class SpiderToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -44,4 +44,12 @@ public class SpiderToken extends Token { toughness = new MageInt(2); addAbility(ReachAbility.getInstance()); } + + public SpiderToken(final SpiderToken token) { + super(token); + } + + public SpiderToken copy() { + return new SpiderToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/SpikeToken.java b/Mage/src/main/java/mage/game/permanent/token/SpikeToken.java index 853aa3efa7..9a078ce4b9 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SpikeToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SpikeToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class SpikeToken extends Token { +public class SpikeToken extends TokenImpl { public SpikeToken() { super("Spike", "1/1 green Spike creature token"); @@ -45,4 +45,12 @@ public class SpikeToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public SpikeToken(final SpikeToken token) { + super(token); + } + + public SpikeToken copy() { + return new SpikeToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/SpiritBlueToken.java b/Mage/src/main/java/mage/game/permanent/token/SpiritBlueToken.java index 3a08f1a1b4..07b4fefde2 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SpiritBlueToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SpiritBlueToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class SpiritBlueToken extends Token { +public class SpiritBlueToken extends TokenImpl { public SpiritBlueToken() { super("Spirit", "1/1 blue Spirit creature token with flying"); @@ -49,4 +49,11 @@ public class SpiritBlueToken extends Token { addAbility(FlyingAbility.getInstance()); } + public SpiritBlueToken(final SpiritBlueToken token) { + super(token); + } + + public SpiritBlueToken copy() { + return new SpiritBlueToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/SpiritToken.java b/Mage/src/main/java/mage/game/permanent/token/SpiritToken.java index 2cc4737d86..b59b91c3cb 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SpiritToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SpiritToken.java @@ -37,7 +37,7 @@ import mage.constants.SubType; /** * @author Loki */ -public class SpiritToken extends Token { +public class SpiritToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); diff --git a/Mage/src/main/java/mage/game/permanent/token/SpiritWhiteToken.java b/Mage/src/main/java/mage/game/permanent/token/SpiritWhiteToken.java index d6f16e234e..caae236982 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SpiritWhiteToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SpiritWhiteToken.java @@ -38,7 +38,7 @@ import mage.constants.SubType; /** * @author nantuko */ -public class SpiritWhiteToken extends Token { +public class SpiritWhiteToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); diff --git a/Mage/src/main/java/mage/game/permanent/token/SpoilsOfBloodHorrorToken.java b/Mage/src/main/java/mage/game/permanent/token/SpoilsOfBloodHorrorToken.java index 87a868b96d..1213ac6d72 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SpoilsOfBloodHorrorToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SpoilsOfBloodHorrorToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class SpoilsOfBloodHorrorToken extends Token { +public class SpoilsOfBloodHorrorToken extends TokenImpl { public SpoilsOfBloodHorrorToken() { this(1); @@ -49,4 +49,12 @@ public class SpoilsOfBloodHorrorToken extends Token { power = new MageInt(xValue); toughness = new MageInt(xValue); } + + public SpoilsOfBloodHorrorToken(final SpoilsOfBloodHorrorToken token) { + super(token); + } + + public SpoilsOfBloodHorrorToken copy() { + return new SpoilsOfBloodHorrorToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/SpyMasterGoblinToken.java b/Mage/src/main/java/mage/game/permanent/token/SpyMasterGoblinToken.java index 1f717fe857..9c87faf252 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SpyMasterGoblinToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SpyMasterGoblinToken.java @@ -43,7 +43,7 @@ import mage.filter.predicate.permanent.ControllerPredicate; * * @author spjspj */ -public class SpyMasterGoblinToken extends Token { +public class SpyMasterGoblinToken extends TokenImpl { private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures you control"); @@ -62,4 +62,12 @@ public class SpyMasterGoblinToken extends Token { Effect effect = new AttacksIfAbleAllEffect(filter, Duration.WhileOnBattlefield, true); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); } + + public SpyMasterGoblinToken(final SpyMasterGoblinToken token) { + super(token); + } + + public SpyMasterGoblinToken copy() { + return new SpyMasterGoblinToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/SquirrelToken.java b/Mage/src/main/java/mage/game/permanent/token/SquirrelToken.java index 1f3234464e..05d50106c9 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SquirrelToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SquirrelToken.java @@ -38,7 +38,7 @@ import mage.constants.SubType; * * @author North */ -public class SquirrelToken extends Token { +public class SquirrelToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -56,4 +56,12 @@ public class SquirrelToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public SquirrelToken(final SquirrelToken token) { + super(token); + } + + public SquirrelToken copy() { + return new SquirrelToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/StanggTwinToken.java b/Mage/src/main/java/mage/game/permanent/token/StanggTwinToken.java index 9eae439a62..7cfc7268cd 100644 --- a/Mage/src/main/java/mage/game/permanent/token/StanggTwinToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/StanggTwinToken.java @@ -36,7 +36,7 @@ import mage.constants.SuperType; * * @author L_J */ -public class StanggTwinToken extends Token { +public class StanggTwinToken extends TokenImpl { public StanggTwinToken() { super("Stangg Twin", "legendary 3/4 red and green Human Warrior creature token named Stangg Twin"); @@ -50,4 +50,12 @@ public class StanggTwinToken extends Token { this.power = new MageInt(3); this.toughness = new MageInt(4); } + + public StanggTwinToken(final StanggTwinToken token) { + super(token); + } + + public StanggTwinToken copy() { + return new StanggTwinToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/StitcherGeralfZombieToken.java b/Mage/src/main/java/mage/game/permanent/token/StitcherGeralfZombieToken.java index a3d75a57be..266152c06d 100644 --- a/Mage/src/main/java/mage/game/permanent/token/StitcherGeralfZombieToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/StitcherGeralfZombieToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class StitcherGeralfZombieToken extends Token { +public class StitcherGeralfZombieToken extends TokenImpl { public StitcherGeralfZombieToken() { this(1); @@ -50,4 +50,12 @@ public class StitcherGeralfZombieToken extends Token { power = new MageInt(xValue); toughness = new MageInt(xValue); } + + public StitcherGeralfZombieToken(final StitcherGeralfZombieToken token) { + super(token); + } + + public StitcherGeralfZombieToken copy() { + return new StitcherGeralfZombieToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/StitchersApprenticeHomunculusToken.java b/Mage/src/main/java/mage/game/permanent/token/StitchersApprenticeHomunculusToken.java index b6eeb7f687..be07a3d4d0 100644 --- a/Mage/src/main/java/mage/game/permanent/token/StitchersApprenticeHomunculusToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/StitchersApprenticeHomunculusToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class StitchersApprenticeHomunculusToken extends Token { +public class StitchersApprenticeHomunculusToken extends TokenImpl { public StitchersApprenticeHomunculusToken() { super("Homunculus", "2/2 blue Homunculus creature"); @@ -46,4 +46,11 @@ public class StitchersApprenticeHomunculusToken extends Token { toughness = new MageInt(2); } + public StitchersApprenticeHomunculusToken(final StitchersApprenticeHomunculusToken token) { + super(token); + } + + public StitchersApprenticeHomunculusToken copy() { + return new StitchersApprenticeHomunculusToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/StoneTrapIdolToken.java b/Mage/src/main/java/mage/game/permanent/token/StoneTrapIdolToken.java index 2278099722..ddd7e28f02 100644 --- a/Mage/src/main/java/mage/game/permanent/token/StoneTrapIdolToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/StoneTrapIdolToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.TrampleAbility; * * @author spjspj */ -public class StoneTrapIdolToken extends Token { +public class StoneTrapIdolToken extends TokenImpl { public StoneTrapIdolToken() { super("Construct", "6/12 colorless Construct artifact creature token with trample"); @@ -47,4 +47,12 @@ public class StoneTrapIdolToken extends Token { toughness = new MageInt(12); addAbility(TrampleAbility.getInstance()); } + + public StoneTrapIdolToken(final StoneTrapIdolToken token) { + super(token); + } + + public StoneTrapIdolToken copy() { + return new StoneTrapIdolToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/StormCrowToken.java b/Mage/src/main/java/mage/game/permanent/token/StormCrowToken.java index a06ffdb32e..9482f8665e 100644 --- a/Mage/src/main/java/mage/game/permanent/token/StormCrowToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/StormCrowToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class StormCrowToken extends Token { +public class StormCrowToken extends TokenImpl { public StormCrowToken() { super("Storm Crow", "1/2 blue Bird creature token with flying named Storm Crow"); @@ -47,4 +47,12 @@ public class StormCrowToken extends Token { toughness = new MageInt(2); this.addAbility(FlyingAbility.getInstance()); } + + public StormCrowToken(final StormCrowToken token) { + super(token); + } + + public StormCrowToken copy() { + return new StormCrowToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/SubterraneanTremorsLizardToken.java b/Mage/src/main/java/mage/game/permanent/token/SubterraneanTremorsLizardToken.java index 73a4386a58..c1c210b9ac 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SubterraneanTremorsLizardToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SubterraneanTremorsLizardToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class SubterraneanTremorsLizardToken extends Token { +public class SubterraneanTremorsLizardToken extends TokenImpl { public SubterraneanTremorsLizardToken() { super("Lizard", "an 8/8 red Lizard creature token"); @@ -45,4 +45,12 @@ public class SubterraneanTremorsLizardToken extends Token { power = new MageInt(8); toughness = new MageInt(8); } + + public SubterraneanTremorsLizardToken(final SubterraneanTremorsLizardToken token) { + super(token); + } + + public SubterraneanTremorsLizardToken copy() { + return new SubterraneanTremorsLizardToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/SurvivorToken.java b/Mage/src/main/java/mage/game/permanent/token/SurvivorToken.java index 886c2045bc..de04ef5664 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SurvivorToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SurvivorToken.java @@ -35,7 +35,7 @@ import mage.constants.SubType; * * @author North */ -public class SurvivorToken extends Token { +public class SurvivorToken extends TokenImpl { public SurvivorToken() { super("Survivor", "1/1 red Survivor creature token"); @@ -45,4 +45,12 @@ public class SurvivorToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public SurvivorToken(final SurvivorToken token) { + super(token); + } + + public SurvivorToken copy() { + return new SurvivorToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/SwanSongBirdToken.java b/Mage/src/main/java/mage/game/permanent/token/SwanSongBirdToken.java index 714b6b3c34..31af6246a6 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SwanSongBirdToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SwanSongBirdToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class SwanSongBirdToken extends Token { +public class SwanSongBirdToken extends TokenImpl { public SwanSongBirdToken() { super("Bird", "2/2 blue Bird creature token with flying"); @@ -50,4 +50,12 @@ public class SwanSongBirdToken extends Token { toughness = new MageInt(2); this.addAbility(FlyingAbility.getInstance()); } + + public SwanSongBirdToken(final SwanSongBirdToken token) { + super(token); + } + + public SwanSongBirdToken copy() { + return new SwanSongBirdToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/SylvanOfferingTreefolkToken.java b/Mage/src/main/java/mage/game/permanent/token/SylvanOfferingTreefolkToken.java index 04dbf88aee..bf89d314ab 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SylvanOfferingTreefolkToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SylvanOfferingTreefolkToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class SylvanOfferingTreefolkToken extends Token { +public class SylvanOfferingTreefolkToken extends TokenImpl { public SylvanOfferingTreefolkToken() { this(1); @@ -48,6 +48,13 @@ public class SylvanOfferingTreefolkToken extends Token { color.setGreen(true); power = new MageInt(xValue); toughness = new MageInt(xValue); + } + public SylvanOfferingTreefolkToken(final SylvanOfferingTreefolkToken token) { + super(token); + } + + public SylvanOfferingTreefolkToken copy() { + return new SylvanOfferingTreefolkToken(this); } } diff --git a/Mage/src/main/java/mage/game/permanent/token/TIEFighterToken.java b/Mage/src/main/java/mage/game/permanent/token/TIEFighterToken.java index 7d24c106a1..5bd100959d 100644 --- a/Mage/src/main/java/mage/game/permanent/token/TIEFighterToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/TIEFighterToken.java @@ -13,7 +13,7 @@ import mage.constants.SubType; * * @author Styxo */ -public class TIEFighterToken extends Token { +public class TIEFighterToken extends TokenImpl { public TIEFighterToken() { super("TIE Fighter", "1/1 black Starship artifact creature tokens with Spaceflight named TIE Fighter", 1, 1); @@ -24,4 +24,12 @@ public class TIEFighterToken extends Token { addAbility(SpaceflightAbility.getInstance()); subtype.add(SubType.STARSHIP); } + + public TIEFighterToken(final TIEFighterToken token) { + super(token); + } + + public TIEFighterToken copy() { + return new TIEFighterToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/TatsumaDragonToken.java b/Mage/src/main/java/mage/game/permanent/token/TatsumaDragonToken.java index 6663ccec93..aced2071f4 100644 --- a/Mage/src/main/java/mage/game/permanent/token/TatsumaDragonToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/TatsumaDragonToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class TatsumaDragonToken extends Token { +public class TatsumaDragonToken extends TokenImpl { public TatsumaDragonToken() { super("Dragon Spirit", "5/5 blue Dragon Spirit creature token with flying"); @@ -48,4 +48,12 @@ public class TatsumaDragonToken extends Token { toughness = new MageInt(5); addAbility(FlyingAbility.getInstance()); } + + public TatsumaDragonToken(final TatsumaDragonToken token) { + super(token); + } + + public TatsumaDragonToken copy() { + return new TatsumaDragonToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/TemptWithVengeanceElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/TemptWithVengeanceElementalToken.java index 91557241f0..0f111cdf3e 100644 --- a/Mage/src/main/java/mage/game/permanent/token/TemptWithVengeanceElementalToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/TemptWithVengeanceElementalToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.HasteAbility; * * @author spjspj */ -public class TemptWithVengeanceElementalToken extends Token { +public class TemptWithVengeanceElementalToken extends TokenImpl { public TemptWithVengeanceElementalToken() { super("Elemental", "1/1 red Elemental creature tokens with haste"); @@ -48,4 +48,12 @@ public class TemptWithVengeanceElementalToken extends Token { toughness = new MageInt(1); this.addAbility(HasteAbility.getInstance()); } + + public TemptWithVengeanceElementalToken(final TemptWithVengeanceElementalToken token) { + super(token); + } + + public TemptWithVengeanceElementalToken copy() { + return new TemptWithVengeanceElementalToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/TetraviteToken.java b/Mage/src/main/java/mage/game/permanent/token/TetraviteToken.java index 5903c62b5f..0bb4b1a500 100644 --- a/Mage/src/main/java/mage/game/permanent/token/TetraviteToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/TetraviteToken.java @@ -40,7 +40,7 @@ import mage.game.Game; * * @author spjspj */ -public class TetraviteToken extends Token { +public class TetraviteToken extends TokenImpl { public TetraviteToken() { super("Tetravite", "1/1 colorless Tetravite artifact creature token"); @@ -53,6 +53,14 @@ public class TetraviteToken extends Token { this.addAbility(FlyingAbility.getInstance()); this.addAbility(new CantBeEnchantedAbility()); } + + public TetraviteToken(final TetraviteToken token) { + super(token); + } + + public TetraviteToken copy() { + return new TetraviteToken(this); + } } class CantBeEnchantedAbility extends StaticAbility { diff --git a/Mage/src/main/java/mage/game/permanent/token/TeysaEnvoyOfGhostsToken.java b/Mage/src/main/java/mage/game/permanent/token/TeysaEnvoyOfGhostsToken.java index 4dd3ca65e3..4c6d8fb318 100644 --- a/Mage/src/main/java/mage/game/permanent/token/TeysaEnvoyOfGhostsToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/TeysaEnvoyOfGhostsToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class TeysaEnvoyOfGhostsToken extends Token { +public class TeysaEnvoyOfGhostsToken extends TokenImpl { public TeysaEnvoyOfGhostsToken() { super("Spirit", "1/1 white and black Spirit creature token with flying"); @@ -48,4 +48,12 @@ public class TeysaEnvoyOfGhostsToken extends Token { toughness = new MageInt(1); this.addAbility(FlyingAbility.getInstance()); } + + public TeysaEnvoyOfGhostsToken(final TeysaEnvoyOfGhostsToken token) { + super(token); + } + + public TeysaEnvoyOfGhostsToken copy() { + return new TeysaEnvoyOfGhostsToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/ThatcherHumanToken.java b/Mage/src/main/java/mage/game/permanent/token/ThatcherHumanToken.java index b3c16d64ca..ec6a108a90 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ThatcherHumanToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ThatcherHumanToken.java @@ -37,7 +37,7 @@ import mage.constants.SubType; * * @author spjspj */ -public class ThatcherHumanToken extends Token { +public class ThatcherHumanToken extends TokenImpl { public ThatcherHumanToken() { super("Human", "1/1 red Human creature token with haste"); @@ -49,4 +49,12 @@ public class ThatcherHumanToken extends Token { this.power = new MageInt(1); this.toughness = new MageInt(1); } + + public ThatcherHumanToken(final ThatcherHumanToken token) { + super(token); + } + + public ThatcherHumanToken copy() { + return new ThatcherHumanToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/TheLocustGodInsectToken.java b/Mage/src/main/java/mage/game/permanent/token/TheLocustGodInsectToken.java index 2f772fa874..fdb5badbd5 100644 --- a/Mage/src/main/java/mage/game/permanent/token/TheLocustGodInsectToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/TheLocustGodInsectToken.java @@ -37,7 +37,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class TheLocustGodInsectToken extends Token { +public class TheLocustGodInsectToken extends TokenImpl { public TheLocustGodInsectToken() { super("Insect", "1/1 blue and red Insect creature token with flying and haste"); @@ -51,4 +51,12 @@ public class TheLocustGodInsectToken extends Token { addAbility(FlyingAbility.getInstance()); addAbility(HasteAbility.getInstance()); } + + public TheLocustGodInsectToken(final TheLocustGodInsectToken token) { + super(token); + } + + public TheLocustGodInsectToken copy() { + return new TheLocustGodInsectToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/ThopterColorlessToken.java b/Mage/src/main/java/mage/game/permanent/token/ThopterColorlessToken.java index b0162d264f..01af59aba1 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ThopterColorlessToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ThopterColorlessToken.java @@ -40,7 +40,7 @@ import mage.util.RandomUtil; * * @author fireshoes */ -public class ThopterColorlessToken extends Token { +public class ThopterColorlessToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); diff --git a/Mage/src/main/java/mage/game/permanent/token/ThopterToken.java b/Mage/src/main/java/mage/game/permanent/token/ThopterToken.java index de0d5753e7..669bf7140a 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ThopterToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ThopterToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class ThopterToken extends Token { +public class ThopterToken extends TokenImpl { public ThopterToken() { super("Thopter", "1/1 blue Thopter artifact creature tokens with flying"); @@ -48,4 +48,12 @@ public class ThopterToken extends Token { toughness = new MageInt(1); this.addAbility(FlyingAbility.getInstance()); } + + public ThopterToken(final ThopterToken token) { + super(token); + } + + public ThopterToken copy() { + return new ThopterToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/ThrullToken.java b/Mage/src/main/java/mage/game/permanent/token/ThrullToken.java index 144249e8d1..1d6450a510 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ThrullToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ThrullToken.java @@ -39,7 +39,7 @@ import mage.constants.SubType; * * @author Quercitron */ -public class ThrullToken extends Token { +public class ThrullToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -57,4 +57,12 @@ public class ThrullToken extends Token { availableImageSetCodes = tokenImageSets; } + + public ThrullToken(final ThrullToken token) { + super(token); + } + + public ThrullToken copy() { + return new ThrullToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/TidalWaveWallToken.java b/Mage/src/main/java/mage/game/permanent/token/TidalWaveWallToken.java index 248b0b255c..379fe43c58 100644 --- a/Mage/src/main/java/mage/game/permanent/token/TidalWaveWallToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/TidalWaveWallToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.DefenderAbility; * * @author spjspj */ -public class TidalWaveWallToken extends Token { +public class TidalWaveWallToken extends TokenImpl { public TidalWaveWallToken() { super("Wall", "5/5 blue Wall creature token with defender"); @@ -47,4 +47,12 @@ public class TidalWaveWallToken extends Token { toughness = new MageInt(5); this.addAbility(DefenderAbility.getInstance()); } + + public TidalWaveWallToken(final TidalWaveWallToken token) { + super(token); + } + + public TidalWaveWallToken copy() { + return new TidalWaveWallToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/TilonallisSummonerElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/TilonallisSummonerElementalToken.java index dc3051a073..c53ccda01f 100644 --- a/Mage/src/main/java/mage/game/permanent/token/TilonallisSummonerElementalToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/TilonallisSummonerElementalToken.java @@ -35,7 +35,7 @@ import mage.constants.SubType; * * @author LevelX2 */ -public class TilonallisSummonerElementalToken extends Token { +public class TilonallisSummonerElementalToken extends TokenImpl { public TilonallisSummonerElementalToken() { super("Elemental", "1/1 red Elemental creature tokens"); @@ -47,4 +47,12 @@ public class TilonallisSummonerElementalToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public TilonallisSummonerElementalToken(final TilonallisSummonerElementalToken token) { + super(token); + } + + public TilonallisSummonerElementalToken copy() { + return new TilonallisSummonerElementalToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/TitanForgeGolemToken.java b/Mage/src/main/java/mage/game/permanent/token/TitanForgeGolemToken.java index 5a2a2e1594..997548da24 100644 --- a/Mage/src/main/java/mage/game/permanent/token/TitanForgeGolemToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/TitanForgeGolemToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class TitanForgeGolemToken extends Token { +public class TitanForgeGolemToken extends TokenImpl { public TitanForgeGolemToken() { super("Golem", "9/9 colorless Golem artifact creature token"); @@ -45,4 +45,12 @@ public class TitanForgeGolemToken extends Token { power = new MageInt(9); toughness = new MageInt(9); } + + public TitanForgeGolemToken(final TitanForgeGolemToken token) { + super(token); + } + + public TitanForgeGolemToken copy() { + return new TitanForgeGolemToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/TitaniaProtectorOfArgothElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/TitaniaProtectorOfArgothElementalToken.java index dc7570c55e..1614e3e92f 100644 --- a/Mage/src/main/java/mage/game/permanent/token/TitaniaProtectorOfArgothElementalToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/TitaniaProtectorOfArgothElementalToken.java @@ -39,7 +39,7 @@ import mage.ObjectColor; * * @author spjspj */ -public class TitaniaProtectorOfArgothElementalToken extends Token { +public class TitaniaProtectorOfArgothElementalToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -48,14 +48,10 @@ public class TitaniaProtectorOfArgothElementalToken extends Token { } public TitaniaProtectorOfArgothElementalToken() { - this(null, 0); + this((String)null); } public TitaniaProtectorOfArgothElementalToken(String setCode) { - this(setCode, 0); - } - - public TitaniaProtectorOfArgothElementalToken(String setCode, int tokenType) { super("Elemental", "5/3 green Elemental creature token"); availableImageSetCodes = tokenImageSets; this.setOriginalExpansionSetCode(setCode); @@ -65,4 +61,12 @@ public class TitaniaProtectorOfArgothElementalToken extends Token { this.power = new MageInt(5); this.toughness = new MageInt(3); } + + public TitaniaProtectorOfArgothElementalToken(final TitaniaProtectorOfArgothElementalToken token) { + super(token); + } + + public TitaniaProtectorOfArgothElementalToken copy() { + return new TitaniaProtectorOfArgothElementalToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/Token.java b/Mage/src/main/java/mage/game/permanent/token/Token.java index da68147b51..95a4a88ce8 100644 --- a/Mage/src/main/java/mage/game/permanent/token/Token.java +++ b/Mage/src/main/java/mage/game/permanent/token/Token.java @@ -1,313 +1,59 @@ -/* - * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of BetaSteward_at_googlemail.com. - */ + package mage.game.permanent.token; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -import java.util.UUID; import mage.MageObject; -import mage.MageObjectImpl; -import mage.ObjectColor; -import mage.abilities.Abilities; import mage.abilities.Ability; import mage.cards.Card; -import mage.constants.CardType; -import mage.constants.Zone; import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.game.events.ZoneChangeEvent; -import mage.game.permanent.Permanent; -import mage.game.permanent.PermanentToken; -import mage.players.Player; -import mage.util.RandomUtil; -import mage.util.SubTypeList; +import java.util.ArrayList; +import java.util.UUID; -public class Token extends MageObjectImpl { - - protected String description; - private final ArrayList lastAddedTokenIds = new ArrayList<>(); - private UUID lastAddedTokenId; - private int tokenType; - private String originalCardNumber; - private String originalExpansionSetCode; - private String tokenDescriptor; - private boolean expansionSetCodeChecked; - private Card copySourceCard; // the card the Token is a copy from - - // list of set codes tokene images are available for - protected List availableImageSetCodes = new ArrayList<>(); - - public enum Type { - - FIRST(1), - SECOND(2); - - int code; - - Type(int code) { - this.code = code; - } - - int getCode() { - return this.code; - } - } - - public Token(String name, String description) { - this.name = name; - this.description = description; - } - - public Token(String name, String description, int power, int toughness) { - this(name, description); - this.power.modifyBaseValue(power); - this.toughness.modifyBaseValue(toughness); - } - - public Token(String name, String description, ObjectColor color, SubTypeList subtype, int power, int toughness, Abilities abilities) { - this(name, description); - this.cardType.add(CardType.CREATURE); - this.color = color.copy(); - this.subtype = subtype; - this.power.modifyBaseValue(power); - this.toughness.modifyBaseValue(toughness); - if (abilities != null) { - this.abilities = abilities.copy(); - } - this.expansionSetCodeChecked = false; - } - - public Token(final Token token) { - super(token); - this.description = token.description; - this.tokenType = token.tokenType; - this.lastAddedTokenId = token.lastAddedTokenId; - this.lastAddedTokenIds.addAll(token.lastAddedTokenIds); - this.originalCardNumber = token.originalCardNumber; - this.originalExpansionSetCode = token.originalExpansionSetCode; - this.expansionSetCodeChecked = token.expansionSetCodeChecked; - this.copySourceCard = token.copySourceCard; // will never be changed - this.availableImageSetCodes = token.availableImageSetCodes; - this.isAllCreatureTypes = token.isAllCreatureTypes; - } - - private void setTokenDescriptor() { - this.tokenDescriptor = tokenDescriptor(); - } - - public String getTokenDescriptor() { - this.tokenDescriptor = tokenDescriptor(); - return tokenDescriptor; - } - - private String tokenDescriptor() { - String name = this.name.replaceAll("[^a-zA-Z0-9]", ""); - String color = this.color.toString().replaceAll("[^a-zA-Z0-9]", ""); - String subtype = this.subtype.toString().replaceAll("[^a-zA-Z0-9]", ""); - String cardType = this.cardType.toString().replaceAll("[^a-zA-Z0-9]", ""); - String originalset = this.getOriginalExpansionSetCode(); - String descriptor = name + '.' + color + '.' + subtype + '.' + cardType + '.' + this.power + '.' + this.toughness; - descriptor = descriptor.toUpperCase(Locale.ENGLISH); - return descriptor; - } - - public String getDescription() { - return description; - } - - public UUID getLastAddedToken() { - return lastAddedTokenId; - } - - public ArrayList getLastAddedTokenIds() { - ArrayList ids = new ArrayList<>(); - ids.addAll(lastAddedTokenIds); - return ids; - } - - public void addAbility(Ability ability) { - ability.setSourceId(this.getId()); - abilities.add(ability); - } +/** + * + * @author ArcadeMode + */ +public interface Token extends MageObject { @Override - public Token copy() { - return new Token(this); - } + Token copy(); - public boolean putOntoBattlefield(int amount, Game game, UUID sourceId, UUID controllerId) { - return this.putOntoBattlefield(amount, game, sourceId, controllerId, false, false); - } + String getTokenDescriptor(); - public boolean putOntoBattlefield(int amount, Game game, UUID sourceId, UUID controllerId, boolean tapped, boolean attacking) { - return putOntoBattlefield(amount, game, sourceId, controllerId, tapped, attacking, null); - } + String getDescription(); - public boolean putOntoBattlefield(int amount, Game game, UUID sourceId, UUID controllerId, boolean tapped, boolean attacking, UUID attackedPlayer) { - Player controller = game.getPlayer(controllerId); - if (controller == null) { - return false; - } - lastAddedTokenIds.clear(); + UUID getLastAddedToken(); - // moved here from CreateTokenEffect because not all cards that create tokens use CreateTokenEffect - // they use putOntoBattlefield directly - // TODO: Check this setCode handling because it makes no sense if token put into play with e.g. "Feldon of the third Path" - String setCode = null; - if (this.getOriginalExpansionSetCode() != null && !this.getOriginalExpansionSetCode().isEmpty()) { - setCode = this.getOriginalExpansionSetCode(); - } else { - Card source = game.getCard(sourceId); - if (source != null) { - setCode = source.getExpansionSetCode(); - } else { - MageObject object = game.getObject(sourceId); - if (object instanceof PermanentToken) { - setCode = ((PermanentToken) object).getExpansionSetCode(); - } - } - } - if (!expansionSetCodeChecked) { - expansionSetCodeChecked = this.updateExpansionSetCode(setCode); - } + ArrayList getLastAddedTokenIds(); - GameEvent event = new GameEvent(EventType.CREATE_TOKEN, null, sourceId, controllerId, amount, this.isCreature()); - if (!game.replaceEvent(event)) { - amount = event.getAmount(); + void addAbility(Ability ability); - List permanents = new ArrayList<>(); - List permanentsEntered = new ArrayList<>(); + boolean putOntoBattlefield(int amount, Game game, UUID sourceId, UUID controllerId); - for (int i = 0; i < amount; i++) { - PermanentToken newToken = new PermanentToken(this, event.getPlayerId(), setCode, game); // use event.getPlayerId() because it can be replaced by replacement effect - game.getState().addCard(newToken); - permanents.add(newToken); - game.getPermanentsEntering().put(newToken.getId(), newToken); - newToken.setTapped(tapped); - } - game.setScopeRelevant(true); - for (Permanent permanent : permanents) { - if (permanent.entersBattlefield(sourceId, game, Zone.OUTSIDE, true)) { - permanentsEntered.add(permanent); - } else { - game.getPermanentsEntering().remove(permanent.getId()); - } - } - game.setScopeRelevant(false); - for (Permanent permanent : permanentsEntered) { - game.addPermanent(permanent); - permanent.setZone(Zone.BATTLEFIELD, game); - game.getPermanentsEntering().remove(permanent.getId()); + boolean putOntoBattlefield(int amount, Game game, UUID sourceId, UUID controllerId, boolean tapped, boolean attacking); - this.lastAddedTokenIds.add(permanent.getId()); - this.lastAddedTokenId = permanent.getId(); - game.addSimultaneousEvent(new ZoneChangeEvent(permanent, permanent.getControllerId(), Zone.OUTSIDE, Zone.BATTLEFIELD)); - if (attacking && game.getCombat() != null) { - game.getCombat().addAttackingCreature(permanent.getId(), game, attackedPlayer); - } - if (!game.isSimulation()) { - game.informPlayers(controller.getLogName() + " creates a " + permanent.getLogName() + " token"); - } + boolean putOntoBattlefield(int amount, Game game, UUID sourceId, UUID controllerId, boolean tapped, boolean attacking, UUID attackedPlayer); - } - game.getState().applyEffects(game); // Needed to do it here without LKIReset i.e. do get SwordOfTheMeekTest running correctly. - return true; - } - return false; - } + void setPower(int power); - public void setPower(int power) { - this.power.setValue(power); - } + void setToughness(int toughness); - public void setToughness(int toughness) { - this.toughness.setValue(toughness); - } + int getTokenType(); - public int getTokenType() { - return tokenType; - } + void setTokenType(int tokenType); - public void setTokenType(int tokenType) { - this.tokenType = tokenType; - } + String getOriginalCardNumber(); - public String getOriginalCardNumber() { - return originalCardNumber; - } + void setOriginalCardNumber(String originalCardNumber); - public void setOriginalCardNumber(String originalCardNumber) { - this.originalCardNumber = originalCardNumber; - } + String getOriginalExpansionSetCode(); - public String getOriginalExpansionSetCode() { - return originalExpansionSetCode; - } + void setOriginalExpansionSetCode(String originalExpansionSetCode); - public void setOriginalExpansionSetCode(String originalExpansionSetCode) { - this.originalExpansionSetCode = originalExpansionSetCode; - setTokenDescriptor(); - } + Card getCopySourceCard(); - public Card getCopySourceCard() { - return copySourceCard; - } + void setCopySourceCard(Card copySourceCard); - public void setCopySourceCard(Card copySourceCard) { - if (copySourceCard != null) { - this.copySourceCard = copySourceCard.copy(); - } - } + void setExpansionSetCodeForImage(String code); - public void setExpansionSetCodeForImage(String code) { - if (!availableImageSetCodes.isEmpty()) { - if (availableImageSetCodes.contains(code)) { - setOriginalExpansionSetCode(code); - } else // we should not set random set if appropriate set is already used - { - if (getOriginalExpansionSetCode() == null || getOriginalExpansionSetCode().isEmpty() - || !availableImageSetCodes.contains(getOriginalExpansionSetCode())) { - setOriginalExpansionSetCode(availableImageSetCodes.get(RandomUtil.nextInt(availableImageSetCodes.size()))); - } - } - } else if (getOriginalExpansionSetCode() == null || getOriginalExpansionSetCode().isEmpty()) { - setOriginalExpansionSetCode(code); - } - setTokenDescriptor(); - } - - public boolean updateExpansionSetCode(String setCode) { - if (setCode == null || setCode.isEmpty()) { - return false; - } - this.setExpansionSetCodeForImage(setCode); - return true; - } + boolean updateExpansionSetCode(String setCode); } diff --git a/Mage/src/main/java/mage/game/permanent/token/TokenImpl.java b/Mage/src/main/java/mage/game/permanent/token/TokenImpl.java new file mode 100644 index 0000000000..b817f3f714 --- /dev/null +++ b/Mage/src/main/java/mage/game/permanent/token/TokenImpl.java @@ -0,0 +1,298 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.game.permanent.token; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.UUID; +import mage.MageObject; +import mage.MageObjectImpl; +import mage.ObjectColor; +import mage.abilities.Abilities; +import mage.abilities.Ability; +import mage.cards.Card; +import mage.constants.CardType; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.events.ZoneChangeEvent; +import mage.game.permanent.Permanent; +import mage.game.permanent.PermanentToken; +import mage.players.Player; +import mage.util.RandomUtil; +import mage.util.SubTypeList; + +public abstract class TokenImpl extends MageObjectImpl implements Token { + + protected String description; + private final ArrayList lastAddedTokenIds = new ArrayList<>(); + private UUID lastAddedTokenId; + private int tokenType; + private String originalCardNumber; + private String originalExpansionSetCode; + private String tokenDescriptor; + private boolean expansionSetCodeChecked; + private Card copySourceCard; // the card the Token is a copy from + + // list of set codes tokene images are available for + protected List availableImageSetCodes = new ArrayList<>(); + + public enum Type { + + FIRST(1), + SECOND(2); + + int code; + + Type(int code) { + this.code = code; + } + + int getCode() { + return this.code; + } + } + + public TokenImpl(String name, String description) { + this.name = name; + this.description = description; + } + + public TokenImpl(String name, String description, int power, int toughness) { + this(name, description); + this.power.modifyBaseValue(power); + this.toughness.modifyBaseValue(toughness); + } + + public TokenImpl(final TokenImpl token) { + super(token); + this.description = token.description; + this.tokenType = token.tokenType; + this.lastAddedTokenId = token.lastAddedTokenId; + this.lastAddedTokenIds.addAll(token.lastAddedTokenIds); + this.originalCardNumber = token.originalCardNumber; + this.originalExpansionSetCode = token.originalExpansionSetCode; + this.expansionSetCodeChecked = token.expansionSetCodeChecked; + this.copySourceCard = token.copySourceCard; // will never be changed + this.availableImageSetCodes = token.availableImageSetCodes; + this.isAllCreatureTypes = token.isAllCreatureTypes; + } + + @Override + public abstract Token copy(); + + private void setTokenDescriptor() { + this.tokenDescriptor = tokenDescriptor(); + } + + public String getTokenDescriptor() { + this.tokenDescriptor = tokenDescriptor(); + return tokenDescriptor; + } + + private String tokenDescriptor() { + String name = this.name.replaceAll("[^a-zA-Z0-9]", ""); + String color = this.color.toString().replaceAll("[^a-zA-Z0-9]", ""); + String subtype = this.subtype.toString().replaceAll("[^a-zA-Z0-9]", ""); + String cardType = this.cardType.toString().replaceAll("[^a-zA-Z0-9]", ""); + String originalset = this.getOriginalExpansionSetCode(); + String descriptor = name + '.' + color + '.' + subtype + '.' + cardType + '.' + this.power + '.' + this.toughness; + descriptor = descriptor.toUpperCase(Locale.ENGLISH); + return descriptor; + } + + public String getDescription() { + return description; + } + + public UUID getLastAddedToken() { + return lastAddedTokenId; + } + + public ArrayList getLastAddedTokenIds() { + ArrayList ids = new ArrayList<>(); + ids.addAll(lastAddedTokenIds); + return ids; + } + + public void addAbility(Ability ability) { + ability.setSourceId(this.getId()); + abilities.add(ability); + } + + public boolean putOntoBattlefield(int amount, Game game, UUID sourceId, UUID controllerId) { + return this.putOntoBattlefield(amount, game, sourceId, controllerId, false, false); + } + + public boolean putOntoBattlefield(int amount, Game game, UUID sourceId, UUID controllerId, boolean tapped, boolean attacking) { + return putOntoBattlefield(amount, game, sourceId, controllerId, tapped, attacking, null); + } + + public boolean putOntoBattlefield(int amount, Game game, UUID sourceId, UUID controllerId, boolean tapped, boolean attacking, UUID attackedPlayer) { + Player controller = game.getPlayer(controllerId); + if (controller == null) { + return false; + } + lastAddedTokenIds.clear(); + + // moved here from CreateTokenEffect because not all cards that create tokens use CreateTokenEffect + // they use putOntoBattlefield directly + // TODO: Check this setCode handling because it makes no sense if token put into play with e.g. "Feldon of the third Path" + String setCode = null; + if (this.getOriginalExpansionSetCode() != null && !this.getOriginalExpansionSetCode().isEmpty()) { + setCode = this.getOriginalExpansionSetCode(); + } else { + Card source = game.getCard(sourceId); + if (source != null) { + setCode = source.getExpansionSetCode(); + } else { + MageObject object = game.getObject(sourceId); + if (object instanceof PermanentToken) { + setCode = ((PermanentToken) object).getExpansionSetCode(); + } + } + } + if (!expansionSetCodeChecked) { + expansionSetCodeChecked = this.updateExpansionSetCode(setCode); + } + + GameEvent event = new GameEvent(EventType.CREATE_TOKEN, null, sourceId, controllerId, amount, this.isCreature()); + if (!game.replaceEvent(event)) { + amount = event.getAmount(); + + List permanents = new ArrayList<>(); + List permanentsEntered = new ArrayList<>(); + + for (int i = 0; i < amount; i++) { + PermanentToken newToken = new PermanentToken(this, event.getPlayerId(), setCode, game); // use event.getPlayerId() because it can be replaced by replacement effect + game.getState().addCard(newToken); + permanents.add(newToken); + game.getPermanentsEntering().put(newToken.getId(), newToken); + newToken.setTapped(tapped); + } + game.setScopeRelevant(true); + for (Permanent permanent : permanents) { + if (permanent.entersBattlefield(sourceId, game, Zone.OUTSIDE, true)) { + permanentsEntered.add(permanent); + } else { + game.getPermanentsEntering().remove(permanent.getId()); + } + } + game.setScopeRelevant(false); + for (Permanent permanent : permanentsEntered) { + game.addPermanent(permanent); + permanent.setZone(Zone.BATTLEFIELD, game); + game.getPermanentsEntering().remove(permanent.getId()); + + this.lastAddedTokenIds.add(permanent.getId()); + this.lastAddedTokenId = permanent.getId(); + game.addSimultaneousEvent(new ZoneChangeEvent(permanent, permanent.getControllerId(), Zone.OUTSIDE, Zone.BATTLEFIELD)); + if (attacking && game.getCombat() != null) { + game.getCombat().addAttackingCreature(permanent.getId(), game, attackedPlayer); + } + if (!game.isSimulation()) { + game.informPlayers(controller.getLogName() + " creates a " + permanent.getLogName() + " token"); + } + + } + game.getState().applyEffects(game); // Needed to do it here without LKIReset i.e. do get SwordOfTheMeekTest running correctly. + return true; + } + return false; + } + + public void setPower(int power) { + this.power.setValue(power); + } + + public void setToughness(int toughness) { + this.toughness.setValue(toughness); + } + + public int getTokenType() { + return tokenType; + } + + public void setTokenType(int tokenType) { + this.tokenType = tokenType; + } + + public String getOriginalCardNumber() { + return originalCardNumber; + } + + public void setOriginalCardNumber(String originalCardNumber) { + this.originalCardNumber = originalCardNumber; + } + + public String getOriginalExpansionSetCode() { + return originalExpansionSetCode; + } + + public void setOriginalExpansionSetCode(String originalExpansionSetCode) { + this.originalExpansionSetCode = originalExpansionSetCode; + setTokenDescriptor(); + } + + public Card getCopySourceCard() { + return copySourceCard; + } + + public void setCopySourceCard(Card copySourceCard) { + if (copySourceCard != null) { + this.copySourceCard = copySourceCard.copy(); + } + } + + public void setExpansionSetCodeForImage(String code) { + if (!availableImageSetCodes.isEmpty()) { + if (availableImageSetCodes.contains(code)) { + setOriginalExpansionSetCode(code); + } else // we should not set random set if appropriate set is already used + { + if (getOriginalExpansionSetCode() == null || getOriginalExpansionSetCode().isEmpty() + || !availableImageSetCodes.contains(getOriginalExpansionSetCode())) { + setOriginalExpansionSetCode(availableImageSetCodes.get(RandomUtil.nextInt(availableImageSetCodes.size()))); + } + } + } else if (getOriginalExpansionSetCode() == null || getOriginalExpansionSetCode().isEmpty()) { + setOriginalExpansionSetCode(code); + } + setTokenDescriptor(); + } + + public boolean updateExpansionSetCode(String setCode) { + if (setCode == null || setCode.isEmpty()) { + return false; + } + this.setExpansionSetCodeForImage(setCode); + return true; + } +} diff --git a/Mage/src/main/java/mage/game/permanent/token/TombspawnZombieToken.java b/Mage/src/main/java/mage/game/permanent/token/TombspawnZombieToken.java index f70ebe0947..c3008ea990 100644 --- a/Mage/src/main/java/mage/game/permanent/token/TombspawnZombieToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/TombspawnZombieToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.HasteAbility; * * @author L_J */ -public class TombspawnZombieToken extends Token { +public class TombspawnZombieToken extends TokenImpl { public TombspawnZombieToken() { super("Tombspawn", "2/2 black Zombie creature token with haste named Tombspawn"); @@ -47,4 +47,12 @@ public class TombspawnZombieToken extends Token { toughness = new MageInt(2); this.addAbility(HasteAbility.getInstance()); } + + public TombspawnZombieToken(final TombspawnZombieToken token) { + super(token); + } + + public TombspawnZombieToken copy() { + return new TombspawnZombieToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/TreasureToken.java b/Mage/src/main/java/mage/game/permanent/token/TreasureToken.java index 3181357b06..42b23d47f2 100644 --- a/Mage/src/main/java/mage/game/permanent/token/TreasureToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/TreasureToken.java @@ -43,7 +43,7 @@ import mage.constants.Zone; * * @author TheElk801 */ -public class TreasureToken extends Token { +public class TreasureToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -70,4 +70,12 @@ public class TreasureToken extends Token { ability.addCost(new SacrificeSourceCost()); this.addAbility(ability); } + + public TreasureToken(final TreasureToken token) { + super(token); + } + + public TreasureToken copy() { + return new TreasureToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/TreefolkShamanToken.java b/Mage/src/main/java/mage/game/permanent/token/TreefolkShamanToken.java index acfd5fd20a..5930809c65 100644 --- a/Mage/src/main/java/mage/game/permanent/token/TreefolkShamanToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/TreefolkShamanToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class TreefolkShamanToken extends Token { +public class TreefolkShamanToken extends TokenImpl { public TreefolkShamanToken() { super("Treefolk Shaman", "2/5 green Treefolk Shaman creature token"); @@ -46,4 +46,12 @@ public class TreefolkShamanToken extends Token { power = new MageInt(2); toughness = new MageInt(5); } + + public TreefolkShamanToken(final TreefolkShamanToken token) { + super(token); + } + + public TreefolkShamanToken copy() { + return new TreefolkShamanToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/TriskelaviteToken.java b/Mage/src/main/java/mage/game/permanent/token/TriskelaviteToken.java index b8ff7bd183..4249a8f526 100644 --- a/Mage/src/main/java/mage/game/permanent/token/TriskelaviteToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/TriskelaviteToken.java @@ -42,7 +42,7 @@ import mage.target.common.TargetCreatureOrPlayer; * * @author spjspj */ -public class TriskelaviteToken extends Token { +public class TriskelaviteToken extends TokenImpl { public TriskelaviteToken() { super("Triskelavite", "1/1 colorless Triskelavite artifact creature token with flying. It has \"Sacrifice this creature: This creature deals 1 damage to target creature or player.\""); @@ -59,4 +59,12 @@ public class TriskelaviteToken extends Token { addAbility(FlyingAbility.getInstance()); } + + public TriskelaviteToken(final TriskelaviteToken token) { + super(token); + } + + public TriskelaviteToken copy() { + return new TriskelaviteToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/TrooperToken.java b/Mage/src/main/java/mage/game/permanent/token/TrooperToken.java index 049be8c6c4..175ae1a409 100644 --- a/Mage/src/main/java/mage/game/permanent/token/TrooperToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/TrooperToken.java @@ -37,7 +37,7 @@ import mage.constants.SubType; * * @author Styxo */ -public class TrooperToken extends Token { +public class TrooperToken extends TokenImpl { public TrooperToken() { super("Trooper", "1/1 white Trooper creature token"); @@ -50,4 +50,12 @@ public class TrooperToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public TrooperToken(final TrooperToken token) { + super(token); + } + + public TrooperToken copy() { + return new TrooperToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/TuktukTheReturnedToken.java b/Mage/src/main/java/mage/game/permanent/token/TuktukTheReturnedToken.java index 619b3ca85f..beabad96d8 100644 --- a/Mage/src/main/java/mage/game/permanent/token/TuktukTheReturnedToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/TuktukTheReturnedToken.java @@ -36,7 +36,7 @@ import mage.constants.SuperType; * * @author spjspj */ -public class TuktukTheReturnedToken extends Token { +public class TuktukTheReturnedToken extends TokenImpl { public TuktukTheReturnedToken() { this("ROE"); @@ -52,4 +52,12 @@ public class TuktukTheReturnedToken extends Token { power = new MageInt(5); toughness = new MageInt(5); } + + public TuktukTheReturnedToken(final TuktukTheReturnedToken token) { + super(token); + } + + public TuktukTheReturnedToken copy() { + return new TuktukTheReturnedToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/TuskenRaiderToken.java b/Mage/src/main/java/mage/game/permanent/token/TuskenRaiderToken.java index 5300719902..c9630ab3a7 100644 --- a/Mage/src/main/java/mage/game/permanent/token/TuskenRaiderToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/TuskenRaiderToken.java @@ -34,7 +34,7 @@ import mage.constants.SubType; * * @author spjspj */ -public class TuskenRaiderToken extends Token { +public class TuskenRaiderToken extends TokenImpl { public TuskenRaiderToken() { super("Tusken Raider", "white Tusken Raider creature token", 1, 1); @@ -44,4 +44,12 @@ public class TuskenRaiderToken extends Token { subtype.add(SubType.TUSKEN); subtype.add(SubType.RAIDER); } + + public TuskenRaiderToken(final TuskenRaiderToken token) { + super(token); + } + + public TuskenRaiderToken copy() { + return new TuskenRaiderToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/UramiToken.java b/Mage/src/main/java/mage/game/permanent/token/UramiToken.java index 870acaceea..ef15b2fd78 100644 --- a/Mage/src/main/java/mage/game/permanent/token/UramiToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/UramiToken.java @@ -37,7 +37,7 @@ import mage.constants.SuperType; * * @author spjspj */ -public class UramiToken extends Token { +public class UramiToken extends TokenImpl { public UramiToken() { super("Urami", "legendary 5/5 black Demon Spirit creature token with flying named Urami"); @@ -52,4 +52,12 @@ public class UramiToken extends Token { this.addAbility(FlyingAbility.getInstance()); } + + public UramiToken(final UramiToken token) { + super(token); + } + + public UramiToken copy() { + return new UramiToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/UtvaraHellkiteDragonToken.java b/Mage/src/main/java/mage/game/permanent/token/UtvaraHellkiteDragonToken.java index 043918910f..b2a74140ff 100644 --- a/Mage/src/main/java/mage/game/permanent/token/UtvaraHellkiteDragonToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/UtvaraHellkiteDragonToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class UtvaraHellkiteDragonToken extends Token { +public class UtvaraHellkiteDragonToken extends TokenImpl { public UtvaraHellkiteDragonToken() { super("Dragon", "6/6 red Dragon creature token with flying"); @@ -47,4 +47,12 @@ public class UtvaraHellkiteDragonToken extends Token { toughness = new MageInt(6); addAbility(FlyingAbility.getInstance()); } + public UtvaraHellkiteDragonToken(final UtvaraHellkiteDragonToken token) { + super(token); + } + + public UtvaraHellkiteDragonToken copy() { + return new UtvaraHellkiteDragonToken(this); + } + } diff --git a/Mage/src/main/java/mage/game/permanent/token/VampireKnightToken.java b/Mage/src/main/java/mage/game/permanent/token/VampireKnightToken.java index e5966689f2..98d45e5712 100644 --- a/Mage/src/main/java/mage/game/permanent/token/VampireKnightToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/VampireKnightToken.java @@ -5,7 +5,7 @@ import mage.abilities.keyword.LifelinkAbility; import mage.constants.CardType; import mage.constants.SubType; -public class VampireKnightToken extends Token { +public class VampireKnightToken extends TokenImpl { public VampireKnightToken() { super("Vampire Knight", "1/1 black Vampire Knight creature token with lifelink"); @@ -17,4 +17,12 @@ public class VampireKnightToken extends Token { toughness = new MageInt(1); addAbility(LifelinkAbility.getInstance()); } + + public VampireKnightToken(final VampireKnightToken token) { + super(token); + } + + public VampireKnightToken copy() { + return new VampireKnightToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/VampireToken.java b/Mage/src/main/java/mage/game/permanent/token/VampireToken.java index f2afef969b..8fff06f5ad 100644 --- a/Mage/src/main/java/mage/game/permanent/token/VampireToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/VampireToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class VampireToken extends Token { +public class VampireToken extends TokenImpl { public VampireToken() { super("Vampire", "2/2 black Vampire creature token with flying"); @@ -47,4 +47,12 @@ public class VampireToken extends Token { toughness = new MageInt(2); addAbility(FlyingAbility.getInstance()); } + + public VampireToken(final VampireToken token) { + super(token); + } + + public VampireToken copy() { + return new VampireToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/VoiceOfResurgenceToken.java b/Mage/src/main/java/mage/game/permanent/token/VoiceOfResurgenceToken.java index c18613f92c..65fb9ed732 100644 --- a/Mage/src/main/java/mage/game/permanent/token/VoiceOfResurgenceToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/VoiceOfResurgenceToken.java @@ -41,7 +41,7 @@ import mage.filter.common.FilterControlledCreaturePermanent; * * @author spjspj */ -public class VoiceOfResurgenceToken extends Token { +public class VoiceOfResurgenceToken extends TokenImpl { public VoiceOfResurgenceToken() { super("Elemental", "X/X green and white Elemental creature with with \"This creature's power and toughness are each equal to the number of creatures you control."); @@ -57,4 +57,12 @@ public class VoiceOfResurgenceToken extends Token { this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SetPowerToughnessSourceEffect( new PermanentsOnBattlefieldCount(new FilterControlledCreaturePermanent()), Duration.EndOfGame))); } + + public VoiceOfResurgenceToken(final VoiceOfResurgenceToken token) { + super(token); + } + + public VoiceOfResurgenceToken copy() { + return new VoiceOfResurgenceToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/VoiceOfTheWoodsElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/VoiceOfTheWoodsElementalToken.java index 1ad400f91e..b1fd4289e9 100644 --- a/Mage/src/main/java/mage/game/permanent/token/VoiceOfTheWoodsElementalToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/VoiceOfTheWoodsElementalToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.TrampleAbility; * * @author spjspj */ -public class VoiceOfTheWoodsElementalToken extends Token { +public class VoiceOfTheWoodsElementalToken extends TokenImpl { public VoiceOfTheWoodsElementalToken() { super("Elemental", "7/7 green Elemental creature token with trample"); @@ -50,4 +50,12 @@ public class VoiceOfTheWoodsElementalToken extends Token { addAbility(TrampleAbility.getInstance()); } + + public VoiceOfTheWoodsElementalToken(final VoiceOfTheWoodsElementalToken token) { + super(token); + } + + public VoiceOfTheWoodsElementalToken copy() { + return new VoiceOfTheWoodsElementalToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/VojaToken.java b/Mage/src/main/java/mage/game/permanent/token/VojaToken.java index f587e77b5d..c5f1db75f8 100644 --- a/Mage/src/main/java/mage/game/permanent/token/VojaToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/VojaToken.java @@ -36,7 +36,7 @@ import mage.constants.SuperType; * * @author spjspj */ -public class VojaToken extends Token { +public class VojaToken extends TokenImpl { public VojaToken() { super("Voja", "legendary 2/2 green and white Wolf creature token named Voja"); @@ -49,4 +49,13 @@ public class VojaToken extends Token { this.power = new MageInt(2); this.toughness = new MageInt(2); } + + public VojaToken(final VojaToken token) { + super(token); + } + + public VojaToken copy() { + return new VojaToken(this); + } + } diff --git a/Mage/src/main/java/mage/game/permanent/token/VolrathsLaboratoryToken.java b/Mage/src/main/java/mage/game/permanent/token/VolrathsLaboratoryToken.java index d5bd6bf698..063bfceef6 100644 --- a/Mage/src/main/java/mage/game/permanent/token/VolrathsLaboratoryToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/VolrathsLaboratoryToken.java @@ -36,7 +36,7 @@ import mage.constants.SubType; * * @author spjspj */ -public class VolrathsLaboratoryToken extends Token { +public class VolrathsLaboratoryToken extends TokenImpl { public VolrathsLaboratoryToken() { this(null, null); @@ -53,4 +53,12 @@ public class VolrathsLaboratoryToken extends Token { power = new MageInt(2); toughness = new MageInt(2); } + + public VolrathsLaboratoryToken(final VolrathsLaboratoryToken token) { + super(token); + } + + public VolrathsLaboratoryToken copy() { + return new VolrathsLaboratoryToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/WaitingInTheWeedsCatToken.java b/Mage/src/main/java/mage/game/permanent/token/WaitingInTheWeedsCatToken.java index 85e176e9bc..a9fb285e22 100644 --- a/Mage/src/main/java/mage/game/permanent/token/WaitingInTheWeedsCatToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/WaitingInTheWeedsCatToken.java @@ -35,7 +35,7 @@ import mage.constants.SubType; * * @author spjspj */ -public class WaitingInTheWeedsCatToken extends Token { +public class WaitingInTheWeedsCatToken extends TokenImpl { public WaitingInTheWeedsCatToken() { super("Cat", "1/1 green Cat creature token"); @@ -45,5 +45,12 @@ public class WaitingInTheWeedsCatToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public WaitingInTheWeedsCatToken(final WaitingInTheWeedsCatToken token) { + super(token); + } + public WaitingInTheWeedsCatToken copy() { + return new WaitingInTheWeedsCatToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/WalkerOfTheGroveToken.java b/Mage/src/main/java/mage/game/permanent/token/WalkerOfTheGroveToken.java index fc8f85bf8e..7185d774f0 100644 --- a/Mage/src/main/java/mage/game/permanent/token/WalkerOfTheGroveToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/WalkerOfTheGroveToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class WalkerOfTheGroveToken extends Token { +public class WalkerOfTheGroveToken extends TokenImpl { public WalkerOfTheGroveToken() { super("Elemental", "4/4 green Elemental creature token"); @@ -45,4 +45,12 @@ public class WalkerOfTheGroveToken extends Token { power = new MageInt(4); toughness = new MageInt(4); } + + public WalkerOfTheGroveToken(final WalkerOfTheGroveToken token) { + super(token); + } + + public WalkerOfTheGroveToken copy() { + return new WalkerOfTheGroveToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/WallOfResurgenceToken.java b/Mage/src/main/java/mage/game/permanent/token/WallOfResurgenceToken.java index f182cd8eb5..14a0511d18 100644 --- a/Mage/src/main/java/mage/game/permanent/token/WallOfResurgenceToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/WallOfResurgenceToken.java @@ -5,7 +5,7 @@ import mage.abilities.keyword.HasteAbility; import mage.constants.CardType; import mage.constants.SubType; -public class WallOfResurgenceToken extends Token { +public class WallOfResurgenceToken extends TokenImpl { public WallOfResurgenceToken() { super("", "0/0 Elemental creature with haste"); @@ -17,4 +17,12 @@ public class WallOfResurgenceToken extends Token { this.addAbility(HasteAbility.getInstance()); } + + public WallOfResurgenceToken(final WallOfResurgenceToken token) { + super(token); + } + + public WallOfResurgenceToken copy() { + return new WallOfResurgenceToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/WallToken.java b/Mage/src/main/java/mage/game/permanent/token/WallToken.java index ed35d98309..296b8a315d 100644 --- a/Mage/src/main/java/mage/game/permanent/token/WallToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/WallToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.DefenderAbility; * * @author spjspj */ -public class WallToken extends Token { +public class WallToken extends TokenImpl { public WallToken() { super("", "2/6 white wall creature with defender"); @@ -47,4 +47,12 @@ public class WallToken extends Token { toughness = new MageInt(6); this.addAbility(DefenderAbility.getInstance()); } + + public WallToken(final WallToken token) { + super(token); + } + + public WallToken copy() { + return new WallToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/WandOfTheElementsFirstToken.java b/Mage/src/main/java/mage/game/permanent/token/WandOfTheElementsFirstToken.java index 50999484da..44e04eaa9d 100644 --- a/Mage/src/main/java/mage/game/permanent/token/WandOfTheElementsFirstToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/WandOfTheElementsFirstToken.java @@ -36,7 +36,7 @@ import mage.constants.SubType; * * @author spjspj */ -public class WandOfTheElementsFirstToken extends Token { +public class WandOfTheElementsFirstToken extends TokenImpl { public WandOfTheElementsFirstToken() { super("Elemental", "2/2 blue Elemental creature token with flying"); @@ -48,4 +48,12 @@ public class WandOfTheElementsFirstToken extends Token { toughness = new MageInt(2); this.addAbility(FlyingAbility.getInstance()); } + + public WandOfTheElementsFirstToken(final WandOfTheElementsFirstToken token) { + super(token); + } + + public WandOfTheElementsFirstToken copy() { + return new WandOfTheElementsFirstToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/WandOfTheElementsSecondToken.java b/Mage/src/main/java/mage/game/permanent/token/WandOfTheElementsSecondToken.java index d69534aba0..d887a01d17 100644 --- a/Mage/src/main/java/mage/game/permanent/token/WandOfTheElementsSecondToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/WandOfTheElementsSecondToken.java @@ -35,7 +35,7 @@ import mage.constants.SubType; * * @author spjspj */ -public class WandOfTheElementsSecondToken extends Token { +public class WandOfTheElementsSecondToken extends TokenImpl { public WandOfTheElementsSecondToken() { super("Elemental", "3/3 red Elemental creature token"); @@ -46,4 +46,12 @@ public class WandOfTheElementsSecondToken extends Token { power = new MageInt(3); toughness = new MageInt(3); } + + public WandOfTheElementsSecondToken(final WandOfTheElementsSecondToken token) { + super(token); + } + + public WandOfTheElementsSecondToken copy() { + return new WandOfTheElementsSecondToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/WarriorToken.java b/Mage/src/main/java/mage/game/permanent/token/WarriorToken.java index 8b39a35d62..dde6c1a554 100644 --- a/Mage/src/main/java/mage/game/permanent/token/WarriorToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/WarriorToken.java @@ -39,7 +39,7 @@ import mage.util.RandomUtil; * * @author LoneFox */ -public class WarriorToken extends Token { +public class WarriorToken extends TokenImpl { public WarriorToken() { super("Warrior", "1/1 white Warrior creature token"); diff --git a/Mage/src/main/java/mage/game/permanent/token/WarriorVigilantToken.java b/Mage/src/main/java/mage/game/permanent/token/WarriorVigilantToken.java index 6a09017f74..aba2c8302c 100644 --- a/Mage/src/main/java/mage/game/permanent/token/WarriorVigilantToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/WarriorVigilantToken.java @@ -39,7 +39,7 @@ import mage.constants.SubType; * * @author fireshoes */ -public class WarriorVigilantToken extends Token { +public class WarriorVigilantToken extends TokenImpl { public WarriorVigilantToken() { super("Warrior", "1/1 white Warrior creature token with vigilance"); diff --git a/Mage/src/main/java/mage/game/permanent/token/WasitoraCatDragonToken.java b/Mage/src/main/java/mage/game/permanent/token/WasitoraCatDragonToken.java index 1f3c90efe2..eeb7623d96 100644 --- a/Mage/src/main/java/mage/game/permanent/token/WasitoraCatDragonToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/WasitoraCatDragonToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class WasitoraCatDragonToken extends Token { +public class WasitoraCatDragonToken extends TokenImpl { public WasitoraCatDragonToken() { super("Cat Dragon", "3/3 black, red, and green Cat Dragon creature token with flying"); @@ -51,4 +51,12 @@ public class WasitoraCatDragonToken extends Token { toughness = new MageInt(3); this.addAbility(FlyingAbility.getInstance()); } + + public WasitoraCatDragonToken(final WasitoraCatDragonToken token) { + super(token); + } + + public WasitoraCatDragonToken copy() { + return new WasitoraCatDragonToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/WaspToken.java b/Mage/src/main/java/mage/game/permanent/token/WaspToken.java index 10933c26d1..c53e361553 100644 --- a/Mage/src/main/java/mage/game/permanent/token/WaspToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/WaspToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class WaspToken extends Token { +public class WaspToken extends TokenImpl { public WaspToken() { super("Wasp", "1/1 colorless Insect artifact creature token with flying"); @@ -47,4 +47,12 @@ public class WaspToken extends Token { toughness = new MageInt(1); this.addAbility(FlyingAbility.getInstance()); } + + public WaspToken(final WaspToken token) { + super(token); + } + + public WaspToken copy() { + return new WaspToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/WaylayToken.java b/Mage/src/main/java/mage/game/permanent/token/WaylayToken.java index 47942f2c6a..87ec8d5e88 100644 --- a/Mage/src/main/java/mage/game/permanent/token/WaylayToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/WaylayToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class WaylayToken extends Token { +public class WaylayToken extends TokenImpl { public WaylayToken() { super("Knight", "2/2 white Knight creature token"); @@ -45,4 +45,12 @@ public class WaylayToken extends Token { power = new MageInt(2); toughness = new MageInt(2); } + + public WaylayToken(final WaylayToken token) { + super(token); + } + + public WaylayToken copy() { + return new WaylayToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/WeirdToken.java b/Mage/src/main/java/mage/game/permanent/token/WeirdToken.java index a3b269a6fd..0984adf3dd 100644 --- a/Mage/src/main/java/mage/game/permanent/token/WeirdToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/WeirdToken.java @@ -37,7 +37,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class WeirdToken extends Token { +public class WeirdToken extends TokenImpl { public WeirdToken() { super("Weird", "3/3 blue Weird create token with defender and flying"); @@ -49,4 +49,12 @@ public class WeirdToken extends Token { this.addAbility(DefenderAbility.getInstance()); this.addAbility(FlyingAbility.getInstance()); } + + public WeirdToken(final WeirdToken token) { + super(token); + } + + public WeirdToken copy() { + return new WeirdToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/WhiteElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/WhiteElementalToken.java index 5c41093b7a..e82cb72d62 100644 --- a/Mage/src/main/java/mage/game/permanent/token/WhiteElementalToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/WhiteElementalToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class WhiteElementalToken extends Token { +public class WhiteElementalToken extends TokenImpl { public WhiteElementalToken() { super("Elemental", "4/4 white Elemental creature token with flying"); @@ -48,4 +48,12 @@ public class WhiteElementalToken extends Token { setTokenType(2); this.addAbility(FlyingAbility.getInstance()); } + + public WhiteElementalToken(final WhiteElementalToken token) { + super(token); + } + + public WhiteElementalToken copy() { + return new WhiteElementalToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/WingmateRocToken.java b/Mage/src/main/java/mage/game/permanent/token/WingmateRocToken.java index 6c4198dde5..287e6e2ad3 100644 --- a/Mage/src/main/java/mage/game/permanent/token/WingmateRocToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/WingmateRocToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.FlyingAbility; * * @author spjspj */ -public class WingmateRocToken extends Token { +public class WingmateRocToken extends TokenImpl { public WingmateRocToken() { super("Bird", "3/4 white Bird creature token with flying"); @@ -47,4 +47,12 @@ public class WingmateRocToken extends Token { toughness = new MageInt(4); addAbility(FlyingAbility.getInstance()); } + + public WingmateRocToken(final WingmateRocToken token) { + super(token); + } + + public WingmateRocToken copy() { + return new WingmateRocToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/WireflyToken.java b/Mage/src/main/java/mage/game/permanent/token/WireflyToken.java index cf7006cfd9..6d3577e180 100644 --- a/Mage/src/main/java/mage/game/permanent/token/WireflyToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/WireflyToken.java @@ -35,7 +35,7 @@ import mage.constants.SubType; * * @author spjspj */ -public class WireflyToken extends Token { +public class WireflyToken extends TokenImpl { public WireflyToken() { super("Wirefly", "2/2 colorless Insect artifact creature token with flying named Wirefly"); @@ -47,4 +47,12 @@ public class WireflyToken extends Token { this.addCardType(CardType.CREATURE); this.addAbility(FlyingAbility.getInstance()); } + + public WireflyToken(final WireflyToken token) { + super(token); + } + + public WireflyToken copy() { + return new WireflyToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/WolfToken.java b/Mage/src/main/java/mage/game/permanent/token/WolfToken.java index b5b5898d90..1bdf5e5fd6 100644 --- a/Mage/src/main/java/mage/game/permanent/token/WolfToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/WolfToken.java @@ -39,7 +39,7 @@ import mage.constants.SubType; * * @author BetaSteward_at_googlemail.com */ -public class WolfToken extends Token { +public class WolfToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); diff --git a/Mage/src/main/java/mage/game/permanent/token/WolfTokenWithDeathtouch.java b/Mage/src/main/java/mage/game/permanent/token/WolfTokenWithDeathtouch.java index 3fe8fbb9a0..98357e8112 100644 --- a/Mage/src/main/java/mage/game/permanent/token/WolfTokenWithDeathtouch.java +++ b/Mage/src/main/java/mage/game/permanent/token/WolfTokenWithDeathtouch.java @@ -37,7 +37,7 @@ import mage.abilities.keyword.DeathtouchAbility; * * @author nantuko */ -public class WolfTokenWithDeathtouch extends Token { +public class WolfTokenWithDeathtouch extends TokenImpl { public WolfTokenWithDeathtouch() { super("Wolf", "1/1 black Wolf creature token with deathtouch"); @@ -50,4 +50,11 @@ public class WolfTokenWithDeathtouch extends Token { addAbility(DeathtouchAbility.getInstance()); } + public WolfTokenWithDeathtouch(final WolfTokenWithDeathtouch token) { + super(token); + } + + public WolfTokenWithDeathtouch copy() { + return new WolfTokenWithDeathtouch(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/WoodToken.java b/Mage/src/main/java/mage/game/permanent/token/WoodToken.java index 4c82960fb8..6883dbb6bf 100644 --- a/Mage/src/main/java/mage/game/permanent/token/WoodToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/WoodToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.DefenderAbility; * * @author spjspj */ -public class WoodToken extends Token { +public class WoodToken extends TokenImpl { public WoodToken() { super("Wood", "0/1 green Wall creature token with defender named Wood"); @@ -49,4 +49,12 @@ public class WoodToken extends Token { this.addAbility(DefenderAbility.getInstance()); } + + public WoodToken(final WoodToken token) { + super(token); + } + + public WoodToken copy() { + return new WoodToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/WormHarvestToken.java b/Mage/src/main/java/mage/game/permanent/token/WormHarvestToken.java index efcf25e90e..a6609eb2ee 100644 --- a/Mage/src/main/java/mage/game/permanent/token/WormHarvestToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/WormHarvestToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class WormHarvestToken extends Token { +public class WormHarvestToken extends TokenImpl { public WormHarvestToken() { super("Worm", "1/1 black and green Worm creature token"); @@ -46,4 +46,12 @@ public class WormHarvestToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public WormHarvestToken(final WormHarvestToken token) { + super(token); + } + + public WormHarvestToken copy() { + return new WormHarvestToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/WortTheRaidmotherToken.java b/Mage/src/main/java/mage/game/permanent/token/WortTheRaidmotherToken.java index 73a8f18fd5..f6a1e07991 100644 --- a/Mage/src/main/java/mage/game/permanent/token/WortTheRaidmotherToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/WortTheRaidmotherToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class WortTheRaidmotherToken extends Token { +public class WortTheRaidmotherToken extends TokenImpl { public WortTheRaidmotherToken() { super("Goblin Warrior", "1/1 red and green Goblin Warrior creature token"); @@ -47,4 +47,12 @@ public class WortTheRaidmotherToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public WortTheRaidmotherToken(final WortTheRaidmotherToken token) { + super(token); + } + + public WortTheRaidmotherToken copy() { + return new WortTheRaidmotherToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/Wurm1Token.java b/Mage/src/main/java/mage/game/permanent/token/Wurm1Token.java index d2ca7a4a4c..502ca06375 100644 --- a/Mage/src/main/java/mage/game/permanent/token/Wurm1Token.java +++ b/Mage/src/main/java/mage/game/permanent/token/Wurm1Token.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.DeathtouchAbility; * * @author spjspj */ -public class Wurm1Token extends Token { +public class Wurm1Token extends TokenImpl { public Wurm1Token() { this("MBS"); @@ -51,4 +51,12 @@ public class Wurm1Token extends Token { toughness = new MageInt(3); this.addAbility(DeathtouchAbility.getInstance()); } + + public Wurm1Token(final Wurm1Token token) { + super(token); + } + + public Wurm1Token copy() { + return new Wurm1Token(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/Wurm2Token.java b/Mage/src/main/java/mage/game/permanent/token/Wurm2Token.java index 44413a9e17..4327087756 100644 --- a/Mage/src/main/java/mage/game/permanent/token/Wurm2Token.java +++ b/Mage/src/main/java/mage/game/permanent/token/Wurm2Token.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.LifelinkAbility; * * @author spjspj */ -public class Wurm2Token extends Token { +public class Wurm2Token extends TokenImpl { public Wurm2Token() { this("MBS"); @@ -54,4 +54,12 @@ public class Wurm2Token extends Token { setTokenType(2); // for image } + + public Wurm2Token(final Wurm2Token token) { + super(token); + } + + public Wurm2Token copy() { + return new Wurm2Token(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/WurmCallingWurmToken.java b/Mage/src/main/java/mage/game/permanent/token/WurmCallingWurmToken.java index 9aff3b45e8..9aefc7fb57 100644 --- a/Mage/src/main/java/mage/game/permanent/token/WurmCallingWurmToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/WurmCallingWurmToken.java @@ -34,7 +34,7 @@ import mage.constants.SubType; /** * @author spjspj */ -public class WurmCallingWurmToken extends Token { +public class WurmCallingWurmToken extends TokenImpl { public WurmCallingWurmToken() { super("Wurm", "X/X green Wurm creature token"); @@ -44,4 +44,12 @@ public class WurmCallingWurmToken extends Token { power = new MageInt(0); toughness = new MageInt(0); } + + public WurmCallingWurmToken(final WurmCallingWurmToken token) { + super(token); + } + + public WurmCallingWurmToken copy() { + return new WurmCallingWurmToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/WurmToken.java b/Mage/src/main/java/mage/game/permanent/token/WurmToken.java index 4e76813a0d..f84e3f4f2e 100644 --- a/Mage/src/main/java/mage/game/permanent/token/WurmToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/WurmToken.java @@ -34,7 +34,7 @@ import mage.constants.SubType; /** * @author magenoxx_at_gmail.com */ -public class WurmToken extends Token { +public class WurmToken extends TokenImpl { public WurmToken() { super("Wurm", "6/6 green Wurm creature token"); @@ -44,4 +44,12 @@ public class WurmToken extends Token { power = new MageInt(6); toughness = new MageInt(6); } + + public WurmToken(final WurmToken token) { + super(token); + } + + public WurmToken copy() { + return new WurmToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/WurmToken2.java b/Mage/src/main/java/mage/game/permanent/token/WurmToken2.java index b9228f156c..0f305ae9d0 100644 --- a/Mage/src/main/java/mage/game/permanent/token/WurmToken2.java +++ b/Mage/src/main/java/mage/game/permanent/token/WurmToken2.java @@ -40,7 +40,7 @@ import mage.abilities.keyword.TrampleAbility; * * @author LoneFox */ -public class WurmToken2 extends Token { +public class WurmToken2 extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -57,4 +57,12 @@ public class WurmToken2 extends Token { toughness = new MageInt(5); addAbility(TrampleAbility.getInstance()); } + + public WurmToken2(final WurmToken2 token) { + super(token); + } + + public WurmToken2 copy() { + return new WurmToken2(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/WurmToken3.java b/Mage/src/main/java/mage/game/permanent/token/WurmToken3.java index 39628ace8e..6628b6e400 100644 --- a/Mage/src/main/java/mage/game/permanent/token/WurmToken3.java +++ b/Mage/src/main/java/mage/game/permanent/token/WurmToken3.java @@ -39,7 +39,7 @@ import mage.MageInt; * * @author fireshoes */ -public class WurmToken3 extends Token { +public class WurmToken3 extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); @@ -55,4 +55,12 @@ public class WurmToken3 extends Token { power = new MageInt(5); toughness = new MageInt(5); } + + public WurmToken3(final WurmToken3 token) { + super(token); + } + + public WurmToken3 copy() { + return new WurmToken3(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/XenagosSatyrToken.java b/Mage/src/main/java/mage/game/permanent/token/XenagosSatyrToken.java index 578c23c2ce..d3d67bec61 100644 --- a/Mage/src/main/java/mage/game/permanent/token/XenagosSatyrToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/XenagosSatyrToken.java @@ -36,7 +36,7 @@ import mage.abilities.keyword.HasteAbility; * * @author spjspj */ -public class XenagosSatyrToken extends Token { +public class XenagosSatyrToken extends TokenImpl { public XenagosSatyrToken() { super("Satyr", "2/2 red and green Satyr creature token with haste"); @@ -49,5 +49,11 @@ public class XenagosSatyrToken extends Token { this.addAbility(HasteAbility.getInstance()); } + public XenagosSatyrToken(final XenagosSatyrToken token) { + super(token); + } + public XenagosSatyrToken copy() { + return new XenagosSatyrToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/YoungPyromancerElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/YoungPyromancerElementalToken.java index bdd0531b07..161eb6b164 100644 --- a/Mage/src/main/java/mage/game/permanent/token/YoungPyromancerElementalToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/YoungPyromancerElementalToken.java @@ -36,7 +36,7 @@ import mage.util.RandomUtil; * * @author spjspj */ -public class YoungPyromancerElementalToken extends Token { +public class YoungPyromancerElementalToken extends TokenImpl { public YoungPyromancerElementalToken() { super("Elemental", "1/1 red Elemental creature"); @@ -52,4 +52,12 @@ public class YoungPyromancerElementalToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public YoungPyromancerElementalToken(final YoungPyromancerElementalToken token) { + super(token); + } + + public YoungPyromancerElementalToken copy() { + return new YoungPyromancerElementalToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/ZektarShrineElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/ZektarShrineElementalToken.java index cabbb5e5e6..a8bf50342a 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ZektarShrineElementalToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ZektarShrineElementalToken.java @@ -37,7 +37,7 @@ import mage.constants.SubType; * * @author spjspj */ -public class ZektarShrineElementalToken extends Token { +public class ZektarShrineElementalToken extends TokenImpl { public ZektarShrineElementalToken() { super("Elemental", "7/1 red Elemental creature token with trample and haste"); @@ -49,4 +49,12 @@ public class ZektarShrineElementalToken extends Token { addAbility(TrampleAbility.getInstance()); addAbility(HasteAbility.getInstance()); } + + public ZektarShrineElementalToken(final ZektarShrineElementalToken token) { + super(token); + } + + public ZektarShrineElementalToken copy() { + return new ZektarShrineElementalToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/ZendikarsRoilElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/ZendikarsRoilElementalToken.java index 39ba7e9a3a..d31a7a3408 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ZendikarsRoilElementalToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ZendikarsRoilElementalToken.java @@ -35,7 +35,7 @@ import mage.MageInt; * * @author spjspj */ -public class ZendikarsRoilElementalToken extends Token { +public class ZendikarsRoilElementalToken extends TokenImpl { public ZendikarsRoilElementalToken() { super("Elemental", "2/2 green Elemental creature token"); @@ -47,4 +47,11 @@ public class ZendikarsRoilElementalToken extends Token { toughness = new MageInt(2); } + public ZendikarsRoilElementalToken(final ZendikarsRoilElementalToken token) { + super(token); + } + + public ZendikarsRoilElementalToken copy() { + return new ZendikarsRoilElementalToken(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/ZombieToken.java b/Mage/src/main/java/mage/game/permanent/token/ZombieToken.java index ddc955b60e..fed8e100bc 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ZombieToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ZombieToken.java @@ -40,7 +40,7 @@ import mage.util.RandomUtil; * * @author BetaSteward_at_googlemail.com */ -public class ZombieToken extends Token { +public class ZombieToken extends TokenImpl { final static private List tokenImageSets = new ArrayList<>(); diff --git a/Mage/src/main/java/mage/game/permanent/token/ZombieToken2.java b/Mage/src/main/java/mage/game/permanent/token/ZombieToken2.java index 87b5ce1aba..85fc82bec7 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ZombieToken2.java +++ b/Mage/src/main/java/mage/game/permanent/token/ZombieToken2.java @@ -35,7 +35,7 @@ import mage.constants.SubType; * * @author escplan9 (Derek Monturo - dmontur1 at gmail dot com) */ -public class ZombieToken2 extends Token { +public class ZombieToken2 extends TokenImpl { public ZombieToken2() { this(0, 0); @@ -50,4 +50,12 @@ public class ZombieToken2 extends Token { toughness = new MageInt(zToughness); setOriginalExpansionSetCode("EMN"); } + + public ZombieToken2(final ZombieToken2 token) { + super(token); + } + + public ZombieToken2 copy() { + return new ZombieToken2(this); + } } diff --git a/Mage/src/main/java/mage/game/permanent/token/ZombieWizardToken.java b/Mage/src/main/java/mage/game/permanent/token/ZombieWizardToken.java index 25333f1a92..131dcb1155 100644 --- a/Mage/src/main/java/mage/game/permanent/token/ZombieWizardToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/ZombieWizardToken.java @@ -36,7 +36,7 @@ import mage.MageInt; * * @author spjspj */ -public class ZombieWizardToken extends Token { +public class ZombieWizardToken extends TokenImpl { public ZombieWizardToken() { super("Zombie Wizard", "1/1 blue and black Zombie Wizard creature token"); @@ -48,4 +48,12 @@ public class ZombieWizardToken extends Token { power = new MageInt(1); toughness = new MageInt(1); } + + public ZombieWizardToken(final ZombieWizardToken token) { + super(token); + } + + public ZombieWizardToken copy() { + return new ZombieWizardToken(this); + } } diff --git a/Mage/src/main/java/mage/util/CardUtil.java b/Mage/src/main/java/mage/util/CardUtil.java index bdc5e2a1b5..930c3d2315 100644 --- a/Mage/src/main/java/mage/util/CardUtil.java +++ b/Mage/src/main/java/mage/util/CardUtil.java @@ -37,6 +37,7 @@ import mage.abilities.costs.mana.*; import mage.cards.Card; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; import mage.util.functions.CopyTokenFunction; diff --git a/Mage/src/main/java/mage/util/functions/CopyTokenFunction.java b/Mage/src/main/java/mage/util/functions/CopyTokenFunction.java index 81830b7744..1c9f57fc6a 100644 --- a/Mage/src/main/java/mage/util/functions/CopyTokenFunction.java +++ b/Mage/src/main/java/mage/util/functions/CopyTokenFunction.java @@ -36,6 +36,7 @@ import mage.constants.SubType; import mage.constants.SuperType; import mage.game.permanent.PermanentCard; import mage.game.permanent.PermanentToken; +import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.Token; /**