* Some minor changes to logging and return code handling.

This commit is contained in:
LevelX2 2017-07-23 11:06:23 +02:00
parent 94be7cb4da
commit 4c33359fe2
22 changed files with 862 additions and 888 deletions

View file

@ -150,7 +150,7 @@ public class TableController {
} }
Optional<User> _user = UserManager.instance.getUser(userId); Optional<User> _user = UserManager.instance.getUser(userId);
if (!_user.isPresent()) { if (!_user.isPresent()) {
logger.fatal(new StringBuilder("couldn't get user ").append(name).append(" for join tournament userId = ").append(userId).toString()); logger.fatal("couldn't get user " + name + " for join tournament userId = " + userId);
return false; return false;
} }
User user = _user.get(); User user = _user.get();

View file

@ -1,206 +1,203 @@
/* /*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without modification, are * Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met: * permitted provided that the following conditions are met:
* *
* 1. Redistributions of source code must retain the above copyright notice, this list of * 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer. * conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright notice, this list * 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 * of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution. * provided with the distribution.
* *
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED * 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 * 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 * 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 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 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 * 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 * 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 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* *
* The views and conclusions contained in the software and documentation are those of the * 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 * authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com. * or implied, of BetaSteward_at_googlemail.com.
*/ */
package mage.cards.a; package mage.cards.a;
import mage.abilities.Ability; import java.util.HashSet;
import mage.abilities.TriggeredAbilityImpl; import java.util.Set;
import mage.abilities.common.SimpleActivatedAbility; import java.util.UUID;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.Ability;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.effects.OneShotEffect; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.common.DoIfCostPaid; import mage.abilities.costs.mana.GenericManaCost;
import mage.cards.CardImpl; import mage.abilities.effects.OneShotEffect;
import mage.cards.CardSetInfo; import mage.abilities.effects.common.CreateTokenEffect;
import mage.choices.Choice; import mage.abilities.effects.common.DoIfCostPaid;
import mage.choices.ChoiceImpl; import mage.cards.CardImpl;
import mage.constants.CardType; import mage.cards.CardSetInfo;
import mage.constants.Outcome; import mage.choices.Choice;
import mage.constants.Zone; import mage.choices.ChoiceImpl;
import mage.counters.Counter; import mage.constants.CardType;
import mage.counters.CounterType; import mage.constants.Outcome;
import mage.game.Game; import mage.constants.Zone;
import mage.game.events.GameEvent; import mage.counters.Counter;
import mage.game.permanent.Permanent; import mage.counters.CounterType;
import mage.game.permanent.token.ServoToken; import mage.game.Game;
import mage.players.Player; import mage.game.events.GameEvent;
import mage.target.common.TargetPermanentOrPlayer; import mage.game.permanent.Permanent;
import mage.game.permanent.token.ServoToken;
import java.util.HashSet; import mage.players.Player;
import java.util.Set; import mage.target.common.TargetPermanentOrPlayer;
import java.util.UUID;
/**
/** *
* * @author emerald000
* @author emerald000 */
*/ public class AnimationModule extends CardImpl {
public class AnimationModule extends CardImpl {
public AnimationModule(UUID ownerId, CardSetInfo setInfo) {
public AnimationModule(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}");
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{1}");
// Whenever one or more +1/+1 counters are placed on a permanent you control, you may pay {1}. If you do, create a 1/1 colorless Servo artifact creature token.
// Whenever one or more +1/+1 counters are placed on a permanent you control, you may pay {1}. If you do, create a 1/1 colorless Servo artifact creature token. this.addAbility(new AnimationModuleTriggeredAbility());
this.addAbility(new AnimationModuleTriggeredAbility());
// {3}, {T}: Choose a counter on target permanent or player. Give that permanent or player another counter of that kind.
// {3}, {T}: Choose a counter on target permanent or player. Give that permanent or player another counter of that kind. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AnimationModuleEffect(), new GenericManaCost(3));
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AnimationModuleEffect(), new GenericManaCost(3)); ability.addCost(new TapSourceCost());
ability.addCost(new TapSourceCost()); ability.addTarget(new TargetPermanentOrPlayer());
ability.addTarget(new TargetPermanentOrPlayer()); this.addAbility(ability);
this.addAbility(ability); }
}
public AnimationModule(final AnimationModule card) {
public AnimationModule(final AnimationModule card) { super(card);
super(card); }
}
@Override
@Override public AnimationModule copy() {
public AnimationModule copy() { return new AnimationModule(this);
return new AnimationModule(this); }
} }
}
class AnimationModuleTriggeredAbility extends TriggeredAbilityImpl {
class AnimationModuleTriggeredAbility extends TriggeredAbilityImpl {
AnimationModuleTriggeredAbility() {
AnimationModuleTriggeredAbility() { super(Zone.BATTLEFIELD, new DoIfCostPaid(new CreateTokenEffect(new ServoToken()), new GenericManaCost(1)), false);
super(Zone.BATTLEFIELD, new DoIfCostPaid(new CreateTokenEffect(new ServoToken()), new GenericManaCost(1)), false); }
}
AnimationModuleTriggeredAbility(final AnimationModuleTriggeredAbility ability) {
AnimationModuleTriggeredAbility(final AnimationModuleTriggeredAbility ability) { super(ability);
super(ability); }
}
@Override
@Override public AnimationModuleTriggeredAbility copy() {
public AnimationModuleTriggeredAbility copy() { return new AnimationModuleTriggeredAbility(this);
return new AnimationModuleTriggeredAbility(this); }
}
@Override
@Override public boolean checkEventType(GameEvent event, Game game) {
public boolean checkEventType(GameEvent event, Game game) { return event.getType() == GameEvent.EventType.COUNTERS_ADDED;
return event.getType() == GameEvent.EventType.COUNTERS_ADDED; }
}
@Override
@Override public boolean checkTrigger(GameEvent event, Game game) {
public boolean checkTrigger(GameEvent event, Game game) { if (event.getData().equals(CounterType.P1P1.getName())) {
if (event.getData().equals(CounterType.P1P1.getName())) { Permanent permanent = game.getPermanentOrLKIBattlefield(event.getTargetId());
Permanent permanent = game.getPermanentOrLKIBattlefield(event.getTargetId()); if (permanent == null) {
if (permanent == null) { permanent = game.getPermanentEntering(event.getTargetId());
permanent = game.getPermanentEntering(event.getTargetId()); }
} return permanent != null && permanent.getControllerId().equals(this.getControllerId());
return permanent != null && permanent.getControllerId().equals(this.getControllerId()); }
} return false;
return false; }
}
@Override
@Override public String getRule() {
public String getRule() { return "Whenever one or more +1/+1 counters are placed on a permanent you control, you may pay {1}. If you do, create a 1/1 colorless Servo artifact creature token.";
return "Whenever one or more +1/+1 counters are placed on a permanent you control, you may pay {1}. If you do, create a 1/1 colorless Servo artifact creature token."; }
} }
}
class AnimationModuleEffect extends OneShotEffect {
class AnimationModuleEffect extends OneShotEffect {
AnimationModuleEffect() {
AnimationModuleEffect() { super(Outcome.Neutral);
super(Outcome.Neutral); this.staticText = "Choose a counter on target permanent or player. Give that permanent or player another counter of that kind";
this.staticText = "Choose a counter on target permanent or player. Give that permanent or player another counter of that kind"; }
}
AnimationModuleEffect(final AnimationModuleEffect effect) {
AnimationModuleEffect(final AnimationModuleEffect effect) { super(effect);
super(effect); }
}
@Override
@Override public AnimationModuleEffect copy() {
public AnimationModuleEffect copy() { return new AnimationModuleEffect(this);
return new AnimationModuleEffect(this); }
}
@Override
@Override public boolean apply(Game game, Ability source) {
public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId());
Player controller = game.getPlayer(source.getControllerId()); if (controller != null) {
if (controller != null) { Permanent permanent = game.getPermanent(this.getTargetPointer().getFirst(game, source));
Permanent permanent = game.getPermanent(this.getTargetPointer().getFirst(game, source)); if (permanent != null) {
if (permanent != null) { if (!permanent.getCounters(game).isEmpty()) {
if (!permanent.getCounters(game).isEmpty()) { if (permanent.getCounters(game).size() == 1) {
if (permanent.getCounters(game).size() == 1) { for (Counter counter : permanent.getCounters(game).values()) {
for (Counter counter : permanent.getCounters(game).values()) { Counter newCounter = new Counter(counter.getName());
Counter newCounter = new Counter(counter.getName()); permanent.addCounters(newCounter, source, game);
permanent.addCounters(newCounter, source, game); }
} } else {
} Choice choice = new ChoiceImpl(true);
else { Set<String> choices = new HashSet<>(permanent.getCounters(game).size());
Choice choice = new ChoiceImpl(true); for (Counter counter : permanent.getCounters(game).values()) {
Set<String> choices = new HashSet<>(permanent.getCounters(game).size()); choices.add(counter.getName());
for (Counter counter : permanent.getCounters(game).values()) { }
choices.add(counter.getName()); choice.setChoices(choices);
} choice.setMessage("Choose a counter");
choice.setChoices(choices); controller.choose(Outcome.Benefit, choice, game);
choice.setMessage("Choose a counter"); for (Counter counter : permanent.getCounters(game).values()) {
controller.choose(Outcome.Benefit, choice, game); if (counter.getName().equals(choice.getChoice())) {
for (Counter counter : permanent.getCounters(game).values()) { Counter newCounter = new Counter(counter.getName());
if (counter.getName().equals(choice.getChoice())) { permanent.addCounters(newCounter, source, game);
Counter newCounter = new Counter(counter.getName()); break;
permanent.addCounters(newCounter, source, game); }
break; }
} }
} }
} } else {
} Player player = game.getPlayer(this.getTargetPointer().getFirst(game, source));
} if (player != null) {
else { if (!player.getCounters().isEmpty()) {
Player player = game.getPlayer(this.getTargetPointer().getFirst(game, source)); if (player.getCounters().size() == 1) {
if (player != null) { for (Counter counter : player.getCounters().values()) {
if (!player.getCounters().isEmpty()) { Counter newCounter = new Counter(counter.getName());
if (player.getCounters().size() == 1) { player.addCounters(newCounter, game);
for (Counter counter : player.getCounters().values()) { }
Counter newCounter = new Counter(counter.getName()); } else {
player.addCounters(newCounter, game); Choice choice = new ChoiceImpl(true);
} Set<String> choices = new HashSet<>(player.getCounters().size());
} for (Counter counter : player.getCounters().values()) {
else { choices.add(counter.getName());
Choice choice = new ChoiceImpl(true); }
Set<String> choices = new HashSet<>(player.getCounters().size()); choice.setChoices(choices);
for (Counter counter : player.getCounters().values()) { choice.setMessage("Choose a counter");
choices.add(counter.getName()); controller.choose(Outcome.Benefit, choice, game);
} for (Counter counter : player.getCounters().values()) {
choice.setChoices(choices); if (counter.getName().equals(choice.getChoice())) {
choice.setMessage("Choose a counter"); Counter newCounter = new Counter(counter.getName());
controller.choose(Outcome.Benefit, choice, game); player.addCounters(newCounter, game);
for (Counter counter : player.getCounters().values()) { break;
if (counter.getName().equals(choice.getChoice())) { }
Counter newCounter = new Counter(counter.getName()); }
player.addCounters(newCounter, game); }
break; }
} }
} }
} return true;
} }
} return false;
} }
} }
return false;
}
}

View file

@ -27,9 +27,9 @@
*/ */
package mage.cards.a; package mage.cards.a;
import java.util.UUID;
import mage.MageObject; import mage.MageObject;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.constants.ComparisonType;
import mage.abilities.LoyaltyAbility; import mage.abilities.LoyaltyAbility;
import mage.abilities.common.PlanswalkerEntersWithLoyalityCountersAbility; import mage.abilities.common.PlanswalkerEntersWithLoyalityCountersAbility;
import mage.abilities.costs.Cost; import mage.abilities.costs.Cost;
@ -50,8 +50,6 @@ import mage.target.common.TargetOpponent;
import mage.target.targetpointer.FixedTarget; import mage.target.targetpointer.FixedTarget;
import mage.util.CardUtil; import mage.util.CardUtil;
import java.util.UUID;
/** /**
* *
* @author LevelX2 * @author LevelX2
@ -59,7 +57,7 @@ import java.util.UUID;
public class AshiokNightmareWeaver extends CardImpl { public class AshiokNightmareWeaver extends CardImpl {
public AshiokNightmareWeaver(UUID ownerId, CardSetInfo setInfo) { public AshiokNightmareWeaver(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{1}{U}{B}"); super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{1}{U}{B}");
this.subtype.add(SubType.ASHIOK); this.subtype.add(SubType.ASHIOK);
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(3)); this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(3));
@ -166,11 +164,10 @@ class AshiokNightmareWeaverPutIntoPlayEffect extends OneShotEffect {
effect.setTargetPointer(new FixedTarget(permanent, game)); effect.setTargetPointer(new FixedTarget(permanent, game));
game.addEffect(effect, source); game.addEffect(effect, source);
} }
return true;
} }
} }
} }
return false; return true;
} }
} }

View file

@ -27,6 +27,7 @@
*/ */
package mage.cards.b; package mage.cards.b;
import java.util.UUID;
import mage.Mana; import mage.Mana;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.BeginningOfPreCombatMainTriggeredAbility; import mage.abilities.common.BeginningOfPreCombatMainTriggeredAbility;
@ -43,8 +44,6 @@ import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.players.Player; import mage.players.Player;
import java.util.UUID;
/** /**
* *
* @author markedagain * @author markedagain
@ -52,13 +51,13 @@ import java.util.UUID;
public class BlackMarket extends CardImpl { public class BlackMarket extends CardImpl {
public BlackMarket(UUID ownerId, CardSetInfo setInfo) { public BlackMarket(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{B}{B}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{B}{B}");
// Whenever a creature dies, put a charge counter on Black Market. // Whenever a creature dies, put a charge counter on Black Market.
this.addAbility(new DiesCreatureTriggeredAbility(new AddCountersSourceEffect(CounterType.CHARGE.createInstance()),false )); this.addAbility(new DiesCreatureTriggeredAbility(new AddCountersSourceEffect(CounterType.CHARGE.createInstance()), false));
// At the beginning of your precombat main phase, add {B} to your mana pool for each charge counter on Black Market. // At the beginning of your precombat main phase, add {B} to your mana pool for each charge counter on Black Market.
this.addAbility(new BeginningOfPreCombatMainTriggeredAbility(new BlackMarketEffect(), TargetController.YOU, false)); this.addAbility(new BeginningOfPreCombatMainTriggeredAbility(new BlackMarketEffect(), TargetController.YOU, false));
} }
public BlackMarket(final BlackMarket card) { public BlackMarket(final BlackMarket card) {
@ -70,6 +69,7 @@ public class BlackMarket extends CardImpl {
return new BlackMarket(this); return new BlackMarket(this);
} }
} }
class BlackMarketEffect extends OneShotEffect { class BlackMarketEffect extends OneShotEffect {
public BlackMarketEffect() { public BlackMarketEffect() {
@ -92,10 +92,10 @@ class BlackMarketEffect extends OneShotEffect {
Player player = game.getPlayer(source.getControllerId()); Player player = game.getPlayer(source.getControllerId());
if (sourcePermanent != null && player != null) { if (sourcePermanent != null && player != null) {
int chargeCounters = sourcePermanent.getCounters(game).getCount(CounterType.CHARGE); int chargeCounters = sourcePermanent.getCounters(game).getCount(CounterType.CHARGE);
if (chargeCounters > 0){ if (chargeCounters > 0) {
player.getManaPool().addMana(Mana.BlackMana(chargeCounters), game, source); player.getManaPool().addMana(Mana.BlackMana(chargeCounters), game, source);
return true;
} }
return true;
} }
return false; return false;
} }

View file

@ -27,6 +27,7 @@
*/ */
package mage.cards.c; package mage.cards.c;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.Mode; import mage.abilities.Mode;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
@ -48,8 +49,6 @@ import mage.players.Player;
import mage.target.TargetPlayer; import mage.target.TargetPlayer;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/** /**
* *
* @author fireshoes * @author fireshoes
@ -65,7 +64,7 @@ public class CollectiveDefiance extends CardImpl {
} }
public CollectiveDefiance(UUID ownerId, CardSetInfo setInfo) { public CollectiveDefiance(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{1}{R}{R}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{R}{R}");
// Escalate {1} // Escalate {1}
this.addAbility(new EscalateAbility(new GenericManaCost(1))); this.addAbility(new EscalateAbility(new GenericManaCost(1)));
@ -124,14 +123,14 @@ class CollectiveDefianceEffect extends OneShotEffect {
@Override @Override
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
Player targetPlayer = game.getPlayer(targetPointer.getFirst(game, source)); Player targetPlayer = game.getPlayer(targetPointer.getFirst(game, source));
if (targetPlayer != null) { if (targetPlayer != null) {
int count = targetPlayer.getHand().size(); int count = targetPlayer.getHand().size();
for (Card card : targetPlayer.getHand().getCards(game)) { for (Card card : targetPlayer.getHand().getCards(game)) {
targetPlayer.discard(card, source, game); targetPlayer.discard(card, source, game);
}
targetPlayer.drawCards(count, game);
return false;
} }
return true; targetPlayer.drawCards(count, game);
return true;
}
return false;
} }
} }

View file

@ -27,6 +27,7 @@
*/ */
package mage.cards.d; package mage.cards.d;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@ -51,8 +52,6 @@ import mage.target.common.TargetCreatureOrPlaneswalker;
import mage.util.CardUtil; import mage.util.CardUtil;
import mage.util.GameLog; import mage.util.GameLog;
import java.util.UUID;
/** /**
* *
* @author jeffwadsworth * @author jeffwadsworth
@ -60,7 +59,7 @@ import java.util.UUID;
public class DragonlordSilumgar extends CardImpl { public class DragonlordSilumgar extends CardImpl {
public DragonlordSilumgar(UUID ownerId, CardSetInfo setInfo) { public DragonlordSilumgar(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{U}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{U}{B}");
addSuperType(SuperType.LEGENDARY); addSuperType(SuperType.LEGENDARY);
this.subtype.add("Elder"); this.subtype.add("Elder");
this.subtype.add("Dragon"); this.subtype.add("Dragon");
@ -111,19 +110,21 @@ class DragonlordSilumgarEffect extends OneShotEffect {
Permanent sourcePermanent = game.getPermanent(source.getSourceId()); Permanent sourcePermanent = game.getPermanent(source.getSourceId());
Player controller = game.getPlayer(source.getControllerId()); Player controller = game.getPlayer(source.getControllerId());
Permanent target = game.getPermanent(getTargetPointer().getFirst(game, source)); Permanent target = game.getPermanent(getTargetPointer().getFirst(game, source));
if (controller != null && sourcePermanent != null) {
if (target != null && controller.getId().equals(sourcePermanent.getControllerId())) {
SourceHasRemainedInSameZoneCondition condition = new SourceHasRemainedInSameZoneCondition(sourcePermanent.getId());
if (controller != null && sourcePermanent != null && target != null && controller.getId().equals(sourcePermanent.getControllerId())) { game.addEffect(new ConditionalContinuousEffect(
SourceHasRemainedInSameZoneCondition condition = new SourceHasRemainedInSameZoneCondition(sourcePermanent.getId()); new GainControlTargetEffect(Duration.Custom),
new CompoundCondition(new SourceOnBattlefieldControlUnchangedCondition(), condition),
game.addEffect(new ConditionalContinuousEffect( null),
new GainControlTargetEffect(Duration.Custom), source);
new CompoundCondition(new SourceOnBattlefieldControlUnchangedCondition(), condition), if (!game.isSimulation()) {
null), game.informPlayers(sourcePermanent.getLogName() + ": " + controller.getLogName() + " gained control of " + target.getLogName());
source); }
if (!game.isSimulation()) { sourcePermanent.addInfo("gained control of", CardUtil.addToolTipMarkTags("Gained control of: " + GameLog.getColoredObjectIdNameForTooltip(target)), game);
game.informPlayers(sourcePermanent.getLogName() + ": " + controller.getLogName() + " gained control of " + target.getLogName());
} }
sourcePermanent.addInfo("gained control of", CardUtil.addToolTipMarkTags("Gained control of: " + GameLog.getColoredObjectIdNameForTooltip(target)), game); return true;
} }
return false; return false;
} }

View file

@ -27,9 +27,9 @@
*/ */
package mage.cards.e; package mage.cards.e;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.constants.ComparisonType;
import mage.abilities.common.BeginningOfCombatTriggeredAbility; import mage.abilities.common.BeginningOfCombatTriggeredAbility;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
@ -46,26 +46,24 @@ import mage.game.permanent.Permanent;
import mage.players.Player; import mage.players.Player;
import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetControlledCreaturePermanent;
import java.util.UUID;
/** /**
* *
* @author fireshoes * @author fireshoes
*/ */
public class EzuriClawOfProgress extends CardImpl { public class EzuriClawOfProgress extends CardImpl {
final private static FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(); final private static FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent();
final private static FilterControlledCreaturePermanent filter2 = new FilterControlledCreaturePermanent(); final private static FilterControlledCreaturePermanent filter2 = new FilterControlledCreaturePermanent();
static { static {
filter.add(new PowerPredicate(ComparisonType.FEWER_THAN, 3)); filter.add(new PowerPredicate(ComparisonType.FEWER_THAN, 3));
filter2.add(new AnotherPredicate()); filter2.add(new AnotherPredicate());
} }
String rule = "Whenever a creature with power 2 or less enters the battlefield under your control, you get an experience counter."; String rule = "Whenever a creature with power 2 or less enters the battlefield under your control, you get an experience counter.";
public EzuriClawOfProgress(UUID ownerId, CardSetInfo setInfo) { public EzuriClawOfProgress(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}{U}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}{U}");
addSuperType(SuperType.LEGENDARY); addSuperType(SuperType.LEGENDARY);
this.subtype.add("Elf"); this.subtype.add("Elf");
this.subtype.add("Warrior"); this.subtype.add("Warrior");
@ -75,7 +73,7 @@ public class EzuriClawOfProgress extends CardImpl {
// Whenever a creature with power 2 or less enters the battlefield under your control, you get an experience counter. // Whenever a creature with power 2 or less enters the battlefield under your control, you get an experience counter.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new AddCountersControllerEffect( this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new AddCountersControllerEffect(
CounterType.EXPERIENCE.createInstance(1), false), filter, false, rule, true)); CounterType.EXPERIENCE.createInstance(1), false), filter, false, rule, true));
// At the beginning of combat on your turn, put X +1/+1 counters on another target creature you control, where X is the number of experience counters you have. // At the beginning of combat on your turn, put X +1/+1 counters on another target creature you control, where X is the number of experience counters you have.
Ability ability = new BeginningOfCombatTriggeredAbility(new EzuriClawOfProgressEffect(), TargetController.YOU, false); Ability ability = new BeginningOfCombatTriggeredAbility(new EzuriClawOfProgressEffect(), TargetController.YOU, false);
ability.addTarget(new TargetControlledCreaturePermanent(filter2)); ability.addTarget(new TargetControlledCreaturePermanent(filter2));
@ -110,15 +108,15 @@ class EzuriClawOfProgressEffect extends OneShotEffect {
@Override @Override
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
Permanent target = game.getPermanent(source.getFirstTarget());
if (target == null) {
return false;
}
Player controller = game.getPlayer(source.getControllerId()); Player controller = game.getPlayer(source.getControllerId());
if (controller != null) { if (controller != null) {
int amount = controller.getCounters().getCount(CounterType.EXPERIENCE); Permanent target = game.getPermanent(getTargetPointer().getFirst(game, source));
target.addCounters(CounterType.P1P1.createInstance(amount), source, game); if (target != null) {
int amount = controller.getCounters().getCount(CounterType.EXPERIENCE);
target.addCounters(CounterType.P1P1.createInstance(amount), source, game);
}
return true;
} }
return false; return false;
} }
} }

View file

@ -27,6 +27,7 @@
*/ */
package mage.cards.g; package mage.cards.g;
import java.util.UUID;
import mage.Mana; import mage.Mana;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.OpeningHandAction; import mage.abilities.OpeningHandAction;
@ -53,8 +54,6 @@ import mage.game.permanent.Permanent;
import mage.players.Player; import mage.players.Player;
import mage.target.common.TargetCardInHand; import mage.target.common.TargetCardInHand;
import java.util.UUID;
/** /**
* *
* @author emerald000 * @author emerald000
@ -159,6 +158,7 @@ class GemstoneCavernsEffect extends OneShotEffect {
} }
} }
} }
return true;
} }
return false; return false;
} }

View file

@ -27,6 +27,7 @@
*/ */
package mage.cards.g; package mage.cards.g;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.DiesCreatureTriggeredAbility; import mage.abilities.common.DiesCreatureTriggeredAbility;
@ -42,8 +43,6 @@ import mage.constants.CardType;
import mage.constants.Zone; import mage.constants.Zone;
import mage.target.common.TargetCreatureOrPlayer; import mage.target.common.TargetCreatureOrPlayer;
import java.util.UUID;
/** /**
* *
* @author jonubuu * @author jonubuu
@ -51,7 +50,7 @@ import java.util.UUID;
public class GoblinSharpshooter extends CardImpl { public class GoblinSharpshooter extends CardImpl {
public GoblinSharpshooter(UUID ownerId, CardSetInfo setInfo) { public GoblinSharpshooter(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}");
this.subtype.add("Goblin"); this.subtype.add("Goblin");
this.power = new MageInt(1); this.power = new MageInt(1);
@ -61,7 +60,7 @@ public class GoblinSharpshooter extends CardImpl {
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DontUntapInControllersUntapStepSourceEffect())); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DontUntapInControllersUntapStepSourceEffect()));
// Whenever a creature dies, untap Goblin Sharpshooter. // Whenever a creature dies, untap Goblin Sharpshooter.
this.addAbility(new DiesCreatureTriggeredAbility(new UntapSourceEffect(), false)); this.addAbility(new DiesCreatureTriggeredAbility(new UntapSourceEffect(), false));
// {tap}: Goblin Sharpshooter deals 1 damage to target creature or player. // {T}: Goblin Sharpshooter deals 1 damage to target creature or player.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new TapSourceCost()); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new TapSourceCost());
ability.addTarget(new TargetCreatureOrPlayer()); ability.addTarget(new TargetCreatureOrPlayer());
this.addAbility(ability); this.addAbility(ability);

View file

@ -1,129 +1,132 @@
/* /*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without modification, are * Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met: * permitted provided that the following conditions are met:
* *
* 1. Redistributions of source code must retain the above copyright notice, this list of * 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer. * conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright notice, this list * 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 * of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution. * provided with the distribution.
* *
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED * 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 * 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 * 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 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 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 * 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 * 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 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* *
* The views and conclusions contained in the software and documentation are those of the * 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 * authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com. * or implied, of BetaSteward_at_googlemail.com.
*/ */
package mage.cards.g; package mage.cards.g;
import java.util.UUID; import java.util.UUID;
import mage.ObjectColor; import mage.MageObject;
import mage.abilities.Ability; import mage.ObjectColor;
import mage.abilities.common.BeginningOfCombatTriggeredAbility; import mage.abilities.Ability;
import mage.abilities.effects.ContinuousEffect; import mage.abilities.common.BeginningOfCombatTriggeredAbility;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.ContinuousEffect;
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.keyword.HasteAbility; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
import mage.cards.Card; import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl; import mage.cards.Card;
import mage.cards.CardSetInfo; import mage.cards.CardImpl;
import mage.constants.CardType; import mage.cards.CardSetInfo;
import mage.constants.Duration; import mage.constants.CardType;
import mage.constants.Outcome; import mage.constants.Duration;
import mage.constants.TargetController; import mage.constants.Outcome;
import mage.constants.Zone; import mage.constants.TargetController;
import mage.filter.common.FilterCreatureCard; import mage.constants.Zone;
import mage.game.Game; import mage.filter.common.FilterCreatureCard;
import mage.game.permanent.Permanent; import mage.game.Game;
import mage.game.permanent.token.EmptyToken; import mage.game.permanent.Permanent;
import mage.players.Player; import mage.game.permanent.token.EmptyToken;
import mage.target.common.TargetCardInYourGraveyard; import mage.players.Player;
import mage.target.targetpointer.FixedTarget; import mage.target.common.TargetCardInYourGraveyard;
import mage.util.CardUtil; import mage.target.targetpointer.FixedTarget;
import mage.util.CardUtil;
/**
* /**
* @author jeffwadsworth *
*/ * @author jeffwadsworth
public class GodPharaohsGift extends CardImpl { */
public class GodPharaohsGift extends CardImpl {
public GodPharaohsGift(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{7}"); public GodPharaohsGift(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{7}");
// At the beginning of combat on your turn, you may exile a creature card from your graveyard. If you do, create a token that's a copy of that card, except it's a 4/4 black Zombie. It gains haste until end of turn.
this.addAbility(new BeginningOfCombatTriggeredAbility(Zone.BATTLEFIELD, new GodPharaohsGiftEffect(), TargetController.YOU, true, false)); // At the beginning of combat on your turn, you may exile a creature card from your graveyard. If you do, create a token that's a copy of that card, except it's a 4/4 black Zombie. It gains haste until end of turn.
this.addAbility(new BeginningOfCombatTriggeredAbility(Zone.BATTLEFIELD, new GodPharaohsGiftEffect(), TargetController.YOU, true, false));
}
}
public GodPharaohsGift(final GodPharaohsGift card) {
super(card); public GodPharaohsGift(final GodPharaohsGift card) {
} super(card);
}
@Override
public GodPharaohsGift copy() { @Override
return new GodPharaohsGift(this); public GodPharaohsGift copy() {
} return new GodPharaohsGift(this);
} }
}
class GodPharaohsGiftEffect extends OneShotEffect {
class GodPharaohsGiftEffect extends OneShotEffect {
private static final FilterCreatureCard filter = new FilterCreatureCard("creature card from your graveyard");
private UUID exileId = UUID.randomUUID(); private static final FilterCreatureCard filter = new FilterCreatureCard("creature card from your graveyard");
private final UUID exileId = UUID.randomUUID();
public GodPharaohsGiftEffect() {
super(Outcome.PutCreatureInPlay); public GodPharaohsGiftEffect() {
this.staticText = "you may exile a creature card from your graveyard. If you do, create a token that's a copy of that card, except it's a 4/4 black Zombie. It gains haste until end of turn"; super(Outcome.PutCreatureInPlay);
} this.staticText = "you may exile a creature card from your graveyard. If you do, create a token that's a copy of that card, except it's a 4/4 black Zombie. It gains haste until end of turn";
}
public GodPharaohsGiftEffect(final GodPharaohsGiftEffect effect) {
super(effect); public GodPharaohsGiftEffect(final GodPharaohsGiftEffect effect) {
} super(effect);
}
@Override
public GodPharaohsGiftEffect copy() { @Override
return new GodPharaohsGiftEffect(this); public GodPharaohsGiftEffect copy() {
} return new GodPharaohsGiftEffect(this);
}
@Override
public boolean apply(Game game, Ability source) { @Override
Player controller = game.getPlayer(source.getControllerId()); public boolean apply(Game game, Ability source) {
TargetCardInYourGraveyard target = new TargetCardInYourGraveyard(filter); Player controller = game.getPlayer(source.getControllerId());
target.setNotTarget(true); MageObject sourceObject = source.getSourceObject(game);
if (controller != null if (controller != null && sourceObject != null) {
&& !controller.getGraveyard().getCards(filter, game).isEmpty() TargetCardInYourGraveyard target = new TargetCardInYourGraveyard(filter);
&& controller.choose(Outcome.PutCreatureInPlay, target, source.getId(), game)) { target.setNotTarget(true);
Card cardChosen = game.getCard(target.getFirstTarget()); if (!controller.getGraveyard().getCards(filter, game).isEmpty()
if (cardChosen != null && controller.choose(Outcome.PutCreatureInPlay, target, source.getId(), game)) {
&& cardChosen.moveToExile(exileId, "God-Pharaoh's Gift", source.getId(), game)) { Card cardChosen = game.getCard(target.getFirstTarget());
EmptyToken token = new EmptyToken(); if (cardChosen != null
CardUtil.copyTo(token).from(cardChosen); && cardChosen.moveToExile(exileId, sourceObject.getIdName(), source.getSourceId(), game)) {
token.getPower().modifyBaseValue(4); EmptyToken token = new EmptyToken();
token.getToughness().modifyBaseValue(4); CardUtil.copyTo(token).from(cardChosen);
token.getColor(game).setColor(ObjectColor.BLACK); token.getPower().modifyBaseValue(4);
token.getSubtype(game).clear(); token.getToughness().modifyBaseValue(4);
token.getSubtype(game).add("Zombie"); token.getColor(game).setColor(ObjectColor.BLACK);
if (token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId())) { token.getSubtype(game).clear();
Permanent tokenPermanent = game.getPermanent(token.getLastAddedToken()); token.getSubtype(game).add("Zombie");
if (tokenPermanent != null) { if (token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId())) {
ContinuousEffect effect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn); Permanent tokenPermanent = game.getPermanent(token.getLastAddedToken());
effect.setTargetPointer(new FixedTarget(tokenPermanent.getId())); if (tokenPermanent != null) {
game.addEffect(effect, source); ContinuousEffect effect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn);
return true; effect.setTargetPointer(new FixedTarget(tokenPermanent.getId()));
} game.addEffect(effect, source);
} }
} }
} }
return false; }
} return true;
} }
return false;
}
}

View file

@ -1,92 +1,91 @@
/* /*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without modification, are * Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met: * permitted provided that the following conditions are met:
* *
* 1. Redistributions of source code must retain the above copyright notice, this list of * 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer. * conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright notice, this list * 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 * of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution. * provided with the distribution.
* *
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED * 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 * 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 * 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 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 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 * 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 * 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 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* *
* The views and conclusions contained in the software and documentation are those of the * 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 * authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com. * or implied, of BetaSteward_at_googlemail.com.
*/ */
package mage.cards.n; package mage.cards.n;
import mage.MageInt; import java.util.UUID;
import mage.abilities.Ability; import mage.MageInt;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.costs.common.SacrificeTargetCost; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.SacrificeTargetCost;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.DoIfCostPaid; import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DoIfCostPaid;
import mage.cards.CardImpl; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.cards.CardSetInfo; import mage.cards.CardImpl;
import mage.constants.CardType; import mage.cards.CardSetInfo;
import mage.constants.SuperType; import mage.constants.CardType;
import mage.constants.Zone; import mage.constants.SuperType;
import mage.filter.common.FilterArtifactPermanent; import mage.constants.Zone;
import mage.filter.common.FilterControlledArtifactPermanent; import mage.filter.common.FilterArtifactPermanent;
import mage.filter.predicate.Predicates; import mage.filter.common.FilterControlledArtifactPermanent;
import mage.filter.predicate.permanent.TokenPredicate; import mage.filter.predicate.Predicates;
import mage.game.permanent.token.DroidToken; import mage.filter.predicate.permanent.TokenPredicate;
import mage.target.common.TargetControlledPermanent; import mage.game.permanent.token.DroidToken;
import mage.target.common.TargetControlledPermanent;
import java.util.UUID;
/**
/** *
* * @author Styxo
* @author Styxo */
*/ public class NuteGunray extends CardImpl {
public class NuteGunray extends CardImpl {
private static final FilterControlledArtifactPermanent filter = new FilterControlledArtifactPermanent("non-token artifact");
private static final FilterControlledArtifactPermanent filter = new FilterControlledArtifactPermanent("non-token artifact");
static {
static { filter.add(Predicates.not(new TokenPredicate()));
filter.add(Predicates.not(new TokenPredicate())); }
}
public NuteGunray(UUID ownerId, CardSetInfo setInfo) {
public NuteGunray(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{W}{U}{B}");
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{W}{U}{B}"); addSuperType(SuperType.LEGENDARY);
addSuperType(SuperType.LEGENDARY); this.subtype.add("Neimoidian");
this.subtype.add("Neimoidian"); this.subtype.add("Advisor");
this.subtype.add("Advisor"); this.power = new MageInt(2);
this.power = new MageInt(2); this.toughness = new MageInt(3);
this.toughness = new MageInt(3);
// Whenever an artifact enters the battlefield under your control, you may pay {1}. If you do, draw a card.
// Whenever an artifact enters the battlefield under your control, you may pay {1}. If you do, draw a card. this.addAbility(new EntersBattlefieldControlledTriggeredAbility(new DoIfCostPaid(new DrawCardSourceControllerEffect(1), new GenericManaCost(1)), new FilterArtifactPermanent()));
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(new DoIfCostPaid(new DrawCardSourceControllerEffect(1), new GenericManaCost(1)), new FilterArtifactPermanent()));
// {1}{T}, Sacrifice a non-token artifact: Create a 1/1 colorless Battle Droid artifact creature token.
// {1}{T}, Sacrifice a non-token artifact: Create a 1/1 colorless Battle Droid artifact creature token. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new DroidToken()), new GenericManaCost(1));
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new DroidToken()), new GenericManaCost(1)); ability.addCost(new TapSourceCost());
ability.addCost(new TapSourceCost()); ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(1, 1, filter, false)));
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(1, 1, filter, false))); this.addAbility(ability);
this.addAbility(ability); }
}
public NuteGunray(final NuteGunray card) {
public NuteGunray(final NuteGunray card) { super(card);
super(card); }
}
@Override
@Override public NuteGunray copy() {
public NuteGunray copy() { return new NuteGunray(this);
return new NuteGunray(this); }
} }
}

View file

@ -1,111 +1,110 @@
/* /*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without modification, are * Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met: * permitted provided that the following conditions are met:
* *
* 1. Redistributions of source code must retain the above copyright notice, this list of * 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer. * conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright notice, this list * 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 * of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution. * provided with the distribution.
* *
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED * 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 * 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 * 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 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 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 * 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 * 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 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* *
* The views and conclusions contained in the software and documentation are those of the * 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 * authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com. * or implied, of BetaSteward_at_googlemail.com.
*/ */
package mage.cards.r; package mage.cards.r;
import mage.abilities.Ability; import java.util.UUID;
import mage.abilities.effects.OneShotEffect; import mage.abilities.Ability;
import mage.abilities.effects.common.CopyTargetSpellEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.keyword.AftermathAbility; import mage.abilities.effects.common.CopyTargetSpellEffect;
import mage.cards.CardImpl; import mage.abilities.keyword.AftermathAbility;
import mage.cards.CardSetInfo; import mage.cards.CardImpl;
import mage.cards.SplitCard; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.cards.SplitCard;
import mage.constants.Outcome; import mage.constants.CardType;
import mage.constants.SpellAbilityType; import mage.constants.Outcome;
import mage.filter.common.FilterInstantOrSorcerySpell; import mage.constants.SpellAbilityType;
import mage.game.Game; import mage.filter.common.FilterInstantOrSorcerySpell;
import mage.game.stack.Spell; import mage.game.Game;
import mage.players.Player; import mage.game.stack.Spell;
import mage.target.TargetSpell; import mage.players.Player;
import mage.target.TargetSpell;
import java.util.UUID;
/**
/** *
* * @author LevelX2
* @author LevelX2 */
*/ public class RefuseCooperate extends SplitCard {
public class RefuseCooperate extends SplitCard {
public RefuseCooperate(UUID ownerId, CardSetInfo setInfo) {
public RefuseCooperate(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, new CardType[]{CardType.INSTANT}, "{3}{R}", "{2}{U}", SpellAbilityType.SPLIT_AFTERMATH);
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, new CardType[]{CardType.INSTANT}, "{3}{R}", "{2}{U}", SpellAbilityType.SPLIT_AFTERMATH);
// Refuse
// Refuse // Refuse deals damage to target spell's controller equal to that spell's converted mana cost.
// Refuse deals damage to target spell's controller equal to that spell's converted mana cost. getLeftHalfCard().getSpellAbility().addEffect(new RefuseEffect());
getLeftHalfCard().getSpellAbility().addEffect(new RefuseEffect()); getLeftHalfCard().getSpellAbility().addTarget(new TargetSpell());
getLeftHalfCard().getSpellAbility().addTarget(new TargetSpell());
// Cooperate
// Cooperate // Aftermath
// Aftermath ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true));
((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true)); // Copy target instant or sorcery spell. You may choose new targets for the copy.
// Copy target instant or sorcery spell. You may choose new targets for the copy. getRightHalfCard().getSpellAbility().addEffect(new CopyTargetSpellEffect());
getRightHalfCard().getSpellAbility().addEffect(new CopyTargetSpellEffect()); getRightHalfCard().getSpellAbility().addTarget(new TargetSpell(new FilterInstantOrSorcerySpell()));
getRightHalfCard().getSpellAbility().addTarget(new TargetSpell(new FilterInstantOrSorcerySpell())); }
}
public RefuseCooperate(final RefuseCooperate card) {
public RefuseCooperate(final RefuseCooperate card) { super(card);
super(card); }
}
@Override
@Override public RefuseCooperate copy() {
public RefuseCooperate copy() { return new RefuseCooperate(this);
return new RefuseCooperate(this); }
} }
}
class RefuseEffect extends OneShotEffect {
class RefuseEffect extends OneShotEffect {
public RefuseEffect() {
public RefuseEffect() { super(Outcome.Damage);
super(Outcome.Damage); staticText = "Refuse deals damage to target spell's controller equal to that spell's converted mana cost";
staticText = "Refuse deals damage to target spell's controller equal to that spell's converted mana cost"; }
}
public RefuseEffect(final RefuseEffect effect) {
public RefuseEffect(final RefuseEffect effect) { super(effect);
super(effect); }
}
@Override
@Override public RefuseEffect copy() {
public RefuseEffect copy() { return new RefuseEffect(this);
return new RefuseEffect(this); }
}
@Override
@Override public boolean apply(Game game, Ability source) {
public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId());
Player controller = game.getPlayer(source.getControllerId()); if (controller != null) {
if (controller != null) { Spell spell = game.getStack().getSpell(getTargetPointer().getFirst(game, source));
Spell spell = game.getStack().getSpell(source.getFirstTarget()); if (spell != null) {
if (spell != null) { Player spellController = game.getPlayer(spell.getControllerId());
Player spellController = game.getPlayer(spell.getControllerId()); if (spellController != null) {
if (spellController != null) { spellController.damage(spell.getConvertedManaCost(), source.getSourceId(), game, false, true);
spellController.damage(spell.getConvertedManaCost(), source.getSourceId(), game, false, true); return true;
return true; }
} }
} }
} return false;
return false; }
} }
}

View file

@ -1,163 +1,162 @@
/* /*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without modification, are * Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met: * permitted provided that the following conditions are met:
* *
* 1. Redistributions of source code must retain the above copyright notice, this list of * 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer. * conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright notice, this list * 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 * of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution. * provided with the distribution.
* *
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED * 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 * 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 * 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 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 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 * 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 * 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 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* *
* The views and conclusions contained in the software and documentation are those of the * 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 * authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com. * or implied, of BetaSteward_at_googlemail.com.
*/ */
package mage.cards.s; package mage.cards.s;
import mage.MageInt; import java.util.UUID;
import mage.abilities.Ability; import mage.MageInt;
import mage.abilities.Mode; import mage.abilities.Ability;
import mage.abilities.SpellAbility; import mage.abilities.Mode;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.SpellAbility;
import mage.abilities.effects.common.cost.CostModificationEffectImpl; import mage.abilities.common.SimpleStaticAbility;
import mage.cards.CardImpl; import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.cards.CardSetInfo; import mage.cards.CardImpl;
import mage.constants.*; import mage.cards.CardSetInfo;
import mage.game.Game; import mage.constants.*;
import mage.game.permanent.Permanent; import mage.game.Game;
import mage.players.Player; import mage.game.permanent.Permanent;
import mage.target.Target; import mage.players.Player;
import mage.util.CardUtil; import mage.target.Target;
import mage.util.CardUtil;
import java.util.UUID;
/**
/** *
* * @author Styxo
* @author Styxo */
*/ public class SenatorLottDod extends CardImpl {
public class SenatorLottDod extends CardImpl {
public SenatorLottDod(UUID ownerId, CardSetInfo setInfo) {
public SenatorLottDod(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{U}{B}");
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{U}{B}"); addSuperType(SuperType.LEGENDARY);
addSuperType(SuperType.LEGENDARY); this.subtype.add("Neimoidian");
this.subtype.add("Neimoidian"); this.subtype.add("Advisor");
this.subtype.add("Advisor"); this.power = new MageInt(2);
this.power = new MageInt(2); this.toughness = new MageInt(2);
this.toughness = new MageInt(2);
// Spells your opponents cast that target you cost {2} more to cast.
// Spells your opponents cast that target you cost {2} more to cast. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SenatorLottDodSpellsTargetingYouCostReductionEffect()));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SenatorLottDodSpellsTargetingYouCostReductionEffect()));
// Spell your opponents cast that target a creature you control cost {1} more to cast.
// Spell your opponents cast that target a creature you control cost {1} more to cast. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SenatorLottDodSpellsTargetingCreatureCostReductionEffect()));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SenatorLottDodSpellsTargetingCreatureCostReductionEffect()));
}
}
public SenatorLottDod(final SenatorLottDod card) {
public SenatorLottDod(final SenatorLottDod card) { super(card);
super(card); }
}
@Override
@Override public SenatorLottDod copy() {
public SenatorLottDod copy() { return new SenatorLottDod(this);
return new SenatorLottDod(this); }
} }
}
class SenatorLottDodSpellsTargetingCreatureCostReductionEffect extends CostModificationEffectImpl {
class SenatorLottDodSpellsTargetingCreatureCostReductionEffect extends CostModificationEffectImpl {
public SenatorLottDodSpellsTargetingCreatureCostReductionEffect() {
public SenatorLottDodSpellsTargetingCreatureCostReductionEffect() { super(Duration.WhileOnBattlefield, Outcome.Benefit, CostModificationType.INCREASE_COST);
super(Duration.WhileOnBattlefield, Outcome.Benefit, CostModificationType.INCREASE_COST); this.staticText = "Spell your opponents cast that target a creature you control cost {1} more to cast.";
this.staticText = "Spell your opponents cast that target a creature you control cost {1} more to cast."; }
}
protected SenatorLottDodSpellsTargetingCreatureCostReductionEffect(SenatorLottDodSpellsTargetingCreatureCostReductionEffect effect) {
protected SenatorLottDodSpellsTargetingCreatureCostReductionEffect(SenatorLottDodSpellsTargetingCreatureCostReductionEffect effect) { super(effect);
super(effect); }
}
@Override
@Override public boolean apply(Game game, Ability source, Ability abilityToModify) {
public boolean apply(Game game, Ability source, Ability abilityToModify) { CardUtil.increaseCost(abilityToModify, 1);
CardUtil.increaseCost(abilityToModify, 1); return true;
return true; }
}
@Override
@Override public boolean applies(Ability abilityToModify, Ability source, Game game) {
public boolean applies(Ability abilityToModify, Ability source, Game game) { if (abilityToModify instanceof SpellAbility) {
if (abilityToModify instanceof SpellAbility) { if (game.getOpponents(source.getControllerId()).contains(abilityToModify.getControllerId())) {
if (game.getOpponents(source.getControllerId()).contains(abilityToModify.getControllerId())) { for (UUID modeId : abilityToModify.getModes().getSelectedModes()) {
for (UUID modeId : abilityToModify.getModes().getSelectedModes()) { Mode mode = abilityToModify.getModes().get(modeId);
Mode mode = abilityToModify.getModes().get(modeId); for (Target target : mode.getTargets()) {
for (Target target : mode.getTargets()) { for (UUID targetUUID : target.getTargets()) {
for (UUID targetUUID : target.getTargets()) { Permanent permanent = game.getPermanent(targetUUID);
Permanent permanent = game.getPermanent(targetUUID); if (permanent != null && permanent.getControllerId().equals(source.getControllerId())) {
if (permanent != null && permanent.getControllerId().equals(source.getControllerId())) { return true;
return true; }
} }
} }
} }
} }
} }
} return false;
return false; }
}
@Override
@Override public SenatorLottDodSpellsTargetingCreatureCostReductionEffect copy() {
public SenatorLottDodSpellsTargetingCreatureCostReductionEffect copy() { return new SenatorLottDodSpellsTargetingCreatureCostReductionEffect(this);
return new SenatorLottDodSpellsTargetingCreatureCostReductionEffect(this); }
} }
}
class SenatorLottDodSpellsTargetingYouCostReductionEffect extends CostModificationEffectImpl {
class SenatorLottDodSpellsTargetingYouCostReductionEffect extends CostModificationEffectImpl {
public SenatorLottDodSpellsTargetingYouCostReductionEffect() {
public SenatorLottDodSpellsTargetingYouCostReductionEffect() { super(Duration.WhileOnBattlefield, Outcome.Benefit, CostModificationType.INCREASE_COST);
super(Duration.WhileOnBattlefield, Outcome.Benefit, CostModificationType.INCREASE_COST); this.staticText = "Spells your opponents cast that target you cost {2} more to cast.";
this.staticText = "Spells your opponents cast that target you cost {2} more to cast."; }
}
protected SenatorLottDodSpellsTargetingYouCostReductionEffect(SenatorLottDodSpellsTargetingYouCostReductionEffect effect) {
protected SenatorLottDodSpellsTargetingYouCostReductionEffect(SenatorLottDodSpellsTargetingYouCostReductionEffect effect) { super(effect);
super(effect); }
}
@Override
@Override public boolean apply(Game game, Ability source, Ability abilityToModify) {
public boolean apply(Game game, Ability source, Ability abilityToModify) { CardUtil.increaseCost(abilityToModify, 2);
CardUtil.increaseCost(abilityToModify, 2); return true;
return true; }
}
@Override
@Override public boolean applies(Ability abilityToModify, Ability source, Game game) {
public boolean applies(Ability abilityToModify, Ability source, Game game) { if (abilityToModify instanceof SpellAbility) {
if (abilityToModify instanceof SpellAbility) { if (game.getOpponents(source.getControllerId()).contains(abilityToModify.getControllerId())) {
if (game.getOpponents(source.getControllerId()).contains(abilityToModify.getControllerId())) { for (UUID modeId : abilityToModify.getModes().getSelectedModes()) {
for (UUID modeId : abilityToModify.getModes().getSelectedModes()) { Mode mode = abilityToModify.getModes().get(modeId);
Mode mode = abilityToModify.getModes().get(modeId); for (Target target : mode.getTargets()) {
for (Target target : mode.getTargets()) { for (UUID targetUUID : target.getTargets()) {
for (UUID targetUUID : target.getTargets()) { Player player = game.getPlayer(targetUUID);
Player player = game.getPlayer(targetUUID); if (player != null && player.getId().equals(source.getControllerId())) {
if (player != null && player.getId().equals(source.getControllerId())) { return true;
return true; }
} }
} }
} }
} }
} }
} return false;
return false; }
}
@Override
@Override public SenatorLottDodSpellsTargetingYouCostReductionEffect copy() {
public SenatorLottDodSpellsTargetingYouCostReductionEffect copy() { return new SenatorLottDodSpellsTargetingYouCostReductionEffect(this);
return new SenatorLottDodSpellsTargetingYouCostReductionEffect(this); }
} }
}

View file

@ -27,8 +27,13 @@
*/ */
package mage.abilities.effects; package mage.abilities.effects;
import java.io.Serializable;
import java.util.*;
import java.util.Map.Entry;
import java.util.stream.Collectors;
import mage.MageObject; import mage.MageObject;
import mage.abilities.*; import mage.abilities.*;
import mage.abilities.effects.common.continuous.CommanderReplacementEffect;
import mage.abilities.keyword.SpliceOntoArcaneAbility; import mage.abilities.keyword.SpliceOntoArcaneAbility;
import mage.cards.Cards; import mage.cards.Cards;
import mage.cards.CardsImpl; import mage.cards.CardsImpl;
@ -49,11 +54,6 @@ import mage.players.Player;
import mage.target.common.TargetCardInHand; import mage.target.common.TargetCardInHand;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import java.io.Serializable;
import java.util.*;
import java.util.Map.Entry;
import java.util.stream.Collectors;
/** /**
* @author BetaSteward_at_googlemail.com * @author BetaSteward_at_googlemail.com
*/ */
@ -85,7 +85,6 @@ public class ContinuousEffects implements Serializable {
// note all effect/abilities that were only added temporary // note all effect/abilities that were only added temporary
private final Map<ContinuousEffect, Set<Ability>> temporaryEffects = new HashMap<>(); private final Map<ContinuousEffect, Set<Ability>> temporaryEffects = new HashMap<>();
public ContinuousEffects() { public ContinuousEffects() {
applyCounters = new ApplyCountersEffect(); applyCounters = new ApplyCountersEffect();
planeswalkerRedirectionEffect = new PlaneswalkerRedirectionEffect(); planeswalkerRedirectionEffect = new PlaneswalkerRedirectionEffect();
@ -241,7 +240,7 @@ public class ContinuousEffects implements Serializable {
} }
private List<ContinuousEffect> filterLayeredEffects(List<ContinuousEffect> effects, Layer layer) { private List<ContinuousEffect> filterLayeredEffects(List<ContinuousEffect> effects, Layer layer) {
return effects.stream().filter(effect->effect.hasLayer(layer)).collect(Collectors.toList()); return effects.stream().filter(effect -> effect.hasLayer(layer)).collect(Collectors.toList());
} }
public Map<RequirementEffect, Set<Ability>> getApplicableRequirementEffects(Permanent permanent, Game game) { public Map<RequirementEffect, Set<Ability>> getApplicableRequirementEffects(Permanent permanent, Game game) {
@ -1254,7 +1253,9 @@ public class ContinuousEffects implements Serializable {
} }
} }
} else { } else {
logger.warn("Ability without sourceId:" + ability.getRule()); if (!(effect instanceof CommanderReplacementEffect)) {
logger.warn("Ability without sourceId:" + ability.getRule());
}
} }
} }
} }

View file

@ -68,7 +68,8 @@ public class PutTopCardOfLibraryIntoGraveTargetEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
Player player = game.getPlayer(targetPointer.getFirst(game, source)); Player player = game.getPlayer(targetPointer.getFirst(game, source));
if (player != null) { if (player != null) {
return player.moveCards(player.getLibrary().getTopCards(game, numberCards.calculate(game, source, this)), Zone.GRAVEYARD, source, game); player.moveCards(player.getLibrary().getTopCards(game, numberCards.calculate(game, source, this)), Zone.GRAVEYARD, source, game);
return true;
} }
return false; return false;
} }

View file

@ -74,14 +74,10 @@ public class ReturnSourceFromGraveyardToBattlefieldEffect extends OneShotEffect
@Override @Override
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
if (game.getState().getZone(source.getSourceId()) != Zone.GRAVEYARD) {
return false;
}
Card card = game.getCard(source.getSourceId()); Card card = game.getCard(source.getSourceId());
if (card == null) { if (card == null) {
return false; return false;
} }
Player player; Player player;
if (ownerControl) { if (ownerControl) {
player = game.getPlayer(card.getOwnerId()); player = game.getPlayer(card.getOwnerId());
@ -91,7 +87,10 @@ public class ReturnSourceFromGraveyardToBattlefieldEffect extends OneShotEffect
if (player == null) { if (player == null) {
return false; return false;
} }
return player.moveCards(card, Zone.BATTLEFIELD, source, game, tapped, false, true, null); if (game.getState().getZone(source.getSourceId()) == Zone.GRAVEYARD) {
player.moveCards(card, Zone.BATTLEFIELD, source, game, tapped, false, true, null);
}
return true;
} }
private void setText() { private void setText() {

View file

@ -27,11 +27,11 @@
*/ */
package mage.abilities.effects.common; package mage.abilities.effects.common;
import mage.constants.Outcome;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.StaticValue; import mage.abilities.dynamicvalue.common.StaticValue;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.constants.Outcome;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.predicate.permanent.ControllerIdPredicate; import mage.filter.predicate.permanent.ControllerIdPredicate;
import mage.game.Game; import mage.game.Game;
@ -45,25 +45,25 @@ import mage.util.CardUtil;
* *
* @author maurer.it_at_gmail.com * @author maurer.it_at_gmail.com
*/ */
public class SacrificeEffect extends OneShotEffect{ public class SacrificeEffect extends OneShotEffect {
private FilterPermanent filter; private FilterPermanent filter;
private String preText; private String preText;
private DynamicValue count; private DynamicValue count;
public SacrificeEffect (FilterPermanent filter, int count, String preText ) { public SacrificeEffect(FilterPermanent filter, int count, String preText) {
this(filter, new StaticValue(count), preText); this(filter, new StaticValue(count), preText);
} }
public SacrificeEffect (FilterPermanent filter, DynamicValue count, String preText ) { public SacrificeEffect(FilterPermanent filter, DynamicValue count, String preText) {
super(Outcome.Sacrifice); super(Outcome.Sacrifice);
this.filter = filter; this.filter = filter;
this.count = count; this.count = count;
this.preText = preText; this.preText = preText;
setText(); setText();
} }
public SacrificeEffect (final SacrificeEffect effect ) { public SacrificeEffect(final SacrificeEffect effect) {
super(effect); super(effect);
this.filter = effect.filter; this.filter = effect.filter;
this.count = effect.count; this.count = effect.count;
@ -87,24 +87,20 @@ public class SacrificeEffect extends OneShotEffect{
Target target = new TargetPermanent(amount, amount, newFilter, true); Target target = new TargetPermanent(amount, amount, newFilter, true);
// A spell or ability could have removed the only legal target this player
// had, if thats the case this ability should fizzle.
if (amount > 0 && target.canChoose(source.getSourceId(), player.getId(), game)) { if (amount > 0 && target.canChoose(source.getSourceId(), player.getId(), game)) {
while (!target.isChosen() && target.canChoose(player.getId(), game) && player.canRespond()) { while (!target.isChosen() && target.canChoose(player.getId(), game) && player.canRespond()) {
player.chooseTarget(Outcome.Sacrifice, target, source, game); player.chooseTarget(Outcome.Sacrifice, target, source, game);
} }
for ( int idx = 0; idx < target.getTargets().size(); idx++) { for (int idx = 0; idx < target.getTargets().size(); idx++) {
Permanent permanent = game.getPermanent(target.getTargets().get(idx)); Permanent permanent = game.getPermanent(target.getTargets().get(idx));
if ( permanent != null ) { if (permanent != null) {
permanent.sacrifice(source.getSourceId(), game); permanent.sacrifice(source.getSourceId(), game);
} }
} }
return true;
} }
return false; return true;
} }
public void setAmount(DynamicValue amount) { public void setAmount(DynamicValue amount) {
@ -128,7 +124,7 @@ public class SacrificeEffect extends OneShotEffect{
sb.append("sacrifice "); sb.append("sacrifice ");
} else { } else {
sb.append(" sacrifice "); sb.append(" sacrifice ");
} }
} }
sb.append(CardUtil.numberToText(count.toString(), "a")).append(' '); sb.append(CardUtil.numberToText(count.toString(), "a")).append(' ');
sb.append(filter.getMessage()); sb.append(filter.getMessage());

View file

@ -24,13 +24,12 @@
* The views and conclusions contained in the software and documentation are those of the * 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 * authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com. * or implied, of BetaSteward_at_googlemail.com.
*/ */
package mage.abilities.effects.common; package mage.abilities.effects.common;
import mage.constants.Outcome;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.constants.Outcome;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
@ -41,22 +40,21 @@ import mage.game.permanent.Permanent;
public class UntapSourceEffect extends OneShotEffect { public class UntapSourceEffect extends OneShotEffect {
public UntapSourceEffect() { public UntapSourceEffect() {
super(Outcome.Untap); super(Outcome.Untap);
staticText = "untap {this}"; staticText = "untap {this}";
} }
public UntapSourceEffect(final UntapSourceEffect effect) { public UntapSourceEffect(final UntapSourceEffect effect) {
super(effect); super(effect);
} }
@Override @Override
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
Permanent permanent = game.getPermanent(source.getSourceId()); Permanent permanent = game.getPermanent(source.getSourceId());
if (permanent != null) { if (permanent != null) {
permanent.untap(game); permanent.untap(game);
return true;
} }
return false; return true;
} }
@Override @Override
@ -64,4 +62,4 @@ public class UntapSourceEffect extends OneShotEffect {
return new UntapSourceEffect(this); return new UntapSourceEffect(this);
} }
} }

View file

@ -123,7 +123,7 @@ public class AddCountersTargetEffect extends OneShotEffect {
return true; return true;
} }
} }
return affectedTargets > 0; return true;
} }
return false; return false;
} }

View file

@ -76,20 +76,19 @@ public class RemoveCounterTargetEffect extends OneShotEffect {
game.informPlayers("Removed " + toRemove.getCount() + ' ' + toRemove.getName() game.informPlayers("Removed " + toRemove.getCount() + ' ' + toRemove.getName()
+ " counter from " + p.getName()); + " counter from " + p.getName());
} }
return true; }
} else {
Card c = game.getCard(targetPointer.getFirst(game, source));
if (c != null && counter != null && c.getCounters(game).getCount(counter.getName()) >= counter.getCount()) {
c.removeCounters(counter.getName(), counter.getCount(), game);
if (!game.isSimulation()) {
game.informPlayers(new StringBuilder("Removed ").append(counter.getCount()).append(' ').append(counter.getName())
.append(" counter from ").append(c.getName())
.append(" (").append(c.getCounters(game).getCount(counter.getName())).append(" left)").toString());
}
} }
} }
Card c = game.getCard(targetPointer.getFirst(game, source)); return true;
if (c != null && counter != null && c.getCounters(game).getCount(counter.getName()) >= counter.getCount()) {
c.removeCounters(counter.getName(), counter.getCount(), game);
if (!game.isSimulation()) {
game.informPlayers(new StringBuilder("Removed ").append(counter.getCount()).append(' ').append(counter.getName())
.append(" counter from ").append(c.getName())
.append(" (").append(c.getCounters(game).getCount(counter.getName())).append(" left)").toString());
}
return true;
}
return false;
} }
private Counter selectCounterType(Game game, Ability source, Permanent permanent) { private Counter selectCounterType(Game game, Ability source, Permanent permanent) {

View file

@ -27,6 +27,7 @@
*/ */
package mage.abilities.keyword; package mage.abilities.keyword;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.SpellAbility; import mage.abilities.SpellAbility;
import mage.abilities.costs.Cost; import mage.abilities.costs.Cost;
@ -48,8 +49,6 @@ import mage.game.events.ZoneChangeEvent;
import mage.players.Player; import mage.players.Player;
import mage.target.targetpointer.FixedTarget; import mage.target.targetpointer.FixedTarget;
import java.util.UUID;
/** /**
* 702.32. Flashback * 702.32. Flashback
* *
@ -232,12 +231,10 @@ class FlashbackEffect extends OneShotEffect {
ContinuousEffect effect = new FlashbackReplacementEffect(); ContinuousEffect effect = new FlashbackReplacementEffect();
effect.setTargetPointer(new FixedTarget(source.getSourceId(), game.getState().getZoneChangeCounter(source.getSourceId()))); effect.setTargetPointer(new FixedTarget(source.getSourceId(), game.getState().getZoneChangeCounter(source.getSourceId())));
game.addEffect(effect, source); game.addEffect(effect, source);
return true;
} }
return false; return true;
} }
} }
return false; return false;
} }

View file

@ -1,18 +1,15 @@
package mage.constants; package mage.constants;
import mage.util.SubTypeList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import mage.util.SubTypeList;
public enum SubType { public enum SubType {
//205.3k Instants and sorceries share their lists of subtypes; these subtypes are called spell types. //205.3k Instants and sorceries share their lists of subtypes; these subtypes are called spell types.
ARCANE("Arcane", SubTypeSet.SpellType, false), ARCANE("Arcane", SubTypeSet.SpellType, false),
TRAP("Trap", SubTypeSet.SpellType, false), TRAP("Trap", SubTypeSet.SpellType, false),
// 205.3i: Lands have their own unique set of subtypes; these subtypes are called land types. // 205.3i: Lands have their own unique set of subtypes; these subtypes are called land types.
// Of that list, Forest, Island, Mountain, Plains, and Swamp are the basic land types. // Of that list, Forest, Island, Mountain, Plains, and Swamp are the basic land types.
FOREST("Forest", SubTypeSet.BasicLandType, false), FOREST("Forest", SubTypeSet.BasicLandType, false),
@ -28,27 +25,25 @@ public enum SubType {
MINE("Mine", SubTypeSet.NonBasicLandType, false), MINE("Mine", SubTypeSet.NonBasicLandType, false),
POWER_PLANT("Power-Plant", SubTypeSet.NonBasicLandType, false), POWER_PLANT("Power-Plant", SubTypeSet.NonBasicLandType, false),
TOWER("Tower", SubTypeSet.NonBasicLandType, false), TOWER("Tower", SubTypeSet.NonBasicLandType, false),
// 205.3h Enchantments have their own unique set of subtypes; these subtypes are called enchantment types. // 205.3h Enchantments have their own unique set of subtypes; these subtypes are called enchantment types.
AURA("Aura", SubTypeSet.EnchantmentType, false), AURA("Aura", SubTypeSet.EnchantmentType, false),
CARTOUCHE("Cartouche", SubTypeSet.EnchantmentType, false), CARTOUCHE("Cartouche", SubTypeSet.EnchantmentType, false),
CURSE("Curse", SubTypeSet.EnchantmentType, false), CURSE("Curse", SubTypeSet.EnchantmentType, false),
SHRINE("Shrine", SubTypeSet.EnchantmentType, false), SHRINE("Shrine", SubTypeSet.EnchantmentType, false),
// 205.3g: Artifacts have their own unique set of subtypes; these subtypes are called artifact types. // 205.3g: Artifacts have their own unique set of subtypes; these subtypes are called artifact types.
CLUE("Clue", SubTypeSet.ArtifactType, false), CLUE("Clue", SubTypeSet.ArtifactType, false),
CONTRAPTION("Contraption", SubTypeSet.ArtifactType, false), CONTRAPTION("Contraption", SubTypeSet.ArtifactType, false),
EQUIPMENT("Equipment", SubTypeSet.ArtifactType, false), EQUIPMENT("Equipment", SubTypeSet.ArtifactType, false),
FORTIFICATION("Fortification", SubTypeSet.ArtifactType, false), FORTIFICATION("Fortification", SubTypeSet.ArtifactType, false),
VEHICLE("Vehicle", SubTypeSet.ArtifactType, false), VEHICLE("Vehicle", SubTypeSet.ArtifactType, false),
// 205.3m : Creatures and tribals share their lists of subtypes; these subtypes are called creature types. // 205.3m : Creatures and tribals share their lists of subtypes; these subtypes are called creature types.
// A
ADVISOR("Advisor", SubTypeSet.CreatureType, false), ADVISOR("Advisor", SubTypeSet.CreatureType, false),
AETHERBORN("Aetherborn", SubTypeSet.CreatureType, false), AETHERBORN("Aetherborn", SubTypeSet.CreatureType, false),
ALLY("Ally", SubTypeSet.CreatureType, false), ALLY("Ally", SubTypeSet.CreatureType, false),
ANGEL("Angel", SubTypeSet.CreatureType, false), ANGEL("Angel", SubTypeSet.CreatureType, false),
ANTELOPE("Antelope", SubTypeSet.CreatureType, false), ANTELOPE("Antelope", SubTypeSet.CreatureType, false),
AQUALISH("Aqualish", SubTypeSet.CreatureType, true), // Star Wars AQUALISH("Aqualish", SubTypeSet.CreatureType, true), // Star Wars
APE("Ape", SubTypeSet.CreatureType, false), APE("Ape", SubTypeSet.CreatureType, false),
ARCONA("Arcona", SubTypeSet.CreatureType, true), ARCONA("Arcona", SubTypeSet.CreatureType, true),
ARCHER("Archer", SubTypeSet.CreatureType, false), ARCHER("Archer", SubTypeSet.CreatureType, false),
@ -61,7 +56,7 @@ public enum SubType {
ATAT("AT-AT", SubTypeSet.CreatureType, true), ATAT("AT-AT", SubTypeSet.CreatureType, true),
AUROCHS("Aurochs", SubTypeSet.CreatureType, false), AUROCHS("Aurochs", SubTypeSet.CreatureType, false),
AVATAR("Avatar", SubTypeSet.CreatureType, false), AVATAR("Avatar", SubTypeSet.CreatureType, false),
// B
BADGER("Badger", SubTypeSet.CreatureType, false), BADGER("Badger", SubTypeSet.CreatureType, false),
BARBARIAN("Barbarian", SubTypeSet.CreatureType, false), BARBARIAN("Barbarian", SubTypeSet.CreatureType, false),
BASILISK("Basilisk", SubTypeSet.CreatureType, false), BASILISK("Basilisk", SubTypeSet.CreatureType, false),
@ -71,20 +66,20 @@ public enum SubType {
BEEBLE("Beeble", SubTypeSet.CreatureType, false), BEEBLE("Beeble", SubTypeSet.CreatureType, false),
BERSERKER("Berserker", SubTypeSet.CreatureType, false), BERSERKER("Berserker", SubTypeSet.CreatureType, false),
BIRD("Bird", SubTypeSet.CreatureType, false), BIRD("Bird", SubTypeSet.CreatureType, false),
BITH("Bith", SubTypeSet.CreatureType, true), // Star Wars BITH("Bith", SubTypeSet.CreatureType, true), // Star Wars
BLINKMOTH("Blinkmoth", SubTypeSet.CreatureType, false), BLINKMOTH("Blinkmoth", SubTypeSet.CreatureType, false),
BOAR("Boar", SubTypeSet.CreatureType, false), BOAR("Boar", SubTypeSet.CreatureType, false),
BRINGER("Bringer", SubTypeSet.CreatureType, false), BRINGER("Bringer", SubTypeSet.CreatureType, false),
BRUSHWAGG("Brushwagg", SubTypeSet.CreatureType, false), BRUSHWAGG("Brushwagg", SubTypeSet.CreatureType, false),
// C
CALAMARI("Calamari", SubTypeSet.CreatureType, true), // Star Wars CALAMARI("Calamari", SubTypeSet.CreatureType, true), // Star Wars
CAMARID("Camarid", SubTypeSet.CreatureType, false), CAMARID("Camarid", SubTypeSet.CreatureType, false),
CAMEL("Camel", SubTypeSet.CreatureType, false), CAMEL("Camel", SubTypeSet.CreatureType, false),
CARIBOU("Caribou", SubTypeSet.CreatureType, false), CARIBOU("Caribou", SubTypeSet.CreatureType, false),
CARRIER("Carrier", SubTypeSet.CreatureType, false), CARRIER("Carrier", SubTypeSet.CreatureType, false),
CAT("Cat", SubTypeSet.CreatureType, false), CAT("Cat", SubTypeSet.CreatureType, false),
CENTAUR("Centaur", SubTypeSet.CreatureType, false), CENTAUR("Centaur", SubTypeSet.CreatureType, false),
CEREAN("Cerean", SubTypeSet.CreatureType, true), // Star Wars CEREAN("Cerean", SubTypeSet.CreatureType, true), // Star Wars
CEPHALID("Cephalid", SubTypeSet.CreatureType, false), CEPHALID("Cephalid", SubTypeSet.CreatureType, false),
CHIMERA("Chimera", SubTypeSet.CreatureType, false), CHIMERA("Chimera", SubTypeSet.CreatureType, false),
CHISS("Chiss", SubTypeSet.CreatureType, true), CHISS("Chiss", SubTypeSet.CreatureType, true),
@ -95,10 +90,10 @@ public enum SubType {
COWARD("Coward", SubTypeSet.CreatureType, false), COWARD("Coward", SubTypeSet.CreatureType, false),
CRAB("Crab", SubTypeSet.CreatureType, false), CRAB("Crab", SubTypeSet.CreatureType, false),
CROCODILE("Crocodile", SubTypeSet.CreatureType, false), CROCODILE("Crocodile", SubTypeSet.CreatureType, false),
CYBORG("Cyborg", SubTypeSet.CreatureType, true), // Star Wars CYBORG("Cyborg", SubTypeSet.CreatureType, true), // Star Wars
CYCLOPS("Cyclops", SubTypeSet.CreatureType, false), CYCLOPS("Cyclops", SubTypeSet.CreatureType, false),
// D
DATHOMIRIAN("Dathomirian", SubTypeSet.CreatureType, true), // Star Wars DATHOMIRIAN("Dathomirian", SubTypeSet.CreatureType, true), // Star Wars
DAUTHI("Dauthi", SubTypeSet.CreatureType, false), DAUTHI("Dauthi", SubTypeSet.CreatureType, false),
DEMON("Demon", SubTypeSet.CreatureType, false), DEMON("Demon", SubTypeSet.CreatureType, false),
DESERTER("Deserter", SubTypeSet.CreatureType, false), DESERTER("Deserter", SubTypeSet.CreatureType, false),
@ -109,10 +104,10 @@ public enum SubType {
DREADNOUGHT("Dreadnought", SubTypeSet.CreatureType, false), DREADNOUGHT("Dreadnought", SubTypeSet.CreatureType, false),
DRONE("Drone", SubTypeSet.CreatureType, false), DRONE("Drone", SubTypeSet.CreatureType, false),
DRUID("Druid", SubTypeSet.CreatureType, false), DRUID("Druid", SubTypeSet.CreatureType, false),
DROID("Droid", SubTypeSet.CreatureType, true), // Star Wars DROID("Droid", SubTypeSet.CreatureType, true), // Star Wars
DRYAD("Dryad", SubTypeSet.CreatureType, false), DRYAD("Dryad", SubTypeSet.CreatureType, false),
DWARF("Dwarf", SubTypeSet.CreatureType, false), DWARF("Dwarf", SubTypeSet.CreatureType, false),
// E
EFREET("Efreet", SubTypeSet.CreatureType, false), EFREET("Efreet", SubTypeSet.CreatureType, false),
ELDER("Elder", SubTypeSet.CreatureType, false), ELDER("Elder", SubTypeSet.CreatureType, false),
ELDRAZI("Eldrazi", SubTypeSet.CreatureType, false), ELDRAZI("Eldrazi", SubTypeSet.CreatureType, false),
@ -121,8 +116,8 @@ public enum SubType {
ELF("Elf", SubTypeSet.CreatureType, false), ELF("Elf", SubTypeSet.CreatureType, false),
ELK("Elk", SubTypeSet.CreatureType, false), ELK("Elk", SubTypeSet.CreatureType, false),
EYE("Eye", SubTypeSet.CreatureType, false), EYE("Eye", SubTypeSet.CreatureType, false),
EWOK("Ewok", SubTypeSet.CreatureType, true), // Star Wars EWOK("Ewok", SubTypeSet.CreatureType, true), // Star Wars
// F
FAERIE("Faerie", SubTypeSet.CreatureType, false), FAERIE("Faerie", SubTypeSet.CreatureType, false),
FERRET("Ferret", SubTypeSet.CreatureType, false), FERRET("Ferret", SubTypeSet.CreatureType, false),
FISH("Fish", SubTypeSet.CreatureType, false), FISH("Fish", SubTypeSet.CreatureType, false),
@ -130,9 +125,9 @@ public enum SubType {
FOX("Fox", SubTypeSet.CreatureType, false), FOX("Fox", SubTypeSet.CreatureType, false),
FROG("Frog", SubTypeSet.CreatureType, false), FROG("Frog", SubTypeSet.CreatureType, false),
FUNGUS("Fungus", SubTypeSet.CreatureType, false), FUNGUS("Fungus", SubTypeSet.CreatureType, false),
// G
GAMORREAN("Gamorrean", SubTypeSet.CreatureType, true), // Star Wars GAMORREAN("Gamorrean", SubTypeSet.CreatureType, true), // Star Wars
GAND("Gand", SubTypeSet.CreatureType, true), // Star Wars GAND("Gand", SubTypeSet.CreatureType, true), // Star Wars
GARGOYLE("Gargoyle", SubTypeSet.CreatureType, false), GARGOYLE("Gargoyle", SubTypeSet.CreatureType, false),
GERM("Germ", SubTypeSet.CreatureType, false), GERM("Germ", SubTypeSet.CreatureType, false),
GIANT("Giant", SubTypeSet.CreatureType, false), GIANT("Giant", SubTypeSet.CreatureType, false),
@ -145,8 +140,8 @@ public enum SubType {
GRAVEBORN("Graveborn", SubTypeSet.CreatureType, false), GRAVEBORN("Graveborn", SubTypeSet.CreatureType, false),
GREMLIN("Gremlin", SubTypeSet.CreatureType, false), GREMLIN("Gremlin", SubTypeSet.CreatureType, false),
GRIFFIN("Griffin", SubTypeSet.CreatureType, false), GRIFFIN("Griffin", SubTypeSet.CreatureType, false),
GUNGAN("Gungan", SubTypeSet.CreatureType, true), // Star Wars GUNGAN("Gungan", SubTypeSet.CreatureType, true), // Star Wars
// H
HAG("Hag", SubTypeSet.CreatureType, false), HAG("Hag", SubTypeSet.CreatureType, false),
HARPY("Harpy", SubTypeSet.CreatureType, false), HARPY("Harpy", SubTypeSet.CreatureType, false),
HELLION("Hellion", SubTypeSet.CreatureType, false), HELLION("Hellion", SubTypeSet.CreatureType, false),
@ -159,23 +154,23 @@ public enum SubType {
HOUND("Hound", SubTypeSet.CreatureType, false), HOUND("Hound", SubTypeSet.CreatureType, false),
HUMAN("Human", SubTypeSet.CreatureType, false), HUMAN("Human", SubTypeSet.CreatureType, false),
HUNTER("Hunter", SubTypeSet.CreatureType, false), HUNTER("Hunter", SubTypeSet.CreatureType, false),
HUTT("Hutt", SubTypeSet.CreatureType, true), // Star Wars HUTT("Hutt", SubTypeSet.CreatureType, true), // Star Wars
HYDRA("Hydra", SubTypeSet.CreatureType, false), HYDRA("Hydra", SubTypeSet.CreatureType, false),
HYENA("Hyena", SubTypeSet.CreatureType, false), HYENA("Hyena", SubTypeSet.CreatureType, false),
// I
ILLUSION("Illusion", SubTypeSet.CreatureType, false), ILLUSION("Illusion", SubTypeSet.CreatureType, false),
IMP("Imp", SubTypeSet.CreatureType, false), IMP("Imp", SubTypeSet.CreatureType, false),
INCARNATION("Incarnation", SubTypeSet.CreatureType, false), INCARNATION("Incarnation", SubTypeSet.CreatureType, false),
INSECT("Insect", SubTypeSet.CreatureType, false), INSECT("Insect", SubTypeSet.CreatureType, false),
ITHORIAN("Ithorian", SubTypeSet.CreatureType, true), // Star Wars ITHORIAN("Ithorian", SubTypeSet.CreatureType, true), // Star Wars
// J
JACKAL("Jackal", SubTypeSet.CreatureType, false), JACKAL("Jackal", SubTypeSet.CreatureType, false),
JAWA("Jawa", SubTypeSet.CreatureType, true), JAWA("Jawa", SubTypeSet.CreatureType, true),
JEDI("Jedi", SubTypeSet.CreatureType, true), // Star Wars JEDI("Jedi", SubTypeSet.CreatureType, true), // Star Wars
JELLYFISH("Jellyfish", SubTypeSet.CreatureType, false), JELLYFISH("Jellyfish", SubTypeSet.CreatureType, false),
JUGGERNAUT("Juggernaut", SubTypeSet.CreatureType, false), JUGGERNAUT("Juggernaut", SubTypeSet.CreatureType, false),
// K
KALEESH("Kaleesh", SubTypeSet.CreatureType, true), // Star Wars KALEESH("Kaleesh", SubTypeSet.CreatureType, true), // Star Wars
KAVU("Kavu", SubTypeSet.CreatureType, false), KAVU("Kavu", SubTypeSet.CreatureType, false),
KELDOR("KelDor", SubTypeSet.CreatureType, true), KELDOR("KelDor", SubTypeSet.CreatureType, true),
KIRIN("Kirin", SubTypeSet.CreatureType, false), KIRIN("Kirin", SubTypeSet.CreatureType, false),
@ -185,7 +180,7 @@ public enum SubType {
KOORIVAR("Koorivar", SubTypeSet.CreatureType, true), KOORIVAR("Koorivar", SubTypeSet.CreatureType, true),
KOR("Kor", SubTypeSet.CreatureType, false), KOR("Kor", SubTypeSet.CreatureType, false),
KRAKEN("Kraken", SubTypeSet.CreatureType, false), KRAKEN("Kraken", SubTypeSet.CreatureType, false),
// L
LAMIA("Lamia", SubTypeSet.CreatureType, false), LAMIA("Lamia", SubTypeSet.CreatureType, false),
LAMMASU("Lammasu", SubTypeSet.CreatureType, false), LAMMASU("Lammasu", SubTypeSet.CreatureType, false),
LEECH("Leech", SubTypeSet.CreatureType, false), LEECH("Leech", SubTypeSet.CreatureType, false),
@ -193,9 +188,8 @@ public enum SubType {
LHURGOYF("Lhurgoyf", SubTypeSet.CreatureType, false), LHURGOYF("Lhurgoyf", SubTypeSet.CreatureType, false),
LICID("Licid", SubTypeSet.CreatureType, false), LICID("Licid", SubTypeSet.CreatureType, false),
LIZARD("Lizard", SubTypeSet.CreatureType, false), LIZARD("Lizard", SubTypeSet.CreatureType, false),
// M
MANTELLIAN("Mantellian", SubTypeSet.CreatureType, true), // Star Wars
MANTELLIAN("Mantellian", SubTypeSet.CreatureType, true), // Star Wars
MANTICORE("Manticore", SubTypeSet.CreatureType, false), MANTICORE("Manticore", SubTypeSet.CreatureType, false),
MASTICORE("Masticore", SubTypeSet.CreatureType, false), MASTICORE("Masticore", SubTypeSet.CreatureType, false),
MERCENARY("Mercenary", SubTypeSet.CreatureType, false), MERCENARY("Mercenary", SubTypeSet.CreatureType, false),
@ -203,7 +197,7 @@ MANTELLIAN("Mantellian", SubTypeSet.CreatureType, true), // Star Wars
METATHRAN("Metathran", SubTypeSet.CreatureType, false), METATHRAN("Metathran", SubTypeSet.CreatureType, false),
MINION("Minion", SubTypeSet.CreatureType, false), MINION("Minion", SubTypeSet.CreatureType, false),
MINOTAUR("Minotaur", SubTypeSet.CreatureType, false), MINOTAUR("Minotaur", SubTypeSet.CreatureType, false),
MIRIALAN("Mirialan", SubTypeSet.CreatureType, true), // Star Wars MIRIALAN("Mirialan", SubTypeSet.CreatureType, true), // Star Wars
MOLE("Mole", SubTypeSet.CreatureType, false), MOLE("Mole", SubTypeSet.CreatureType, false),
MONGER("Monger", SubTypeSet.CreatureType, false), MONGER("Monger", SubTypeSet.CreatureType, false),
MONGOOSE("Mongoose", SubTypeSet.CreatureType, false), MONGOOSE("Mongoose", SubTypeSet.CreatureType, false),
@ -213,12 +207,11 @@ MANTELLIAN("Mantellian", SubTypeSet.CreatureType, true), // Star Wars
MUTANT("Mutant", SubTypeSet.CreatureType, false), MUTANT("Mutant", SubTypeSet.CreatureType, false),
MYR("Myr", SubTypeSet.CreatureType, false), MYR("Myr", SubTypeSet.CreatureType, false),
MYSTIC("Mystic", SubTypeSet.CreatureType, false), MYSTIC("Mystic", SubTypeSet.CreatureType, false),
// N
NAGA("Naga", SubTypeSet.CreatureType, false), NAGA("Naga", SubTypeSet.CreatureType, false),
NAUTILUS("Nautilus", SubTypeSet.CreatureType, false), NAUTILUS("Nautilus", SubTypeSet.CreatureType, false),
NAUTOLAN("Nautolan", SubTypeSet.CreatureType, true), // Star Wars NAUTOLAN("Nautolan", SubTypeSet.CreatureType, true), // Star Wars
NEIMOIDIAN("Neimoidian", SubTypeSet.CreatureType, true), // Star Wars NEIMOIDIAN("Neimoidian", SubTypeSet.CreatureType, true), // Star Wars
NEPHILIM("Nephilim", SubTypeSet.CreatureType, false), NEPHILIM("Nephilim", SubTypeSet.CreatureType, false),
NIGHTMARE("Nightmare", SubTypeSet.CreatureType, false), NIGHTMARE("Nightmare", SubTypeSet.CreatureType, false),
NIGHTSTALKER("Nightstalker", SubTypeSet.CreatureType, false), NIGHTSTALKER("Nightstalker", SubTypeSet.CreatureType, false),
@ -226,7 +219,7 @@ MANTELLIAN("Mantellian", SubTypeSet.CreatureType, true), // Star Wars
NOGGLE("Noggle", SubTypeSet.CreatureType, false), NOGGLE("Noggle", SubTypeSet.CreatureType, false),
NOMAD("Nomad", SubTypeSet.CreatureType, false), NOMAD("Nomad", SubTypeSet.CreatureType, false),
NYMPH("Nymph", SubTypeSet.CreatureType, false), NYMPH("Nymph", SubTypeSet.CreatureType, false),
// O
OCTOPUS("Octopus", SubTypeSet.CreatureType, false), OCTOPUS("Octopus", SubTypeSet.CreatureType, false),
OGRE("Ogre", SubTypeSet.CreatureType, false), OGRE("Ogre", SubTypeSet.CreatureType, false),
OOZE("Ooze", SubTypeSet.CreatureType, false), OOZE("Ooze", SubTypeSet.CreatureType, false),
@ -237,7 +230,7 @@ MANTELLIAN("Mantellian", SubTypeSet.CreatureType, true), // Star Wars
OUPHE("Ouphe", SubTypeSet.CreatureType, false), OUPHE("Ouphe", SubTypeSet.CreatureType, false),
OX("Ox", SubTypeSet.CreatureType, false), OX("Ox", SubTypeSet.CreatureType, false),
OYSTER("Oyster", SubTypeSet.CreatureType, false), OYSTER("Oyster", SubTypeSet.CreatureType, false),
// P
PEGASUS("Pegasus", SubTypeSet.CreatureType, false), PEGASUS("Pegasus", SubTypeSet.CreatureType, false),
PENTAVITE("Pentavite", SubTypeSet.CreatureType, false), PENTAVITE("Pentavite", SubTypeSet.CreatureType, false),
PEST("Pest", SubTypeSet.CreatureType, false), PEST("Pest", SubTypeSet.CreatureType, false),
@ -251,19 +244,18 @@ MANTELLIAN("Mantellian", SubTypeSet.CreatureType, true), // Star Wars
PRISM("Prism", SubTypeSet.CreatureType, false), PRISM("Prism", SubTypeSet.CreatureType, false),
PROCESSOR("Processor", SubTypeSet.CreatureType, false), PROCESSOR("Processor", SubTypeSet.CreatureType, false),
PUREBLOOD("Pureblood", SubTypeSet.CreatureType, true), PUREBLOOD("Pureblood", SubTypeSet.CreatureType, true),
// Q
QUARREN("Quarren", SubTypeSet.CreatureType, true), // Star Wars QUARREN("Quarren", SubTypeSet.CreatureType, true), // Star Wars
// R
RABBIT("Rabbit", SubTypeSet.CreatureType, false), RABBIT("Rabbit", SubTypeSet.CreatureType, false),
RAT("Rat", SubTypeSet.CreatureType, false), RAT("Rat", SubTypeSet.CreatureType, false),
REBEL("Rebel", SubTypeSet.CreatureType, false), REBEL("Rebel", SubTypeSet.CreatureType, false),
REFLECTION("Reflection", SubTypeSet.CreatureType, false), REFLECTION("Reflection", SubTypeSet.CreatureType, false),
RHINO("Rhino", SubTypeSet.CreatureType, false), RHINO("Rhino", SubTypeSet.CreatureType, false),
RIGGER("Rigger", SubTypeSet.CreatureType, false), RIGGER("Rigger", SubTypeSet.CreatureType, false),
RODIAN("Rodian", SubTypeSet.CreatureType, true), // Star Wars RODIAN("Rodian", SubTypeSet.CreatureType, true), // Star Wars
ROGUE("Rogue", SubTypeSet.CreatureType, false), ROGUE("Rogue", SubTypeSet.CreatureType, false),
// S
SABLE("Sable", SubTypeSet.CreatureType, false), SABLE("Sable", SubTypeSet.CreatureType, false),
SALAMANDER("Salamander", SubTypeSet.CreatureType, false), SALAMANDER("Salamander", SubTypeSet.CreatureType, false),
SAMURAI("Samurai", SubTypeSet.CreatureType, false), SAMURAI("Samurai", SubTypeSet.CreatureType, false),
@ -302,31 +294,32 @@ MANTELLIAN("Mantellian", SubTypeSet.CreatureType, true), // Star Wars
SQUID("Squid", SubTypeSet.CreatureType, false), SQUID("Squid", SubTypeSet.CreatureType, false),
SQUIRREL("Squirrel", SubTypeSet.CreatureType, false), SQUIRREL("Squirrel", SubTypeSet.CreatureType, false),
STARFISH("Starfish", SubTypeSet.CreatureType, false), STARFISH("Starfish", SubTypeSet.CreatureType, false),
STARSHIP("Starship", SubTypeSet.CreatureType, true), // Star Wars STARSHIP("Starship", SubTypeSet.CreatureType, true), // Star Wars
SULLUSTAN("Sullustan", SubTypeSet.CreatureType, true), // Star Wars SULLUSTAN("Sullustan", SubTypeSet.CreatureType, true), // Star Wars
SURRAKAR("Surrakar", SubTypeSet.CreatureType, false), SURRAKAR("Surrakar", SubTypeSet.CreatureType, false),
SURVIVOR("Survivor", SubTypeSet.CreatureType, false), SURVIVOR("Survivor", SubTypeSet.CreatureType, false),
// T
TETRAVITE("Tetravite", SubTypeSet.CreatureType, false), TETRAVITE("Tetravite", SubTypeSet.CreatureType, false),
THALAKOS("Thalakos", SubTypeSet.CreatureType, false), THALAKOS("Thalakos", SubTypeSet.CreatureType, false),
THOPTER("Thopter", SubTypeSet.CreatureType, false), THOPTER("Thopter", SubTypeSet.CreatureType, false),
TRANDOSHAN("Trandoshan", SubTypeSet.CreatureType, true), // Star Wars TRANDOSHAN("Trandoshan", SubTypeSet.CreatureType, true), // Star Wars
THRULL("Thrull", SubTypeSet.CreatureType, false), THRULL("Thrull", SubTypeSet.CreatureType, false),
TREEFOLK("Treefolk", SubTypeSet.CreatureType, false), TREEFOLK("Treefolk", SubTypeSet.CreatureType, false),
TRISKELAVITE("Triskelavite", SubTypeSet.CreatureType, false), TRISKELAVITE("Triskelavite", SubTypeSet.CreatureType, false),
TROLL("Troll", SubTypeSet.CreatureType, false), TROLL("Troll", SubTypeSet.CreatureType, false),
TURTLE("Turtle", SubTypeSet.CreatureType, false), TURTLE("Turtle", SubTypeSet.CreatureType, false),
TROOPER("Trooper", SubTypeSet.CreatureType, true), // Star Wars
TWILEK("Twi'lek", SubTypeSet.CreatureType, true), // Star Wars
TROOPER("Trooper", SubTypeSet.CreatureType, true), // Star Wars // U
TWILEK("Twi'lek", SubTypeSet.CreatureType, true), // Star Wars UGNAUGHT("Ugnaught", SubTypeSet.CreatureType, true),
UGNAUGHT("Ugnaught",SubTypeSet.CreatureType, true),
UNICORN("Unicorn", SubTypeSet.CreatureType, false), UNICORN("Unicorn", SubTypeSet.CreatureType, false),
//V
VAMPIRE("Vampire", SubTypeSet.CreatureType, false), VAMPIRE("Vampire", SubTypeSet.CreatureType, false),
VEDALKEN("Vedalken", SubTypeSet.CreatureType, false), VEDALKEN("Vedalken", SubTypeSet.CreatureType, false),
VIASHINO("Viashino", SubTypeSet.CreatureType, false), VIASHINO("Viashino", SubTypeSet.CreatureType, false),
VOLVER("Volver", SubTypeSet.CreatureType, false), VOLVER("Volver", SubTypeSet.CreatureType, false),
//W
WALL("Wall", SubTypeSet.CreatureType, false), WALL("Wall", SubTypeSet.CreatureType, false),
WARRIOR("Warrior", SubTypeSet.CreatureType, false), WARRIOR("Warrior", SubTypeSet.CreatureType, false),
WEEQUAY("Weequay", SubTypeSet.CreatureType, true), WEEQUAY("Weequay", SubTypeSet.CreatureType, true),
@ -337,27 +330,27 @@ MANTELLIAN("Mantellian", SubTypeSet.CreatureType, true), // Star Wars
WOLF("Wolf", SubTypeSet.CreatureType, false), WOLF("Wolf", SubTypeSet.CreatureType, false),
WOLVERINE("Wolverine", SubTypeSet.CreatureType, false), WOLVERINE("Wolverine", SubTypeSet.CreatureType, false),
WOMBAT("Wombat", SubTypeSet.CreatureType, false), WOMBAT("Wombat", SubTypeSet.CreatureType, false),
WOOKIEE("Wookiee", SubTypeSet.CreatureType, true), // Star Wars WOOKIEE("Wookiee", SubTypeSet.CreatureType, true), // Star Wars
WORM("Worm", SubTypeSet.CreatureType, false), WORM("Worm", SubTypeSet.CreatureType, false),
WRAITH("Wraith", SubTypeSet.CreatureType, false), WRAITH("Wraith", SubTypeSet.CreatureType, false),
WURM("Wurm", SubTypeSet.CreatureType, false), WURM("Wurm", SubTypeSet.CreatureType, false),
// Y
YETI("Yeti", SubTypeSet.CreatureType, false), YETI("Yeti", SubTypeSet.CreatureType, false),
// Z
ZABRAK("Zabrak", SubTypeSet.CreatureType, true), // Star Wars ZABRAK("Zabrak", SubTypeSet.CreatureType, true), // Star Wars
ZOMBIE("Zombie", SubTypeSet.CreatureType, false), ZOMBIE("Zombie", SubTypeSet.CreatureType, false),
ZUBERA("Zubera", SubTypeSet.CreatureType, false), ZUBERA("Zubera", SubTypeSet.CreatureType, false),
// Planeswalker
AJANI("Ajani", SubTypeSet.PlaneswalkerType, false), AJANI("Ajani", SubTypeSet.PlaneswalkerType, false),
ARLINN("Arlinn", SubTypeSet.PlaneswalkerType, false), ARLINN("Arlinn", SubTypeSet.PlaneswalkerType, false),
ASHIOK("Ashiok", SubTypeSet.PlaneswalkerType, false), ASHIOK("Ashiok", SubTypeSet.PlaneswalkerType, false),
AURRA("Aurra", SubTypeSet.PlaneswalkerType, true), // Star Wars AURRA("Aurra", SubTypeSet.PlaneswalkerType, true), // Star Wars
BOLAS("Bolas", SubTypeSet.PlaneswalkerType, false), BOLAS("Bolas", SubTypeSet.PlaneswalkerType, false),
CHANDRA("Chandra", SubTypeSet.PlaneswalkerType, false), CHANDRA("Chandra", SubTypeSet.PlaneswalkerType, false),
DACK("Dack", SubTypeSet.PlaneswalkerType, false), DACK("Dack", SubTypeSet.PlaneswalkerType, false),
DARETTI("Daretti", SubTypeSet.PlaneswalkerType, false), DARETTI("Daretti", SubTypeSet.PlaneswalkerType, false),
DOMRI("Domri", SubTypeSet.PlaneswalkerType, false), DOMRI("Domri", SubTypeSet.PlaneswalkerType, false),
DOOKU("Dooku", SubTypeSet.PlaneswalkerType, true), // Star Wars DOOKU("Dooku", SubTypeSet.PlaneswalkerType, true), // Star Wars
DOVIN("Dovin", SubTypeSet.PlaneswalkerType, false), DOVIN("Dovin", SubTypeSet.PlaneswalkerType, false),
ELSPETH("Elspeth", SubTypeSet.PlaneswalkerType, false), ELSPETH("Elspeth", SubTypeSet.PlaneswalkerType, false),
FREYALISE("Freyalise", SubTypeSet.PlaneswalkerType, false), FREYALISE("Freyalise", SubTypeSet.PlaneswalkerType, false),
@ -373,12 +366,12 @@ MANTELLIAN("Mantellian", SubTypeSet.CreatureType, true), // Star Wars
NARSET("Narset", SubTypeSet.PlaneswalkerType, false), NARSET("Narset", SubTypeSet.PlaneswalkerType, false),
NISSA("Nissa", SubTypeSet.PlaneswalkerType, false), NISSA("Nissa", SubTypeSet.PlaneswalkerType, false),
NIXILIS("Nixilis", SubTypeSet.PlaneswalkerType, false), NIXILIS("Nixilis", SubTypeSet.PlaneswalkerType, false),
OBI_WAN("Obi-Wan", SubTypeSet.PlaneswalkerType, true), // Star Wars OBI_WAN("Obi-Wan", SubTypeSet.PlaneswalkerType, true), // Star Wars
RAL("Ral", SubTypeSet.PlaneswalkerType, false), RAL("Ral", SubTypeSet.PlaneswalkerType, false),
SAHEELI("Saheeli", SubTypeSet.PlaneswalkerType, false), SAHEELI("Saheeli", SubTypeSet.PlaneswalkerType, false),
SAMUT("Samut", SubTypeSet.PlaneswalkerType, false), SAMUT("Samut", SubTypeSet.PlaneswalkerType, false),
SARKHAN("Sarkhan", SubTypeSet.PlaneswalkerType, false), SARKHAN("Sarkhan", SubTypeSet.PlaneswalkerType, false),
SIDIOUS("Sidious", SubTypeSet.PlaneswalkerType, true), // Star Wars SIDIOUS("Sidious", SubTypeSet.PlaneswalkerType, true), // Star Wars
SORIN("Sorin", SubTypeSet.PlaneswalkerType, false), SORIN("Sorin", SubTypeSet.PlaneswalkerType, false),
TAMIYO("Tamiyo", SubTypeSet.PlaneswalkerType, false), TAMIYO("Tamiyo", SubTypeSet.PlaneswalkerType, false),
TEFERI("Teferi", SubTypeSet.PlaneswalkerType, false), TEFERI("Teferi", SubTypeSet.PlaneswalkerType, false),
@ -388,7 +381,7 @@ MANTELLIAN("Mantellian", SubTypeSet.CreatureType, true), // Star Wars
VENSER("Venser", SubTypeSet.PlaneswalkerType, false), VENSER("Venser", SubTypeSet.PlaneswalkerType, false),
VRASKA("Vraska", SubTypeSet.PlaneswalkerType, false), VRASKA("Vraska", SubTypeSet.PlaneswalkerType, false),
XENAGOS("Xenagos", SubTypeSet.PlaneswalkerType, false), XENAGOS("Xenagos", SubTypeSet.PlaneswalkerType, false),
YODA("Yoda", SubTypeSet.PlaneswalkerType, true); YODA("Yoda", SubTypeSet.PlaneswalkerType, true); // Star Wars
private final SubTypeSet subTypeSet; private final SubTypeSet subTypeSet;
@ -448,4 +441,3 @@ MANTELLIAN("Mantellian", SubTypeSet.CreatureType, true), // Star Wars
return landTypes; return landTypes;
} }
} }