mirror of
https://github.com/magefree/mage.git
synced 2026-01-25 04:39:18 -08:00
* 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:
parent
81caed134f
commit
8075ea2e50
56 changed files with 894 additions and 850 deletions
|
|
@ -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");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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()));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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")));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue