* Fixed a problem that Emblems created by permanents where its owner left the game caused errors in clients. Some handling cganges of emblems.

This commit is contained in:
LevelX2 2016-12-27 16:00:22 +01:00
parent 81caed134f
commit 8075ea2e50
56 changed files with 894 additions and 850 deletions

View file

@ -72,7 +72,7 @@ public class AjaniSteadfast extends CardImpl {
}
public AjaniSteadfast(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{3}{W}");
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{3}{W}");
this.subtype.add("Ajani");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(4));
@ -117,7 +117,7 @@ public class AjaniSteadfast extends CardImpl {
class AjaniSteadfastEmblem extends Emblem {
public AjaniSteadfastEmblem() {
setName("EMBLEM: Ajani Steadfast");
setName("Emblem Ajani");
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new AjaniSteadfastPreventEffect()));
this.setExpansionSetCodeForImage("M15");
}

View file

@ -63,7 +63,7 @@ public class ArlinnEmbracedByTheMoon extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures you control");
public ArlinnEmbracedByTheMoon(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"");
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "");
this.subtype.add("Arlinn");
this.color.setRed(true);
this.color.setGreen(true);
@ -105,7 +105,7 @@ class ArlinnEmbracedByTheMoonEmblem extends Emblem {
// "Creatures you control have haste and '{T}: This creature deals damage equal to its power to target creature or player.'"
public ArlinnEmbracedByTheMoonEmblem() {
this.setName("EMBLEM: Arlinn, Embraced by the Moon");
this.setName("Emblem Arlinn");
FilterPermanent filter = new FilterControlledCreaturePermanent("Creatures");
GainAbilityControlledEffect effect = new GainAbilityControlledEffect(HasteAbility.getInstance(), Duration.EndOfGame, filter);
effect.setText("Creatures you control have haste");

View file

@ -56,7 +56,7 @@ import mage.target.common.TargetCreaturePermanent;
public class ChandraRoaringFlame extends CardImpl {
public ChandraRoaringFlame(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"");
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "");
this.subtype.add("Chandra");
this.color.setRed(true);
@ -120,7 +120,7 @@ class ChandraRoaringFlameEmblemEffect extends OneShotEffect {
}
}
for (Player opponent : opponentsEmblem) {
game.addEmblem(new ChandraRoaringFlameEmblem(), source, opponent.getId());
game.addEmblem(new ChandraRoaringFlameEmblem(), source.getSourceObject(game), opponent.getId());
}
}
return false;
@ -134,7 +134,8 @@ class ChandraRoaringFlameEmblemEffect extends OneShotEffect {
class ChandraRoaringFlameEmblem extends Emblem {
public ChandraRoaringFlameEmblem() {
setName("EMBLEM: Chandra, Roaring Flame");
setName("Emblem Chandra");
setExpansionSetCodeForImage("ORI");
Effect effect = new DamageTargetEffect(3);
effect.setText("this emblem deals 3 damage to you");
this.getAbilities().add(new BeginningOfUpkeepTriggeredAbility(Zone.COMMAND, effect, TargetController.YOU, false, true));

View file

@ -63,7 +63,7 @@ import mage.target.common.TargetCreaturePermanent;
public class ChandraTorchOfDefiance extends CardImpl {
public ChandraTorchOfDefiance(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{2}{R}{R}");
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{R}{R}");
this.subtype.add("Chandra");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(4));
@ -142,7 +142,7 @@ class ChandraTorchOfDefianceEmblem extends Emblem {
// You get an emblem with "Whenever you cast a spell, this emblem deals 5 damage to target creature or player."
public ChandraTorchOfDefianceEmblem() {
this.setName("Emblem - Chandra, Torch of Defiance");
this.setName("Emblem Chandra");
Effect effect = new DamageTargetEffect(5);
effect.setText("this emblem deals 5 damage to target creature or player");
Ability ability = new SpellCastControllerTriggeredAbility(Zone.COMMAND, effect, new FilterSpell("a spell"), false, false);

View file

@ -67,7 +67,7 @@ import mage.target.common.TargetArtifactPermanent;
public class DackFayden extends CardImpl {
public DackFayden(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{1}{U}{R}");
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{1}{U}{R}");
this.subtype.add("Dack");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(3));
@ -107,7 +107,7 @@ public class DackFayden extends CardImpl {
class DackFaydenEmblem extends Emblem {
DackFaydenEmblem() {
this.setName("EMBLEM: Dack Fayden");
this.setName("Emblem Dack");
this.getAbilities().add(new DackFaydenEmblemTriggeredAbility());
}
}

View file

@ -68,7 +68,7 @@ import mage.target.targetpointer.FixedTarget;
public class DarettiScrapSavant extends CardImpl {
public DarettiScrapSavant(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{3}{R}");
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{3}{R}");
this.subtype.add("Daretti");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(3));
@ -176,7 +176,6 @@ class DarettiScrapSavantEmblem extends Emblem {
// You get an emblem with "Whenever an artifact is put into your graveyard from the battlefield, return that card to the battlefield at the beginning of the next end step."
public DarettiScrapSavantEmblem() {
this.setName("Emblem - Daretti");
this.getAbilities().add(new DarettiScrapSavantTriggeredAbility());
}
}

View file

@ -66,7 +66,7 @@ import mage.target.common.TargetCreaturePermanent;
public class DomriRade extends CardImpl {
public DomriRade(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{1}{R}{G}");
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{1}{R}{G}");
this.subtype.add("Domri");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(3));
@ -79,7 +79,7 @@ public class DomriRade extends CardImpl {
TargetControlledCreaturePermanent target = new TargetControlledCreaturePermanent();
target.setTargetTag(1);
ability2.addTarget(target);
FilterCreaturePermanent filter = new FilterCreaturePermanent("another creature to fight");
filter.add(new AnotherTargetPredicate(2));
TargetCreaturePermanent target2 = new TargetCreaturePermanent(filter);
@ -145,7 +145,7 @@ class DomriRadeEmblem extends Emblem {
// "Creatures you control have double strike, trample, hexproof and haste."
public DomriRadeEmblem() {
this.setName("EMBLEM: Domri Rade");
this.setName("Emblem Domri");
FilterPermanent filter = new FilterControlledCreaturePermanent("Creatures");
GainAbilityControlledEffect effect = new GainAbilityControlledEffect(DoubleStrikeAbility.getInstance(), Duration.EndOfGame, filter);
Ability ability = new SimpleStaticAbility(Zone.COMMAND, effect);

View file

@ -1,158 +1,158 @@
/*
* 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.d;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.LoyaltyAbility;
import mage.abilities.common.PlanswalkerEntersWithLoyalityCountersAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
import mage.abilities.effects.Effect;
import mage.abilities.effects.RestrictionUntapNotMoreThanEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.effects.common.GetEmblemEffect;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.filter.common.FilterControlledPermanent;
import mage.game.Game;
import mage.game.command.Emblem;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.players.Player;
import mage.target.common.TargetCreaturePermanent;
/**
*
* @author emerald000
*/
public class DovinBaan extends CardImpl {
public DovinBaan(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{2}{W}{U}");
this.subtype.add("Dovin");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(3));
// +1: Until your next turn, up to one target creature gets -3/-0 and its activated abilities can't be activated.
Effect effect = new BoostTargetEffect(-3, 0, Duration.UntilYourNextTurn);
effect.setText("Until your next turn, up to one target creature gets -3/-0");
Ability ability = new LoyaltyAbility(effect, 1);
ability.addTarget(new TargetCreaturePermanent(0, 1));
ability.addEffect(new DovinBaanCantActivateAbilitiesEffect());
this.addAbility(ability);
// -1: You gain 2 life and draw a card.
ability = new LoyaltyAbility(new GainLifeEffect(2), -1);
effect = new DrawCardSourceControllerEffect(1);
effect.setText("and draw a card");
ability.addEffect(effect);
this.addAbility(ability);
// -7: You get an emblem with "Your opponents can't untap more than two permanents during their untap steps."
this.addAbility(new LoyaltyAbility(new GetEmblemEffect(new DovinBaanEmblem()), -7));
}
public DovinBaan(final DovinBaan card) {
super(card);
}
@Override
public DovinBaan copy() {
return new DovinBaan(this);
}
}
class DovinBaanCantActivateAbilitiesEffect extends ContinuousRuleModifyingEffectImpl {
DovinBaanCantActivateAbilitiesEffect() {
super(Duration.UntilYourNextTurn, Outcome.UnboostCreature);
staticText = "and its activated abilities can't be activated";
}
DovinBaanCantActivateAbilitiesEffect(final DovinBaanCantActivateAbilitiesEffect effect) {
super(effect);
}
@Override
public DovinBaanCantActivateAbilitiesEffect copy() {
return new DovinBaanCantActivateAbilitiesEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
return true;
}
@Override
public boolean checksEventType(GameEvent event, Game game) {
return event.getType() == EventType.ACTIVATE_ABILITY;
}
@Override
public boolean applies(GameEvent event, Ability source, Game game) {
return event.getSourceId().equals(this.getTargetPointer().getFirst(game, source));
}
}
class DovinBaanEmblem extends Emblem {
DovinBaanEmblem() {
this.setName("EMBLEM: Dovin Baan");
Ability ability = new SimpleStaticAbility(Zone.COMMAND, new DovinBaanCantUntapEffect());
this.getAbilities().add(ability);
}
}
class DovinBaanCantUntapEffect extends RestrictionUntapNotMoreThanEffect {
DovinBaanCantUntapEffect() {
super(Duration.WhileOnBattlefield, 2, new FilterControlledPermanent());
staticText = "Your opponents can't untap more than two permanents during their untap steps.";
}
DovinBaanCantUntapEffect(final DovinBaanCantUntapEffect effect) {
super(effect);
}
@Override
public boolean applies(Player player, Ability source, Game game) {
return game.getOpponents(source.getControllerId()).contains(player.getId());
}
@Override
public DovinBaanCantUntapEffect copy() {
return new DovinBaanCantUntapEffect(this);
}
}
/*
* 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.d;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.LoyaltyAbility;
import mage.abilities.common.PlanswalkerEntersWithLoyalityCountersAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
import mage.abilities.effects.Effect;
import mage.abilities.effects.RestrictionUntapNotMoreThanEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.effects.common.GetEmblemEffect;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.filter.common.FilterControlledPermanent;
import mage.game.Game;
import mage.game.command.Emblem;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.players.Player;
import mage.target.common.TargetCreaturePermanent;
/**
*
* @author emerald000
*/
public class DovinBaan extends CardImpl {
public DovinBaan(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{W}{U}");
this.subtype.add("Dovin");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(3));
// +1: Until your next turn, up to one target creature gets -3/-0 and its activated abilities can't be activated.
Effect effect = new BoostTargetEffect(-3, 0, Duration.UntilYourNextTurn);
effect.setText("Until your next turn, up to one target creature gets -3/-0");
Ability ability = new LoyaltyAbility(effect, 1);
ability.addTarget(new TargetCreaturePermanent(0, 1));
ability.addEffect(new DovinBaanCantActivateAbilitiesEffect());
this.addAbility(ability);
// -1: You gain 2 life and draw a card.
ability = new LoyaltyAbility(new GainLifeEffect(2), -1);
effect = new DrawCardSourceControllerEffect(1);
effect.setText("and draw a card");
ability.addEffect(effect);
this.addAbility(ability);
// -7: You get an emblem with "Your opponents can't untap more than two permanents during their untap steps."
this.addAbility(new LoyaltyAbility(new GetEmblemEffect(new DovinBaanEmblem()), -7));
}
public DovinBaan(final DovinBaan card) {
super(card);
}
@Override
public DovinBaan copy() {
return new DovinBaan(this);
}
}
class DovinBaanCantActivateAbilitiesEffect extends ContinuousRuleModifyingEffectImpl {
DovinBaanCantActivateAbilitiesEffect() {
super(Duration.UntilYourNextTurn, Outcome.UnboostCreature);
staticText = "and its activated abilities can't be activated";
}
DovinBaanCantActivateAbilitiesEffect(final DovinBaanCantActivateAbilitiesEffect effect) {
super(effect);
}
@Override
public DovinBaanCantActivateAbilitiesEffect copy() {
return new DovinBaanCantActivateAbilitiesEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
return true;
}
@Override
public boolean checksEventType(GameEvent event, Game game) {
return event.getType() == EventType.ACTIVATE_ABILITY;
}
@Override
public boolean applies(GameEvent event, Ability source, Game game) {
return event.getSourceId().equals(this.getTargetPointer().getFirst(game, source));
}
}
class DovinBaanEmblem extends Emblem {
DovinBaanEmblem() {
this.setName("Emblem Dovin");
Ability ability = new SimpleStaticAbility(Zone.COMMAND, new DovinBaanCantUntapEffect());
this.getAbilities().add(ability);
}
}
class DovinBaanCantUntapEffect extends RestrictionUntapNotMoreThanEffect {
DovinBaanCantUntapEffect() {
super(Duration.WhileOnBattlefield, 2, new FilterControlledPermanent());
staticText = "Your opponents can't untap more than two permanents during their untap steps.";
}
DovinBaanCantUntapEffect(final DovinBaanCantUntapEffect effect) {
super(effect);
}
@Override
public boolean applies(Player player, Ability source, Game game) {
return game.getOpponents(source.getControllerId()).contains(player.getId());
}
@Override
public DovinBaanCantUntapEffect copy() {
return new DovinBaanCantUntapEffect(this);
}
}

View file

@ -60,7 +60,7 @@ import mage.target.common.TargetCreaturePermanent;
public class ElspethKnightErrant extends CardImpl {
public ElspethKnightErrant(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{2}{W}{W}");
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{W}{W}");
this.subtype.add("Elspeth");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(4));
@ -100,7 +100,7 @@ public class ElspethKnightErrant extends CardImpl {
class ElspethKnightErrantEmblem extends Emblem {
public ElspethKnightErrantEmblem() {
this.setName("EMBLEM: Elspeth, Knight-Errant");
this.setName("Emblem Elspeth");
FilterControlledPermanent filter = new FilterControlledPermanent("Artifacts, creatures, enchantments, and lands you control");
filter.add(Predicates.or(
new CardTypePredicate(CardType.ARTIFACT),

View file

@ -62,7 +62,7 @@ public class ElspethSunsChampion extends CardImpl {
}
public ElspethSunsChampion(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{4}{W}{W}");
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{4}{W}{W}");
this.subtype.add("Elspeth");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(4));
@ -91,7 +91,7 @@ class ElspethSunsChampionEmblem extends Emblem {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures");
public ElspethSunsChampionEmblem() {
this.setName("EMBLEM: Elspeth, Sun's Champion");
this.setName("Emblem Elspeth");
Ability ability = new SimpleStaticAbility(Zone.COMMAND, new BoostControlledEffect(2, 2, Duration.EndOfGame, filter, false));
ability.addEffect(new GainAbilityControlledEffect(FlyingAbility.getInstance(), Duration.EndOfGame, filter));
this.getAbilities().add(ability);

View file

@ -75,7 +75,7 @@ public class GarrukApexPredator extends CardImpl {
}
public GarrukApexPredator(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{5}{B}{G}");
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{5}{B}{G}");
this.subtype.add("Garruk");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(5));
@ -166,7 +166,7 @@ class GarrukApexPredatorBeastToken extends Token {
class GarrukApexPredatorEmblem extends Emblem {
public GarrukApexPredatorEmblem() {
setName("EMBLEM: Garruk, Apex Predator");
setName("Emblem Garruk");
Effect effect = new BoostTargetEffect(5, 5, Duration.EndOfTurn);
effect.setText("it gets +5/+5");
Ability ability = new AttackedByCreatureTriggeredAbility(Zone.COMMAND, effect, false, SetTargetPointer.PERMANENT);

View file

@ -63,7 +63,7 @@ public class GarrukCallerOfBeasts extends CardImpl {
}
public GarrukCallerOfBeasts(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{4}{G}{G}");
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{4}{G}{G}");
this.subtype.add("Garruk");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(4));
@ -102,7 +102,7 @@ class GarrukCallerOfBeastsEmblem extends Emblem {
}
public GarrukCallerOfBeastsEmblem() {
this.setName("EMBLEM: Garruk, Caller of Beasts");
this.setName("Emblem Garruk");
Effect effect = new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(new FilterCreatureCard("creature card")), false, true, Outcome.PutCreatureInPlay);
Ability ability = new SpellCastControllerTriggeredAbility(Zone.COMMAND, effect, filter, true, false);
this.getAbilities().add(ability);

View file

@ -55,7 +55,7 @@ import mage.game.permanent.token.Token;
public class GideonAllyOfZendikar extends CardImpl {
public GideonAllyOfZendikar(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{2}{W}{W}");
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{W}{W}");
this.subtype.add("Gideon");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(4));
@ -87,7 +87,7 @@ public class GideonAllyOfZendikar extends CardImpl {
class GideonAllyOfZendikarEmblem extends Emblem {
public GideonAllyOfZendikarEmblem() {
this.setName("EMBLEM: Gideon, Ally of Zendikar");
this.setName("Emblem Gideon");
BoostControlledEffect effect = new BoostControlledEffect(1, 1, Duration.EndOfGame);
Ability ability = new SimpleStaticAbility(Zone.COMMAND, effect);
this.getAbilities().add(ability);

View file

@ -67,7 +67,7 @@ import mage.target.targetpointer.FixedTarget;
public class JaceTelepathUnbound extends CardImpl {
public JaceTelepathUnbound(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"");
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "");
this.subtype.add("Jace");
this.color.setBlue(true);
@ -207,7 +207,7 @@ class JaceTelepathUnboundEmblem extends Emblem {
// You get an emblem with "Whenever you cast a spell, target opponent puts the top five cards of his or her library into his or her graveyard".
public JaceTelepathUnboundEmblem() {
this.setName("Emblem - Jace");
this.setName("Emblem Jace");
Effect effect = new PutTopCardOfLibraryIntoGraveTargetEffect(5);
effect.setText("target opponent puts the top five cards of his or her library into his or her graveyard");
Ability ability = new SpellCastControllerTriggeredAbility(Zone.COMMAND, effect, new FilterSpell("a spell"), false, false);

View file

@ -59,7 +59,7 @@ import mage.watchers.common.SpellsCastWatcher;
public class JaceUnravelerOfSecrets extends CardImpl {
public JaceUnravelerOfSecrets(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{3}{U}{U}");
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{3}{U}{U}");
this.subtype.add("Jace");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(5));
@ -99,7 +99,8 @@ public class JaceUnravelerOfSecrets extends CardImpl {
class JaceUnravelerOfSecretsEmblem extends Emblem {
public JaceUnravelerOfSecretsEmblem() {
this.setName("EMBLEM: Jace, Unraveler of Secrets");
this.setName("Emblem Jace");
setExpansionSetCodeForImage("SOI");
Effect effect = new CounterTargetEffect();
effect.setText("counter that spell");
this.getAbilities().add(new JaceUnravelerOfSecretsTriggeredAbility(effect, false));

View file

@ -67,7 +67,7 @@ import mage.target.common.TargetLandPermanent;
public class KioraMasterOfTheDepths extends CardImpl {
public KioraMasterOfTheDepths(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{2}{G}{U}");
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{G}{U}");
this.subtype.add("Kiora");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(4));
@ -203,7 +203,7 @@ class KioraMasterOfTheDepthsEmblem extends Emblem {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures");
public KioraMasterOfTheDepthsEmblem() {
this.setName("EMBLEM: Kiora, Master of the Depths");
this.setName("Emblem Kiora");
Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.COMMAND,
new KioraFightEffect(), filter, true, SetTargetPointer.PERMANENT,

View file

@ -68,7 +68,7 @@ public class KioraTheCrashingWave extends CardImpl {
}
public KioraTheCrashingWave(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{2}{G}{U}");
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{G}{U}");
this.subtype.add("Kiora");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(2));
@ -164,7 +164,7 @@ class KioraPreventionEffect extends PreventionEffectImpl {
class KioraEmblem extends Emblem {
public KioraEmblem() {
this.setName("EMBLEM: Kiora, the Crashing Wave");
this.setName("Emblem Kiora");
Ability ability = new BeginningOfEndStepTriggeredAbility(Zone.COMMAND, new CreateTokenEffect(new KioraKrakenToken()), TargetController.YOU, null, false);
this.getAbilities().add(ability);
}

View file

@ -77,7 +77,7 @@ public class KothOfTheHammer extends CardImpl {
}
public KothOfTheHammer(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{2}{R}{R}");
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{R}{R}");
this.subtype.add("Koth");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(3));
@ -122,7 +122,7 @@ class KothOfTheHammerEmblem extends Emblem {
// "Mountains you control have '{T}: This land deals 1 damage to target creature or player.'"
public KothOfTheHammerEmblem() {
this.setName("EMBLEM: Koth of the Hammer");
this.setName("Emblem Koth");
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new KothOfTheHammerThirdEffect()));
}
}

View file

@ -74,7 +74,7 @@ public class LilianaDefiantNecromancer extends CardImpl {
UUID ability2Id;
public LilianaDefiantNecromancer(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"");
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "");
this.subtype.add("Liliana");
this.color.setBlack(true);
@ -128,7 +128,7 @@ class LilianaDefiantNecromancerEmblem extends Emblem {
// You get an emblem with "Whenever a creature you control dies, return it to the battlefield under your control at the beginning of the next end step."
public LilianaDefiantNecromancerEmblem() {
this.setName("Emblem - Liliana");
this.setName("Emblem Liliana");
Ability ability = new DiesCreatureTriggeredAbility(Zone.COMMAND, new LilianaDefiantNecromancerEmblemEffect(), false, filter, true);
this.getAbilities().add(ability);
}

View file

@ -72,7 +72,7 @@ public class LilianaOfTheDarkRealms extends CardImpl {
}
public LilianaOfTheDarkRealms(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{2}{B}{B}");
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{B}{B}");
this.subtype.add("Liliana");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(3));
@ -155,7 +155,7 @@ class LilianaOfTheDarkRealmsEmblem extends Emblem {
}
public LilianaOfTheDarkRealmsEmblem() {
this.setName("EMBLEM: Liliana of the Dark Realms");
this.setName("Emblem Liliana");
SimpleManaAbility manaAbility = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.BlackMana(4), new TapSourceCost());
Ability ability = new SimpleStaticAbility(Zone.COMMAND, new GainAbilityControlledEffect(manaAbility, Duration.WhileOnBattlefield, filter));
this.getAbilities().add(ability);

View file

@ -64,7 +64,7 @@ import mage.target.common.TargetCreaturePermanent;
public class LilianaTheLastHope extends CardImpl {
public LilianaTheLastHope(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{1}{B}{B}");
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{1}{B}{B}");
this.subtype.add("Liliana");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(3));
@ -131,10 +131,11 @@ class LilianaTheLastHopeEffect extends OneShotEffect {
return true;
}
}
class LilianaTheLastHopeEmblem extends Emblem {
public LilianaTheLastHopeEmblem() {
this.setName("EMBLEM: Liliana, the Last Hope");
this.setName("Emblem Liliana");
Ability ability = new BeginningOfEndStepTriggeredAbility(Zone.COMMAND, new CreateTokenEffect(new ZombieToken(), new LilianaZombiesCount()),
TargetController.YOU, null, false);
this.getAbilities().add(ability);

View file

@ -65,7 +65,7 @@ import mage.target.targetpointer.FixedTarget;
public class NarsetTranscendent extends CardImpl {
public NarsetTranscendent(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{2}{W}{U}");
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{W}{U}");
this.subtype.add("Narset");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(6));
@ -226,7 +226,7 @@ class NarsetTranscendentEmblem extends Emblem {
public NarsetTranscendentEmblem() {
this.setName("EMBLEM: Narset Transcendent");
this.setName("Emblem Narset");
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new NarsetTranscendentCantCastEffect()));
}

View file

@ -67,7 +67,7 @@ public class NissaVitalForce extends CardImpl {
}
public NissaVitalForce(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{3}{G}{G}");
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{3}{G}{G}");
this.subtype.add("Nissa");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(5));
@ -114,9 +114,9 @@ class NissaVitalForceEmblem extends Emblem {
// You get an emblem with "Whenever a land enters the battlefield under your control, you may draw a card."
public NissaVitalForceEmblem() {
this.setName("Emblem - Nissa, Vital Force");
Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.COMMAND, new DrawCardSourceControllerEffect(1), new FilterControlledLandPermanent("a land"),
this.setName("Emblem Nissa");
Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.COMMAND, new DrawCardSourceControllerEffect(1), new FilterControlledLandPermanent("a land"),
true, null, true);
getAbilities().add(ability);
getAbilities().add(ability);
}
}

View file

@ -62,7 +62,7 @@ import mage.target.common.TargetControlledCreaturePermanent;
public class ObNixilisOfTheBlackOath extends CardImpl {
public ObNixilisOfTheBlackOath(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{3}{B}{B}");
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{3}{B}{B}");
this.subtype.add("Nixilis");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(3));
@ -131,9 +131,8 @@ class ObNixilisOfTheBlackOathEffect1 extends OneShotEffect {
class ObNixilisOfTheBlackOathEmblem extends Emblem {
// You get an emblem with "{1}{B}, Sacrifice a creature: You gain X life and draw X cards, where X is the sacrificed creature's power."
public ObNixilisOfTheBlackOathEmblem() {
this.setName("EMBLEM: Ob Nixilis of the Black Oath");
this.setName("Emblem Nixilis");
DynamicValue xValue = new SacrificeCostCreaturesPower();
Effect effect = new GainLifeEffect(xValue);
effect.setText("You gain X life");

View file

@ -54,7 +54,7 @@ import mage.target.common.TargetOpponent;
public class ObNixilisReignited extends CardImpl {
public ObNixilisReignited(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{3}{B}{B}");
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{3}{B}{B}");
this.subtype.add("Nixilis");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(5));
@ -94,7 +94,7 @@ public class ObNixilisReignited extends CardImpl {
class ObNixilisReignitedEmblem extends Emblem {
public ObNixilisReignitedEmblem() {
setName("EMBLEM: Ob Nixilis Reignited");
setName("Emblem Nixilis");
this.getAbilities().add(new ObNixilisEmblemTriggeredAbility(new LoseLifeSourceControllerEffect(2), false));
this.setExpansionSetCodeForImage("BFZ");

View file

@ -65,7 +65,7 @@ import mage.target.common.TargetCreaturePermanent;
public class SarkhanTheDragonspeaker extends CardImpl {
public SarkhanTheDragonspeaker(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{3}{R}{R}");
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{3}{R}{R}");
this.subtype.add("Sarkhan");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(4));
@ -166,7 +166,7 @@ class SarkhanTheDragonspeakerEffect extends ContinuousEffectImpl {
class SarkhanTheDragonspeakerEmblem extends Emblem {
SarkhanTheDragonspeakerEmblem() {
setName("EMBLEM: Sarkhan, the Dragonspeaker");
setName("Emblem Sarkhan");
this.setExpansionSetCodeForImage("KTK");
this.getAbilities().add(new BeginningOfDrawTriggeredAbility(Zone.COMMAND, new DrawCardSourceControllerEffect(2), TargetController.YOU, false));

View file

@ -98,6 +98,7 @@ public class SorinLordOfInnistrad extends CardImpl {
}
class VampireToken extends Token {
VampireToken() {
super("Vampire", "1/1 black Vampire creature token with lifelink");
cardType.add(CardType.CREATURE);
@ -112,7 +113,7 @@ class VampireToken extends Token {
class SorinLordOfInnistradEmblem extends Emblem {
public SorinLordOfInnistradEmblem() {
this.setName("EMBLEM: Sorin, Lord of Innistrad");
this.setName("Emblem Sorin");
BoostControlledEffect effect = new BoostControlledEffect(1, 0, Duration.EndOfGame);
Ability ability = new SimpleStaticAbility(Zone.COMMAND, effect);
this.getAbilities().add(ability);

View file

@ -58,7 +58,7 @@ import mage.game.permanent.token.Token;
public class SorinSolemnVisitor extends CardImpl {
public SorinSolemnVisitor(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{2}{W}{B}");
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{W}{B}");
this.subtype.add("Sorin");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(4));
@ -97,7 +97,7 @@ public class SorinSolemnVisitor extends CardImpl {
class SorinSolemnVisitorEmblem extends Emblem {
public SorinSolemnVisitorEmblem() {
this.setName("EMBLEM: Sorin, Solemn Visitor");
this.setName("Emblem Sorin");
Ability ability = new BeginningOfUpkeepTriggeredAbility(Zone.COMMAND, new SacrificeEffect(new FilterCreaturePermanent(), 1, "that player"), TargetController.OPPONENT, false, true);
this.getAbilities().add(ability);
}

View file

@ -85,7 +85,7 @@ public class TamiyoFieldResearcher extends CardImpl {
}
public TamiyoFieldResearcher(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{1}{G}{W}{U}");
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{1}{G}{W}{U}");
this.subtype.add("Tamiyo");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(4));
@ -152,7 +152,7 @@ class TamiyoFieldResearcherEffect1 extends OneShotEffect {
}
class TamiyoFieldResearcherDelayedTriggeredAbility extends DelayedTriggeredAbility {
private int startingTurn;
private List<MageObjectReference> creatures;
@ -160,7 +160,7 @@ class TamiyoFieldResearcherDelayedTriggeredAbility extends DelayedTriggeredAbili
super(new DrawCardSourceControllerEffect(1), Duration.Custom, false);
this.creatures = creatures;
this.startingTurn = startingTurn;
}
}
public TamiyoFieldResearcherDelayedTriggeredAbility(final TamiyoFieldResearcherDelayedTriggeredAbility ability) {
super(ability);
@ -183,7 +183,7 @@ class TamiyoFieldResearcherDelayedTriggeredAbility extends DelayedTriggeredAbili
}
return false;
}
@Override
public boolean isInactive(Game game) {
return game.getActivePlayerId().equals(getControllerId()) && game.getTurnNum() != startingTurn;
@ -205,7 +205,7 @@ class TamiyoFieldResearcherEmblem extends Emblem {
public TamiyoFieldResearcherEmblem() {
this.setName("EMBLEM: Tamiyo, Field Researcher");
this.setName("Emblem Tamiyo");
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new TamiyoFieldResearcherCastingEffect()));
}

View file

@ -65,7 +65,7 @@ import mage.target.TargetPlayer;
public class TamiyoTheMoonSage extends CardImpl {
public TamiyoTheMoonSage(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{3}{U}{U}");
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{3}{U}{U}");
this.subtype.add("Tamiyo");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(4));
@ -132,7 +132,7 @@ class TappedCreaturesControlledByTargetCount implements DynamicValue {
class TamiyoTheMoonSageEmblem extends Emblem {
public TamiyoTheMoonSageEmblem() {
this.setName("EMBLEM: Tamiyo, the Moon Sage");
this.setName("Emblem Tamiyo");
Ability ability = new SimpleStaticAbility(Zone.COMMAND, new MaximumHandSizeControllerEffect(Integer.MAX_VALUE, Duration.EndOfGame, HandSizeModification.SET));
this.getAbilities().add(ability);
Effect effect = new ReturnToHandTargetEffect();

View file

@ -53,7 +53,7 @@ import mage.target.TargetPermanent;
public class TeferiTemporalArchmage extends CardImpl {
public TeferiTemporalArchmage(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{4}{U}{U}");
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{4}{U}{U}");
this.subtype.add("Teferi");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(5));
@ -89,7 +89,7 @@ class TeferiTemporalArchmageEmblem extends Emblem {
// "You may activate loyalty abilities of planeswalkers you control on any player's turn any time you could cast an instant."
public TeferiTemporalArchmageEmblem() {
this.setName("EMBLEM: Teferi, Temporal Archmage");
this.setName("Emblem Teferi");
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new ActivateAbilitiesAnyTimeYouCouldCastInstantEffect(LoyaltyAbility.class, "loyalty abilities of planeswalkers you control on any player's turn")));
}
}

View file

@ -27,6 +27,7 @@
*/
package mage.cards.t;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.LoyaltyAbility;
import mage.abilities.common.BeginningOfCombatTriggeredAbility;
@ -58,8 +59,6 @@ import mage.game.permanent.token.Token;
import mage.target.common.TargetArtifactPermanent;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
* @author JRHerlehy
*/
@ -108,7 +107,7 @@ class TezzeretTheSchemerEmblem extends Emblem {
}
public TezzeretTheSchemerEmblem() {
this.setName("EMBLEM: Tezzeret The Schemer");
this.setName("Emblem Tezzeret");
Effect effect = new AddCardTypeTargetEffect(CardType.CREATURE, Duration.EndOfGame);
effect.setText("target artifact you control becomes an artifact creature");

View file

@ -153,7 +153,7 @@ class VenserTheSojournerEffect extends OneShotEffect {
class VenserTheSojournerEmblem extends Emblem {
public VenserTheSojournerEmblem() {
this.setName("EMBLEM: Venser, the Sojourner");
this.setName("Emblem Venser");
Ability ability = new VenserTheSojournerSpellCastTriggeredAbility(new ExileTargetEffect(), false);
Target target = new TargetPermanent();
ability.addTarget(target);

View file

@ -1,115 +1,116 @@
/*
* 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.MageInt;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CastSourceTriggeredAbility;
import mage.abilities.effects.common.CopyEffect;
import mage.abilities.effects.common.RevealHandTargetEffect;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.filter.common.FilterCreatureCard;
import mage.game.Game;
import mage.players.Player;
import mage.target.TargetCard;
import mage.target.common.TargetOpponent;
/**
*
* @author Styxo
*/
public class ZamWesell extends CardImpl {
public ZamWesell(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{U}{U}");
this.supertype.add("Legendary");
this.subtype.add("Shapeshifter");
this.subtype.add("Hunter");
this.power = new MageInt(2);
this.toughness = new MageInt(2);
// When you cast Zam Wessel, target opponent reveals his or her hand. You may choose a creature card from it and have Zam Wessel enter the battlefield as a copy of that creature card.
Ability ability = new CastSourceTriggeredAbility(new RevealHandTargetEffect());
ability.addTarget(new TargetOpponent());
this.addAbility(ability);
}
public ZamWesell(final ZamWesell card) {
super(card);
}
@Override
public ZamWesell copy() {
return new ZamWesell(this);
}
}
class ZamWesselEffect extends OneShotEffect {
public ZamWesselEffect() {
super(Outcome.Benefit);
this.staticText = "You may choose a creature card from it and have {this} enter the battlefield as a copy of that creature card";
}
public ZamWesselEffect(final ZamWesselEffect effect) {
super(effect);
}
@Override
public ZamWesselEffect copy() {
return new ZamWesselEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
Player targetPlayer = game.getPlayer(getTargetPointer().getFirst(game, source));
if (targetPlayer != null) {
TargetCard targetCard = new TargetCard(0, 1, Zone.HAND, new FilterCreatureCard());
controller.choose(outcome, targetPlayer.getHand(), targetCard, game);
Card copyFromCard = game.getCard(targetCard.getFirstTarget());
if (copyFromCard != null) {
game.informPlayers(controller.getLogName() + " chooses to copy " + copyFromCard.getName());
CopyEffect copyEffect = new CopyEffect(Duration.Custom, copyFromCard, source.getSourceId());
game.addEffect(copyEffect, source);
}
}
return true;
}
return false;
}
}
/*
* 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.MageInt;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CastSourceTriggeredAbility;
import mage.abilities.effects.common.CopyEffect;
import mage.abilities.effects.common.RevealHandTargetEffect;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.filter.common.FilterCreatureCard;
import mage.game.Game;
import mage.players.Player;
import mage.target.TargetCard;
import mage.target.common.TargetOpponent;
/**
*
* @author Styxo
*/
public class ZamWesell extends CardImpl {
public ZamWesell(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}{U}");
this.supertype.add("Legendary");
this.subtype.add("Shapeshifter");
this.subtype.add("Hunter");
this.power = new MageInt(2);
this.toughness = new MageInt(2);
// When you cast Zam Wessel, target opponent reveals his or her hand. You may choose a creature card from it and have Zam Wessel enter the battlefield as a copy of that creature card.
Ability ability = new CastSourceTriggeredAbility(new RevealHandTargetEffect());
ability.addEffect(new ZamWesselEffect());
ability.addTarget(new TargetOpponent());
this.addAbility(ability);
}
public ZamWesell(final ZamWesell card) {
super(card);
}
@Override
public ZamWesell copy() {
return new ZamWesell(this);
}
}
class ZamWesselEffect extends OneShotEffect {
public ZamWesselEffect() {
super(Outcome.Benefit);
this.staticText = "You may choose a creature card from it and have {this} enter the battlefield as a copy of that creature card";
}
public ZamWesselEffect(final ZamWesselEffect effect) {
super(effect);
}
@Override
public ZamWesselEffect copy() {
return new ZamWesselEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
Player targetPlayer = game.getPlayer(getTargetPointer().getFirst(game, source));
if (targetPlayer != null) {
TargetCard targetCard = new TargetCard(0, 1, Zone.HAND, new FilterCreatureCard());
controller.choose(outcome, targetPlayer.getHand(), targetCard, game);
Card copyFromCard = game.getCard(targetCard.getFirstTarget());
if (copyFromCard != null) {
game.informPlayers(controller.getLogName() + " chooses to copy " + copyFromCard.getName());
CopyEffect copyEffect = new CopyEffect(Duration.Custom, copyFromCard, source.getSourceId());
game.addEffect(copyEffect, source);
}
}
return true;
}
return false;
}
}