Merge pull request #2690 from Styxo/master

StarWars update
This commit is contained in:
LevelX2 2016-12-16 22:42:27 +01:00 committed by GitHub
commit e31897f9b6
90 changed files with 1460 additions and 1141 deletions

View file

@ -31,7 +31,7 @@ import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.TriggeredAbilityImpl; import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.Effect; import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DoIfCostPaid; import mage.abilities.effects.common.DoIfCostPaid;
import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.GainLifeEffect;
@ -53,14 +53,14 @@ import mage.target.TargetPlayer;
public class AAT1 extends CardImpl { public class AAT1 extends CardImpl {
public AAT1(UUID ownerId, CardSetInfo setInfo) { public AAT1(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{1}{W}{U}{B}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{1}{W}{U}{B}");
this.subtype.add("Droid"); this.subtype.add("Droid");
this.subtype.add("Construct"); this.subtype.add("Construct");
this.power = new MageInt(4); this.power = new MageInt(4);
this.toughness = new MageInt(4); this.toughness = new MageInt(4);
// Whenever a repair counter is removed from a creature card your graveyard, you may pay {1}. If you do, target player loses 1 life and you gain 1 life. // Whenever a repair counter is removed from a creature card your graveyard, you may pay {W/B}. If you do, target player loses 1 life and you gain 1 life.
DoIfCostPaid effect = new DoIfCostPaid(new LoseLifeTargetEffect(1), new GenericManaCost(1)); DoIfCostPaid effect = new DoIfCostPaid(new LoseLifeTargetEffect(1), new ManaCostsImpl("{W/B}"));
Effect additionalEffect = new GainLifeEffect(1); Effect additionalEffect = new GainLifeEffect(1);
additionalEffect.setText("and you gain 1 life"); additionalEffect.setText("and you gain 1 life");
effect.addEffect(additionalEffect); effect.addEffect(additionalEffect);

View file

@ -52,9 +52,9 @@ public class ATST extends CardImpl {
} }
public ATST(UUID ownerId, CardSetInfo setInfo) { public ATST(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{5}{G}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{5}{G}");
this.subtype.add("Human");
this.subtype.add("Trooper"); this.subtype.add("Trooper");
this.subtype.add("Construct");
this.power = new MageInt(3); this.power = new MageInt(3);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);

View file

@ -69,7 +69,7 @@ public class AnakinSkywalker extends CardImpl {
} }
public AnakinSkywalker(UUID ownerId, CardSetInfo setInfo) { public AnakinSkywalker(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{U}{B}{R}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}{B}{R}");
this.supertype.add("Legendary"); this.supertype.add("Legendary");
this.subtype.add("Human"); this.subtype.add("Human");
this.subtype.add("Sith"); this.subtype.add("Sith");
@ -87,7 +87,7 @@ public class AnakinSkywalker extends CardImpl {
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability); this.addAbility(ability);
// If Anakin Skywalker would die, regenerate and transform him instead. // If Anakin Skywalker would be destroyed, regenerate, then transform him instead.
this.addAbility(new TransformAbility()); this.addAbility(new TransformAbility());
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new AnakinSkywalkerEffect())); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new AnakinSkywalkerEffect()));

View file

@ -0,0 +1,81 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.cards.a;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.abilities.keyword.RepairAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.CardTypePredicate;
import mage.target.common.TargetCreaturePermanent;
/**
*
* @author Styxo
*/
public class ArmedProtocolDroid extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("nonartifact creature");
static {
filter.add(Predicates.not(new CardTypePredicate(CardType.ARTIFACT)));
}
public ArmedProtocolDroid(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{1}{U}");
this.subtype.add("Droid");
this.subtype.add("Rogue");
this.power = new MageInt(1);
this.toughness = new MageInt(3);
// When {this} enters the battlefield, target nonartifact creature gets -2/-0 until end of turn.
Ability ability = new EntersBattlefieldTriggeredAbility(new BoostTargetEffect(-2, 0, Duration.EndOfTurn), false);
ability.addTarget(new TargetCreaturePermanent(filter));
this.addAbility(ability);
// Repair 3
this.addAbility(new RepairAbility(3));
}
public ArmedProtocolDroid(final ArmedProtocolDroid card) {
super(card);
}
@Override
public ArmedProtocolDroid copy() {
return new ArmedProtocolDroid(this);
}
}

View file

@ -27,7 +27,6 @@
*/ */
package mage.cards.a; package mage.cards.a;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
@ -44,8 +43,6 @@ import mage.abilities.effects.common.discard.DiscardControllerEffect;
import mage.abilities.effects.common.discard.DiscardHandAllEffect; import mage.abilities.effects.common.discard.DiscardHandAllEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.choices.Choice;
import mage.choices.ChoiceImpl;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.TargetController; import mage.constants.TargetController;
@ -68,14 +65,14 @@ import mage.target.common.TargetCreaturePermanent;
public class AurraSingBaneOfJedi extends CardImpl { public class AurraSingBaneOfJedi extends CardImpl {
public AurraSingBaneOfJedi(UUID ownerId, CardSetInfo setInfo) { public AurraSingBaneOfJedi(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{2}{B}{R}"); super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{B}{R}");
this.subtype.add("Aurra"); this.subtype.add("Aurra");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(3)); this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(3));
// +1:Aurra Sing deals 2 damage to target creature or 1 damage to you. // +1:You may have {this} deal 2 damage to target creature. If you don't, {this} deals 1 damage to you.
Ability ability = new LoyaltyAbility(new AurraSingBaneOfJediEffect(), +1); Ability ability = new LoyaltyAbility(new AurraSingBaneOfJediEffect(), +1);
ability.addTarget(new TargetCreaturePermanent(1)); ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability); this.addAbility(ability);
// -4:Target player gets an emblem wiht "Whenever a nontoken creature you control leave the battlefied, discard a card.". // -4:Target player gets an emblem wiht "Whenever a nontoken creature you control leave the battlefied, discard a card.".
@ -103,16 +100,9 @@ public class AurraSingBaneOfJedi extends CardImpl {
class AurraSingBaneOfJediEffect extends OneShotEffect { class AurraSingBaneOfJediEffect extends OneShotEffect {
private static final HashSet<String> choices = new HashSet<>();
static {
choices.add("Deal 2 damage to target creature");
choices.add("Deal 1 damage to you");
}
public AurraSingBaneOfJediEffect() { public AurraSingBaneOfJediEffect() {
super(Outcome.Damage); super(Outcome.Damage);
staticText = "{this} deals 2 damage to target creature or 1 damage to you"; staticText = "You may have {this} deal 2 damage to target creature. If you don't, {this} deals 1 damage to you";
} }
public AurraSingBaneOfJediEffect(final AurraSingBaneOfJediEffect effect) { public AurraSingBaneOfJediEffect(final AurraSingBaneOfJediEffect effect) {
@ -128,23 +118,10 @@ class AurraSingBaneOfJediEffect extends OneShotEffect {
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) {
Choice choice = new ChoiceImpl(true); if (controller.chooseUse(outcome, "Deal 2 damage to " + game.getPermanent(getTargetPointer().getFirst(game, source)).getName() + "?", source, game)) {
choice.setMessage("Choose mode"); new DamageTargetEffect(2).apply(game, source);
choice.setChoices(choices); } else {
while (!controller.choose(outcome, choice, game)) { new DamageControllerEffect(1).apply(game, source);
if (!controller.canRespond()) {
return false;
}
}
String chosen = choice.getChoice();
switch (chosen) {
case "Deal 2 damage to target creature":
new DamageTargetEffect(2).apply(game, source);
break;
default: //"Deal 1 damage to you"
new DamageControllerEffect(1).apply(game, source);
break;
} }
return true; return true;
} }

View file

@ -49,13 +49,13 @@ import mage.players.Player;
public class BanthaHerd extends CardImpl { public class BanthaHerd extends CardImpl {
public BanthaHerd(UUID ownerId, CardSetInfo setInfo) { public BanthaHerd(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}{W}");
this.subtype.add("Beast"); this.subtype.add("Beast");
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// {X}{1}{W}{W}: Monstrosity X. // {X}{W}{W}: Monstrosity X.
this.addAbility(new MonstrosityAbility("{X}{1}{W}{W}", Integer.MAX_VALUE)); this.addAbility(new MonstrosityAbility("{X}{W}{W}", Integer.MAX_VALUE));
// When Batha Herd becomes monstrous, create X 1/1 white Tusken Raider tokens. // When Batha Herd becomes monstrous, create X 1/1 white Tusken Raider tokens.
this.addAbility(new BecomesMonstrousSourceTriggeredAbility(new BathaHerdEffect())); this.addAbility(new BecomesMonstrousSourceTriggeredAbility(new BathaHerdEffect()));

View file

@ -31,7 +31,7 @@ import java.util.UUID;
import mage.abilities.effects.Effect; import mage.abilities.effects.Effect;
import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.effects.common.continuous.BoostControlledEffect;
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
import mage.abilities.keyword.VigilanceAbility; import mage.abilities.keyword.LifelinkAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -44,14 +44,14 @@ import mage.constants.Duration;
public class BattleTactics extends CardImpl { public class BattleTactics extends CardImpl {
public BattleTactics(UUID ownerId, CardSetInfo setInfo) { public BattleTactics(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{W}{W}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{W}{W}");
// Creatures you control get +2/+1 and gain vigilance until end of turn. // Creatures you control get +2/+1 and gain lifelink until end of turn.
Effect effect = new BoostControlledEffect(2, 1, Duration.EndOfTurn); Effect effect = new BoostControlledEffect(2, 1, Duration.EndOfTurn);
effect.setText("Creatures you control get +2/+1"); effect.setText("Creatures you control get +2/+1");
this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(effect);
effect = new GainAbilityControlledEffect(VigilanceAbility.getInstance(), Duration.EndOfTurn); effect = new GainAbilityControlledEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn);
effect.setText("and gain vigilance until end of turn"); effect.setText("and gain lifelink until end of turn");
this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(effect);
} }

View file

@ -47,12 +47,12 @@ import mage.target.common.TargetCardInLibrary;
public class BibFortuna extends CardImpl { public class BibFortuna extends CardImpl {
public BibFortuna(UUID ownerId, CardSetInfo setInfo) { public BibFortuna(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}");
this.supertype.add("Legendary"); this.supertype.add("Legendary");
this.subtype.add("Twi'lek"); this.subtype.add("Twi'lek");
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(1);
// When Bib Fortuna enters the battlefield search your library for a card then shuffle your library and put in on top. You lose 1 life. // When Bib Fortuna enters the battlefield search your library for a card then shuffle your library and put in on top. You lose 1 life.
Ability ability = new EntersBattlefieldTriggeredAbility(new SearchLibraryPutOnLibraryEffect(new TargetCardInLibrary()), false); Ability ability = new EntersBattlefieldTriggeredAbility(new SearchLibraryPutOnLibraryEffect(new TargetCardInLibrary()), false);

View file

@ -54,23 +54,21 @@ import mage.target.common.TargetOpponentsCreaturePermanent;
*/ */
public class BlackMarketDealer extends CardImpl { public class BlackMarketDealer extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a Rogue or Hunter creature you controle"); private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a Rogue or Hunter creature you control");
static { static {
filter.add(new ControllerPredicate(TargetController.YOU)); filter.add(new ControllerPredicate(TargetController.YOU));
filter.add(Predicates.or(new SubtypePredicate("Rogue"), new SubtypePredicate("Hunter"))); filter.add(Predicates.or(new SubtypePredicate("Rogue"), new SubtypePredicate("Hunter")));
} }
public BlackMarketDealer(UUID ownerId, CardSetInfo setInfo) { public BlackMarketDealer(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}");
this.subtype.add("Human"); this.subtype.add("Human");
this.subtype.add("Rogue"); this.subtype.add("Rogue");
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// Whenever a Rogue or Hunter creature you controle dies, put a bounty counter on target creature an opponent controls. // Whenever a Rogue or Hunter creature you control dies, put a bounty counter on target creature an opponent controls.
Ability ability = new DiesCreatureTriggeredAbility(new AddCountersTargetEffect(CounterType.BOUNTY.createInstance()), false, filter); Ability ability = new DiesCreatureTriggeredAbility(new AddCountersTargetEffect(CounterType.BOUNTY.createInstance()), false, filter);
ability.addTarget(new TargetOpponentsCreaturePermanent()); ability.addTarget(new TargetOpponentsCreaturePermanent());
this.addAbility(ability); this.addAbility(ability);

View file

@ -32,7 +32,7 @@ import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.TapTargetEffect; import mage.abilities.effects.common.TapTargetEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -56,13 +56,13 @@ public class CantinaBand extends CardImpl {
} }
public CantinaBand(UUID ownerId, CardSetInfo setInfo) { public CantinaBand(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{W}");
this.subtype.add("Bith"); this.subtype.add("Bith");
this.power = new MageInt(1); this.power = new MageInt(0);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// {T}, {W}: Tap target nonartifact creature. // {T}, {1}: Tap target nonartifact creature.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new TapTargetEffect(), new ManaCostsImpl("{W}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new TapTargetEffect(), new GenericManaCost(1));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(filter));
this.addAbility(ability); this.addAbility(ability);

View file

@ -28,6 +28,10 @@
package mage.cards.c; package mage.cards.c;
import java.util.UUID; import java.util.UUID;
import mage.Mana;
import mage.abilities.condition.common.TargetHasCounterCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.BasicManaEffect;
import mage.abilities.effects.common.UntapTargetEffect; import mage.abilities.effects.common.UntapTargetEffect;
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
import mage.abilities.effects.common.continuous.GainControlTargetEffect; import mage.abilities.effects.common.continuous.GainControlTargetEffect;
@ -36,6 +40,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.counters.CounterType;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
/** /**
@ -45,7 +50,7 @@ import mage.target.common.TargetCreaturePermanent;
public class Capture extends CardImpl { public class Capture extends CardImpl {
public Capture(UUID ownerId, CardSetInfo setInfo) { public Capture(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{R}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{R}");
// Gain control of target creature until end of turn. // Gain control of target creature until end of turn.
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
@ -57,6 +62,8 @@ public class Capture extends CardImpl {
// It gains haste until end of turn. // It gains haste until end of turn.
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn)); this.getSpellAbility().addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn));
// If it has a bounty counter on it, add {R}{R}{R} to your mana pool
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(new BasicManaEffect(Mana.RedMana(3)), new TargetHasCounterCondition(CounterType.BOUNTY)));
} }
public Capture(final Capture card) { public Capture(final Capture card) {

View file

@ -31,23 +31,17 @@ import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.combat.CantBlockAttackActivateAttachedEffect; import mage.abilities.effects.common.combat.CantBlockAttackActivateAttachedEffect;
import mage.abilities.effects.common.continuous.ControlEnchantedEffect; import mage.abilities.effects.common.continuous.ControlEnchantedEffect;
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; import mage.abilities.effects.common.counter.RemoveCounterTargetEffect;
import mage.abilities.effects.common.ruleModifying.CantHaveCountersSourceEffect;
import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.EnchantAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.AttachmentType;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent; import mage.counters.CounterType;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
@ -58,7 +52,7 @@ import mage.target.common.TargetCreaturePermanent;
public class CarboniteChamber extends CardImpl { public class CarboniteChamber extends CardImpl {
public CarboniteChamber(UUID ownerId, CardSetInfo setInfo) { public CarboniteChamber(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{W}{U}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}{U}");
this.subtype.add("Aura"); this.subtype.add("Aura");
// Enchant creature // Enchant creature
@ -68,19 +62,15 @@ public class CarboniteChamber extends CardImpl {
Ability ability = new EnchantAbility(auraTarget.getTargetName()); Ability ability = new EnchantAbility(auraTarget.getTargetName());
this.addAbility(ability); this.addAbility(ability);
// When Carbonite Chamber enters the battlefield, remove all bounty counters from all creatures. // When Carbonite Chamber enters the battlefield, you may remove a bounty counter from target creature.
this.addAbility(new EntersBattlefieldTriggeredAbility(new RemoveAllCountersEffect())); ability = new EntersBattlefieldTriggeredAbility(new RemoveCounterTargetEffect(CounterType.BOUNTY.createInstance()), true);
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
// You control enchanted creature. // You control enchanted creature.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ControlEnchantedEffect())); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ControlEnchantedEffect()));
// It can't have counters placed on it. // It can't attack or block, and its activated abilities can't be activated.
Ability attachedAbility = new SimpleStaticAbility(Zone.BATTLEFIELD, new CantHaveCountersSourceEffect());
Effect effect = new GainAbilityAttachedEffect(attachedAbility, AttachmentType.AURA);
effect.setText("It can't have counters placed on it");
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
// Enchanted creature can't attack or block, and its activated abilities can't be activated.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBlockAttackActivateAttachedEffect())); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBlockAttackActivateAttachedEffect()));
} }
@ -94,28 +84,3 @@ public class CarboniteChamber extends CardImpl {
return new CarboniteChamber(this); return new CarboniteChamber(this);
} }
} }
class RemoveAllCountersEffect extends OneShotEffect {
public RemoveAllCountersEffect() {
super(Outcome.Detriment);
staticText = "remove all bounty counters from all creatures";
}
public RemoveAllCountersEffect(final RemoveAllCountersEffect effect) {
super(effect);
}
@Override
public boolean apply(Game game, Ability source) {
for (Permanent permanent : game.getBattlefield().getActivePermanents(new FilterCreaturePermanent(), source.getControllerId(), source.getSourceId(), game)) {
permanent.getCounters(game).removeAllCounters("bounty");
}
return true;
}
@Override
public RemoveAllCountersEffect copy() {
return new RemoveAllCountersEffect(this);
}
}

View file

@ -34,7 +34,7 @@ import mage.abilities.condition.common.MonstrousCondition;
import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
import mage.abilities.keyword.MonstrosityAbility; import mage.abilities.keyword.MonstrosityAbility;
import mage.abilities.keyword.TrampleAbility; import mage.abilities.keyword.SwampwalkAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -47,19 +47,19 @@ import mage.constants.Zone;
public class DagobahMawSlug extends CardImpl { public class DagobahMawSlug extends CardImpl {
public DagobahMawSlug(UUID ownerId, CardSetInfo setInfo) { public DagobahMawSlug(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{R}{G}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}{G}{W}");
this.subtype.add("Slug"); this.subtype.add("Slug");
this.power = new MageInt(4); this.power = new MageInt(4);
this.toughness = new MageInt(3); this.toughness = new MageInt(2);
// {6}{G}: Monstrosity 3. // {3}{R}{G}{W}: Monstrosity 2.
this.addAbility(new MonstrosityAbility("{6}{G}", 3)); this.addAbility(new MonstrosityAbility("{3}{R}{G}{W}", 2));
// As long as Dagobah Maw Slug is monstrous. it has trample. // As long as Dagobah Maw Slug is monstrous it has swampwalk.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(
new GainAbilitySourceEffect(TrampleAbility.getInstance()), new GainAbilitySourceEffect(new SwampwalkAbility()),
MonstrousCondition.getInstance(), MonstrousCondition.getInstance(),
"As long as Dagobah Maw Slug is monstrous it has trample") "As long as Dagobah Maw Slug is monstrous it has swampwalk")
)); ));
} }

View file

@ -47,13 +47,13 @@ import mage.watchers.common.LifeLossOtherFromCombatWatcher;
public class DarkApprenticeship extends CardImpl { public class DarkApprenticeship extends CardImpl {
public DarkApprenticeship(UUID ownerId, CardSetInfo setInfo) { public DarkApprenticeship(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{R}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{R}");
// <i>Hate</i> &mdash; At the beggining of each end step, if an opponent lost life from source other than combat damage this turn, Dark Apprenticeship deals 2 damage to target player. // <i>Hate</i> &mdash; At the beggining of your end step, if an opponent lost life from source other than combat damage this turn, Dark Apprenticeship deals 2 damage to target player.
Ability ability = new ConditionalTriggeredAbility( Ability ability = new ConditionalTriggeredAbility(
new BeginningOfEndStepTriggeredAbility(new DamageTargetEffect(2), TargetController.ANY, false), new BeginningOfEndStepTriggeredAbility(new DamageTargetEffect(2), TargetController.YOU, false),
HateCondition.getInstance(), HateCondition.getInstance(),
"<i>Hate</i> &mdash; At the beggining of each end step, if an opponent lost life from source other than combat damage this turn, Dark Apprenticeship deals 2 damage to target player."); "<i>Hate</i> &mdash; At the beggining of your end step, if an opponent lost life from source other than combat damage this turn, Dark Apprenticeship deals 2 damage to target player.");
ability.addTarget(new TargetPlayer()); ability.addTarget(new TargetPlayer());
this.addAbility(ability, new LifeLossOtherFromCombatWatcher()); this.addAbility(ability, new LifeLossOtherFromCombatWatcher());
} }

View file

@ -60,7 +60,7 @@ public class DarkDecision extends CardImpl {
// As an additional cost to cast Dark Decision, pay 1 life. // As an additional cost to cast Dark Decision, pay 1 life.
this.getSpellAbility().addCost(new PayLifeCost(1)); this.getSpellAbility().addCost(new PayLifeCost(1));
// Search the top 10 cards of your library for a nonland cardId, exile it, then shuffle your library. Until end of turn, you may cast that cardId. // Search the top 10 cards of your library for a nonland card, exile it, then shuffle your library. Until end of turn, you may cast that card.
this.getSpellAbility().addEffect(new DarkDecisionEffect()); this.getSpellAbility().addEffect(new DarkDecisionEffect());
} }

View file

@ -41,14 +41,14 @@ import mage.constants.CardType;
public class DarkTrooper extends CardImpl { public class DarkTrooper extends CardImpl {
public DarkTrooper(UUID ownerId, CardSetInfo setInfo) { public DarkTrooper(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{3}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}");
this.subtype.add("Droid"); this.subtype.add("Droid");
this.subtype.add("Trooper"); this.subtype.add("Trooper");
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// Repair 4 // Repair 2
this.addAbility(new RepairAbility(4)); this.addAbility(new RepairAbility(2));
} }
public DarkTrooper(final DarkTrooper card) { public DarkTrooper(final DarkTrooper card) {

View file

@ -33,7 +33,7 @@ import mage.abilities.Ability;
import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.condition.common.HateCondition; import mage.abilities.condition.common.HateCondition;
import mage.abilities.decorator.ConditionalTriggeredAbility; import mage.abilities.decorator.ConditionalTriggeredAbility;
import mage.abilities.effects.common.combat.CantBlockTargetEffect; import mage.abilities.effects.common.combat.CantBeBlockedByTargetSourceEffect;
import mage.abilities.keyword.DoubleStrikeAbility; import mage.abilities.keyword.DoubleStrikeAbility;
import mage.abilities.keyword.HasteAbility; import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -50,7 +50,7 @@ import mage.watchers.common.LifeLossOtherFromCombatWatcher;
public class DarthMaul extends CardImpl { public class DarthMaul extends CardImpl {
public DarthMaul(UUID ownerId, CardSetInfo setInfo) { public DarthMaul(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{B}{R}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{R}");
this.supertype.add("Legendary"); this.supertype.add("Legendary");
this.subtype.add("Zabrak"); this.subtype.add("Zabrak");
this.subtype.add("Sith"); this.subtype.add("Sith");
@ -65,7 +65,7 @@ public class DarthMaul extends CardImpl {
// <i>Hate</i> &mdash; Whenever Darth Maul attacks, if an opponent loses life from a source other than combat damage this turn, target creature can't block this turn. // <i>Hate</i> &mdash; Whenever Darth Maul attacks, if an opponent loses life from a source other than combat damage this turn, target creature can't block this turn.
Ability ability = new ConditionalTriggeredAbility( Ability ability = new ConditionalTriggeredAbility(
new AttacksTriggeredAbility(new CantBlockTargetEffect(Duration.EndOfTurn), false), new AttacksTriggeredAbility(new CantBeBlockedByTargetSourceEffect(Duration.EndOfTurn), false),
HateCondition.getInstance(), HateCondition.getInstance(),
"<i>Hate</i> &mdash; Whenever Darth Maul attacks, if an opponent loses life from a source other than combat damage this turn, target creature can't block this turn."); "<i>Hate</i> &mdash; Whenever Darth Maul attacks, if an opponent loses life from a source other than combat damage this turn, target creature can't block this turn.");
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());

View file

@ -60,7 +60,7 @@ public class DarthSidiousSithLord extends CardImpl {
} }
public DarthSidiousSithLord(UUID ownerId, CardSetInfo setInfo) { public DarthSidiousSithLord(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{3}{U}{B}{B}{R}"); super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{4}{U}{B}{B}{R}");
this.subtype.add("Sidious"); this.subtype.add("Sidious");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(5)); this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(5));

View file

@ -25,47 +25,48 @@
* 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.i; package mage.cards.d;
import java.util.UUID; import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.DiesTriggeredAbility;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.LoseLifeTargetEffect;
import mage.abilities.effects.common.LookLibraryTopCardTargetPlayerEffect; import mage.abilities.keyword.RepairAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Zone;
import mage.target.TargetPlayer; import mage.target.TargetPlayer;
/** /**
* *
* @author Styxo * @author Styxo
*/ */
public class ImperialSpy extends CardImpl { public class DroidCommando extends CardImpl {
public ImperialSpy(UUID ownerId, CardSetInfo setInfo) { public DroidCommando(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{2}{B}");
this.subtype.add("Kubaz"); this.subtype.add("Droid");
this.subtype.add("Rogue"); this.power = new MageInt(2);
this.power = new MageInt(1); this.toughness = new MageInt(2);
this.toughness = new MageInt(1);
// {1}{B},{T}: Look at the top card of target player's library. You may put that card into that player's graveyard. // When Droid Commando dies, target player loses 2 life and you gain 2 life.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new LookLibraryTopCardTargetPlayerEffect(1, true), new ManaCostsImpl("{1}{B}")); Ability ability = new DiesTriggeredAbility(new LoseLifeTargetEffect(2));
ability.addCost(new TapSourceCost()); ability.addEffect(new GainLifeEffect(2));
ability.addTarget(new TargetPlayer()); ability.addTarget(new TargetPlayer());
this.addAbility(ability); this.addAbility(ability);
// Repair 3
this.addAbility(new RepairAbility(3));
} }
public ImperialSpy(final ImperialSpy card) { public DroidCommando(final DroidCommando card) {
super(card); super(card);
} }
@Override @Override
public ImperialSpy copy() { public DroidCommando copy() {
return new ImperialSpy(this); return new DroidCommando(this);
} }
} }

View file

@ -52,12 +52,12 @@ import mage.counters.CounterType;
public class DroneHolocron extends CardImpl { public class DroneHolocron extends CardImpl {
public DroneHolocron(UUID ownerId, CardSetInfo setInfo) { public DroneHolocron(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{2}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}");
// {T}: Put a charge counter on Wild Holocron. // {T}: Put a charge counter on Drone Holocron.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.CHARGE.createInstance(1)), new TapSourceCost())); this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.CHARGE.createInstance(1)), new TapSourceCost()));
// {T}, Remove a charge counter from Wild Holocron: Add {W}, {U} or {B} to your mana pool. // {T}, Remove a charge counter from Drone Holocron: Add {W}, {U} or {B} to your mana pool.
Cost cost = new RemoveCountersSourceCost(CounterType.CHARGE.createInstance(1)); Cost cost = new RemoveCountersSourceCost(CounterType.CHARGE.createInstance(1));
Ability ability = new WhiteManaAbility(); Ability ability = new WhiteManaAbility();
ability.addCost(cost); ability.addCost(cost);
@ -71,7 +71,7 @@ public class DroneHolocron extends CardImpl {
ability.addCost(cost); ability.addCost(cost);
this.addAbility(ability); this.addAbility(ability);
// {T}, Remove two charge counters from Sith Holocron: Add WU or UB to your mana pool. // {T}, Remove two charge counters from Drone Holocron: Add WU or UB to your mana pool.
cost = new RemoveCountersSourceCost(CounterType.CHARGE.createInstance(2)); cost = new RemoveCountersSourceCost(CounterType.CHARGE.createInstance(2));
ability = new SimpleManaAbility(Zone.BATTLEFIELD, new Mana(0, 0, 1, 1, 0, 0, 0, 0), new TapSourceCost()); ability = new SimpleManaAbility(Zone.BATTLEFIELD, new Mana(0, 0, 1, 1, 0, 0, 0, 0), new TapSourceCost());

View file

@ -65,7 +65,7 @@ public class EchoBaseCommando extends CardImpl {
} }
public EchoBaseCommando(UUID ownerId, CardSetInfo setInfo) { public EchoBaseCommando(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{G}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}{W}");
this.subtype.add("Human"); this.subtype.add("Human");
this.subtype.add("Rebel"); this.subtype.add("Rebel");
this.power = new MageInt(3); this.power = new MageInt(3);
@ -91,7 +91,7 @@ public class EchoBaseCommando extends CardImpl {
class EchoBaseCommandoEffect extends CostModificationEffectImpl { class EchoBaseCommandoEffect extends CostModificationEffectImpl {
private static final String effectText = "Activated abilities of creatures your opponent controls cost {2} more to activate"; private static final String effectText = "Activated abilities of creatures your opponent control cost {2} more to activate";
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); private static final FilterCreaturePermanent filter = new FilterCreaturePermanent();
static { static {

View file

@ -33,7 +33,7 @@ import mage.abilities.Ability;
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
import mage.abilities.effects.Effect; import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect; import mage.abilities.effects.common.ReturnToBattlefieldUnderYourControlTargetEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -52,7 +52,7 @@ public class EscapePod extends CardImpl {
public EscapePod(UUID ownerId, CardSetInfo setInfo) { public EscapePod(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{W}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{W}");
// Exile target creature you control. Return that card to the battlefield under its owner's control at the beginning of the next end step. // Exile target creature you control. Return that card to the battlefield under your control at the beginning of the next end step.
this.getSpellAbility().addEffect(new EscapePodEffect()); this.getSpellAbility().addEffect(new EscapePodEffect());
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
@ -72,7 +72,7 @@ class EscapePodEffect extends OneShotEffect {
public EscapePodEffect() { public EscapePodEffect() {
super(Outcome.Detriment); super(Outcome.Detriment);
staticText = "Exile target creature you control. Return that card to the battlefield under its owner's control at the beginning of the next end step"; staticText = "Exile target creature you control. Return that card to the battlefield under your control at the beginning of the next end step";
} }
public EscapePodEffect(final EscapePodEffect effect) { public EscapePodEffect(final EscapePodEffect effect) {
@ -85,8 +85,8 @@ class EscapePodEffect extends OneShotEffect {
MageObject sourceObject = game.getObject(source.getSourceId()); MageObject sourceObject = game.getObject(source.getSourceId());
if (permanent != null && sourceObject != null) { if (permanent != null && sourceObject != null) {
if (permanent.moveToExile(source.getSourceId(), sourceObject.getIdName(), source.getSourceId(), game)) { if (permanent.moveToExile(source.getSourceId(), sourceObject.getIdName(), source.getSourceId(), game)) {
Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(); Effect effect = new ReturnToBattlefieldUnderYourControlTargetEffect();
effect.setText("Return that card to the battlefield under its owner's control at the beginning of the next end step"); effect.setText("Return that card to the battlefield under your control at the beginning of the next end step");
effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game)); effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game));
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source); game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source);
return true; return true;

View file

@ -29,12 +29,19 @@ package mage.cards.e;
import java.util.UUID; import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.keyword.CanBlockSpaceflightAbility; import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.RestrictionEffect;
import mage.abilities.keyword.FlashAbility; import mage.abilities.keyword.FlashAbility;
import mage.abilities.keyword.SpaceflightAbility;
import mage.abilities.keyword.TrampleAbility; import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.permanent.Permanent;
/** /**
* *
@ -45,7 +52,7 @@ public class Exogorth extends CardImpl {
public Exogorth(UUID ownerId, CardSetInfo setInfo) { public Exogorth(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{G}{G}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{G}{G}");
this.subtype.add("Slug"); this.subtype.add("Slug");
this.power = new MageInt(7); this.power = new MageInt(8);
this.toughness = new MageInt(7); this.toughness = new MageInt(7);
// Flash // Flash
@ -54,8 +61,8 @@ public class Exogorth extends CardImpl {
// Trample // Trample
this.addAbility(TrampleAbility.getInstance()); this.addAbility(TrampleAbility.getInstance());
// Exogorth can block creatures with spaceflight. // Exogorth can block only creatures with spaceflight.
this.addAbility(CanBlockSpaceflightAbility.getInstance()); this.addAbility(new CanBlockOnlySpaceflightAbility());
} }
public Exogorth(final Exogorth card) { public Exogorth(final Exogorth card) {
@ -67,3 +74,47 @@ public class Exogorth extends CardImpl {
return new Exogorth(this); return new Exogorth(this);
} }
} }
class CanBlockOnlySpaceflightAbility extends SimpleStaticAbility {
public CanBlockOnlySpaceflightAbility() {
super(Zone.BATTLEFIELD, new CanBlockOnlySpaceflightEffect(Duration.WhileOnBattlefield));
}
private CanBlockOnlySpaceflightAbility(CanBlockOnlySpaceflightAbility ability) {
super(ability);
}
@Override
public CanBlockOnlySpaceflightAbility copy() {
return new CanBlockOnlySpaceflightAbility(this);
}
}
class CanBlockOnlySpaceflightEffect extends RestrictionEffect {
public CanBlockOnlySpaceflightEffect(Duration duration) {
super(duration);
this.staticText = "{this} can block only creatures with spaceflight";
}
public CanBlockOnlySpaceflightEffect(final CanBlockOnlySpaceflightEffect effect) {
super(effect);
}
@Override
public boolean applies(Permanent permanent, Ability source, Game game) {
return permanent.getId().equals(source.getSourceId());
}
@Override
public boolean canBlock(Permanent attacker, Permanent blocker, Ability source, Game game) {
return attacker.getAbilities().contains(SpaceflightAbility.getInstance());
}
@Override
public CanBlockOnlySpaceflightEffect copy() {
return new CanBlockOnlySpaceflightEffect(this);
}
}

View file

@ -64,11 +64,11 @@ public class FlamesOfRemembrance extends CardImpl {
public FlamesOfRemembrance(UUID ownerId, CardSetInfo setInfo) { public FlamesOfRemembrance(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{R}"); super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{R}");
// At the beggining of your upkeep, you may exile a card from your graveyard. If you do, put a charge counter on Flames of Remembrance. // At the beggining of your upkeep, you may exile a card from your graveyard. If you do, put a lore counter on Flames of Remembrance.
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new DoIfCostPaid(new AddCountersSourceEffect(CounterType.CHARGE.createInstance()), new ExileFromGraveCost(new TargetCardInYourGraveyard()), null, true), TargetController.YOU, false)); this.addAbility(new BeginningOfUpkeepTriggeredAbility(new DoIfCostPaid(new AddCountersSourceEffect(CounterType.LORE.createInstance()), new ExileFromGraveCost(new TargetCardInYourGraveyard()), null, true), TargetController.YOU, false));
// Sacrifice Flames of Remembrance: Exile top X cards of your library, where X is the number of charge counters on Flames of Remembrance. Until end of turn you play cards exile this way. // Sacrifice Flames of Remembrance: Exile top X cards of your library, where X is the number of lore counters on Flames of Remembrance. Until end of turn you play cards exile this way.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new FlamesOfRemembranceExileEffect(new CountersSourceCount(CounterType.CHARGE)), new SacrificeSourceCost())); this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new FlamesOfRemembranceExileEffect(new CountersSourceCount(CounterType.LORE)), new SacrificeSourceCost()));
} }
public FlamesOfRemembrance(final FlamesOfRemembrance card) { public FlamesOfRemembrance(final FlamesOfRemembrance card) {
@ -88,7 +88,7 @@ class FlamesOfRemembranceExileEffect extends OneShotEffect {
public FlamesOfRemembranceExileEffect(CountersSourceCount amount) { public FlamesOfRemembranceExileEffect(CountersSourceCount amount) {
super(Outcome.Benefit); super(Outcome.Benefit);
this.amount = amount; this.amount = amount;
this.staticText = "Exile top X cards of your library, where X is the number of charge counters on Flames of Remembrance. Until end of turn you play cards exile this way"; this.staticText = "Exile top X cards of your library, where X is the number of lore counters on Flames of Remembrance. Until end of turn you play cards exile this way";
} }
public FlamesOfRemembranceExileEffect(final FlamesOfRemembranceExileEffect effect) { public FlamesOfRemembranceExileEffect(final FlamesOfRemembranceExileEffect effect) {

View file

@ -28,12 +28,20 @@
package mage.cards.f; package mage.cards.f;
import java.util.UUID; import java.util.UUID;
import mage.abilities.effects.common.CounterTargetEffect; import mage.abilities.Ability;
import mage.abilities.effects.common.LoseLifeTargetControllerEffect; import mage.abilities.costs.Cost;
import mage.abilities.costs.common.PayLifeCost;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.keyword.ScryEffect; import mage.abilities.effects.keyword.ScryEffect;
import mage.cards.Card;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.stack.StackObject;
import mage.players.Player;
import mage.target.TargetSpell; import mage.target.TargetSpell;
/** /**
@ -43,14 +51,11 @@ import mage.target.TargetSpell;
public class ForceChoke extends CardImpl { public class ForceChoke extends CardImpl {
public ForceChoke(UUID ownerId, CardSetInfo setInfo) { public ForceChoke(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{3}{U}{B}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{U}{B}");
// Counter target spell. // Counter target spell. Its controller may pay life equal to that spell's cmc to return it to its owner's hand.
this.getSpellAbility().addTarget(new TargetSpell()); this.getSpellAbility().addTarget(new TargetSpell());
this.getSpellAbility().addEffect(new CounterTargetEffect()); this.getSpellAbility().addEffect(new ForceChokeEffect());
// It controller loses 2 life.
this.getSpellAbility().addEffect(new LoseLifeTargetControllerEffect(2));
// Scry 2 // Scry 2
this.getSpellAbility().addEffect(new ScryEffect(2)); this.getSpellAbility().addEffect(new ScryEffect(2));
@ -65,3 +70,39 @@ public class ForceChoke extends CardImpl {
return new ForceChoke(this); return new ForceChoke(this);
} }
} }
class ForceChokeEffect extends OneShotEffect {
public ForceChokeEffect() {
super(Outcome.ReturnToHand);
this.staticText = "Counter target spell. Its controller may pay life equal to that spell's converted mana cost to return it to its owner's hand";
}
public ForceChokeEffect(final ForceChokeEffect effect) {
super(effect);
}
@Override
public ForceChokeEffect copy() {
return new ForceChokeEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player player = game.getPlayer(source.getControllerId());
StackObject stackObject = (StackObject) game.getObject(getTargetPointer().getFirst(game, source));
Player objectController = game.getPlayer(stackObject.getControllerId());
if (player != null) {
Cost cost = new PayLifeCost(stackObject.getConvertedManaCost());
if (cost.canPay(source, source.getSourceId(), objectController.getId(), game)
&& objectController.chooseUse(Outcome.LoseLife, "Pay " + stackObject.getConvertedManaCost() + " life?", source, game)
&& cost.pay(source, game, source.getSourceId(), objectController.getId(), false, null)) {
objectController.moveCards((Card) stackObject, Zone.HAND, source, game);
} else {
stackObject.counter(source.getId(), game);
}
return true;
}
return false;
}
}

View file

@ -28,12 +28,16 @@
package mage.cards.f; package mage.cards.f;
import java.util.UUID; import java.util.UUID;
import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.Ability;
import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.keyword.ScryEffect; import mage.abilities.effects.keyword.ScryEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Outcome;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.common.TargetCreatureOrPlayer; import mage.target.common.TargetCreatureOrPlayer;
/** /**
@ -43,12 +47,11 @@ import mage.target.common.TargetCreatureOrPlayer;
public class ForceDrain extends CardImpl { public class ForceDrain extends CardImpl {
public ForceDrain(UUID ownerId, CardSetInfo setInfo) { public ForceDrain(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{B}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{B}");
// ForceDrain deals 2 damage to target creature or player, you gain 2 life. // ForceDrain deals 2 damage to target creature or player. If player was dealt damage this way, you gain 2 life.
this.getSpellAbility().addTarget(new TargetCreatureOrPlayer()); this.getSpellAbility().addTarget(new TargetCreatureOrPlayer());
this.getSpellAbility().addEffect(new DamageTargetEffect(2)); this.getSpellAbility().addEffect(new ForceDrainEffect());
this.getSpellAbility().addEffect(new GainLifeEffect(2));
// Scry 1 // Scry 1
this.getSpellAbility().addEffect(new ScryEffect(1)); this.getSpellAbility().addEffect(new ScryEffect(1));
@ -63,3 +66,41 @@ public class ForceDrain extends CardImpl {
return new ForceDrain(this); return new ForceDrain(this);
} }
} }
class ForceDrainEffect extends OneShotEffect {
public ForceDrainEffect() {
super(Outcome.Damage);
this.staticText = "ForceDrain deals 2 damage to target creature or player. If player was dealt damage this way, you gain 2 life";
}
public ForceDrainEffect(final ForceDrainEffect effect) {
super(effect);
}
@Override
public ForceDrainEffect copy() {
return new ForceDrainEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source));
if (permanent != null) {
permanent.damage(2, source.getId(), game, false, true);
return true;
}
Player player = game.getPlayer(getTargetPointer().getFirst(game, source));
if (player != null) {
if (player.damage(2, source.getId(), game, false, true) > 0) {
controller.gainLife(2, game);
}
return true;
}
}
return false;
}
}

View file

@ -25,7 +25,7 @@
* 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.j; package mage.cards.f;
import java.util.UUID; import java.util.UUID;
import mage.abilities.effects.Effect; import mage.abilities.effects.Effect;
@ -44,9 +44,9 @@ import mage.target.common.TargetCreaturePermanent;
* *
* @author Styxo * @author Styxo
*/ */
public class JediReflex extends CardImpl { public class ForceReflex extends CardImpl {
public JediReflex(UUID ownerId, CardSetInfo setInfo) { public ForceReflex(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{W}"); super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{W}");
// Untap target creature. It gets +1/+0 and gains first strike until end of turn. // Untap target creature. It gets +1/+0 and gains first strike until end of turn.
@ -59,19 +59,18 @@ public class JediReflex extends CardImpl {
effect = new GainAbilityTargetEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn); effect = new GainAbilityTargetEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn);
effect.setText("and gains first strike until end of turn"); effect.setText("and gains first strike until end of turn");
this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(effect);
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
// Scry 1 // Scry 1
this.getSpellAbility().addEffect(new ScryEffect(1)); this.getSpellAbility().addEffect(new ScryEffect(1));
} }
public JediReflex(final JediReflex card) { public ForceReflex(final ForceReflex card) {
super(card); super(card);
} }
@Override @Override
public JediReflex copy() { public ForceReflex copy() {
return new JediReflex(this); return new ForceReflex(this);
} }
} }

View file

@ -28,13 +28,22 @@
package mage.cards.f; package mage.cards.f;
import java.util.UUID; import java.util.UUID;
import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Outcome;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.filter.predicate.permanent.CounterPredicate; import mage.filter.predicate.permanent.CounterPredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.common.TargetControlledCreaturePermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
/** /**
@ -43,18 +52,22 @@ import mage.target.common.TargetCreaturePermanent;
*/ */
public class FulfillContract extends CardImpl { public class FulfillContract extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with a bounty counter on it"); private static final FilterCreaturePermanent filterBountyCreature = new FilterCreaturePermanent("creature with a bounty counter on it");
private static final FilterControlledCreaturePermanent filterRogueOrHunter = new FilterControlledCreaturePermanent("Rogue or Hunter you control");
static { static {
filter.add(new CounterPredicate(CounterType.BOUNTY)); filterBountyCreature.add(new CounterPredicate(CounterType.BOUNTY));
filterRogueOrHunter.add(Predicates.or(new SubtypePredicate("Rogue"), new SubtypePredicate("Hunter")));
} }
public FulfillContract(UUID ownerId, CardSetInfo setInfo) { public FulfillContract(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{B/R}{B/R}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{B/R}{B/R}");
// Destroy target creature with a bounty counter on it. If that creature is destroyed this way, you may put a +1/+1 counter on target Rogue or Hunter you control.
this.getSpellAbility().addEffect(new FulfillContractEffect());
this.getSpellAbility().addTarget(new TargetCreaturePermanent(filterBountyCreature));
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent(filterRogueOrHunter));
// Destroy target creature with a bounty counter on it.
this.getSpellAbility().addEffect(new DestroyTargetEffect());
this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter));
} }
public FulfillContract(final FulfillContract card) { public FulfillContract(final FulfillContract card) {
@ -66,3 +79,36 @@ public class FulfillContract extends CardImpl {
return new FulfillContract(this); return new FulfillContract(this);
} }
} }
class FulfillContractEffect extends OneShotEffect {
public FulfillContractEffect() {
super(Outcome.Benefit);
this.staticText = "Destroy target creature with a bounty counter on it. If that creature is destroyed this way, you may put a +1/+1 counter on target Rogue or Hunter you control";
}
public FulfillContractEffect(final FulfillContractEffect effect) {
super(effect);
}
@Override
public FulfillContractEffect copy() {
return new FulfillContractEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
Permanent permanentToDestroy = game.getPermanent(getTargetPointer().getFirst(game, source));
Permanent permanentToPutCounter = game.getPermanent(getTargetPointer().getTargets(game, source).get(1));
if (controller != null) {
if (permanentToDestroy != null && permanentToDestroy.destroy(source.getSourceId(), game, false)) {
if (permanentToPutCounter != null) {
permanentToPutCounter.addCounters(CounterType.P1P1.createInstance(), game);
}
}
return true;
}
return false;
}
}

View file

@ -53,9 +53,9 @@ public class HazardTrooper extends CardImpl {
} }
public HazardTrooper(UUID ownerId, CardSetInfo setInfo) { public HazardTrooper(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{B}");
this.subtype.add("Human"); this.subtype.add("Human");
this.subtype.add("Zyborg"); this.subtype.add("Cyborg");
this.subtype.add("Trooper"); this.subtype.add("Trooper");
this.power = new MageInt(3); this.power = new MageInt(3);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);

View file

@ -44,15 +44,15 @@ import mage.target.common.TargetOpponentsCreaturePermanent;
public class HeadHunting extends CardImpl { public class HeadHunting extends CardImpl {
public HeadHunting(UUID ownerId, CardSetInfo setInfo) { public HeadHunting(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{B}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{B}");
// Each opponent loses 1 life.
this.getSpellAbility().addEffect(new LoseLifeOpponentsEffect(1));
// Put a bounty counter on target creature an opponent controls. // Put a bounty counter on target creature an opponent controls.
this.getSpellAbility().addTarget(new TargetOpponentsCreaturePermanent()); this.getSpellAbility().addTarget(new TargetOpponentsCreaturePermanent());
this.getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.BOUNTY.createInstance())); this.getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.BOUNTY.createInstance()));
// Each opponent loses 1 life.
this.getSpellAbility().addEffect(new LoseLifeOpponentsEffect(1));
// Draw a card. // Draw a card.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));
} }

View file

@ -29,7 +29,9 @@ package mage.cards.h;
import java.util.UUID; import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.effects.common.DontUntapInControllersNextUntapStepSourceEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -43,7 +45,7 @@ import mage.counters.CounterType;
public class HuttCrimeLord extends CardImpl { public class HuttCrimeLord extends CardImpl {
public HuttCrimeLord(UUID ownerId, CardSetInfo setInfo) { public HuttCrimeLord(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}{G}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}{G}");
this.subtype.add("Hutt"); this.subtype.add("Hutt");
this.subtype.add("Rogue"); this.subtype.add("Rogue");
this.power = new MageInt(5); this.power = new MageInt(5);
@ -51,6 +53,9 @@ public class HuttCrimeLord extends CardImpl {
// Hutt Crime Lord enters the battlefield with a bounty counter on it. // Hutt Crime Lord enters the battlefield with a bounty counter on it.
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.BOUNTY.createInstance()), "with a bounty counter on it")); this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.BOUNTY.createInstance()), "with a bounty counter on it"));
// Whenever Hutt Crime Lord attacks, it does not untap during its controller's next untap step
this.addAbility(new AttacksTriggeredAbility(new DontUntapInControllersNextUntapStepSourceEffect(), false));
} }
public HuttCrimeLord(final HuttCrimeLord card) { public HuttCrimeLord(final HuttCrimeLord card) {

View file

@ -51,7 +51,7 @@ import mage.game.permanent.Permanent;
public class IG88B extends CardImpl { public class IG88B extends CardImpl {
public IG88B(UUID ownerId, CardSetInfo setInfo) { public IG88B(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{2}{B}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{1}{B}{B}");
this.supertype.add("Legendary"); this.supertype.add("Legendary");
this.subtype.add("Droid"); this.subtype.add("Droid");
this.subtype.add("Hunter"); this.subtype.add("Hunter");

View file

@ -25,14 +25,16 @@
* 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.p; package mage.cards.i;
import java.util.List;
import java.util.UUID; import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.costs.common.DiscardCardCost;
import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.counter.AddCountersTargetEffect; import mage.abilities.effects.common.counter.AddCountersTargetEffect;
import mage.abilities.keyword.BountyAbility; import mage.cards.Card;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -40,67 +42,69 @@ import mage.constants.Outcome;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.game.Game; import mage.game.Game;
import mage.players.Player; import mage.players.Player;
import mage.players.PlayerList;
import mage.target.common.TargetOpponentsCreaturePermanent; import mage.target.common.TargetOpponentsCreaturePermanent;
/** /**
* *
* @author Styxo * @author Styxo
*/ */
public class PublicArrangement extends CardImpl { public class ImpulsiveWager extends CardImpl {
public PublicArrangement(UUID ownerId, CardSetInfo setInfo) { public ImpulsiveWager(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{B}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{R}");
// When Public Arrangement enters the battlefield, put a bounty counter on up to two target creatures your opponents control. // As an additional cost to cast Irresponsible Gambling, discard a card at random.
Ability ability = new EntersBattlefieldTriggeredAbility(new AddCountersTargetEffect(CounterType.BOUNTY.createInstance())); this.getSpellAbility().addCost(new DiscardCardCost(true));
ability.addTarget(new TargetOpponentsCreaturePermanent(0, 2));
this.addAbility(ability);
// <i>Bounty</i> &mdash; Whenever a creature an opponent controls with a bounty counter on it dies, that creature's controler loses 2 life. Each other player gains 2 life. // If the discarded card was a nonland card, draw two cards. Otherwise, put a bounty counter on target creature.
this.addAbility(new BountyAbility(new PublicArrangementEffect(), false, true)); this.getSpellAbility().addEffect(new ImpulsiveWagerEffect());
this.getSpellAbility().addTarget(new TargetOpponentsCreaturePermanent());
} }
public PublicArrangement(final PublicArrangement card) { public ImpulsiveWager(final ImpulsiveWager card) {
super(card); super(card);
} }
@Override @Override
public PublicArrangement copy() { public ImpulsiveWager copy() {
return new PublicArrangement(this); return new ImpulsiveWager(this);
} }
} }
class PublicArrangementEffect extends OneShotEffect { class ImpulsiveWagerEffect extends OneShotEffect {
public PublicArrangementEffect() { public ImpulsiveWagerEffect() {
super(Outcome.LoseLife); super(Outcome.Benefit);
staticText = "that creature's controler loses 2 life. Each other player gains 2 life"; staticText = "If the discarded card was a nonland card, draw two cards. Otherwise, put a bounty counter on target creature";
} }
public PublicArrangementEffect(final PublicArrangementEffect effect) { public ImpulsiveWagerEffect(final ImpulsiveWagerEffect effect) {
super(effect); super(effect);
} }
@Override
public PublicArrangementEffect copy() {
return new PublicArrangementEffect(this);
}
@Override @Override
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
UUID controller = game.getControllerId(source.getFirstTarget()); Player player = game.getPlayer(source.getControllerId());
if (controller != null) { if (player != null) {
game.getPlayer(controller).loseLife(2, game, false); DiscardCardCost cost = (DiscardCardCost) source.getCosts().get(0);
for (UUID playerId : game.getOpponents(controller)) { if (cost != null) {
Player player = game.getPlayer(playerId); List<Card> cards = cost.getCards();
if (player != null) { if (cards.size() == 1 && cards.get(0).getCardType().contains(CardType.LAND)) {
player.gainLife(2, game); Effect effect = new AddCountersTargetEffect(CounterType.BOUNTY.createInstance());
effect.setTargetPointer(getTargetPointer());
effect.apply(game, source);
} else {
player.drawCards(2, game);
} }
} }
return true; return true;
} }
return false; return false;
} }
@Override
public ImpulsiveWagerEffect copy() {
return new ImpulsiveWagerEffect(this);
}
} }

View file

@ -52,10 +52,10 @@ import mage.watchers.Watcher;
public class InsatiableRakghoul extends CardImpl { public class InsatiableRakghoul extends CardImpl {
public InsatiableRakghoul(UUID ownerId, CardSetInfo setInfo) { public InsatiableRakghoul(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{5}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{B}");
this.subtype.add("Zombie"); this.subtype.add("Zombie");
this.subtype.add("Mutant"); this.subtype.add("Mutant");
this.power = new MageInt(5); this.power = new MageInt(4);
this.toughness = new MageInt(6); this.toughness = new MageInt(6);
// Insatiable Rakghoul enters the battlefield with a +1/+1 counter on it, if a non-artifact creature died this turn. // Insatiable Rakghoul enters the battlefield with a +1/+1 counter on it, if a non-artifact creature died this turn.

View file

@ -50,10 +50,10 @@ import mage.watchers.common.LifeLossOtherFromCombatWatcher;
public class IronFistOfTheEmpire extends CardImpl { public class IronFistOfTheEmpire extends CardImpl {
public IronFistOfTheEmpire(UUID ownerId, CardSetInfo setInfo) { public IronFistOfTheEmpire(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{U}{B}{R}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{U}{B}{R}");
// <i>Hate</i> &mdash; At the beggining of each end step, if opponent lost life from a source other than combat damage this turn, you gain 1 life and create a 2/2 red Soldier creature token with first strike name Royal Guard. // <i>Hate</i> &mdash; At the beggining of each end step, if opponent lost life from a source other than combat damage this turn, you gain 2 life and create a 2/2 red Soldier creature token with first strike name Royal Guard.
TriggeredAbility triggeredAbility = new BeginningOfEndStepTriggeredAbility(new GainLifeEffect(1), TargetController.ANY, false); TriggeredAbility triggeredAbility = new BeginningOfEndStepTriggeredAbility(new GainLifeEffect(2), TargetController.ANY, false);
triggeredAbility.addEffect(new CreateTokenEffect(new RoyalGuardToken())); triggeredAbility.addEffect(new CreateTokenEffect(new RoyalGuardToken()));
Ability ability = new ConditionalTriggeredAbility( Ability ability = new ConditionalTriggeredAbility(
triggeredAbility, triggeredAbility,

View file

@ -1,61 +0,0 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.cards.i;
import java.util.UUID;
import mage.abilities.costs.common.DiscardCardCost;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
/**
*
* @author Styxo
*/
public class IrresponsibleGambling extends CardImpl {
public IrresponsibleGambling(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{R}");
// As an additional cost to cast Irresponsible Gambling, discard a card at random.
this.getSpellAbility().addCost(new DiscardCardCost(true));
// Draw two cards.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2));
}
public IrresponsibleGambling(final IrresponsibleGambling card) {
super(card);
}
@Override
public IrresponsibleGambling copy() {
return new IrresponsibleGambling(this);
}
}

View file

@ -36,7 +36,7 @@ import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.counter.AddCountersTargetEffect; import mage.abilities.effects.common.counter.AddCountersTargetEffect;
import mage.abilities.keyword.HasteAbility; import mage.abilities.keyword.HasteAbility;
import mage.abilities.keyword.IntimidateAbility; import mage.abilities.keyword.MenaceAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -54,7 +54,6 @@ import mage.target.TargetPermanent;
import mage.target.common.TargetOpponentsCreaturePermanent; import mage.target.common.TargetOpponentsCreaturePermanent;
import mage.filter.predicate.permanent.CounterPredicate; import mage.filter.predicate.permanent.CounterPredicate;
/** /**
* *
* @author Styxo/spjspj * @author Styxo/spjspj
@ -62,15 +61,15 @@ import mage.filter.predicate.permanent.CounterPredicate;
public class JangoFett extends CardImpl { public class JangoFett extends CardImpl {
public JangoFett(UUID ownerId, CardSetInfo setInfo) { public JangoFett(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}{R}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}{R}");
this.supertype.add("Legendary"); this.supertype.add("Legendary");
this.subtype.add("Human"); this.subtype.add("Human");
this.subtype.add("Hunter"); this.subtype.add("Hunter");
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// Intimidate // Menace
this.addAbility(IntimidateAbility.getInstance()); this.addAbility(new MenaceAbility());
// Haste // Haste
this.addAbility(HasteAbility.getInstance()); this.addAbility(HasteAbility.getInstance());

View file

@ -27,8 +27,6 @@
*/ */
package mage.cards.j; package mage.cards.j;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID; import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
@ -54,8 +52,7 @@ import mage.game.permanent.Permanent;
import mage.players.Player; import mage.players.Player;
import mage.target.Target; import mage.target.Target;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import mage.target.targetpointer.FixedTarget; import mage.target.common.TargetOpponent;
import mage.util.RandomUtil;
/** /**
* *
@ -64,7 +61,7 @@ import mage.util.RandomUtil;
public class JarJarBinks extends CardImpl { public class JarJarBinks extends CardImpl {
public JarJarBinks(UUID ownerId, CardSetInfo setInfo) { public JarJarBinks(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{U}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}");
this.supertype.add("Legendary"); this.supertype.add("Legendary");
this.subtype.add("Gungan"); this.subtype.add("Gungan");
this.power = new MageInt(0); this.power = new MageInt(0);
@ -73,8 +70,10 @@ public class JarJarBinks extends CardImpl {
// Jar jar Binks can't block. // Jar jar Binks can't block.
this.addAbility(new CantBlockAbility()); this.addAbility(new CantBlockAbility());
// When Jar Jar Binks enter the battlefield, an opponent gains control of it. // When Jar Jar Binks enter the battlefield, target opponent gains control of it.
this.addAbility(new EntersBattlefieldTriggeredAbility(new JarJarBinksEffect())); Ability ability = new EntersBattlefieldTriggeredAbility(new JarJarBinksEffect());
ability.addTarget(new TargetOpponent());
this.addAbility(ability);
// At the beggining of combat on your turn, tap the creature you control with the highest power. If two or more creatures are tied for the greatest power, you choose one of them. // At the beggining of combat on your turn, tap the creature you control with the highest power. If two or more creatures are tied for the greatest power, you choose one of them.
this.addAbility(new BeginningOfCombatTriggeredAbility(new JarJarBinksTapEffect(), TargetController.YOU, false)); this.addAbility(new BeginningOfCombatTriggeredAbility(new JarJarBinksTapEffect(), TargetController.YOU, false));
@ -94,7 +93,7 @@ class JarJarBinksEffect extends OneShotEffect {
public JarJarBinksEffect() { public JarJarBinksEffect() {
super(Outcome.GainControl); super(Outcome.GainControl);
this.staticText = "an opponent gains control of it"; this.staticText = "target opponent gains control of it";
} }
public JarJarBinksEffect(final JarJarBinksEffect effect) { public JarJarBinksEffect(final JarJarBinksEffect effect) {
@ -109,13 +108,13 @@ class JarJarBinksEffect extends OneShotEffect {
@Override @Override
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
Permanent jarJar = (Permanent) source.getSourceObjectIfItStillExists(game); Permanent jarJar = (Permanent) source.getSourceObjectIfItStillExists(game);
List<UUID> list = new ArrayList<UUID>(game.getOpponents(source.getControllerId())); Player player = game.getPlayer(source.getControllerId());
UUID player = list.get(RandomUtil.nextInt(list.size())); Player opponent = game.getPlayer(getTargetPointer().getFirst(game, source));
if (player != null && jarJar != null) { if (player != null && jarJar != null && opponent != null) {
ContinuousEffect effect = new JarJarBinksGainControlSourceEffect(); ContinuousEffect effect = new JarJarBinksGainControlSourceEffect();
effect.setTargetPointer(new FixedTarget(player)); effect.setTargetPointer(getTargetPointer());
game.addEffect(effect, source); game.addEffect(effect, source);
game.informPlayers(jarJar.getName() + " is now controlled by " + game.getPlayer(player).getLogName()); game.informPlayers(jarJar.getName() + " is now controlled by " + opponent.getLogName());
return true; return true;
} }
return false; return false;

View file

@ -48,7 +48,7 @@ public class JediBattleSage extends CardImpl {
public JediBattleSage(UUID ownerId, CardSetInfo setInfo) { public JediBattleSage(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}");
this.subtype.add("Human"); this.subtype.add("Sullustan");
this.subtype.add("Jedi"); this.subtype.add("Jedi");
this.power = new MageInt(3); this.power = new MageInt(3);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);

View file

@ -52,12 +52,12 @@ import mage.counters.CounterType;
public class JediHolocron extends CardImpl { public class JediHolocron extends CardImpl {
public JediHolocron(UUID ownerId, CardSetInfo setInfo) { public JediHolocron(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{2}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}");
// {T}: Put a charge counter on Wild Holocron. // {T}: Put a charge counter on Jedi Holocron.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.CHARGE.createInstance(1)), new TapSourceCost())); this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.CHARGE.createInstance(1)), new TapSourceCost()));
// {T}, Remove a charge counter from Wild Holocron: Add {G}, {W} or {U} to your mana pool. // {T}, Remove a charge counter from Jedi Holocron: Add {G}, {W} or {U} to your mana pool.
Cost cost = new RemoveCountersSourceCost(CounterType.CHARGE.createInstance(1)); Cost cost = new RemoveCountersSourceCost(CounterType.CHARGE.createInstance(1));
Ability ability = new GreenManaAbility(); Ability ability = new GreenManaAbility();
ability.addCost(cost); ability.addCost(cost);
@ -71,7 +71,7 @@ public class JediHolocron extends CardImpl {
ability.addCost(cost); ability.addCost(cost);
this.addAbility(ability); this.addAbility(ability);
// {T}, Remove two charge counters from Sith Holocron: Add GW or WU to your mana pool. // {T}, Remove two charge counters from Jedi Holocron: Add GW or WU to your mana pool.
cost = new RemoveCountersSourceCost(CounterType.CHARGE.createInstance(2)); cost = new RemoveCountersSourceCost(CounterType.CHARGE.createInstance(2));
ability = new SimpleManaAbility(Zone.BATTLEFIELD, new Mana(0, 1, 0, 1, 0, 0, 0, 0), new TapSourceCost()); ability = new SimpleManaAbility(Zone.BATTLEFIELD, new Mana(0, 1, 0, 1, 0, 0, 0, 0), new TapSourceCost());

View file

@ -31,7 +31,7 @@ import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.LeavesBattlefieldTriggeredAbility; import mage.abilities.common.LeavesBattlefieldTriggeredAbility;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.effects.common.ExileTargetEffect;
import mage.abilities.keyword.MeditateAbility; import mage.abilities.keyword.MeditateAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -45,14 +45,14 @@ import mage.target.common.TargetEnchantmentPermanent;
public class JediInquirer extends CardImpl { public class JediInquirer extends CardImpl {
public JediInquirer(UUID ownerId, CardSetInfo setInfo) { public JediInquirer(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}");
this.subtype.add("Human"); this.subtype.add("Human");
this.subtype.add("Jedi"); this.subtype.add("Jedi");
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// When Jedi Inquirer enters the battlefield, you may destroy target enchantment. // When Jedi Inquirer leaves the battlefield, you may exile target enchantment.
LeavesBattlefieldTriggeredAbility ability = new LeavesBattlefieldTriggeredAbility(new DestroyTargetEffect(), true); LeavesBattlefieldTriggeredAbility ability = new LeavesBattlefieldTriggeredAbility(new ExileTargetEffect(), true);
ability.addTarget(new TargetEnchantmentPermanent()); ability.addTarget(new TargetEnchantmentPermanent());
this.addAbility(ability); this.addAbility(ability);

View file

@ -29,7 +29,8 @@ package mage.cards.j;
import java.util.UUID; import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.Ability;
import mage.abilities.common.LeavesBattlefieldTriggeredAbility;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.abilities.effects.common.ReturnToHandTargetEffect;
import mage.abilities.keyword.MeditateAbility; import mage.abilities.keyword.MeditateAbility;
@ -47,22 +48,22 @@ import mage.target.common.TargetNonlandPermanent;
*/ */
public class JediKnight extends CardImpl { public class JediKnight extends CardImpl {
private static final FilterNonlandPermanent filter = new FilterNonlandPermanent("nonland permanent you don't contro"); private static final FilterNonlandPermanent filter = new FilterNonlandPermanent("nonland permanent you don't control");
static { static {
filter.add(new ControllerPredicate(TargetController.NOT_YOU)); filter.add(new ControllerPredicate(TargetController.NOT_YOU));
} }
public JediKnight(UUID ownerId, CardSetInfo setInfo) { public JediKnight(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{G}{U}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}{U}{W}");
this.subtype.add("Human"); this.subtype.add("Human");
this.subtype.add("Jedi"); this.subtype.add("Jedi");
this.subtype.add("Knight"); this.subtype.add("Knight");
this.power = new MageInt(3); this.power = new MageInt(3);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// When Jedi Knight enters the battlefield, return another target nonland permanent you don't control to its owner's hands. // When Jedi Knight leaves the battlefield, return target nonland permanent you don't control to its owner's hands.
EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect()); Ability ability = new LeavesBattlefieldTriggeredAbility(new ReturnToHandTargetEffect(), false);
ability.addTarget(new TargetNonlandPermanent(filter)); ability.addTarget(new TargetNonlandPermanent(filter));
this.addAbility(ability); this.addAbility(ability);

View file

@ -41,7 +41,7 @@ import mage.target.TargetPlayer;
public class JediMindTrick extends CardImpl { public class JediMindTrick extends CardImpl {
public JediMindTrick(UUID ownerId, CardSetInfo setInfo) { public JediMindTrick(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{7}{U}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{6}{U}");
// You control target player during that player's next turn. // You control target player during that player's next turn.
this.getSpellAbility().addEffect(new ControlTargetPlayerNextTurnEffect()); this.getSpellAbility().addEffect(new ControlTargetPlayerNextTurnEffect());

View file

@ -25,26 +25,23 @@
* 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.f; package mage.cards.j;
import java.util.UUID; 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;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.Effect;
import mage.abilities.effects.common.ReturnToHandTargetEffect;
import mage.abilities.keyword.FlashAbility; import mage.abilities.keyword.FlashAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.TargetController; import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.AnotherPredicate; import mage.filter.predicate.permanent.AnotherPredicate;
import mage.filter.predicate.permanent.ControllerPredicate; import mage.filter.predicate.permanent.ControllerPredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetControlledCreaturePermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
@ -52,7 +49,7 @@ import mage.target.common.TargetCreaturePermanent;
* *
* @author Styxo * @author Styxo
*/ */
public class ForceAdept extends CardImpl { public class JediSentinel extends CardImpl {
private static final FilterControlledCreaturePermanent filter1 = new FilterControlledCreaturePermanent("another target creature you control"); private static final FilterControlledCreaturePermanent filter1 = new FilterControlledCreaturePermanent("another target creature you control");
private static final FilterCreaturePermanent filter2 = new FilterCreaturePermanent("creature you don't control"); private static final FilterCreaturePermanent filter2 = new FilterCreaturePermanent("creature you don't control");
@ -62,9 +59,9 @@ public class ForceAdept extends CardImpl {
filter2.add(new ControllerPredicate(TargetController.NOT_YOU)); filter2.add(new ControllerPredicate(TargetController.NOT_YOU));
} }
public ForceAdept(UUID ownerId, CardSetInfo setInfo) { public JediSentinel(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}{U}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}{U}{W}");
this.subtype.add("Mirialan"); this.subtype.add("Twi'lek");
this.subtype.add("Jedi"); this.subtype.add("Jedi");
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
@ -72,52 +69,22 @@ public class ForceAdept extends CardImpl {
// Flash // Flash
this.addAbility(FlashAbility.getInstance()); this.addAbility(FlashAbility.getInstance());
// When Force Adept enters the battlefield, return another target creature you control and target creature you don't control to their owner's hands. // When Jedi Sentinel enters the battlefield, return another target creature you control and target creature you don't control to their owners' hands.
Ability ability = new EntersBattlefieldTriggeredAbility(new ForceAdeptEffect()); Effect effect = new ReturnToHandTargetEffect(true);
effect.setText("return another target creature you control and target creature you don't control to their owners' hands");
Ability ability = new EntersBattlefieldTriggeredAbility(effect);
ability.addTarget(new TargetControlledCreaturePermanent(filter1)); ability.addTarget(new TargetControlledCreaturePermanent(filter1));
ability.addTarget(new TargetCreaturePermanent(filter2)); ability.addTarget(new TargetCreaturePermanent(filter2));
this.addAbility(ability); this.addAbility(ability);
} }
public ForceAdept(final ForceAdept card) { public JediSentinel(final JediSentinel card) {
super(card); super(card);
} }
@Override @Override
public ForceAdept copy() { public JediSentinel copy() {
return new ForceAdept(this); return new JediSentinel(this);
}
}
class ForceAdeptEffect extends OneShotEffect {
public ForceAdeptEffect() {
super(Outcome.ReturnToHand);
this.staticText = "return another target creature you control and target creature you don't control to their owners' hands";
}
public ForceAdeptEffect(final ForceAdeptEffect effect) {
super(effect);
}
@Override
public ForceAdeptEffect copy() {
return new ForceAdeptEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
boolean result = false;
Permanent permanent = game.getPermanent(source.getFirstTarget());
if (permanent != null) {
result |= permanent.moveToZone(Zone.HAND, source.getSourceId(), game, false);
}
permanent = game.getPermanent(source.getTargets().get(1).getFirstTarget());
if (permanent != null) {
result |= permanent.moveToZone(Zone.HAND, source.getSourceId(), game, false);
}
return result;
} }
} }

View file

@ -31,7 +31,6 @@ import java.util.UUID;
import mage.abilities.TriggeredAbilityImpl; import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.cost.AbilitiesCostReductionControllerEffect; import mage.abilities.effects.common.cost.AbilitiesCostReductionControllerEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.abilities.effects.keyword.ScryEffect; import mage.abilities.effects.keyword.ScryEffect;
import mage.abilities.keyword.MeditateAbility; import mage.abilities.keyword.MeditateAbility;
import mage.cards.Card; import mage.cards.Card;
@ -58,12 +57,9 @@ public class JediTraining extends CardImpl {
} }
public JediTraining(UUID ownerId, CardSetInfo setInfo) { public JediTraining(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{U}"); super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{U}");
// Jedi spells you cast cost {1} less to cast. // Meditate abilities you activate costs {1} less to activate.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1)));
// Meditate costs you pay cost {1} less.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new AbilitiesCostReductionControllerEffect(MeditateAbility.class, "Meditate"))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new AbilitiesCostReductionControllerEffect(MeditateAbility.class, "Meditate")));
// Whenever a Jedi creature you control meditates, scry 1. // Whenever a Jedi creature you control meditates, scry 1.
@ -103,11 +99,7 @@ class JediTrainingTriggeredAbility extends TriggeredAbilityImpl {
@Override @Override
public boolean checkTrigger(GameEvent event, Game game) { public boolean checkTrigger(GameEvent event, Game game) {
Card source = game.getPermanentOrLKIBattlefield(event.getSourceId()); Card source = game.getPermanentOrLKIBattlefield(event.getSourceId());
game.informPlayers("3 " + source.getLogName()); return event.getPlayerId().equals(getControllerId()) && source != null && JediTraining.filter.match(source, game);
if (event.getPlayerId().equals(getControllerId()) && source != null && JediTraining.filter.match(source, game)) {
return true;
}
return false;
} }
public String getRule() { public String getRule() {

View file

@ -29,8 +29,8 @@ package mage.cards.l;
import java.util.UUID; import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
@ -49,7 +49,7 @@ import mage.game.permanent.token.TrooperToken;
public class LAATGunship extends CardImpl { public class LAATGunship extends CardImpl {
public LAATGunship(UUID ownerId, CardSetInfo setInfo) { public LAATGunship(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{3}{W}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}{W}");
this.subtype.add("Starship"); this.subtype.add("Starship");
this.power = new MageInt(3); this.power = new MageInt(3);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
@ -57,8 +57,8 @@ public class LAATGunship extends CardImpl {
// When LAAT Gunship attacks, create a 1/1 white Trooper creature token on to battlefield tapped and attacking. // When LAAT Gunship attacks, create a 1/1 white Trooper creature token on to battlefield tapped and attacking.
this.addAbility(new AttacksTriggeredAbility(new CreateTokenEffect(new TrooperToken(), 1, true, true), false)); this.addAbility(new AttacksTriggeredAbility(new CreateTokenEffect(new TrooperToken(), 1, true, true), false));
// {W}: LAAT Gunship attacks gains spaceflight until the end of turn. // {W}: LAAT Gunship gains spaceflight until the end of turn. Activate this ability only as a sorcery
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilitySourceEffect(SpaceflightAbility.getInstance(), Duration.EndOfTurn), new ManaCostsImpl("{W}"))); this.addAbility(new ActivateAsSorceryActivatedAbility(Zone.BATTLEFIELD, new GainAbilitySourceEffect(SpaceflightAbility.getInstance(), Duration.EndOfTurn), new ManaCostsImpl("{W}")));
} }

View file

@ -38,9 +38,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.CardTypePredicate;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
/** /**
@ -49,22 +46,16 @@ import mage.target.common.TargetCreaturePermanent;
*/ */
public class LoyalTauntaun extends CardImpl { public class LoyalTauntaun extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("nonartifact creature");
static {
filter.add(Predicates.not(new CardTypePredicate(CardType.ARTIFACT)));
}
public LoyalTauntaun(UUID ownerId, CardSetInfo setInfo) { public LoyalTauntaun(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}");
this.subtype.add("Beast"); this.subtype.add("Beast");
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// {1}{G}, sacrifice Loyal Tauntaun: Regenerate target nonartifact creature. // {1}{G}, sacrifice Loyal Tauntaun: Regenerate target creature.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateTargetEffect(), new ManaCostsImpl("{1}{G}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateTargetEffect(), new ManaCostsImpl("{1}{G}"));
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -48,14 +48,14 @@ import mage.game.permanent.Permanent;
public class MantellianSavrip extends CardImpl { public class MantellianSavrip extends CardImpl {
public MantellianSavrip(UUID ownerId, CardSetInfo setInfo) { public MantellianSavrip(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}{G}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}");
this.subtype.add("Mantellian"); this.subtype.add("Mantellian");
this.subtype.add("Berserker"); this.subtype.add("Berserker");
this.power = new MageInt(4); this.power = new MageInt(4);
this.toughness = new MageInt(4); this.toughness = new MageInt(4);
// {5}{G}{G}: Monstrosity 3. // {5}{G}{G}: Monstrosity 2.
this.addAbility(new MonstrosityAbility("{5}{G}{G}", 3)); this.addAbility(new MonstrosityAbility("{5}{G}{G}", 2));
// Creatures with power less than Mantellian Savrip's power can't block it. // Creatures with power less than Mantellian Savrip's power can't block it.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new MantellianSavripRestrictionEffect())); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new MantellianSavripRestrictionEffect()));

View file

@ -29,23 +29,22 @@ package mage.cards.m;
import java.util.UUID; import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.effects.AsThoughEffectImpl; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.ContinuousEffect;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.CreateTokenEffect;
import mage.cards.Card; import mage.cards.Card;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.cards.Cards; import mage.cards.Cards;
import mage.cards.CardsImpl; import mage.cards.CardsImpl;
import mage.constants.AsThoughEffectType;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.Zone;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.FilterPermanent;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.token.DroidToken;
import mage.players.Player; import mage.players.Player;
import mage.target.targetpointer.FixedTargets;
/** /**
* *
@ -54,12 +53,13 @@ import mage.target.targetpointer.FixedTargets;
public class MarchOfTheDroids extends CardImpl { public class MarchOfTheDroids extends CardImpl {
public MarchOfTheDroids(UUID ownerId, CardSetInfo setInfo) { public MarchOfTheDroids(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{W}{U}{B}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{W}{U}{B}");
// Remove all repair counters from each exiled card you own. You may cast each card with repair counter removed this way without paying its mana cost until end of turn. // Remove all repair counters from all cards in your graveyard. Return each card with a repair counter removed this way from graveyard to the battlefield.
this.getSpellAbility().addEffect(new MarchOfTheDroidsEffect()); this.getSpellAbility().addEffect(new MarchOfTheDroidsEffect());
// Draw a card.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); // Create 1/1 colorles Droid artifact creature token for each Droid you control.
this.getSpellAbility().addEffect(new CreateTokenEffect(new DroidToken(), new PermanentsOnBattlefieldCount(new FilterPermanent("Droid", "Droid you control"))));
} }
public MarchOfTheDroids(final MarchOfTheDroids card) { public MarchOfTheDroids(final MarchOfTheDroids card) {
@ -76,7 +76,7 @@ class MarchOfTheDroidsEffect extends OneShotEffect {
public MarchOfTheDroidsEffect() { public MarchOfTheDroidsEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "Remove all repair counters from each exiled card you own. You may cast each card with repair counter removed this way without paying its mana cost until end of turn"; this.staticText = "Remove all repair counters from all cards in your graveyard. Return each card with a repair counter removed this way from graveyard to the battlefield";
} }
public MarchOfTheDroidsEffect(final MarchOfTheDroidsEffect effect) { public MarchOfTheDroidsEffect(final MarchOfTheDroidsEffect effect) {
@ -92,61 +92,21 @@ class MarchOfTheDroidsEffect extends OneShotEffect {
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) {
Cards castable = new CardsImpl(); Cards cardsToReturn = new CardsImpl();
for (Card card : controller.getGraveyard().getCards(game)) { for (Card card : controller.getGraveyard().getCards(game)) {
if (card.getOwnerId().equals(controller.getId()) && card.getCounters(game).getCount(CounterType.REPAIR) > 0) { if (card.getOwnerId().equals(controller.getId()) && card.getCounters(game).getCount(CounterType.REPAIR) > 0) {
int number = card.getCounters(game).getCount(CounterType.REPAIR); int number = card.getCounters(game).getCount(CounterType.REPAIR);
if (number > 0) { if (number > 0) {
castable.add(card); cardsToReturn.add(card);
card.removeCounters(CounterType.REPAIR.createInstance(number), game); card.removeCounters(CounterType.REPAIR.createInstance(number), game);
} }
} }
} }
if (!castable.isEmpty()) { if (!cardsToReturn.isEmpty()) {
ContinuousEffect effect = new MarchOfTheDroidsCastFromExileEffect(); controller.moveCards(cardsToReturn, Zone.BATTLEFIELD, source, game);
effect.setTargetPointer(new FixedTargets(castable, game));
game.addEffect(effect, source);
} }
return true; return true;
} }
return false; return false;
} }
} }
class MarchOfTheDroidsCastFromExileEffect extends AsThoughEffectImpl {
public MarchOfTheDroidsCastFromExileEffect() {
super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit);
staticText = "You may play the card from exile without paying its mana cost until end of turn";
}
public MarchOfTheDroidsCastFromExileEffect(final MarchOfTheDroidsCastFromExileEffect effect) {
super(effect);
}
@Override
public boolean apply(Game game, Ability source) {
return true;
}
@Override
public MarchOfTheDroidsCastFromExileEffect copy() {
return new MarchOfTheDroidsCastFromExileEffect(this);
}
@Override
public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) {
if (source.getControllerId().equals(affectedControllerId)
&& getTargetPointer().getTargets(game, source).contains(objectId)) {
Card card = game.getCard(objectId);
Player controller = game.getPlayer(source.getControllerId());
if (card != null && controller != null) {
if (!card.getCardType().contains(CardType.LAND)) {
controller.setCastSourceIdWithAlternateMana(objectId, null, null);
return true;
}
}
}
return false;
}
}

View file

@ -25,11 +25,11 @@
* 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.t; package mage.cards.m;
import java.util.UUID; import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.keyword.ProvokeAbility; import mage.abilities.keyword.MonstrosityAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -38,25 +38,26 @@ import mage.constants.CardType;
* *
* @author Styxo * @author Styxo
*/ */
public class TwilekSeductess extends CardImpl { public class MassiffSwarm extends CardImpl {
public TwilekSeductess(UUID ownerId, CardSetInfo setInfo) { public MassiffSwarm(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
this.subtype.add("Twi'lek"); this.subtype.add("Crocodile");
this.power = new MageInt(2); this.subtype.add("Beast");
this.toughness = new MageInt(2); this.power = new MageInt(3);
this.toughness = new MageInt(3);
// Whenever Twi'lek Seductess attacks, you may have target creature defending player controls untap and block it if able. // {6}{G}: Monstrosity 3.
this.addAbility(new ProvokeAbility("Whenever {this} attacks, you may have target creature defending player controls untap and block it if able.")); this.addAbility(new MonstrosityAbility("{6}{G}", 3));
} }
public TwilekSeductess(final TwilekSeductess card) { public MassiffSwarm(final MassiffSwarm card) {
super(card); super(card);
} }
@Override @Override
public TwilekSeductess copy() { public MassiffSwarm copy() {
return new TwilekSeductess(this); return new MassiffSwarm(this);
} }
} }

View file

@ -44,7 +44,7 @@ import mage.constants.CardType;
public class MonCalamariInitiate extends CardImpl { public class MonCalamariInitiate extends CardImpl {
public MonCalamariInitiate(UUID ownerId, CardSetInfo setInfo) { public MonCalamariInitiate(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{U}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}{U}");
this.subtype.add("Calamari"); this.subtype.add("Calamari");
this.subtype.add("Jedi"); this.subtype.add("Jedi");
this.power = new MageInt(3); this.power = new MageInt(3);

View file

@ -31,7 +31,7 @@ import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.Effect; import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DoIfCostPaid; import mage.abilities.effects.common.DoIfCostPaid;
import mage.abilities.effects.common.ExileTargetForSourceEffect; import mage.abilities.effects.common.ExileTargetForSourceEffect;
@ -57,7 +57,7 @@ public class N1Starfighter extends CardImpl {
} }
public N1Starfighter(UUID ownerId, CardSetInfo setInfo) { public N1Starfighter(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{1}{W/U}{W/U}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{1}{W/U}{W/U}");
this.subtype.add("Starship"); this.subtype.add("Starship");
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
@ -65,8 +65,8 @@ public class N1Starfighter extends CardImpl {
// Spaceflight // Spaceflight
this.addAbility(SpaceflightAbility.getInstance()); this.addAbility(SpaceflightAbility.getInstance());
// Whenever N-1 Starfighter deals combat damage to a player, you may pay {1}. If you do, exile another creature you control, then return that card to the battlefield under its owner's control. // Whenever N-1 Starfighter deals combat damage to a player, you may pay {1}{W/U}. If you do, exile another creature you control, then return that card to the battlefield under its owner's control.
Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(new DoIfCostPaid(new ExileTargetForSourceEffect(), new GenericManaCost(1)), false); Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(new DoIfCostPaid(new ExileTargetForSourceEffect(), new ManaCostsImpl("{1}{W/U}")), false);
Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, true); Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, true);
effect.setText(", then return the card to the battlefield under their owner's control"); effect.setText(", then return the card to the battlefield under their owner's control");
ability.addEffect(effect); ability.addEffect(effect);

View file

@ -0,0 +1,77 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.cards.n;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
import mage.abilities.keyword.SpaceflightAbility;
import mage.abilities.keyword.VigilanceAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.AnotherPredicate;
/**
*
* @author Styxo
*/
public class NebulonBFrigate extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another creature you control");
static {
filter.add(new AnotherPredicate());
}
public NebulonBFrigate(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}{W}{W}");
this.subtype.add("Starship");
this.power = new MageInt(4);
this.toughness = new MageInt(2);
// Spaceflight
this.addAbility(SpaceflightAbility.getInstance());
// Whenever Nebulon-B Frigate enters the battlefield, creatures you control gain vigilance until end of turn.
this.addAbility(new EntersBattlefieldTriggeredAbility(new GainAbilityControlledEffect(VigilanceAbility.getInstance(), Duration.EndOfTurn, new FilterCreaturePermanent("creatures you control")), false));
}
public NebulonBFrigate(final NebulonBFrigate card) {
super(card);
}
@Override
public NebulonBFrigate copy() {
return new NebulonBFrigate(this);
}
}

View file

@ -46,15 +46,15 @@ import mage.constants.Zone;
public class NeophyteHateflayer extends CardImpl { public class NeophyteHateflayer extends CardImpl {
public NeophyteHateflayer(UUID ownerId, CardSetInfo setInfo) { public NeophyteHateflayer(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B}");
this.subtype.add("Human"); this.subtype.add("Human");
this.subtype.add("Sith"); this.subtype.add("Sith");
this.power = new MageInt(1); this.power = new MageInt(1);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// {T}, Pay 2 life: Each opponent loses 1 life. // {T}, Pay 1 life: Each opponent loses 1 life.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new LoseLifeOpponentsEffect(1), new TapSourceCost()); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new LoseLifeOpponentsEffect(1), new TapSourceCost());
ability.addCost(new PayLifeCost(2)); ability.addCost(new PayLifeCost(1));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -62,7 +62,7 @@ public class NuteGunray extends CardImpl {
} }
public NuteGunray(UUID ownerId, CardSetInfo setInfo) { public NuteGunray(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}{U}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{W}{U}{B}");
this.supertype.add("Legendary"); this.supertype.add("Legendary");
this.subtype.add("Neimidian"); this.subtype.add("Neimidian");
this.subtype.add("Advisor"); this.subtype.add("Advisor");

View file

@ -0,0 +1,162 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.cards.o;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.RestrictionEffect;
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
import mage.abilities.keyword.BountyAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.counters.CounterType;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
/**
*
* @author Styxo
*/
public class OpenSeason extends CardImpl {
public OpenSeason(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}");
// When {this} enters the battlefield, for each opponent, put a bounty counter on target creature that player controls
Effect effect = new AddCountersTargetEffect(CounterType.BOUNTY.createInstance());
effect.setText("for each opponent, put a bounty counter on target creature that player controls");
Ability ability = new EntersBattlefieldTriggeredAbility(effect);
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
// Creatures your opponent control with bounty counters on them can't activate abilities
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new OpenSeasonRestrictionEffect()));
// Bounty - Whenever a creature an opponent controls with a bounty counter on it dies, that creature's controller loses 2 life. Each other player gains 2 life.
this.addAbility(new BountyAbility(new OpenSeasonEffect(), false, true));
}
@Override
public void adjustTargets(Ability ability, Game game) {
if (ability instanceof EntersBattlefieldTriggeredAbility) {
ability.getTargets().clear();
for (UUID opponentId : game.getOpponents(ability.getControllerId())) {
Player opponent = game.getPlayer(opponentId);
if (opponent != null) {
ability.addTarget(new TargetPermanent(new FilterCreaturePermanent("creature from opponent " + opponent.getLogName())));
}
}
}
}
public OpenSeason(final OpenSeason card) {
super(card);
}
@Override
public OpenSeason copy() {
return new OpenSeason(this);
}
}
class OpenSeasonRestrictionEffect extends RestrictionEffect {
public OpenSeasonRestrictionEffect() {
super(Duration.WhileOnBattlefield);
staticText = "Creatures your opponent control with bounty counters on them can't activate abilities";
}
public OpenSeasonRestrictionEffect(final OpenSeasonRestrictionEffect effect) {
super(effect);
}
@Override
public boolean applies(Permanent permanent, Ability source, Game game) {
return permanent.getCardType().contains(CardType.CREATURE)
&& permanent.getCounters(game).getCount(CounterType.BOUNTY) > 0
&& game.getOpponents(source.getControllerId()).contains(permanent.getControllerId());
}
@Override
public boolean canUseActivatedAbilities(Permanent permanent, Ability source, Game game) {
return false;
}
@Override
public OpenSeasonRestrictionEffect copy() {
return new OpenSeasonRestrictionEffect(this);
}
}
class OpenSeasonEffect extends OneShotEffect {
public OpenSeasonEffect() {
super(Outcome.LoseLife);
staticText = "that creature's controler loses 2 life. Each other player gains 2 life";
}
public OpenSeasonEffect(final OpenSeasonEffect effect) {
super(effect);
}
@Override
public OpenSeasonEffect copy() {
return new OpenSeasonEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
UUID controller = game.getControllerId(source.getFirstTarget());
if (controller != null) {
game.getPlayer(controller).loseLife(2, game, false);
for (UUID playerId : game.getOpponents(controller)) {
Player player = game.getPlayer(playerId);
if (player != null) {
player.gainLife(2, game);
}
}
return true;
}
return false;
}
}

View file

@ -32,13 +32,12 @@ import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.common.FightTargetsEffect; import mage.abilities.effects.common.FightTargetsEffect;
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.counters.CounterType;
import mage.filter.predicate.permanent.AnotherPredicate; import mage.target.common.TargetCreaturePermanent;
import mage.target.common.TargetControlledCreaturePermanent;
import mage.target.common.TargetOpponentsCreaturePermanent;
/** /**
* *
@ -46,23 +45,18 @@ import mage.target.common.TargetOpponentsCreaturePermanent;
*/ */
public class OuterRimSlaver extends CardImpl { public class OuterRimSlaver extends CardImpl {
private static final FilterControlledCreaturePermanent controlledCreature = new FilterControlledCreaturePermanent("another target creature you control");
static {
controlledCreature.add(new AnotherPredicate());
}
public OuterRimSlaver(UUID ownerId, CardSetInfo setInfo) { public OuterRimSlaver(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{B}{R}{G}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B}{R}{G}");
this.subtype.add("Trandoshan"); this.subtype.add("Trandoshan");
this.subtype.add("Hunter"); this.subtype.add("Rogue");
this.power = new MageInt(3); this.power = new MageInt(3);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// When Outer Rim Slaver enters the battlefield, you may have another target creature you control fight target creature an opponent controls. // When Outer Rim Slaver enters the battlefield, you may put a bounty counter on target creature. If you do, another target creature fights that creature
Ability ability = new EntersBattlefieldTriggeredAbility(new FightTargetsEffect("another target creature you control fight target creature an opponent controls"), true); Ability ability = new EntersBattlefieldTriggeredAbility(new AddCountersTargetEffect(CounterType.BOUNTY.createInstance()), true);
ability.addTarget(new TargetControlledCreaturePermanent(controlledCreature)); ability.addEffect(new FightTargetsEffect("another target creature fights that creature"));
ability.addTarget(new TargetOpponentsCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -46,7 +46,7 @@ import mage.target.TargetSpell;
* *
* @author Styxo * @author Styxo
*/ */
public class PersonalEnergyField extends CardImpl { public class PersonalEnergyShield extends CardImpl {
private final static FilterSpell filter = new FilterSpell("spell that targets you or a permanent you control"); private final static FilterSpell filter = new FilterSpell("spell that targets you or a permanent you control");
@ -54,7 +54,7 @@ public class PersonalEnergyField extends CardImpl {
filter.add(new PersonalEnergyFieldPredicate()); filter.add(new PersonalEnergyFieldPredicate());
} }
public PersonalEnergyField(UUID ownerId, CardSetInfo setInfo) { public PersonalEnergyShield(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{U}"); super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{U}");
// Counter target spell that targets you or a permanent you control. // Counter target spell that targets you or a permanent you control.
@ -62,13 +62,13 @@ public class PersonalEnergyField extends CardImpl {
this.getSpellAbility().addTarget(new TargetSpell(filter)); this.getSpellAbility().addTarget(new TargetSpell(filter));
} }
public PersonalEnergyField(final PersonalEnergyField card) { public PersonalEnergyShield(final PersonalEnergyShield card) {
super(card); super(card);
} }
@Override @Override
public PersonalEnergyField copy() { public PersonalEnergyShield copy() {
return new PersonalEnergyField(this); return new PersonalEnergyShield(this);
} }
} }

View file

@ -29,22 +29,20 @@ package mage.cards.p;
import java.util.UUID; import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.Mode; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.effects.ReplacementEffectImpl;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.keyword.MeditateAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.mageobject.AbilityPredicate;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.events.EntersTheBattlefieldEvent;
import mage.game.stack.StackAbility; import mage.game.events.GameEvent;
import mage.players.Player; import mage.game.events.GameEvent.EventType;
import mage.target.common.TargetTriggeredAbility; import mage.game.events.NumberOfTriggersEvent;
import mage.game.events.ZoneChangeEvent;
/** /**
* *
@ -52,19 +50,12 @@ import mage.target.common.TargetTriggeredAbility;
*/ */
public class PrecipiceOfMortis extends CardImpl { public class PrecipiceOfMortis extends CardImpl {
protected static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("creature with meditate");
static {
filter.add(new AbilityPredicate(MeditateAbility.class));
}
public PrecipiceOfMortis(UUID ownerId, CardSetInfo setInfo) { public PrecipiceOfMortis(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{G}{U}{W}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{G}{U}{W}");
// If a Jedi entering or leaving the battlefield causes a triggered ability of a permanent you control to trigger, that ability triggers additional time
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new PrecipiceOfMortisEffect()));
// Whenever a creature with meditate enters the battlefield under your control, you may copy target triggered ability you control. You may choose new targets for that ability.
Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new PrecipiceOfMortisEffect(), filter, true);
ability.addTarget(new TargetTriggeredAbility());
this.addAbility(ability);
} }
public PrecipiceOfMortis(final PrecipiceOfMortis card) { public PrecipiceOfMortis(final PrecipiceOfMortis card) {
@ -77,40 +68,67 @@ public class PrecipiceOfMortis extends CardImpl {
} }
} }
class PrecipiceOfMortisEffect extends OneShotEffect { class PrecipiceOfMortisEffect extends ReplacementEffectImpl {
public PrecipiceOfMortisEffect() { public PrecipiceOfMortisEffect() {
super(Outcome.Copy); super(Duration.WhileOnBattlefield, Outcome.Benefit);
staticText = "If a Jedi entering or leaving the battlefield causes a triggered ability of a permanent you control to trigger, that ability triggers additional time";
} }
public PrecipiceOfMortisEffect(final PrecipiceOfMortisEffect effect) { public PrecipiceOfMortisEffect(final PrecipiceOfMortisEffect effect) {
super(effect); super(effect);
} }
@Override
public boolean apply(Game game, Ability source) {
StackAbility stackAbility = (StackAbility) game.getStack().getStackObject(targetPointer.getFirst(game, source));
if (stackAbility != null) {
Player controller = game.getPlayer(source.getControllerId());
Permanent sourcePermanent = game.getPermanent(source.getSourceId());
if (controller != null && sourcePermanent != null) {
stackAbility.createCopyOnStack(game, source, source.getControllerId(), true);
return true;
}
}
return false;
}
@Override @Override
public PrecipiceOfMortisEffect copy() { public PrecipiceOfMortisEffect copy() {
return new PrecipiceOfMortisEffect(this); return new PrecipiceOfMortisEffect(this);
} }
@Override @Override
public String getText(Mode mode) { public boolean checksEventType(GameEvent event, Game game) {
StringBuilder sb = new StringBuilder(); return event.getType() == EventType.NUMBER_OF_TRIGGERS;
sb.append("copy ").append(mode.getTargets().get(0).getTargetName()).append(". You may choose new targets for that ability"); }
return sb.toString();
@Override
public boolean applies(GameEvent event, Ability source, Game game) {
if (event instanceof NumberOfTriggersEvent) {
NumberOfTriggersEvent numberOfTriggersEvent = (NumberOfTriggersEvent) event;
// Only triggers of the controller of Precipice of Mortis
if (source.getControllerId().equals(event.getPlayerId())) {
GameEvent sourceEvent = numberOfTriggersEvent.getSourceEvent();
// enters triggers
if (sourceEvent.getType() == EventType.ENTERS_THE_BATTLEFIELD && sourceEvent instanceof EntersTheBattlefieldEvent) {
EntersTheBattlefieldEvent entersTheBattlefieldEvent = (EntersTheBattlefieldEvent) sourceEvent;
// Only for entering Jedis
if (entersTheBattlefieldEvent.getTarget().getSubtype(game).contains("Jedi")) {
// Only for triggers of permanents
if (game.getPermanent(numberOfTriggersEvent.getSourceId()) != null) {
return true;
}
}
}
// leaves triggers
if (sourceEvent.getType() == EventType.ZONE_CHANGE && sourceEvent instanceof ZoneChangeEvent) {
ZoneChangeEvent leavesTheBattlefieldEvent = (ZoneChangeEvent) sourceEvent;
if (leavesTheBattlefieldEvent.getFromZone() == Zone.BATTLEFIELD) {
// Only for leaving Jedis
if (leavesTheBattlefieldEvent.getTarget().getSubtype(game).contains("Jedi")) {
// Only for triggers of permanents
if (game.getPermanent(numberOfTriggersEvent.getSourceId()) != null) {
return true;
}
}
}
}
}
}
return false;
}
@Override
public boolean replaceEvent(GameEvent event, Ability source, Game game) {
event.setAmount(event.getAmount() + 1);
return false;
} }
} }

View file

@ -44,9 +44,9 @@ import mage.target.common.TargetCreaturePermanent;
* *
* @author Styxo * @author Styxo
*/ */
public class PrimalInstict extends CardImpl { public class PrimalInstinct extends CardImpl {
public PrimalInstict(UUID ownerId, CardSetInfo setInfo) { public PrimalInstinct(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{R}{G}"); super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{R}{G}");
// Put a +1/+1 counter on target creature, then double the number of +1/+1 counters on that creature. // Put a +1/+1 counter on target creature, then double the number of +1/+1 counters on that creature.
@ -54,13 +54,13 @@ public class PrimalInstict extends CardImpl {
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
} }
public PrimalInstict(final PrimalInstict card) { public PrimalInstinct(final PrimalInstinct card) {
super(card); super(card);
} }
@Override @Override
public PrimalInstict copy() { public PrimalInstinct copy() {
return new PrimalInstict(this); return new PrimalInstinct(this);
} }
} }

View file

@ -42,7 +42,7 @@ import mage.constants.CardType;
public class RagingReek extends CardImpl { public class RagingReek extends CardImpl {
public RagingReek(UUID ownerId, CardSetInfo setInfo) { public RagingReek(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{R}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{R}");
this.subtype.add("Beast"); this.subtype.add("Beast");
this.power = new MageInt(4); this.power = new MageInt(4);
this.toughness = new MageInt(4); this.toughness = new MageInt(4);
@ -50,8 +50,8 @@ public class RagingReek extends CardImpl {
// Raging Reek attacks each turn if able. // Raging Reek attacks each turn if able.
this.addAbility(new AttacksEachTurnStaticAbility()); this.addAbility(new AttacksEachTurnStaticAbility());
//{4}{R}{R}: Monstrosity 2 //{5}{R}: Monstrosity 2
this.addAbility(new MonstrosityAbility("{4}{R}{R}", 2)); this.addAbility(new MonstrosityAbility("{5}{R}", 2));
} }
public RagingReek(final RagingReek card) { public RagingReek(final RagingReek card) {

View file

@ -64,13 +64,13 @@ public class RavenousWampa extends CardImpl {
public static final String RAVENOUS_WAMPA_STATE_VALUE_KEY_PREFIX = "TOU_SAC_CRE"; public static final String RAVENOUS_WAMPA_STATE_VALUE_KEY_PREFIX = "TOU_SAC_CRE";
public RavenousWampa(UUID ownerId, CardSetInfo setInfo) { public RavenousWampa(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R/W}{R/W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R/W}{R/W}");
this.subtype.add("Beast"); this.subtype.add("Beast");
this.power = new MageInt(4); this.power = new MageInt(4);
this.toughness = new MageInt(4); this.toughness = new MageInt(4);
// {1}{G}, Sacrifice another creature: Monstrosity 2. // {2}{G}, Sacrifice another creature: Monstrosity 2.
Ability ability = new MonstrosityAbility("{1}{G}", 2); Ability ability = new MonstrosityAbility("{2}{G}", 2);
ability.addCost(new RavenousWampaSacrificeTargetCost(new TargetControlledCreaturePermanent(filter))); ability.addCost(new RavenousWampaSacrificeTargetCost(new TargetControlledCreaturePermanent(filter)));
this.addAbility(ability); this.addAbility(ability);

View file

@ -54,19 +54,19 @@ import mage.watchers.common.PlayerLostLifeWatcher;
public class Revenge extends CardImpl { public class Revenge extends CardImpl {
public Revenge(UUID ownerId, CardSetInfo setInfo) { public Revenge(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{R}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{R}");
// Target creature you control gets +4/+0 until end of turn before it fights if you lost life this turn.
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
new RevengeEffect(),
LostLifeCondition.getInstance(),
"Target creature you control gets +4/+0 until end of turn before it fights if you lost life this turn"));
// Target creature you control fights target creature an opponent controls. // Target creature you control fights target creature an opponent controls.
this.getSpellAbility().addEffect(new FightTargetsEffect()); this.getSpellAbility().addEffect(new FightTargetsEffect());
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
this.getSpellAbility().addTarget(new TargetOpponentsCreaturePermanent()); this.getSpellAbility().addTarget(new TargetOpponentsCreaturePermanent());
// If you lost life this turn, that creature you control gets +4/+0 until end of turn.
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
new RevengeEffect(),
LostLifeCondition.getInstance(),
"If you lost life this turn, that creature you control gets +4/+0 until end of turn"));
this.getSpellAbility().addWatcher(new PlayerLostLifeWatcher()); this.getSpellAbility().addWatcher(new PlayerLostLifeWatcher());
} }

View file

@ -29,11 +29,17 @@ package mage.cards.r;
import java.util.UUID; import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.MonstrousCondition;
import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
import mage.abilities.keyword.MonstrosityAbility; import mage.abilities.keyword.MonstrosityAbility;
import mage.abilities.keyword.VigilanceAbility; import mage.abilities.keyword.VigilanceAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Zone;
/** /**
* *
@ -42,16 +48,21 @@ import mage.constants.CardType;
public class RidingRonto extends CardImpl { public class RidingRonto extends CardImpl {
public RidingRonto(UUID ownerId, CardSetInfo setInfo) { public RidingRonto(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}");
this.subtype.add("Beast"); this.subtype.add("Beast");
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(4); this.toughness = new MageInt(4);
// Vigilance // {3}{W}{W}: Monstrosity 2.
this.addAbility(VigilanceAbility.getInstance());
// {3}{W}{W}: Monstrosity 3.
this.addAbility(new MonstrosityAbility("{3}{W}{W}", 3)); this.addAbility(new MonstrosityAbility("{3}{W}{W}", 3));
// As long as Riding Ronto is monstrous, it has vigilance
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(
new GainAbilityControlledEffect(VigilanceAbility.getInstance(), Duration.WhileOnBattlefield),
MonstrousCondition.getInstance(),
"As long as Riding Ronto is monstrous, it has vigilance")
));
} }
public RidingRonto(final RidingRonto card) { public RidingRonto(final RidingRonto card) {

View file

@ -41,7 +41,7 @@ import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.target.common.TargetCreatureOrPlayer; import mage.target.common.TargetOpponentsCreaturePermanent;
/** /**
* *
@ -50,17 +50,17 @@ import mage.target.common.TargetCreatureOrPlayer;
public class RocketTrooper extends CardImpl { public class RocketTrooper extends CardImpl {
public RocketTrooper(UUID ownerId, CardSetInfo setInfo) { public RocketTrooper(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{R}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}");
this.subtype.add("Human"); this.subtype.add("Human");
this.subtype.add("Trooper"); this.subtype.add("Trooper");
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// Trooper creatures you control have "Whenever this creature enters the battlefield, it deals 1 damage to target creature or player". // Trooper creatures you control have "Whenever this creature enters the battlefield, it deals 1 damage to target creature an opponent controls".
Effect effect = new DamageTargetEffect(1); Effect effect = new DamageTargetEffect(1);
effect.setText("Whenever this creature enters the battlefield, it deals 1 damage to target creature or player"); effect.setText("Whenever this creature enters the battlefield, it deals 1 damage to target creature an opponent controls");
Ability ability = new EntersBattlefieldTriggeredAbility(effect, false, true); Ability ability = new EntersBattlefieldTriggeredAbility(effect, false, true);
ability.addTarget(new TargetCreatureOrPlayer()); ability.addTarget(new TargetOpponentsCreaturePermanent());
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
new GainAbilityControlledEffect(ability, Duration.WhileOnBattlefield, new GainAbilityControlledEffect(ability, Duration.WhileOnBattlefield,
new FilterCreaturePermanent("Trooper", "Trooper creatures"), false))); new FilterCreaturePermanent("Trooper", "Trooper creatures"), false)));

View file

@ -62,8 +62,6 @@ public class SabaccGame extends CardImpl {
public SabaccGame(UUID ownerId, CardSetInfo setInfo) { public SabaccGame(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{U}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{U}");
// Almost the same as unimplemented Mogg Assassin from Exodus
// Not exactly. Because the permanent choosen by opponent does not have the target word in rule text it is chosen during resolution.
/* /*
* Choose target permanent an opponent controls. That opponent chooses a permanent you control. * Choose target permanent an opponent controls. That opponent chooses a permanent you control.
* Flip a coin. If you win the flip, gain control of the permanent you chose. * Flip a coin. If you win the flip, gain control of the permanent you chose.

View file

@ -33,6 +33,7 @@ import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.costs.common.SacrificeTargetCost; import mage.abilities.costs.common.SacrificeTargetCost;
import mage.abilities.effects.common.DoIfCostPaid; import mage.abilities.effects.common.DoIfCostPaid;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.GainLifeEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -46,14 +47,16 @@ import mage.target.common.TargetControlledPermanent;
public class SalvageSquad extends CardImpl { public class SalvageSquad extends CardImpl {
public SalvageSquad(UUID ownerId, CardSetInfo setInfo) { public SalvageSquad(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{W}{U}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{W}{U}{B}");
this.subtype.add("Jawa"); this.subtype.add("Jawa");
this.subtype.add("Artificier"); this.subtype.add("Artificier");
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// When you Salvage Squad enters the battlefied, you may sacrifice an artifcat. If you do, draw two cards. // When you Salvage Squad enters the battlefied, you may sacrifice an artifact. If you do, you gain 2 life and draw two cards.
this.addAbility(new EntersBattlefieldTriggeredAbility(new DoIfCostPaid(new DrawCardSourceControllerEffect(2), new SacrificeTargetCost(new TargetControlledPermanent(new FilterControlledArtifactPermanent()))))); DoIfCostPaid effect = new DoIfCostPaid(new GainLifeEffect(2), new SacrificeTargetCost(new TargetControlledPermanent(new FilterControlledArtifactPermanent())));
effect.addEffect(new DrawCardSourceControllerEffect(2));
this.addAbility(new EntersBattlefieldTriggeredAbility(effect));
} }
public SalvageSquad(final SalvageSquad card) { public SalvageSquad(final SalvageSquad card) {

View file

@ -52,9 +52,9 @@ public class ShaakHerd extends CardImpl {
} }
public ShaakHerd(UUID ownerId, CardSetInfo setInfo) { public ShaakHerd(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
this.subtype.add("Beast"); this.subtype.add("Beast");
this.power = new MageInt(2); this.power = new MageInt(1);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// When Shaak Herd dies, you may return another target creature card from your graveyard to your hand. // When Shaak Herd dies, you may return another target creature card from your graveyard to your hand.

View file

@ -57,17 +57,17 @@ public class SithAssassin extends CardImpl {
} }
public SithAssassin(UUID ownerId, CardSetInfo setInfo) { public SithAssassin(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}");
this.subtype.add("Pureblood"); this.subtype.add("Pureblood");
this.subtype.add("Sith"); this.subtype.add("Sith");
this.power = new MageInt(1); this.power = new MageInt(3);
this.toughness = new MageInt(1); this.toughness = new MageInt(2);
// <i>Hate</i> &mdash; When Sith Assassin enters the battlefield, if opponent lost life from source other than combat damage this turn, destroy target nonblack creature. // <i>Hate</i> &mdash; When Sith Assassin enters the battlefield, if opponent lost life from source other than combat damage this turn, you may destroy target nonblack creature.
Ability ability = new ConditionalTriggeredAbility( Ability ability = new ConditionalTriggeredAbility(
new EntersBattlefieldTriggeredAbility(new DestroyTargetEffect()), new EntersBattlefieldTriggeredAbility(new DestroyTargetEffect(), true),
HateCondition.getInstance(), HateCondition.getInstance(),
"<i>Hate</i> - When {this} enters the battlefield, if an opponent lost life from a source other than combat damage this turn, destroy target nonblack creature."); "<i>Hate</i> - When {this} enters the battlefield, if an opponent lost life from a source other than combat damage this turn, you may destroy target nonblack creature.");
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(filter));
this.addAbility(ability, new LifeLossOtherFromCombatWatcher()); this.addAbility(ability, new LifeLossOtherFromCombatWatcher());
} }

View file

@ -58,14 +58,14 @@ import mage.target.common.TargetControlledCreaturePermanent;
public class SithEvoker extends CardImpl { public class SithEvoker extends CardImpl {
public SithEvoker(UUID ownerId, CardSetInfo setInfo) { public SithEvoker(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}");
this.subtype.add("Chiss"); this.subtype.add("Chiss");
this.subtype.add("Sith"); this.subtype.add("Sith");
this.power = new MageInt(3); this.power = new MageInt(3);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// {T}, {2}, Sacrifice a creature: You gain life equal to that creature's power or toughness. // {T}, {B}, Sacrifice a creature: You gain life equal to that creature's power or toughness.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SithEvokerEffect(), new ManaCostsImpl("{2}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SithEvokerEffect(), new ManaCostsImpl("{B}"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(new FilterControlledCreaturePermanent("a creature")))); ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(new FilterControlledCreaturePermanent("a creature"))));

View file

@ -30,6 +30,7 @@ package mage.cards.s;
import java.util.UUID; import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.TriggeredAbilityImpl; import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
import mage.abilities.keyword.HasteAbility; import mage.abilities.keyword.HasteAbility;
import mage.abilities.keyword.TrampleAbility; import mage.abilities.keyword.TrampleAbility;
@ -48,13 +49,13 @@ import mage.game.events.GameEvent;
public class SithRavager extends CardImpl { public class SithRavager extends CardImpl {
public SithRavager(UUID ownerId, CardSetInfo setInfo) { public SithRavager(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{R}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}");
this.subtype.add("Human"); this.subtype.add("Human");
this.subtype.add("Sith"); this.subtype.add("Sith");
this.power = new MageInt(4); this.power = new MageInt(3);
this.toughness = new MageInt(2); this.toughness = new MageInt(1);
// <i>Hate</i> &mdash; Whenever an opponent loses life from a source other than combat damage, Sith Ravager gains haste and trample until end of turn. // <i>Hate</i> &mdash; Whenever an opponent loses life from a source other than combat damage, Sith Ravager gets +1/+0 and gains haste and trample until end of turn.
this.addAbility(new LostNonCombatLifeTriggeredAbility()); this.addAbility(new LostNonCombatLifeTriggeredAbility());
} }
@ -70,7 +71,8 @@ public class SithRavager extends CardImpl {
public class LostNonCombatLifeTriggeredAbility extends TriggeredAbilityImpl { public class LostNonCombatLifeTriggeredAbility extends TriggeredAbilityImpl {
public LostNonCombatLifeTriggeredAbility() { public LostNonCombatLifeTriggeredAbility() {
super(Zone.BATTLEFIELD, new GainAbilitySourceEffect(HasteAbility.getInstance(), Duration.EndOfTurn), false); super(Zone.BATTLEFIELD, new BoostSourceEffect(1, 0, Duration.EndOfTurn), false);
addEffect(new GainAbilitySourceEffect(HasteAbility.getInstance(), Duration.EndOfTurn));
addEffect(new GainAbilitySourceEffect(TrampleAbility.getInstance(), Duration.EndOfTurn)); addEffect(new GainAbilitySourceEffect(TrampleAbility.getInstance(), Duration.EndOfTurn));
} }

View file

@ -51,7 +51,7 @@ public class SithSorcerer extends CardImpl {
this.subtype.add("Human"); this.subtype.add("Human");
this.subtype.add("Sith"); this.subtype.add("Sith");
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(3); this.toughness = new MageInt(2);
// When Sith Sorcerer enters the battlefield, scry 2. // When Sith Sorcerer enters the battlefield, scry 2.
this.addAbility(new EntersBattlefieldTriggeredAbility(new ScryEffect(2))); this.addAbility(new EntersBattlefieldTriggeredAbility(new ScryEffect(2)));

View file

@ -43,7 +43,7 @@ import mage.target.common.TargetControlledCreaturePermanent;
public class SurpriseManeuver extends CardImpl { public class SurpriseManeuver extends CardImpl {
public SurpriseManeuver(UUID ownerId, CardSetInfo setInfo) { public SurpriseManeuver(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{U}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{U}");
// Untap up to two target creatures you control. // Untap up to two target creatures you control.
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent(0, 2)); this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent(0, 2));

View file

@ -0,0 +1,118 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.cards.s;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.combat.CantBlockTargetEffect;
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.counters.CounterType;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
import mage.target.common.TargetOpponentsCreaturePermanent;
/**
*
* @author Styxo
*/
public class SyndicateEnforcerSWS extends CardImpl {
public SyndicateEnforcerSWS(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}");
this.subtype.add("Gand");
this.subtype.add("Hunter");
this.power = new MageInt(3);
this.toughness = new MageInt(2);
// When {this} enters the battlefield, put a bounty counter on target creature an opponent controls
Ability ability = new EntersBattlefieldTriggeredAbility(new AddCountersTargetEffect(CounterType.BOUNTY.createInstance()));
ability.addTarget(new TargetOpponentsCreaturePermanent());
this.addAbility(ability);
// Whenever a bounty counter is placed on a creature an opponents controls, that creature can't block this turn.
this.addAbility(new SyndicateEnforcerTriggeredAbility());
}
public SyndicateEnforcerSWS(final SyndicateEnforcerSWS card) {
super(card);
}
@Override
public SyndicateEnforcerSWS copy() {
return new SyndicateEnforcerSWS(this);
}
}
class SyndicateEnforcerTriggeredAbility extends TriggeredAbilityImpl {
private static final Effect effect = new CantBlockTargetEffect(Duration.EndOfTurn);
public SyndicateEnforcerTriggeredAbility() {
super(Zone.BATTLEFIELD, effect, false);
}
public SyndicateEnforcerTriggeredAbility(final SyndicateEnforcerTriggeredAbility ability) {
super(ability);
}
@Override
public SyndicateEnforcerTriggeredAbility copy() {
return new SyndicateEnforcerTriggeredAbility(this);
}
@Override
public boolean checkEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.COUNTERS_ADDED;
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
if (event.getData().equals(CounterType.BOUNTY.getName())) {
Permanent permanent = game.getPermanentOrLKIBattlefield(event.getTargetId());
if (permanent != null) {
return true;
}
}
return false;
}
@Override
public String getRule() {
return "Whenever a bounty counter is placed on a creature an opponents controls, that creature can't block this turn.";
}
}

View file

@ -29,15 +29,16 @@ package mage.cards.t;
import java.util.UUID; import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.condition.common.IsPhaseCondition;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.decorator.ConditionalActivatedAbility;
import mage.abilities.effects.common.continuous.LoseAbilitySourceEffect; import mage.abilities.effects.common.continuous.LoseAbilitySourceEffect;
import mage.abilities.keyword.SpaceflightAbility; import mage.abilities.keyword.SpaceflightAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.TurnPhase;
import mage.constants.Zone; import mage.constants.Zone;
/** /**
@ -47,7 +48,7 @@ import mage.constants.Zone;
public class TIEBomber extends CardImpl { public class TIEBomber extends CardImpl {
public TIEBomber(UUID ownerId, CardSetInfo setInfo) { public TIEBomber(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{2}{B}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{2}{B}");
this.subtype.add("Starship"); this.subtype.add("Starship");
this.power = new MageInt(3); this.power = new MageInt(3);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
@ -55,9 +56,13 @@ public class TIEBomber extends CardImpl {
// Spaceflight // Spaceflight
this.addAbility(SpaceflightAbility.getInstance()); this.addAbility(SpaceflightAbility.getInstance());
// {1}: TIE Bomber loses Spaceflight until end od turn. // {1}: TIE Bomber loses Spaceflight until end od turn. Activate this ability only during combat.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new LoseAbilitySourceEffect(SpaceflightAbility.getInstance(), Duration.EndOfTurn), new ManaCostsImpl("{1}")); this.addAbility(new ConditionalActivatedAbility(
this.addAbility(ability); Zone.BATTLEFIELD,
new LoseAbilitySourceEffect(SpaceflightAbility.getInstance(), Duration.EndOfTurn),
new GenericManaCost(1),
new IsPhaseCondition(TurnPhase.COMBAT),
"{1}: {this} loses Spaceflight until end od turn. Activate this ability only during combat."));
} }
public TIEBomber(final TIEBomber card) { public TIEBomber(final TIEBomber card) {

View file

@ -46,7 +46,7 @@ import mage.game.permanent.token.DroidToken;
public class TankDroid extends CardImpl { public class TankDroid extends CardImpl {
public TankDroid(UUID ownerId, CardSetInfo setInfo) { public TankDroid(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{4}{W}{U}{B}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{4}{W}{U}{B}");
this.subtype.add("Droid"); this.subtype.add("Droid");
this.power = new MageInt(5); this.power = new MageInt(5);
this.toughness = new MageInt(5); this.toughness = new MageInt(5);
@ -56,6 +56,7 @@ public class TankDroid extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
ability = new EntersBattlefieldOrDiesSourceTriggeredAbility(new CreateTokenEffect(new DroidToken()), false); ability = new EntersBattlefieldOrDiesSourceTriggeredAbility(new CreateTokenEffect(new DroidToken()), false);
this.addAbility(ability); this.addAbility(ability);
// Repair 3 // Repair 3
this.addAbility(new RepairAbility(3)); this.addAbility(new RepairAbility(3));
} }

View file

@ -1,118 +0,0 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.cards.t;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.HateCondition;
import mage.abilities.effects.RestrictionEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
/**
*
* @author Styxo
*/
public class Terentatek extends CardImpl {
public Terentatek(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{R}");
this.subtype.add("Beast");
this.power = new MageInt(4);
this.toughness = new MageInt(3);
// Terentatek can't attack or block unless you control a Sith.
// <i>Hate</i> &mdash; If an opponent lost life from source other than combat damage this turn, Terentatek may attack as though you controlled a Sith.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new Terentatek1RestrictionEffect()));
}
public Terentatek(final Terentatek card) {
super(card);
}
@Override
public Terentatek copy() {
return new Terentatek(this);
}
}
class Terentatek1RestrictionEffect extends RestrictionEffect {
private static final FilterControlledPermanent filter = new FilterControlledPermanent("Sith");
static {
filter.add(new SubtypePredicate("Sith"));
}
public Terentatek1RestrictionEffect() {
super(Duration.WhileOnBattlefield);
staticText = "{this} can't attack or block unless you control a Sith."
+ "<br><br><i>Hate</i> &mdash; If an opponent lost life from source other than combat damage this turn, {this} may attack as though you controlled a Sith";
}
public Terentatek1RestrictionEffect(final Terentatek1RestrictionEffect effect) {
super(effect);
}
@Override
public Terentatek1RestrictionEffect copy() {
return new Terentatek1RestrictionEffect(this);
}
@Override
public boolean canAttack(Game game) {
Ability source = (Ability) getValue("source");
return game.getBattlefield().count(filter, source.getSourceId(), source.getControllerId(), game) > 0
|| HateCondition.getInstance().apply(game, source);
}
@Override
public boolean canBlock(Permanent attacker, Permanent blocker, Ability source, Game game) {
return game.getBattlefield().count(filter, source.getSourceId(), source.getControllerId(), game) > 0;
}
@Override
public boolean applies(Permanent permanent, Ability source, Game game) {
if (permanent.getId().equals(source.getSourceId())) {
setValue("source", source);
return true;
}
return false;
}
}

View file

@ -0,0 +1,85 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.cards.t;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.OpponentControlsPermanentCondition;
import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.common.combat.AttacksIfAbleSourceEffect;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.SubtypePredicate;
/**
*
* @author Styxo
*/
public class TerentatekCub extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Hunter or Rogue card");
static {
filter.add(Predicates.or(new SubtypePredicate("Jedi"), new SubtypePredicate("Sith")));
}
public TerentatekCub(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}");
this.subtype.add("Beast");
this.power = new MageInt(2);
this.toughness = new MageInt(2);
// As long as an opponent controls a Jedi or Sith, {this} gets +1/+1 and attacks each turn if able
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(
new BoostSourceEffect(1, 1, Duration.Custom),
new OpponentControlsPermanentCondition(filter),
"As long as an opponent controls a Jedi or Sith, {this} gets +1/+1 ")
));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(
new AttacksIfAbleSourceEffect(Duration.Custom),
new OpponentControlsPermanentCondition(filter),
"and attacks each turn if able.")
));
}
public TerentatekCub(final TerentatekCub card) {
super(card);
}
@Override
public TerentatekCub copy() {
return new TerentatekCub(this);
}
}

View file

@ -28,6 +28,7 @@
package mage.cards.t; package mage.cards.t;
import java.util.UUID; import java.util.UUID;
import mage.abilities.dynamicvalue.IntPlusDynamicValue;
import mage.abilities.dynamicvalue.common.ManacostVariableValue; import mage.abilities.dynamicvalue.common.ManacostVariableValue;
import mage.abilities.dynamicvalue.common.StaticValue; import mage.abilities.dynamicvalue.common.StaticValue;
import mage.abilities.effects.Effect; import mage.abilities.effects.Effect;
@ -40,8 +41,7 @@ import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.TargetController; import mage.constants.TargetController;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterOpponentsCreaturePermanent;
import mage.filter.predicate.permanent.ControllerPredicate;
/** /**
* *
@ -49,21 +49,15 @@ import mage.filter.predicate.permanent.ControllerPredicate;
*/ */
public class TheBattleOfGeonosis extends CardImpl { public class TheBattleOfGeonosis extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature you don't control");
static {
filter.add(new ControllerPredicate(TargetController.NOT_YOU));
}
public TheBattleOfGeonosis(UUID ownerId, CardSetInfo setInfo) { public TheBattleOfGeonosis(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{X}{R}{R}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{X}{R}{R}");
// The Battle of Geonosis deals X damage to each opponent and each creature you don't control. // The Battle of Geonosis deals X + 1 damage to each opponent and each creature your opponents control.
Effect effect = new DamagePlayersEffect(Outcome.Damage, new ManacostVariableValue(), TargetController.OPPONENT); Effect effect = new DamagePlayersEffect(Outcome.Damage, new IntPlusDynamicValue(1, new ManacostVariableValue()), TargetController.OPPONENT);
effect.setText("The Battle of Geonosis deals X damage to each opponent"); effect.setText("The Battle of Geonosis deals X plus 1 damage to each opponent");
this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(effect);
effect = new DamageAllEffect(new ManacostVariableValue(), filter); effect = new DamageAllEffect(new IntPlusDynamicValue(1, new ManacostVariableValue()), new FilterOpponentsCreaturePermanent());
effect.setText("and each creature you don't control"); effect.setText("and each creature your opponents control");
this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(effect);
// Creatures you control get +X/+0 until end of turn. // Creatures you control get +X/+0 until end of turn.

View file

@ -29,22 +29,17 @@ package mage.cards.t;
import java.util.UUID; import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.common.RemoveCountersSourceCost;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.effects.common.continuous.BoostControlledEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.SpaceflightAbility; import mage.abilities.keyword.SpaceflightAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Zone; import mage.constants.Zone;
import mage.counters.CounterType;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.SubtypePredicate; import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.game.permanent.token.DroidToken; import mage.game.permanent.token.DroidToken;
@ -73,14 +68,8 @@ public class TradeFederationBattleship extends CardImpl {
// Droid creatures you control get +1/+1 // Droid creatures you control get +1/+1
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, filter, false))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, filter, false)));
// Trade Federation Battleship enters the battlefield with three charge counters on it. // {T}: Create two 1/1 colorless Droid artifact token cretures.
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.CHARGE.createInstance(3), true), this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new DroidToken(), 2), new TapSourceCost()));
"with three charge counters on it"));
// {T}, Remove a charge counter forom Trade Federation Battleship: Create two 1/1 colorless Droid artifact token cretures.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new DroidToken(), 2), new TapSourceCost());
ability.addCost(new RemoveCountersSourceCost(CounterType.CHARGE.createInstance()));
this.addAbility(ability);
} }
public TradeFederationBattleship(final TradeFederationBattleship card) { public TradeFederationBattleship(final TradeFederationBattleship card) {

View file

@ -1,105 +0,0 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.cards.t;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.condition.common.PermanentHasCounterCondition;
import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.SacrificeControllerEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.counters.CounterType;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterOpponentsCreaturePermanent;
import mage.game.Game;
import mage.players.Player;
/**
*
* @author Styxo
*/
public class TreacherousBountyHunter extends CardImpl {
public TreacherousBountyHunter(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{B}");
this.subtype.add("Rodian");
this.subtype.add("Hunter");
this.power = new MageInt(3);
this.toughness = new MageInt(3);
// When Treacherous Bounty Hunter enters the battlefield, sacrifice a creature unless an opponet controls a creature with a bounty counter on it.
this.addAbility(new EntersBattlefieldTriggeredAbility(new TreacherousBountyHunterSacrificeUnlessConditionEffect()));
}
public TreacherousBountyHunter(final TreacherousBountyHunter card) {
super(card);
}
@Override
public TreacherousBountyHunter copy() {
return new TreacherousBountyHunter(this);
}
}
class TreacherousBountyHunterSacrificeUnlessConditionEffect extends OneShotEffect {
public TreacherousBountyHunterSacrificeUnlessConditionEffect() {
super(Outcome.Sacrifice);
staticText = "sacrifice a creature unless an opponet controls a creature with a bounty counter on it";
}
public TreacherousBountyHunterSacrificeUnlessConditionEffect(final TreacherousBountyHunterSacrificeUnlessConditionEffect effect) {
super(effect);
}
@Override
public boolean apply(Game game, Ability source) {
Player player = game.getPlayer(source.getControllerId());
if (player != null) {
if (new PermanentHasCounterCondition(CounterType.BOUNTY, 0, new FilterOpponentsCreaturePermanent(), PermanentHasCounterCondition.CountType.MORE_THAN).apply(game, source)) {
return true;
}
Effect effect = new SacrificeControllerEffect(new FilterControlledCreaturePermanent(), 1, "");
effect.apply(game, source);
return true;
}
return false;
}
@Override
public TreacherousBountyHunterSacrificeUnlessConditionEffect copy() {
return new TreacherousBountyHunterSacrificeUnlessConditionEffect(this);
}
}

View file

@ -42,10 +42,10 @@ import mage.constants.CardType;
public class TriFighter extends CardImpl { public class TriFighter extends CardImpl {
public TriFighter(UUID ownerId, CardSetInfo setInfo) { public TriFighter(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{2}{U/B}{U/B}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{1}{U/B}{U/B}");
this.subtype.add("Droid"); this.subtype.add("Droid");
this.subtype.add("Starship"); this.subtype.add("Starship");
this.power = new MageInt(3); this.power = new MageInt(2);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// Spaceflight // Spaceflight

View file

@ -28,8 +28,10 @@
package mage.cards.t; package mage.cards.t;
import java.util.UUID; import java.util.UUID;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.continuous.AddCardSubtypeAttachedEffect; import mage.abilities.effects.common.continuous.AddCardSubtypeAttachedEffect;
import mage.abilities.effects.common.continuous.BoostEquippedEffect; import mage.abilities.effects.common.continuous.BoostEquippedEffect;
import mage.abilities.keyword.EquipAbility; import mage.abilities.keyword.EquipAbility;
@ -39,7 +41,9 @@ import mage.constants.AttachmentType;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.SetTargetPointer;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.FilterPermanent;
/** /**
* *
@ -48,13 +52,21 @@ import mage.constants.Zone;
public class TrooperArmor extends CardImpl { public class TrooperArmor extends CardImpl {
public TrooperArmor(UUID ownerId, CardSetInfo setInfo) { public TrooperArmor(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{2}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}");
this.subtype.add("Equipment"); this.subtype.add("Equipment");
// Equiped creature gets +1/+1 and is a Trooper in addition to its other types. // Equiped creature gets +1/+1 and is a Trooper in addition to its other types.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(1, 1))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(1, 1)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new AddCardSubtypeAttachedEffect("Trooper", Duration.WhileOnBattlefield, AttachmentType.EQUIPMENT))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new AddCardSubtypeAttachedEffect("Trooper", Duration.WhileOnBattlefield, AttachmentType.EQUIPMENT)));
// Whenever a Trooper enters the battlefield under your control, you may attach {this} to it.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD,
new AttachEffect(Outcome.BoostCreature, "attach {this} to it"),
new FilterPermanent("Trooper", "Trooper"),
true,
SetTargetPointer.PERMANENT,
null));
// Equip {2} // Equip {2}
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(2))); this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(2)));
} }

View file

@ -25,48 +25,47 @@
* 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.t;
import java.util.UUID; import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.common.BecomesBlockedByCreatureTriggeredAbility;
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.combat.MustBeBlockedByAtLeastOneSourceEffect;
import mage.abilities.effects.common.counter.AddCountersTargetEffect; import mage.abilities.effects.common.counter.AddCountersTargetEffect;
import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.target.common.TargetOpponentsCreaturePermanent;
/** /**
* *
* @author Styxo * @author Styxo
*/ */
public class GamorreanEnforcer extends CardImpl { public class TwilekSeductress extends CardImpl {
public GamorreanEnforcer(UUID ownerId, CardSetInfo setInfo) { public TwilekSeductress(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
this.subtype.add("Gamorrean"); this.subtype.add("Twi'lek");
this.subtype.add("Warrior"); this.subtype.add("Rogue");
this.power = new MageInt(3); this.power = new MageInt(2);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// Haste // {this} must be blocked it if able.
this.addAbility(HasteAbility.getInstance()); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new MustBeBlockedByAtLeastOneSourceEffect(Duration.WhileOnBattlefield)));
// Whenever Gamorrean Enforcer deals combat damage to a player, put a bounty counter on target creature an opponent controls. // Whenever {this} becomes blocked by a creature, put a bounty counter on that creature
Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(new AddCountersTargetEffect(CounterType.BOUNTY.createInstance()), false); this.addAbility(new BecomesBlockedByCreatureTriggeredAbility(new AddCountersTargetEffect(CounterType.BOUNTY.createInstance()), false));
ability.addTarget(new TargetOpponentsCreaturePermanent());
this.addAbility(ability);
} }
public GamorreanEnforcer(final GamorreanEnforcer card) { public TwilekSeductress(final TwilekSeductress card) {
super(card); super(card);
} }
@Override @Override
public GamorreanEnforcer copy() { public TwilekSeductress copy() {
return new GamorreanEnforcer(this); return new TwilekSeductress(this);
} }
} }

View file

@ -52,7 +52,7 @@ import mage.counters.CounterType;
public class WildHolocron extends CardImpl { public class WildHolocron extends CardImpl {
public WildHolocron(UUID ownerId, CardSetInfo setInfo) { public WildHolocron(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{2}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}");
// {T}: Put a charge counter on Wild Holocron. // {T}: Put a charge counter on Wild Holocron.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.CHARGE.createInstance(1)), new TapSourceCost())); this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.CHARGE.createInstance(1)), new TapSourceCost()));
@ -71,7 +71,7 @@ public class WildHolocron extends CardImpl {
ability.addCost(cost); ability.addCost(cost);
this.addAbility(ability); this.addAbility(ability);
// {T}, Remove two charge counters from Sith Holocron: Add RG or GW to your mana pool. // {T}, Remove two charge counters from Wild Holocron: Add RG or GW to your mana pool.
cost = new RemoveCountersSourceCost(CounterType.CHARGE.createInstance(2)); cost = new RemoveCountersSourceCost(CounterType.CHARGE.createInstance(2));
ability = new SimpleManaAbility(Zone.BATTLEFIELD, new Mana(1, 1, 0, 0, 0, 0, 0, 0), new TapSourceCost()); ability = new SimpleManaAbility(Zone.BATTLEFIELD, new Mana(1, 1, 0, 0, 0, 0, 0, 0), new TapSourceCost());

View file

@ -31,11 +31,12 @@ import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.BecomesMonstrousSourceTriggeredAbility; import mage.abilities.common.BecomesMonstrousSourceTriggeredAbility;
import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.ExileTargetEffect;
import mage.abilities.keyword.MonstrosityAbility; import mage.abilities.keyword.MonstrosityAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.target.common.TargetCardInGraveyard;
/** /**
* *
@ -44,7 +45,7 @@ import mage.constants.CardType;
public class WompRat extends CardImpl { public class WompRat extends CardImpl {
public WompRat(UUID ownerId, CardSetInfo setInfo) { public WompRat(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}");
this.subtype.add("Rat"); this.subtype.add("Rat");
this.subtype.add("Beast"); this.subtype.add("Beast");
this.power = new MageInt(3); this.power = new MageInt(3);
@ -53,8 +54,10 @@ public class WompRat extends CardImpl {
// {4}{W}: Monstrosity 1 // {4}{W}: Monstrosity 1
this.addAbility(new MonstrosityAbility("{4}{W}", 1)); this.addAbility(new MonstrosityAbility("{4}{W}", 1));
// When Womp Rat becomes monstrous you gain two life. // When Womp Rat becomes monstrous you may exilte target card from a graveyard
this.addAbility(new BecomesMonstrousSourceTriggeredAbility(new GainLifeEffect(2))); Ability ability = new BecomesMonstrousSourceTriggeredAbility(new ExileTargetEffect(), true);
ability.addTarget(new TargetCardInGraveyard());
this.addAbility(ability);
} }
public WompRat(final WompRat card) { public WompRat(final WompRat card) {

View file

@ -47,7 +47,7 @@ import mage.constants.Zone;
public class XWing extends CardImpl { public class XWing extends CardImpl {
public XWing(UUID ownerId, CardSetInfo setInfo) { public XWing(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{2}{W}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{2}{W}");
this.subtype.add("Rebel"); this.subtype.add("Rebel");
this.subtype.add("Starship"); this.subtype.add("Starship");
this.power = new MageInt(2); this.power = new MageInt(2);
@ -56,8 +56,8 @@ public class XWing extends CardImpl {
// Spaceflight // Spaceflight
this.addAbility(SpaceflightAbility.getInstance()); this.addAbility(SpaceflightAbility.getInstance());
// {1}{W}: X-Wing gains viginlance until end of turn. // {W}: X-Wing gains viginlance until end of turn.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilitySourceEffect(VigilanceAbility.getInstance(), Duration.EndOfTurn), new ManaCostsImpl("{1}{W}"))); this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilitySourceEffect(VigilanceAbility.getInstance(), Duration.EndOfTurn), new ManaCostsImpl("{W}")));
} }

View file

@ -90,8 +90,8 @@ public class YodaJediMaster extends CardImpl {
ability.addTarget(new TargetPermanent(filter)); ability.addTarget(new TargetPermanent(filter));
this.addAbility(ability); this.addAbility(ability);
// -7: You get an emblem with "Hexproof, you and your creatures have." // -5: You get an emblem with "Hexproof, you and your creatures have."
this.addAbility(new LoyaltyAbility(new GetEmblemEffect(new YodaEmblem()), -7)); this.addAbility(new LoyaltyAbility(new GetEmblemEffect(new YodaEmblem()), -5));
} }

View file

@ -51,9 +51,9 @@ import mage.target.common.TargetOpponent;
* *
* @author Styxo * @author Styxo
*/ */
public class ZamWessel extends CardImpl { public class ZamWesell extends CardImpl {
public ZamWessel(UUID ownerId, CardSetInfo setInfo) { public ZamWesell(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{U}{U}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{U}{U}");
this.supertype.add("Legendary"); this.supertype.add("Legendary");
this.subtype.add("Shapeshifter"); this.subtype.add("Shapeshifter");
@ -67,13 +67,13 @@ public class ZamWessel extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
} }
public ZamWessel(final ZamWessel card) { public ZamWesell(final ZamWesell card) {
super(card); super(card);
} }
@Override @Override
public ZamWessel copy() { public ZamWesell copy() {
return new ZamWessel(this); return new ZamWesell(this);
} }
} }

View file

@ -46,7 +46,7 @@ public class StarWars extends ExpansionSet {
} }
private StarWars() { private StarWars() {
super("Star Wars", "SWS", ExpansionSet.buildDate(2015, 12, 25), SetType.CUSTOM_SET); super("Star Wars", "SWS", ExpansionSet.buildDate(2016, 12, 12), SetType.CUSTOM_SET);
this.blockName = "Star Wars"; this.blockName = "Star Wars";
this.hasBoosters = true; this.hasBoosters = true;
this.hasBasicLands = true; this.hasBasicLands = true;
@ -55,272 +55,278 @@ public class StarWars extends ExpansionSet {
this.numBoosterUncommon = 3; this.numBoosterUncommon = 3;
this.numBoosterRare = 1; this.numBoosterRare = 1;
this.ratioBoosterMythic = 8; this.ratioBoosterMythic = 8;
cards.add(new SetCardInfo("AAT-1", 179, Rarity.UNCOMMON, mage.cards.a.AAT1.class)); cards.add(new SetCardInfo("AAT-1", 160, Rarity.UNCOMMON, mage.cards.a.AAT1.class));
cards.add(new SetCardInfo("Acklay of the Arena", 180, Rarity.RARE, mage.cards.a.AcklayOfTheArena.class)); cards.add(new SetCardInfo("Acklay of the Arena", 161, Rarity.RARE, mage.cards.a.AcklayOfTheArena.class));
cards.add(new SetCardInfo("Acquire Target", 64, Rarity.COMMON, mage.cards.a.AcquireTarget.class)); cards.add(new SetCardInfo("Acquire Target", 65, Rarity.COMMON, mage.cards.a.AcquireTarget.class));
cards.add(new SetCardInfo("Admiral Ackbar", 34, Rarity.RARE, mage.cards.a.AdmiralAckbar.class)); cards.add(new SetCardInfo("Admiral Ackbar", 35, Rarity.RARE, mage.cards.a.AdmiralAckbar.class));
cards.add(new SetCardInfo("Adroit Hateflayer", 181, Rarity.COMMON, mage.cards.a.AdroitHateflayer.class)); cards.add(new SetCardInfo("Adroit Hateflayer", 162, Rarity.COMMON, mage.cards.a.AdroitHateflayer.class));
cards.add(new SetCardInfo("Anakin Skywalker", 182, Rarity.MYTHIC, mage.cards.a.AnakinSkywalker.class)); cards.add(new SetCardInfo("Anakin Skywalker", 163, Rarity.MYTHIC, mage.cards.a.AnakinSkywalker.class));
cards.add(new SetCardInfo("Ancient Holocron", 230, Rarity.UNCOMMON, mage.cards.a.AncientHolocron.class)); cards.add(new SetCardInfo("Ancient Holocron", 230, Rarity.UNCOMMON, mage.cards.a.AncientHolocron.class));
cards.add(new SetCardInfo("Aqualish Bounty Hunter", 65, Rarity.COMMON, mage.cards.a.AqualishBountyHunter.class)); cards.add(new SetCardInfo("Aqualish Bounty Hunter", 66, Rarity.COMMON, mage.cards.a.AqualishBountyHunter.class));
cards.add(new SetCardInfo("Armed Protocol Droid", 36, Rarity.UNCOMMON, mage.cards.a.ArmedProtocolDroid.class));
cards.add(new SetCardInfo("Arrest", 2, Rarity.COMMON, mage.cards.a.Arrest.class)); cards.add(new SetCardInfo("Arrest", 2, Rarity.COMMON, mage.cards.a.Arrest.class));
cards.add(new SetCardInfo("Asajj Ventress", 183, Rarity.RARE, mage.cards.a.AsajjVentress.class)); cards.add(new SetCardInfo("Asajj Ventress", 164, Rarity.RARE, mage.cards.a.AsajjVentress.class));
cards.add(new SetCardInfo("ATST", 128, Rarity.RARE, mage.cards.a.ATST.class)); cards.add(new SetCardInfo("AT-ST", 128, Rarity.RARE, mage.cards.a.ATST.class));
cards.add(new SetCardInfo("Aurra Sing, Bane of Jedi", 168, Rarity.MYTHIC, mage.cards.a.AurraSingBaneOfJedi.class)); cards.add(new SetCardInfo("Aurra Sing, Bane of Jedi", 165, Rarity.MYTHIC, mage.cards.a.AurraSingBaneOfJedi.class));
cards.add(new SetCardInfo("A-Wing", 96, Rarity.UNCOMMON, mage.cards.a.AWing.class)); cards.add(new SetCardInfo("A-Wing", 96, Rarity.UNCOMMON, mage.cards.a.AWing.class));
cards.add(new SetCardInfo("Bantha Herd", 3, Rarity.RARE, mage.cards.b.BanthaHerd.class)); cards.add(new SetCardInfo("Bantha Herd", 3, Rarity.RARE, mage.cards.b.BanthaHerd.class));
cards.add(new SetCardInfo("Bathe in Bacta", 129, Rarity.COMMON, mage.cards.b.BatheInBacta.class)); cards.add(new SetCardInfo("Bathe in Bacta", 129, Rarity.COMMON, mage.cards.b.BatheInBacta.class));
cards.add(new SetCardInfo("Battle Tactics", 5, Rarity.COMMON, mage.cards.b.BattleTactics.class)); cards.add(new SetCardInfo("Battle Tactics", 5, Rarity.UNCOMMON, mage.cards.b.BattleTactics.class));
cards.add(new SetCardInfo("Bib Fortuna", 67, Rarity.RARE, mage.cards.b.BibFortuna.class)); cards.add(new SetCardInfo("Bib Fortuna", 68, Rarity.RARE, mage.cards.b.BibFortuna.class));
cards.add(new SetCardInfo("Black Market Dealer", 68, Rarity.UNCOMMON, mage.cards.b.BlackMarketDealer.class)); cards.add(new SetCardInfo("Black Market Dealer", 69, Rarity.UNCOMMON, mage.cards.b.BlackMarketDealer.class));
cards.add(new SetCardInfo("Blind Worship", 184, Rarity.RARE, mage.cards.b.BlindWorship.class)); cards.add(new SetCardInfo("Blind Worship", 166, Rarity.RARE, mage.cards.b.BlindWorship.class));
cards.add(new SetCardInfo("Boba Fett", 185, Rarity.MYTHIC, mage.cards.b.BobaFett.class)); cards.add(new SetCardInfo("Boba Fett", 167, Rarity.MYTHIC, mage.cards.b.BobaFett.class));
cards.add(new SetCardInfo("Bossk", 131, Rarity.RARE, mage.cards.b.Bossk.class)); cards.add(new SetCardInfo("Bossk", 131, Rarity.RARE, mage.cards.b.Bossk.class));
cards.add(new SetCardInfo("Bounty Collector", 132, Rarity.UNCOMMON, mage.cards.b.BountyCollector.class)); cards.add(new SetCardInfo("Bounty Collector", 132, Rarity.UNCOMMON, mage.cards.b.BountyCollector.class));
cards.add(new SetCardInfo("Bounty Sniper", 98, Rarity.UNCOMMON, mage.cards.b.BountySniper.class)); cards.add(new SetCardInfo("Bounty Sniper", 98, Rarity.UNCOMMON, mage.cards.b.BountySniper.class));
cards.add(new SetCardInfo("Bounty Spotter", 69, Rarity.UNCOMMON, mage.cards.b.BountySpotter.class)); cards.add(new SetCardInfo("Bounty Spotter", 70, Rarity.UNCOMMON, mage.cards.b.BountySpotter.class));
cards.add(new SetCardInfo("Bull Rancor", 186, Rarity.RARE, mage.cards.b.BullRancor.class)); cards.add(new SetCardInfo("Bull Rancor", 168, Rarity.RARE, mage.cards.b.BullRancor.class));
cards.add(new SetCardInfo("C-3PO and R2D2", 160, Rarity.RARE, mage.cards.c.C3POAndR2D2.class)); cards.add(new SetCardInfo("C-3PO and R2D2", 169, Rarity.RARE, mage.cards.c.C3POAndR2D2.class));
cards.add(new SetCardInfo("Cantina Band", 6, Rarity.COMMON, mage.cards.c.CantinaBand.class)); cards.add(new SetCardInfo("Cantina Band", 6, Rarity.COMMON, mage.cards.c.CantinaBand.class));
cards.add(new SetCardInfo("Capture", 99, Rarity.COMMON, mage.cards.c.Capture.class)); cards.add(new SetCardInfo("Capture", 99, Rarity.COMMON, mage.cards.c.Capture.class));
cards.add(new SetCardInfo("Carbonite Chamber", 161, Rarity.UNCOMMON, mage.cards.c.CarboniteChamber.class)); cards.add(new SetCardInfo("Carbonite Chamber", 170, Rarity.UNCOMMON, mage.cards.c.CarboniteChamber.class));
cards.add(new SetCardInfo("Chewbacca", 187, Rarity.RARE, mage.cards.c.Chewbacca.class)); cards.add(new SetCardInfo("Chewbacca", 171, Rarity.RARE, mage.cards.c.Chewbacca.class));
cards.add(new SetCardInfo("Chief Chirpa", 188, Rarity.RARE, mage.cards.c.ChiefChirpa.class)); cards.add(new SetCardInfo("Chief Chirpa", 172, Rarity.RARE, mage.cards.c.ChiefChirpa.class));
cards.add(new SetCardInfo("Cloaking Device", 36, Rarity.COMMON, mage.cards.c.CloakingDevice.class)); cards.add(new SetCardInfo("Cloaking Device", 38, Rarity.COMMON, mage.cards.c.CloakingDevice.class));
cards.add(new SetCardInfo("Commander Cody", 189, Rarity.RARE, mage.cards.c.CommanderCody.class)); cards.add(new SetCardInfo("Commander Cody", 173, Rarity.RARE, mage.cards.c.CommanderCody.class));
cards.add(new SetCardInfo("Condemn", 7, Rarity.UNCOMMON, mage.cards.c.Condemn.class)); cards.add(new SetCardInfo("Condemn", 7, Rarity.UNCOMMON, mage.cards.c.Condemn.class));
cards.add(new SetCardInfo("Corellian Corvette", 133, Rarity.UNCOMMON, mage.cards.c.CorellianCorvette.class)); cards.add(new SetCardInfo("Corellian Corvette", 133, Rarity.UNCOMMON, mage.cards.c.CorellianCorvette.class));
cards.add(new SetCardInfo("Crossfire", 100, Rarity.COMMON, mage.cards.c.Crossfire.class)); cards.add(new SetCardInfo("Crossfire", 100, Rarity.COMMON, mage.cards.c.Crossfire.class));
cards.add(new SetCardInfo("Cruelty of the Sith", 190, Rarity.UNCOMMON, mage.cards.c.CrueltyOfTheSith.class)); cards.add(new SetCardInfo("Cruelty of the Sith", 174, Rarity.UNCOMMON, mage.cards.c.CrueltyOfTheSith.class));
cards.add(new SetCardInfo("Cunning Abduction", 165, Rarity.RARE, mage.cards.c.CunningAbduction.class)); cards.add(new SetCardInfo("Cunning Abduction", 175, Rarity.RARE, mage.cards.c.CunningAbduction.class));
cards.add(new SetCardInfo("Dagobah Maw Slug", 191, Rarity.COMMON, mage.cards.d.DagobahMawSlug.class)); cards.add(new SetCardInfo("Dagobah Maw Slug", 176, Rarity.COMMON, mage.cards.d.DagobahMawSlug.class));
cards.add(new SetCardInfo("Dark Apprenticeship", 101, Rarity.UNCOMMON, mage.cards.d.DarkApprenticeship.class)); cards.add(new SetCardInfo("Dark Apprenticeship", 101, Rarity.UNCOMMON, mage.cards.d.DarkApprenticeship.class));
cards.add(new SetCardInfo("Dark Decision", 169, Rarity.COMMON, mage.cards.d.DarkDecision.class)); cards.add(new SetCardInfo("Dark Decision", 177, Rarity.COMMON, mage.cards.d.DarkDecision.class));
cards.add(new SetCardInfo("Dark Trooper", 231, Rarity.COMMON, mage.cards.d.DarkTrooper.class)); cards.add(new SetCardInfo("Dark Trooper", 231, Rarity.UNCOMMON, mage.cards.d.DarkTrooper.class));
cards.add(new SetCardInfo("Darth Maul", 170, Rarity.RARE, mage.cards.d.DarthMaul.class)); cards.add(new SetCardInfo("Darth Maul", 170, Rarity.RARE, mage.cards.d.DarthMaul.class));
cards.add(new SetCardInfo("Darth Sidious, Sith Lord", 192, Rarity.MYTHIC, mage.cards.d.DarthSidiousSithLord.class)); cards.add(new SetCardInfo("Darth Sidious, Sith Lord", 179, Rarity.MYTHIC, mage.cards.d.DarthSidiousSithLord.class));
cards.add(new SetCardInfo("Darth Tyranus", 193, Rarity.MYTHIC, mage.cards.d.DarthTyranus.class)); cards.add(new SetCardInfo("Darth Tyranus", 180, Rarity.MYTHIC, mage.cards.d.DarthTyranus.class));
cards.add(new SetCardInfo("Darth Vader", 182, Rarity.MYTHIC, mage.cards.d.DarthVader.class)); cards.add(new SetCardInfo("Darth Vader", 140, Rarity.MYTHIC, mage.cards.d.DarthVader.class));
cards.add(new SetCardInfo("Death Trooper", 70, Rarity.UNCOMMON, mage.cards.d.DeathTrooper.class)); cards.add(new SetCardInfo("Death Trooper", 71, Rarity.UNCOMMON, mage.cards.d.DeathTrooper.class));
cards.add(new SetCardInfo("Deploy The Troops", 8, Rarity.UNCOMMON, mage.cards.d.DeployTheTroops.class)); cards.add(new SetCardInfo("Deploy The Troops", 8, Rarity.UNCOMMON, mage.cards.d.DeployTheTroops.class));
cards.add(new SetCardInfo("Doom Blade", 71, Rarity.UNCOMMON, mage.cards.d.DoomBlade.class)); cards.add(new SetCardInfo("Doom Blade", 72, Rarity.UNCOMMON, mage.cards.d.DoomBlade.class));
cards.add(new SetCardInfo("Droideka", 9, Rarity.UNCOMMON, mage.cards.d.Droideka.class)); cards.add(new SetCardInfo("Droid Commando", 73, Rarity.COMMON, mage.cards.d.DroidCommando.class));
cards.add(new SetCardInfo("Droid Factory", 239, Rarity.COMMON, mage.cards.d.DroidFactory.class)); cards.add(new SetCardInfo("Droid Factory", 239, Rarity.COMMON, mage.cards.d.DroidFactory.class));
cards.add(new SetCardInfo("Droid Foundry", 240, Rarity.UNCOMMON, mage.cards.d.DroidFoundry.class)); cards.add(new SetCardInfo("Droid Foundry", 240, Rarity.UNCOMMON, mage.cards.d.DroidFoundry.class));
cards.add(new SetCardInfo("Droideka", 9, Rarity.UNCOMMON, mage.cards.d.Droideka.class));
cards.add(new SetCardInfo("Drone Holocron", 232, Rarity.COMMON, mage.cards.d.DroneHolocron.class)); cards.add(new SetCardInfo("Drone Holocron", 232, Rarity.COMMON, mage.cards.d.DroneHolocron.class));
cards.add(new SetCardInfo("Echo Base Commando", 175, Rarity.RARE, mage.cards.e.EchoBaseCommando.class)); cards.add(new SetCardInfo("Echo Base Commando", 181, Rarity.RARE, mage.cards.e.EchoBaseCommando.class));
cards.add(new SetCardInfo("EMP Blast", 10, Rarity.UNCOMMON, mage.cards.e.EMPBlast.class)); cards.add(new SetCardInfo("EMP Blast", 10, Rarity.UNCOMMON, mage.cards.e.EMPBlast.class));
cards.add(new SetCardInfo("Escape Pod", 11, Rarity.COMMON, mage.cards.e.EscapePod.class)); cards.add(new SetCardInfo("Escape Pod", 11, Rarity.COMMON, mage.cards.e.EscapePod.class));
cards.add(new SetCardInfo("Ewok Ambush", 134, Rarity.COMMON, mage.cards.e.EwokAmbush.class)); cards.add(new SetCardInfo("Ewok Ambush", 134, Rarity.COMMON, mage.cards.e.EwokAmbush.class));
cards.add(new SetCardInfo("Ewok Firedancers", 135, Rarity.COMMON, mage.cards.e.EwokFiredancers.class)); cards.add(new SetCardInfo("Ewok Firedancers", 135, Rarity.COMMON, mage.cards.e.EwokFiredancers.class));
cards.add(new SetCardInfo("Ewok Village", 241, Rarity.UNCOMMON, mage.cards.e.EwokVillage.class)); cards.add(new SetCardInfo("Ewok Village", 241, Rarity.UNCOMMON, mage.cards.e.EwokVillage.class));
cards.add(new SetCardInfo("Exogorth", 136, Rarity.RARE, mage.cards.e.Exogorth.class)); cards.add(new SetCardInfo("Exogorth", 136, Rarity.RARE, mage.cards.e.Exogorth.class));
cards.add(new SetCardInfo("Explore", 137, Rarity.COMMON, mage.cards.e.Explore.class)); cards.add(new SetCardInfo("Ferocity of the Underworld", 182, Rarity.UNCOMMON, mage.cards.f.FerocityOfTheUnderworld.class));
cards.add(new SetCardInfo("Ferocity of the Underworld", 194, Rarity.UNCOMMON, mage.cards.f.FerocityOfTheUnderworld.class));
cards.add(new SetCardInfo("Flames of Remembrance", 102, Rarity.RARE, mage.cards.f.FlamesOfRemembrance.class)); cards.add(new SetCardInfo("Flames of Remembrance", 102, Rarity.RARE, mage.cards.f.FlamesOfRemembrance.class));
cards.add(new SetCardInfo("Force Adept", 195, Rarity.COMMON, mage.cards.f.ForceAdept.class)); cards.add(new SetCardInfo("Force Choke", 183, Rarity.COMMON, mage.cards.f.ForceChoke.class));
cards.add(new SetCardInfo("Force Choke", 166, Rarity.COMMON, mage.cards.f.ForceChoke.class)); cards.add(new SetCardInfo("Force Denial", 39, Rarity.COMMON, mage.cards.f.ForceDenial.class));
cards.add(new SetCardInfo("Force Denial", 37, Rarity.COMMON, mage.cards.f.ForceDenial.class)); cards.add(new SetCardInfo("Force Drain", 74, Rarity.COMMON, mage.cards.f.ForceDrain.class));
cards.add(new SetCardInfo("Force Drain", 73, Rarity.COMMON, mage.cards.f.ForceDrain.class));
cards.add(new SetCardInfo("Force Healing", 12, Rarity.COMMON, mage.cards.f.ForceHealing.class)); cards.add(new SetCardInfo("Force Healing", 12, Rarity.COMMON, mage.cards.f.ForceHealing.class));
cards.add(new SetCardInfo("Force Lightning", 103, Rarity.RARE, mage.cards.f.ForceLightning.class)); cards.add(new SetCardInfo("Force Lightning", 103, Rarity.RARE, mage.cards.f.ForceLightning.class));
cards.add(new SetCardInfo("Force Mastery", 196, Rarity.RARE, mage.cards.f.ForceMastery.class)); cards.add(new SetCardInfo("Force Mastery", 184, Rarity.RARE, mage.cards.f.ForceMastery.class));
cards.add(new SetCardInfo("Force Pull", 138, Rarity.COMMON, mage.cards.f.ForcePull.class)); cards.add(new SetCardInfo("Force Pull", 137, Rarity.COMMON, mage.cards.f.ForcePull.class));
cards.add(new SetCardInfo("Force Push", 38, Rarity.UNCOMMON, mage.cards.f.ForcePush.class)); cards.add(new SetCardInfo("Force Push", 40, Rarity.UNCOMMON, mage.cards.f.ForcePush.class));
cards.add(new SetCardInfo("Force Reflex", 13, Rarity.COMMON, mage.cards.f.ForceReflex.class));
cards.add(new SetCardInfo("Force Scream", 104, Rarity.UNCOMMON, mage.cards.f.ForceScream.class)); cards.add(new SetCardInfo("Force Scream", 104, Rarity.UNCOMMON, mage.cards.f.ForceScream.class));
cards.add(new SetCardInfo("Force Spark", 105, Rarity.COMMON, mage.cards.f.ForceSpark.class)); cards.add(new SetCardInfo("Force Spark", 105, Rarity.COMMON, mage.cards.f.ForceSpark.class));
cards.add(new SetCardInfo("Forest", 264, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true))); cards.add(new SetCardInfo("Forest", 268, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
cards.add(new SetCardInfo("Forest", 265, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true))); cards.add(new SetCardInfo("Forest", 269, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
cards.add(new SetCardInfo("Forest", 266, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true))); cards.add(new SetCardInfo("Forest", 270, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
cards.add(new SetCardInfo("Fulfill Contract", 226, Rarity.COMMON, mage.cards.f.FulfillContract.class)); cards.add(new SetCardInfo("Forest", 271, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
cards.add(new SetCardInfo("Gamorrean Enforcer", 106, Rarity.COMMON, mage.cards.g.GamorreanEnforcer.class)); cards.add(new SetCardInfo("Fulfill Contract", 224, Rarity.COMMON, mage.cards.f.FulfillContract.class));
cards.add(new SetCardInfo("Gamorrean Prison Guard", 107, Rarity.UNCOMMON, mage.cards.g.GamorreanPrisonGuard.class)); cards.add(new SetCardInfo("Gamorrean Prison Guard", 106, Rarity.UNCOMMON, mage.cards.g.GamorreanPrisonGuard.class));
cards.add(new SetCardInfo("General Grievous", 197, Rarity.MYTHIC, mage.cards.g.GeneralGrievous.class)); cards.add(new SetCardInfo("General Grievous", 185, Rarity.MYTHIC, mage.cards.g.GeneralGrievous.class));
cards.add(new SetCardInfo("Gifted Initiate", 13, Rarity.COMMON, mage.cards.g.GiftedInitiate.class)); cards.add(new SetCardInfo("Gifted Initiate", 14, Rarity.COMMON, mage.cards.g.GiftedInitiate.class));
cards.add(new SetCardInfo("Grand Moff Tarkin", 74, Rarity.RARE, mage.cards.g.GrandMoffTarkin.class)); cards.add(new SetCardInfo("Grand Moff Tarkin", 75, Rarity.RARE, mage.cards.g.GrandMoffTarkin.class));
cards.add(new SetCardInfo("Greater Krayt Dragon", 198, Rarity.MYTHIC, mage.cards.g.GreaterKraytDragon.class)); cards.add(new SetCardInfo("Greater Krayt Dragon", 186, Rarity.MYTHIC, mage.cards.g.GreaterKraytDragon.class));
cards.add(new SetCardInfo("Greedo", 199, Rarity.RARE, mage.cards.g.Greedo.class)); cards.add(new SetCardInfo("Greedo", 187, Rarity.RARE, mage.cards.g.Greedo.class));
cards.add(new SetCardInfo("Gundark", 108, Rarity.UNCOMMON, mage.cards.g.Gundark.class)); cards.add(new SetCardInfo("Gundark", 107, Rarity.UNCOMMON, mage.cards.g.Gundark.class));
cards.add(new SetCardInfo("Gungan Captain", 39, Rarity.COMMON, mage.cards.g.GunganCaptain.class)); cards.add(new SetCardInfo("Gungan Captain", 41, Rarity.COMMON, mage.cards.g.GunganCaptain.class));
cards.add(new SetCardInfo("Han Solo", 109, Rarity.RARE, mage.cards.h.HanSolo.class)); cards.add(new SetCardInfo("Han Solo", 108, Rarity.RARE, mage.cards.h.HanSolo.class));
cards.add(new SetCardInfo("Hazard Trooper", 75, Rarity.UNCOMMON, mage.cards.h.HazardTrooper.class)); cards.add(new SetCardInfo("Hazard Trooper", 76, Rarity.UNCOMMON, mage.cards.h.HazardTrooper.class));
cards.add(new SetCardInfo("Head Hunting", 76, Rarity.COMMON, mage.cards.h.HeadHunting.class)); cards.add(new SetCardInfo("Head Hunting", 77, Rarity.COMMON, mage.cards.h.HeadHunting.class));
cards.add(new SetCardInfo("Heavy Trooper", 77, Rarity.COMMON, mage.cards.h.HeavyTrooper.class)); cards.add(new SetCardInfo("Heavy Trooper", 78, Rarity.COMMON, mage.cards.h.HeavyTrooper.class));
cards.add(new SetCardInfo("Hot Pursuit", 200, Rarity.RARE, mage.cards.h.HotPursuit.class)); cards.add(new SetCardInfo("Hot Pursuit", 188, Rarity.RARE, mage.cards.h.HotPursuit.class));
cards.add(new SetCardInfo("Hungry Dragonsnake", 139, Rarity.COMMON, mage.cards.h.HungryDragonsnake.class)); cards.add(new SetCardInfo("Hungry Dragonsnake", 138, Rarity.COMMON, mage.cards.h.HungryDragonsnake.class));
cards.add(new SetCardInfo("Hunt to Extinction", 201, Rarity.RARE, mage.cards.h.HuntToExtinction.class)); cards.add(new SetCardInfo("Hunt to Extinction", 189, Rarity.RARE, mage.cards.h.HuntToExtinction.class));
cards.add(new SetCardInfo("Hutt Crime Lord", 140, Rarity.UNCOMMON, mage.cards.h.HuttCrimeLord.class)); cards.add(new SetCardInfo("Hutt Crime Lord", 139, Rarity.UNCOMMON, mage.cards.h.HuttCrimeLord.class));
cards.add(new SetCardInfo("Hutt Palace", 242, Rarity.UNCOMMON, mage.cards.h.HuttPalace.class)); cards.add(new SetCardInfo("Hutt Palace", 242, Rarity.UNCOMMON, mage.cards.h.HuttPalace.class));
cards.add(new SetCardInfo("IG-88B", 78, Rarity.RARE, mage.cards.i.IG88B.class)); cards.add(new SetCardInfo("IG-88B", 79, Rarity.RARE, mage.cards.i.IG88B.class));
cards.add(new SetCardInfo("Images of the Past", 176, Rarity.COMMON, mage.cards.i.ImagesOfThePast.class)); cards.add(new SetCardInfo("Images of the Past", 190, Rarity.COMMON, mage.cards.i.ImagesOfThePast.class));
cards.add(new SetCardInfo("Imperial Gunner", 110, Rarity.COMMON, mage.cards.i.ImperialGunner.class)); cards.add(new SetCardInfo("Imperial Gunner", 109, Rarity.COMMON, mage.cards.i.ImperialGunner.class));
cards.add(new SetCardInfo("Imperial Spy", 40, Rarity.UNCOMMON, mage.cards.i.ImperialSpy.class)); cards.add(new SetCardInfo("Impulsive Wager", 110, Rarity.COMMON, mage.cards.i.ImpulsiveWager.class));
cards.add(new SetCardInfo("Insatiable Rakghoul", 79, Rarity.COMMON, mage.cards.i.InsatiableRakghoul.class)); cards.add(new SetCardInfo("Insatiable Rakghoul", 80, Rarity.COMMON, mage.cards.i.InsatiableRakghoul.class));
cards.add(new SetCardInfo("Interrogation", 80, Rarity.COMMON, mage.cards.i.Interrogation.class)); cards.add(new SetCardInfo("Interrogation", 81, Rarity.COMMON, mage.cards.i.Interrogation.class));
cards.add(new SetCardInfo("Ion Cannon", 14, Rarity.COMMON, mage.cards.i.IonCannon.class)); cards.add(new SetCardInfo("Ion Cannon", 15, Rarity.COMMON, mage.cards.i.IonCannon.class));
cards.add(new SetCardInfo("Iron Fist of the Empire", 202, Rarity.RARE, mage.cards.i.IronFistOfTheEmpire.class)); cards.add(new SetCardInfo("Iron Fist of the Empire", 191, Rarity.RARE, mage.cards.i.IronFistOfTheEmpire.class));
cards.add(new SetCardInfo("Irresponsible Gambling", 111, Rarity.COMMON, mage.cards.i.IrresponsibleGambling.class));
cards.add(new SetCardInfo("Island", 255, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
cards.add(new SetCardInfo("Island", 256, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true))); cards.add(new SetCardInfo("Island", 256, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
cards.add(new SetCardInfo("Island", 257, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true))); cards.add(new SetCardInfo("Island", 257, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
cards.add(new SetCardInfo("Ithorian Initiate", 141, Rarity.COMMON, mage.cards.i.IthorianInitiate.class)); cards.add(new SetCardInfo("Island", 258, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
cards.add(new SetCardInfo("Jabba the Hutt", 203, Rarity.RARE, mage.cards.j.JabbaTheHutt.class)); cards.add(new SetCardInfo("Island", 259, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
cards.add(new SetCardInfo("Jango Fett", 112, Rarity.RARE, mage.cards.j.JangoFett.class)); cards.add(new SetCardInfo("Ithorian Initiate", 140, Rarity.COMMON, mage.cards.i.IthorianInitiate.class));
cards.add(new SetCardInfo("Jar Jar Binks", 41, Rarity.RARE, mage.cards.j.JarJarBinks.class)); cards.add(new SetCardInfo("Jabba the Hutt", 192, Rarity.RARE, mage.cards.j.JabbaTheHutt.class));
cards.add(new SetCardInfo("Jar'Kai Battle Stance", 113, Rarity.COMMON, mage.cards.j.JarKaiBattleStance.class)); cards.add(new SetCardInfo("Jango Fett", 111, Rarity.RARE, mage.cards.j.JangoFett.class));
cards.add(new SetCardInfo("Jedi Battle Healer", 15, Rarity.UNCOMMON, mage.cards.j.JediBattleHealer.class)); cards.add(new SetCardInfo("Jar Jar Binks", 42, Rarity.RARE, mage.cards.j.JarJarBinks.class));
cards.add(new SetCardInfo("Jedi Battle Mage", 42, Rarity.UNCOMMON, mage.cards.j.JediBattleMage.class)); cards.add(new SetCardInfo("Jar'Kai Battle Stance", 112, Rarity.COMMON, mage.cards.j.JarKaiBattleStance.class));
cards.add(new SetCardInfo("Jedi Battle Sage", 142, Rarity.UNCOMMON, mage.cards.j.JediBattleSage.class)); cards.add(new SetCardInfo("Jedi Battle Healer", 16, Rarity.UNCOMMON, mage.cards.j.JediBattleHealer.class));
cards.add(new SetCardInfo("Jedi Battle Mage", 43, Rarity.UNCOMMON, mage.cards.j.JediBattleMage.class));
cards.add(new SetCardInfo("Jedi Battle Sage", 141, Rarity.UNCOMMON, mage.cards.j.JediBattleSage.class));
cards.add(new SetCardInfo("Jedi Enclave", 243, Rarity.COMMON, mage.cards.j.JediEnclave.class)); cards.add(new SetCardInfo("Jedi Enclave", 243, Rarity.COMMON, mage.cards.j.JediEnclave.class));
cards.add(new SetCardInfo("Jedi Holocron", 233, Rarity.COMMON, mage.cards.j.JediHolocron.class)); cards.add(new SetCardInfo("Jedi Holocron", 233, Rarity.COMMON, mage.cards.j.JediHolocron.class));
cards.add(new SetCardInfo("Jedi Inquirer", 16, Rarity.UNCOMMON, mage.cards.j.JediInquirer.class)); cards.add(new SetCardInfo("Jedi Inquirer", 17, Rarity.COMMON, mage.cards.j.JediInquirer.class));
cards.add(new SetCardInfo("Jedi Instructor", 17, Rarity.COMMON, mage.cards.j.JediInstructor.class)); cards.add(new SetCardInfo("Jedi Instructor", 17, Rarity.COMMON, mage.cards.j.JediInstructor.class));
cards.add(new SetCardInfo("Jedi Knight", 204, Rarity.UNCOMMON, mage.cards.j.JediKnight.class)); cards.add(new SetCardInfo("Jedi Knight", 193, Rarity.UNCOMMON, mage.cards.j.JediKnight.class));
cards.add(new SetCardInfo("Jedi Mind Trick", 43, Rarity.RARE, mage.cards.j.JediMindTrick.class)); cards.add(new SetCardInfo("Jedi Mind Trick", 44, Rarity.RARE, mage.cards.j.JediMindTrick.class));
cards.add(new SetCardInfo("Jedi Reflex", 18, Rarity.COMMON, mage.cards.j.JediReflex.class)); cards.add(new SetCardInfo("Jedi Sentinel", 194, Rarity.COMMON, mage.cards.j.JediSentinel.class));
cards.add(new SetCardInfo("Jedi Starfighter", 19, Rarity.UNCOMMON, mage.cards.j.JediStarfighter.class)); cards.add(new SetCardInfo("Jedi Starfighter", 19, Rarity.UNCOMMON, mage.cards.j.JediStarfighter.class));
cards.add(new SetCardInfo("Jedi Temple", 244, Rarity.UNCOMMON, mage.cards.j.JediTemple.class)); cards.add(new SetCardInfo("Jedi Temple", 244, Rarity.UNCOMMON, mage.cards.j.JediTemple.class));
cards.add(new SetCardInfo("Jedi Training", 44, Rarity.UNCOMMON, mage.cards.j.JediTraining.class)); cards.add(new SetCardInfo("Jedi Training", 45, Rarity.UNCOMMON, mage.cards.j.JediTraining.class));
cards.add(new SetCardInfo("Jump Trooper", 45, Rarity.UNCOMMON, mage.cards.j.JumpTrooper.class)); cards.add(new SetCardInfo("Jump Trooper", 46, Rarity.UNCOMMON, mage.cards.j.JumpTrooper.class));
cards.add(new SetCardInfo("Jungle Village", 245, Rarity.UNCOMMON, mage.cards.j.JungleVillage.class)); cards.add(new SetCardInfo("Jungle Village", 245, Rarity.UNCOMMON, mage.cards.j.JungleVillage.class));
cards.add(new SetCardInfo("Kamino Cloning Facility", 246, Rarity.RARE, mage.cards.k.KaminoCloningFacility.class)); cards.add(new SetCardInfo("Kamino Cloning Facility", 246, Rarity.RARE, mage.cards.k.KaminoCloningFacility.class));
cards.add(new SetCardInfo("Ki-Adi-Mundi", 143, Rarity.RARE, mage.cards.k.KiAdiMundi.class)); cards.add(new SetCardInfo("Ki-Adi-Mundi", 142, Rarity.RARE, mage.cards.k.KiAdiMundi.class));
cards.add(new SetCardInfo("LAAT Gunship", 20, Rarity.UNCOMMON, mage.cards.l.LAATGunship.class)); cards.add(new SetCardInfo("LAAT Gunship", 20, Rarity.UNCOMMON, mage.cards.l.LAATGunship.class));
cards.add(new SetCardInfo("Lando Calrissian", 21, Rarity.RARE, mage.cards.l.LandoCalrissian.class)); cards.add(new SetCardInfo("Lando Calrissian", 21, Rarity.RARE, mage.cards.l.LandoCalrissian.class));
cards.add(new SetCardInfo("Legacy of the Beloved", 144, Rarity.RARE, mage.cards.l.LegacyOfTheBeloved.class)); cards.add(new SetCardInfo("Legacy of the Beloved", 143, Rarity.RARE, mage.cards.l.LegacyOfTheBeloved.class));
cards.add(new SetCardInfo("Lightning Bolt", 114, Rarity.UNCOMMON, mage.cards.l.LightningBolt.class)); cards.add(new SetCardInfo("Lightning Bolt", 113, Rarity.UNCOMMON, mage.cards.l.LightningBolt.class));
cards.add(new SetCardInfo("Lightsaber", 234, Rarity.COMMON, mage.cards.l.Lightsaber.class)); cards.add(new SetCardInfo("Lightsaber", 234, Rarity.COMMON, mage.cards.l.Lightsaber.class));
cards.add(new SetCardInfo("Loyal Tauntaun", 22, Rarity.COMMON, mage.cards.l.LoyalTauntaun.class)); cards.add(new SetCardInfo("Loyal Tauntaun", 22, Rarity.COMMON, mage.cards.l.LoyalTauntaun.class));
cards.add(new SetCardInfo("Luke Skywalker", 205, Rarity.MYTHIC, mage.cards.l.LukeSkywalker.class)); cards.add(new SetCardInfo("Luke Skywalker", 195, Rarity.MYTHIC, mage.cards.l.LukeSkywalker.class));
cards.add(new SetCardInfo("Mace Windu", 46, Rarity.RARE, mage.cards.m.MaceWindu.class)); cards.add(new SetCardInfo("Mace Windu", 47, Rarity.RARE, mage.cards.m.MaceWindu.class));
cards.add(new SetCardInfo("Maintenance Droid", 162, Rarity.COMMON, mage.cards.m.MaintenanceDroid.class)); cards.add(new SetCardInfo("Maintenance Droid", 196, Rarity.COMMON, mage.cards.m.MaintenanceDroid.class));
cards.add(new SetCardInfo("Maintenance Hangar", 23, Rarity.UNCOMMON, mage.cards.m.MaintenanceHangar.class)); cards.add(new SetCardInfo("Maintenance Hangar", 23, Rarity.RARE, mage.cards.m.MaintenanceHangar.class));
cards.add(new SetCardInfo("Mantellian Savrip", 145, Rarity.UNCOMMON, mage.cards.m.MantellianSavrip.class)); cards.add(new SetCardInfo("Mantellian Savrip", 144, Rarity.UNCOMMON, mage.cards.m.MantellianSavrip.class));
cards.add(new SetCardInfo("March of the Droids", 206, Rarity.RARE, mage.cards.m.MarchOfTheDroids.class)); cards.add(new SetCardInfo("March of the Droids", 197, Rarity.RARE, mage.cards.m.MarchOfTheDroids.class));
cards.add(new SetCardInfo("Might of the Wild", 207, Rarity.UNCOMMON, mage.cards.m.MightOfTheWild.class)); cards.add(new SetCardInfo("Massiff Swarm", 145, Rarity.COMMON, mage.cards.m.MassiffSwarm.class));
cards.add(new SetCardInfo("Might of the Wild", 198, Rarity.UNCOMMON, mage.cards.m.MightOfTheWild.class));
cards.add(new SetCardInfo("Millennium Falcon", 146, Rarity.RARE, mage.cards.m.MillenniumFalcon.class)); cards.add(new SetCardInfo("Millennium Falcon", 146, Rarity.RARE, mage.cards.m.MillenniumFalcon.class));
cards.add(new SetCardInfo("Miraculous Recovery", 24, Rarity.UNCOMMON, mage.cards.m.MiraculousRecovery.class)); cards.add(new SetCardInfo("Miraculous Recovery", 24, Rarity.UNCOMMON, mage.cards.m.MiraculousRecovery.class));
cards.add(new SetCardInfo("Moisture Farm", 247, Rarity.UNCOMMON, mage.cards.m.MoistureFarm.class)); cards.add(new SetCardInfo("Moisture Farm", 247, Rarity.UNCOMMON, mage.cards.m.MoistureFarm.class));
cards.add(new SetCardInfo("Mon Calamari Cruiser", 47, Rarity.UNCOMMON, mage.cards.m.MonCalamariCruiser.class)); cards.add(new SetCardInfo("Mon Calamari Cruiser", 48, Rarity.UNCOMMON, mage.cards.m.MonCalamariCruiser.class));
cards.add(new SetCardInfo("Mon Calamari Initiate", 48, Rarity.COMMON, mage.cards.m.MonCalamariInitiate.class)); cards.add(new SetCardInfo("Mon Calamari Initiate", 49, Rarity.COMMON, mage.cards.m.MonCalamariInitiate.class));
cards.add(new SetCardInfo("Mountain", 261, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true))); cards.add(new SetCardInfo("Mountain", 264, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
cards.add(new SetCardInfo("Mountain", 262, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true))); cards.add(new SetCardInfo("Mountain", 265, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
cards.add(new SetCardInfo("Mountain", 263, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true))); cards.add(new SetCardInfo("Mountain", 266, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
cards.add(new SetCardInfo("N-1 Starfighter", 224, Rarity.COMMON, mage.cards.n.N1Starfighter.class)); cards.add(new SetCardInfo("Mountain", 267, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
cards.add(new SetCardInfo("Neophyte Hateflayer", 81, Rarity.COMMON, mage.cards.n.NeophyteHateflayer.class)); cards.add(new SetCardInfo("N-1 Starfighter", 225, Rarity.COMMON, mage.cards.n.N1Starfighter.class));
cards.add(new SetCardInfo("Nebulon-B Frigate", 25, Rarity.COMMON, mage.cards.n.NebulonBFrigate.class));
cards.add(new SetCardInfo("Neophyte Hateflayer", 82, Rarity.COMMON, mage.cards.n.NeophyteHateflayer.class));
cards.add(new SetCardInfo("Nerf Herder", 147, Rarity.UNCOMMON, mage.cards.n.NerfHerder.class)); cards.add(new SetCardInfo("Nerf Herder", 147, Rarity.UNCOMMON, mage.cards.n.NerfHerder.class));
cards.add(new SetCardInfo("Nexu Stalker", 148, Rarity.UNCOMMON, mage.cards.n.NexuStalker.class)); cards.add(new SetCardInfo("Nexu Stalker", 148, Rarity.UNCOMMON, mage.cards.n.NexuStalker.class));
cards.add(new SetCardInfo("Nightspider", 149, Rarity.COMMON, mage.cards.n.Nightspider.class)); cards.add(new SetCardInfo("Nightspider", 149, Rarity.COMMON, mage.cards.n.Nightspider.class));
cards.add(new SetCardInfo("No Contest", 150, Rarity.COMMON, mage.cards.n.NoContest.class)); cards.add(new SetCardInfo("No Contest", 150, Rarity.COMMON, mage.cards.n.NoContest.class));
cards.add(new SetCardInfo("Novice Bounty Hunter", 115, Rarity.COMMON, mage.cards.n.NoviceBountyHunter.class)); cards.add(new SetCardInfo("Novice Bounty Hunter", 114, Rarity.COMMON, mage.cards.n.NoviceBountyHunter.class));
cards.add(new SetCardInfo("Nute Gunray", 208, Rarity.RARE, mage.cards.n.NuteGunray.class)); cards.add(new SetCardInfo("Nute Gunray", 199, Rarity.RARE, mage.cards.n.NuteGunray.class));
cards.add(new SetCardInfo("Obi-Wan Kenobi", 163, Rarity.MYTHIC, mage.cards.o.ObiWanKenobi.class)); cards.add(new SetCardInfo("Obi-Wan Kenobi", 200, Rarity.MYTHIC, mage.cards.o.ObiWanKenobi.class));
cards.add(new SetCardInfo("Orbital Bombardment", 25, Rarity.RARE, mage.cards.o.OrbitalBombardment.class)); cards.add(new SetCardInfo("Open Season", 83, Rarity.UNCOMMON, mage.cards.o.OpenSeason.class));
cards.add(new SetCardInfo("Order 66", 82, Rarity.RARE, mage.cards.o.Order66.class)); cards.add(new SetCardInfo("Orbital Bombardment", 26, Rarity.RARE, mage.cards.o.OrbitalBombardment.class));
cards.add(new SetCardInfo("Ortolan Keyboardist", 49, Rarity.COMMON, mage.cards.o.OrtolanKeyboardist.class)); cards.add(new SetCardInfo("Order 66", 84, Rarity.RARE, mage.cards.o.Order66.class));
cards.add(new SetCardInfo("Outer Rim Slaver", 209, Rarity.COMMON, mage.cards.o.OuterRimSlaver.class)); cards.add(new SetCardInfo("Ortolan Keyboardist", 50, Rarity.COMMON, mage.cards.o.OrtolanKeyboardist.class));
cards.add(new SetCardInfo("Outer Rim Slaver", 201, Rarity.COMMON, mage.cards.o.OuterRimSlaver.class));
cards.add(new SetCardInfo("Outlaw Holocron", 235, Rarity.COMMON, mage.cards.o.OutlawHolocron.class)); cards.add(new SetCardInfo("Outlaw Holocron", 235, Rarity.COMMON, mage.cards.o.OutlawHolocron.class));
cards.add(new SetCardInfo("Personal Energy Field", 50, Rarity.COMMON, mage.cards.p.PersonalEnergyField.class)); cards.add(new SetCardInfo("Personal Energy Shield", 51, Rarity.COMMON, mage.cards.p.PersonalEnergyShield.class));
cards.add(new SetCardInfo("Plains", 252, Rarity.LAND, mage.cards.basiclands.Plains.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true))); cards.add(new SetCardInfo("Plains", 252, Rarity.LAND, mage.cards.basiclands.Plains.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
cards.add(new SetCardInfo("Plains", 253, Rarity.LAND, mage.cards.basiclands.Plains.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true))); cards.add(new SetCardInfo("Plains", 253, Rarity.LAND, mage.cards.basiclands.Plains.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
cards.add(new SetCardInfo("Plains", 254, Rarity.LAND, mage.cards.basiclands.Plains.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true))); cards.add(new SetCardInfo("Plains", 254, Rarity.LAND, mage.cards.basiclands.Plains.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
cards.add(new SetCardInfo("Plo Koon", 26, Rarity.RARE, mage.cards.p.PloKoon.class)); cards.add(new SetCardInfo("Plains", 255, Rarity.LAND, mage.cards.basiclands.Plains.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
cards.add(new SetCardInfo("Precipice of Mortis", 210, Rarity.RARE, mage.cards.p.PrecipiceOfMortis.class)); cards.add(new SetCardInfo("Plo Koon", 27, Rarity.RARE, mage.cards.p.PloKoon.class));
cards.add(new SetCardInfo("Precipice of Mortis", 202, Rarity.RARE, mage.cards.p.PrecipiceOfMortis.class));
cards.add(new SetCardInfo("Predator's Strike", 151, Rarity.COMMON, mage.cards.p.PredatorsStrike.class)); cards.add(new SetCardInfo("Predator's Strike", 151, Rarity.COMMON, mage.cards.p.PredatorsStrike.class));
cards.add(new SetCardInfo("Preordain", 33, Rarity.UNCOMMON, mage.cards.p.Preordain.class)); cards.add(new SetCardInfo("Preordain", 34, Rarity.UNCOMMON, mage.cards.p.Preordain.class));
cards.add(new SetCardInfo("Primal Instict", 172, Rarity.COMMON, mage.cards.p.PrimalInstict.class)); cards.add(new SetCardInfo("Primal Instinct", 203, Rarity.COMMON, mage.cards.p.PrimalInstinct.class));
cards.add(new SetCardInfo("Princess Leia", 211, Rarity.RARE, mage.cards.p.PrincessLeia.class)); cards.add(new SetCardInfo("Princess Leia", 204, Rarity.RARE, mage.cards.p.PrincessLeia.class));
cards.add(new SetCardInfo("Probe Droid", 51, Rarity.COMMON, mage.cards.p.ProbeDroid.class)); cards.add(new SetCardInfo("Probe Droid", 52, Rarity.COMMON, mage.cards.p.ProbeDroid.class));
cards.add(new SetCardInfo("Public Arrangement", 83, Rarity.UNCOMMON, mage.cards.p.PublicArrangement.class)); cards.add(new SetCardInfo("Qui-Gon Jinn", 205, Rarity.RARE, mage.cards.q.QuiGonJinn.class));
cards.add(new SetCardInfo("Qui-Gon Jinn", 212, Rarity.RARE, mage.cards.q.QuiGonJinn.class)); cards.add(new SetCardInfo("Raging Reek", 115, Rarity.COMMON, mage.cards.r.RagingReek.class));
cards.add(new SetCardInfo("Raging Reek", 116, Rarity.COMMON, mage.cards.r.RagingReek.class)); cards.add(new SetCardInfo("Rallying Fire", 116, Rarity.COMMON, mage.cards.r.RallyingFire.class));
cards.add(new SetCardInfo("Rallying Fire", 117, Rarity.COMMON, mage.cards.r.RallyingFire.class)); cards.add(new SetCardInfo("Ravenous Wampa", 226, Rarity.UNCOMMON, mage.cards.r.RavenousWampa.class));
cards.add(new SetCardInfo("Ravenous Wampa", 229, Rarity.UNCOMMON, mage.cards.r.RavenousWampa.class));
cards.add(new SetCardInfo("Regression", 152, Rarity.UNCOMMON, mage.cards.r.Regression.class)); cards.add(new SetCardInfo("Regression", 152, Rarity.UNCOMMON, mage.cards.r.Regression.class));
cards.add(new SetCardInfo("Republic Frigate", 52, Rarity.COMMON, mage.cards.r.RepublicFrigate.class)); cards.add(new SetCardInfo("Republic Frigate", 53, Rarity.COMMON, mage.cards.r.RepublicFrigate.class));
cards.add(new SetCardInfo("Repurpose", 84, Rarity.COMMON, mage.cards.r.Repurpose.class)); cards.add(new SetCardInfo("Repurpose", 85, Rarity.COMMON, mage.cards.r.Repurpose.class));
cards.add(new SetCardInfo("Revenge", 118, Rarity.COMMON, mage.cards.r.Revenge.class)); cards.add(new SetCardInfo("Revenge", 117, Rarity.COMMON, mage.cards.r.Revenge.class));
cards.add(new SetCardInfo("Riding Ronto", 27, Rarity.UNCOMMON, mage.cards.r.RidingRonto.class)); cards.add(new SetCardInfo("Riding Ronto", 28, Rarity.UNCOMMON, mage.cards.r.RidingRonto.class));
cards.add(new SetCardInfo("Rocket Trooper", 119, Rarity.RARE, mage.cards.r.RocketTrooper.class)); cards.add(new SetCardInfo("Rocket Trooper", 118, Rarity.RARE, mage.cards.r.RocketTrooper.class));
cards.add(new SetCardInfo("Rogue's Passage", 248, Rarity.UNCOMMON, mage.cards.r.RoguesPassage.class)); cards.add(new SetCardInfo("Rogue's Passage", 248, Rarity.UNCOMMON, mage.cards.r.RoguesPassage.class));
cards.add(new SetCardInfo("Rule of two", 85, Rarity.UNCOMMON, mage.cards.r.RuleOfTwo.class)); cards.add(new SetCardInfo("Rule of two", 86, Rarity.UNCOMMON, mage.cards.r.RuleOfTwo.class));
cards.add(new SetCardInfo("Rumination", 53, Rarity.COMMON, mage.cards.r.Rumination.class)); cards.add(new SetCardInfo("Rumination", 54, Rarity.COMMON, mage.cards.r.Rumination.class));
cards.add(new SetCardInfo("Rumor Monger", 213, Rarity.UNCOMMON, mage.cards.r.RumorMonger.class)); cards.add(new SetCardInfo("Rumor Monger", 206, Rarity.UNCOMMON, mage.cards.r.RumorMonger.class));
cards.add(new SetCardInfo("Sabacc Game", 54, Rarity.UNCOMMON, mage.cards.s.SabaccGame.class)); cards.add(new SetCardInfo("Sabacc Game", 55, Rarity.UNCOMMON, mage.cards.s.SabaccGame.class));
cards.add(new SetCardInfo("Salvage Squad", 214, Rarity.COMMON, mage.cards.s.SalvageSquad.class)); cards.add(new SetCardInfo("Salvage Squad", 207, Rarity.COMMON, mage.cards.s.SalvageSquad.class));
cards.add(new SetCardInfo("Sand Trooper", 28, Rarity.COMMON, mage.cards.s.SandTrooper.class)); cards.add(new SetCardInfo("Sand Trooper", 29, Rarity.COMMON, mage.cards.s.SandTrooper.class));
cards.add(new SetCardInfo("Sarlacc Pit", 173, Rarity.RARE, mage.cards.s.SarlaccPit.class)); cards.add(new SetCardInfo("Sarlacc Pit", 208, Rarity.RARE, mage.cards.s.SarlaccPit.class));
cards.add(new SetCardInfo("Scout the Perimeter", 153, Rarity.COMMON, mage.cards.s.ScoutThePerimeter.class)); cards.add(new SetCardInfo("Scout the Perimeter", 153, Rarity.COMMON, mage.cards.s.ScoutThePerimeter.class));
cards.add(new SetCardInfo("Scout Trooper", 154, Rarity.COMMON, mage.cards.s.ScoutTrooper.class)); cards.add(new SetCardInfo("Scout Trooper", 154, Rarity.COMMON, mage.cards.s.ScoutTrooper.class));
cards.add(new SetCardInfo("Security Droid", 29, Rarity.COMMON, mage.cards.s.SecurityDroid.class)); cards.add(new SetCardInfo("Security Droid", 30, Rarity.COMMON, mage.cards.s.SecurityDroid.class));
cards.add(new SetCardInfo("Senator Bail Organa", 177, Rarity.UNCOMMON, mage.cards.s.SenatorBailOrgana.class)); cards.add(new SetCardInfo("Senator Bail Organa", 209, Rarity.UNCOMMON, mage.cards.s.SenatorBailOrgana.class));
cards.add(new SetCardInfo("Senator Lott Dod", 167, Rarity.UNCOMMON, mage.cards.s.SenatorLottDod.class)); cards.add(new SetCardInfo("Senator Lott Dod", 210, Rarity.UNCOMMON, mage.cards.s.SenatorLottDod.class));
cards.add(new SetCardInfo("Senator Onaconda Farr", 174, Rarity.UNCOMMON, mage.cards.s.SenatorOnacondaFarr.class)); cards.add(new SetCardInfo("Senator Onaconda Farr", 211, Rarity.UNCOMMON, mage.cards.s.SenatorOnacondaFarr.class));
cards.add(new SetCardInfo("Senator Padme Amidala", 164, Rarity.UNCOMMON, mage.cards.s.SenatorPadmeAmidala.class)); cards.add(new SetCardInfo("Senator Padmé Amidala", 212, Rarity.UNCOMMON, mage.cards.s.SenatorPadmeAmidala.class));
cards.add(new SetCardInfo("Senator Passel Argente", 171, Rarity.UNCOMMON, mage.cards.s.SenatorPasselArgente.class)); cards.add(new SetCardInfo("Senator Passel Argente", 213, Rarity.UNCOMMON, mage.cards.s.SenatorPasselArgente.class));
cards.add(new SetCardInfo("Shaak Herd", 155, Rarity.COMMON, mage.cards.s.ShaakHerd.class)); cards.add(new SetCardInfo("Shaak Herd", 155, Rarity.COMMON, mage.cards.s.ShaakHerd.class));
cards.add(new SetCardInfo("Shadow Trooper", 55, Rarity.COMMON, mage.cards.s.ShadowTrooper.class)); cards.add(new SetCardInfo("Shadow Trooper", 56, Rarity.COMMON, mage.cards.s.ShadowTrooper.class));
cards.add(new SetCardInfo("Shock Trooper", 120, Rarity.UNCOMMON, mage.cards.s.ShockTrooper.class)); cards.add(new SetCardInfo("Shock Trooper", 119, Rarity.UNCOMMON, mage.cards.s.ShockTrooper.class));
cards.add(new SetCardInfo("Show of Dominance", 156, Rarity.UNCOMMON, mage.cards.s.ShowOfDominance.class)); cards.add(new SetCardInfo("Show of Dominance", 156, Rarity.UNCOMMON, mage.cards.s.ShowOfDominance.class));
cards.add(new SetCardInfo("Sith Assassin", 86, Rarity.UNCOMMON, mage.cards.s.SithAssassin.class)); cards.add(new SetCardInfo("Sith Assassin", 87, Rarity.UNCOMMON, mage.cards.s.SithAssassin.class));
cards.add(new SetCardInfo("Sith Citadel", 249, Rarity.UNCOMMON, mage.cards.s.SithCitadel.class)); cards.add(new SetCardInfo("Sith Citadel", 249, Rarity.UNCOMMON, mage.cards.s.SithCitadel.class));
cards.add(new SetCardInfo("Sith Evoker", 87, Rarity.COMMON, mage.cards.s.SithEvoker.class)); cards.add(new SetCardInfo("Sith Evoker", 88, Rarity.COMMON, mage.cards.s.SithEvoker.class));
cards.add(new SetCardInfo("Sith Holocron", 236, Rarity.COMMON, mage.cards.s.SithHolocron.class)); cards.add(new SetCardInfo("Sith Holocron", 236, Rarity.COMMON, mage.cards.s.SithHolocron.class));
cards.add(new SetCardInfo("Sith Inquisitor", 88, Rarity.COMMON, mage.cards.s.SithInquisitor.class)); cards.add(new SetCardInfo("Sith Inquisitor", 89, Rarity.COMMON, mage.cards.s.SithInquisitor.class));
cards.add(new SetCardInfo("Sith Lord", 89, Rarity.RARE, mage.cards.s.SithLord.class)); cards.add(new SetCardInfo("Sith Lord", 90, Rarity.RARE, mage.cards.s.SithLord.class));
cards.add(new SetCardInfo("Sith Magic", 215, Rarity.RARE, mage.cards.s.SithMagic.class)); cards.add(new SetCardInfo("Sith Magic", 214, Rarity.RARE, mage.cards.s.SithMagic.class));
cards.add(new SetCardInfo("Sith Manipulator", 56, Rarity.UNCOMMON, mage.cards.s.SithManipulator.class)); cards.add(new SetCardInfo("Sith Manipulator", 57, Rarity.UNCOMMON, mage.cards.s.SithManipulator.class));
cards.add(new SetCardInfo("Sith Marauder", 121, Rarity.UNCOMMON, mage.cards.s.SithMarauder.class)); cards.add(new SetCardInfo("Sith Marauder", 120, Rarity.UNCOMMON, mage.cards.s.SithMarauder.class));
cards.add(new SetCardInfo("Sith Mindseer", 216, Rarity.UNCOMMON, mage.cards.s.SithMindseer.class)); cards.add(new SetCardInfo("Sith Mindseer", 215, Rarity.UNCOMMON, mage.cards.s.SithMindseer.class));
cards.add(new SetCardInfo("Sith Ravager", 122, Rarity.COMMON, mage.cards.s.SithRavager.class)); cards.add(new SetCardInfo("Sith Ravager", 121, Rarity.COMMON, mage.cards.s.SithRavager.class));
cards.add(new SetCardInfo("Sith Ruins", 250, Rarity.COMMON, mage.cards.s.SithRuins.class)); cards.add(new SetCardInfo("Sith Ruins", 250, Rarity.COMMON, mage.cards.s.SithRuins.class));
cards.add(new SetCardInfo("Sith Sorcerer", 57, Rarity.COMMON, mage.cards.s.SithSorcerer.class)); cards.add(new SetCardInfo("Sith Sorcerer", 58, Rarity.COMMON, mage.cards.s.SithSorcerer.class));
cards.add(new SetCardInfo("Sith Thoughtseeker", 90, Rarity.COMMON, mage.cards.s.SithThoughtseeker.class)); cards.add(new SetCardInfo("Sith Thoughtseeker", 91, Rarity.COMMON, mage.cards.s.SithThoughtseeker.class));
cards.add(new SetCardInfo("Slave I", 217, Rarity.RARE, mage.cards.s.SlaveI.class)); cards.add(new SetCardInfo("Slave I", 216, Rarity.RARE, mage.cards.s.SlaveI.class));
cards.add(new SetCardInfo("Smash to Smithereens", 123, Rarity.UNCOMMON, mage.cards.s.SmashToSmithereens.class)); cards.add(new SetCardInfo("Smash to Smithereens", 122, Rarity.UNCOMMON, mage.cards.s.SmashToSmithereens.class));
cards.add(new SetCardInfo("Snow Trooper", 30, Rarity.UNCOMMON, mage.cards.s.SnowTrooper.class)); cards.add(new SetCardInfo("Snow Trooper", 31, Rarity.UNCOMMON, mage.cards.s.SnowTrooper.class));
cards.add(new SetCardInfo("Speeder Trooper", 124, Rarity.COMMON, mage.cards.s.SpeederTrooper.class)); cards.add(new SetCardInfo("Speeder Trooper", 123, Rarity.COMMON, mage.cards.s.SpeederTrooper.class));
cards.add(new SetCardInfo("Star Destroyer", 218, Rarity.RARE, mage.cards.s.StarDestroyer.class)); cards.add(new SetCardInfo("Star Destroyer", 217, Rarity.RARE, mage.cards.s.StarDestroyer.class));
cards.add(new SetCardInfo("Strike Team Commando", 228, Rarity.COMMON, mage.cards.s.StrikeTeamCommando.class)); cards.add(new SetCardInfo("Strike Team Commando", 227, Rarity.COMMON, mage.cards.s.StrikeTeamCommando.class));
cards.add(new SetCardInfo("Super Battle Droid", 58, Rarity.COMMON, mage.cards.s.SuperBattleDroid.class)); cards.add(new SetCardInfo("Super Battle Droid", 59, Rarity.COMMON, mage.cards.s.SuperBattleDroid.class));
cards.add(new SetCardInfo("Surprise Maneuver", 59, Rarity.COMMON, mage.cards.s.SurpriseManeuver.class)); cards.add(new SetCardInfo("Surprise Maneuver", 60, Rarity.COMMON, mage.cards.s.SurpriseManeuver.class));
cards.add(new SetCardInfo("Swamp", 258, Rarity.LAND, mage.cards.basiclands.Swamp.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
cards.add(new SetCardInfo("Swamp", 259, Rarity.LAND, mage.cards.basiclands.Swamp.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
cards.add(new SetCardInfo("Swamp", 260, Rarity.LAND, mage.cards.basiclands.Swamp.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true))); cards.add(new SetCardInfo("Swamp", 260, Rarity.LAND, mage.cards.basiclands.Swamp.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
cards.add(new SetCardInfo("Swarm the Skies", 91, Rarity.COMMON, mage.cards.s.SwarmTheSkies.class)); cards.add(new SetCardInfo("Swamp", 261, Rarity.LAND, mage.cards.basiclands.Swamp.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
cards.add(new SetCardInfo("Tank Droid", 219, Rarity.RARE, mage.cards.t.TankDroid.class)); cards.add(new SetCardInfo("Swamp", 262, Rarity.LAND, mage.cards.basiclands.Swamp.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
cards.add(new SetCardInfo("Terentatek", 125, Rarity.COMMON, mage.cards.t.Terentatek.class)); cards.add(new SetCardInfo("Swamp", 263, Rarity.LAND, mage.cards.basiclands.Swamp.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
cards.add(new SetCardInfo("Swarm the Skies", 92, Rarity.COMMON, mage.cards.s.SwarmTheSkies.class));
cards.add(new SetCardInfo("Syndicate Enforcer", 124, Rarity.COMMON, mage.cards.s.SyndicateEnforcerSWS.class));
cards.add(new SetCardInfo("Tank Droid", 218, Rarity.RARE, mage.cards.t.TankDroid.class));
cards.add(new SetCardInfo("Terentatek Cub", 125, Rarity.COMMON, mage.cards.t.TerentatekCub.class));
cards.add(new SetCardInfo("The Battle of Endor", 130, Rarity.MYTHIC, mage.cards.t.TheBattleOfEndor.class)); cards.add(new SetCardInfo("The Battle of Endor", 130, Rarity.MYTHIC, mage.cards.t.TheBattleOfEndor.class));
cards.add(new SetCardInfo("The Battle of Geonosis", 97, Rarity.MYTHIC, mage.cards.t.TheBattleOfGeonosis.class)); cards.add(new SetCardInfo("The Battle of Geonosis", 97, Rarity.MYTHIC, mage.cards.t.TheBattleOfGeonosis.class));
cards.add(new SetCardInfo("The Battle of Hoth", 4, Rarity.MYTHIC, mage.cards.t.TheBattleOfHoth.class)); cards.add(new SetCardInfo("The Battle of Hoth", 4, Rarity.MYTHIC, mage.cards.t.TheBattleOfHoth.class));
cards.add(new SetCardInfo("The Battle of Naboo", 35, Rarity.MYTHIC, mage.cards.t.TheBattleOfNaboo.class)); cards.add(new SetCardInfo("The Battle of Naboo", 37, Rarity.MYTHIC, mage.cards.t.TheBattleOfNaboo.class));
cards.add(new SetCardInfo("The Battle of Yavin", 66, Rarity.MYTHIC, mage.cards.t.TheBattleOfYavin.class)); cards.add(new SetCardInfo("The Battle of Yavin", 67, Rarity.MYTHIC, mage.cards.t.TheBattleOfYavin.class));
cards.add(new SetCardInfo("The Death Star", 1, Rarity.MYTHIC, mage.cards.t.TheDeathStar.class)); cards.add(new SetCardInfo("The Death Star", 1, Rarity.MYTHIC, mage.cards.t.TheDeathStar.class));
cards.add(new SetCardInfo("TIE Bomber", 92, Rarity.UNCOMMON, mage.cards.t.TIEBomber.class)); cards.add(new SetCardInfo("TIE Bomber", 93, Rarity.UNCOMMON, mage.cards.t.TIEBomber.class));
cards.add(new SetCardInfo("TIE Interceptor", 93, Rarity.COMMON, mage.cards.t.TIEInterceptor.class)); cards.add(new SetCardInfo("TIE Interceptor", 94, Rarity.COMMON, mage.cards.t.TIEInterceptor.class));
cards.add(new SetCardInfo("Trade Federation Battleship", 220, Rarity.RARE, mage.cards.t.TradeFederationBattleship.class)); cards.add(new SetCardInfo("Trade Federation Battleship", 219, Rarity.RARE, mage.cards.t.TradeFederationBattleship.class));
cards.add(new SetCardInfo("Treacherous Bounty Hunter", 94, Rarity.COMMON, mage.cards.t.TreacherousBountyHunter.class)); cards.add(new SetCardInfo("Tri-Fighter", 228, Rarity.COMMON, mage.cards.t.TriFighter.class));
cards.add(new SetCardInfo("Tri-Fighter", 225, Rarity.UNCOMMON, mage.cards.t.TriFighter.class));
cards.add(new SetCardInfo("Trooper Armor", 237, Rarity.UNCOMMON, mage.cards.t.TrooperArmor.class)); cards.add(new SetCardInfo("Trooper Armor", 237, Rarity.UNCOMMON, mage.cards.t.TrooperArmor.class));
cards.add(new SetCardInfo("Trooper Commando", 157, Rarity.UNCOMMON, mage.cards.t.TrooperCommando.class)); cards.add(new SetCardInfo("Trooper Commando", 157, Rarity.UNCOMMON, mage.cards.t.TrooperCommando.class));
cards.add(new SetCardInfo("Twi'lek Seductess", 158, Rarity.COMMON, mage.cards.t.TwilekSeductess.class)); cards.add(new SetCardInfo("Twi'lek Seductress", 158, Rarity.COMMON, mage.cards.t.TwilekSeductress.class));
cards.add(new SetCardInfo("Ugnaught Scrap Worker", 60, Rarity.COMMON, mage.cards.u.UgnaughtScrapWorker.class)); cards.add(new SetCardInfo("Ugnaught Scrap Worker", 61, Rarity.COMMON, mage.cards.u.UgnaughtScrapWorker.class));
cards.add(new SetCardInfo("Underworld Slums", 251, Rarity.COMMON, mage.cards.u.UnderworldSlums.class)); cards.add(new SetCardInfo("Underworld Slums", 251, Rarity.COMMON, mage.cards.u.UnderworldSlums.class));
cards.add(new SetCardInfo("Unity of the Droids", 221, Rarity.UNCOMMON, mage.cards.u.UnityOfTheDroids.class)); cards.add(new SetCardInfo("Unity of the Droids", 220, Rarity.UNCOMMON, mage.cards.u.UnityOfTheDroids.class));
cards.add(new SetCardInfo("Unruly Sureshot", 95, Rarity.UNCOMMON, mage.cards.u.UnrulySureshot.class)); cards.add(new SetCardInfo("Unruly Sureshot", 95, Rarity.UNCOMMON, mage.cards.u.UnrulySureshot.class));
cards.add(new SetCardInfo("Vapor Snag", 61, Rarity.COMMON, mage.cards.v.VaporSnag.class)); cards.add(new SetCardInfo("Vapor Snag", 62, Rarity.COMMON, mage.cards.v.VaporSnag.class));
cards.add(new SetCardInfo("V-Wing", 126, Rarity.COMMON, mage.cards.v.VWing.class)); cards.add(new SetCardInfo("V-Wing", 126, Rarity.COMMON, mage.cards.v.VWing.class));
cards.add(new SetCardInfo("Weequay Beastmaster", 127, Rarity.UNCOMMON, mage.cards.w.WeequayBeastmaster.class)); cards.add(new SetCardInfo("Weequay Beastmaster", 127, Rarity.UNCOMMON, mage.cards.w.WeequayBeastmaster.class));
cards.add(new SetCardInfo("Wild Holocron", 238, Rarity.COMMON, mage.cards.w.WildHolocron.class)); cards.add(new SetCardInfo("Wild Holocron", 238, Rarity.COMMON, mage.cards.w.WildHolocron.class));
cards.add(new SetCardInfo("Wisdom of the Jedi", 222, Rarity.UNCOMMON, mage.cards.w.WisdomOfTheJedi.class)); cards.add(new SetCardInfo("Wisdom of the Jedi", 221, Rarity.UNCOMMON, mage.cards.w.WisdomOfTheJedi.class));
cards.add(new SetCardInfo("Womp Rat", 31, Rarity.COMMON, mage.cards.w.WompRat.class)); cards.add(new SetCardInfo("Womp Rat", 32, Rarity.COMMON, mage.cards.w.WompRat.class));
cards.add(new SetCardInfo("Wookiee Bounty Hunter", 159, Rarity.COMMON, mage.cards.w.WookieeBountyHunter.class)); cards.add(new SetCardInfo("Wookiee Bounty Hunter", 159, Rarity.COMMON, mage.cards.w.WookieeBountyHunter.class));
cards.add(new SetCardInfo("Wookiee Mystic", 223, Rarity.UNCOMMON, mage.cards.w.WookieeMystic.class)); cards.add(new SetCardInfo("Wookiee Mystic", 222, Rarity.UNCOMMON, mage.cards.w.WookieeMystic.class));
cards.add(new SetCardInfo("Wookiee Raidleader", 227, Rarity.COMMON, mage.cards.w.WookieeRaidleader.class)); cards.add(new SetCardInfo("Wookiee Raidleader", 229, Rarity.COMMON, mage.cards.w.WookieeRaidleader.class));
cards.add(new SetCardInfo("X-Wing", 32, Rarity.COMMON, mage.cards.x.XWing.class)); cards.add(new SetCardInfo("X-Wing", 33, Rarity.COMMON, mage.cards.x.XWing.class));
cards.add(new SetCardInfo("Yoda, Jedi Master", 178, Rarity.MYTHIC, mage.cards.y.YodaJediMaster.class)); cards.add(new SetCardInfo("Yoda, Jedi Master", 223, Rarity.MYTHIC, mage.cards.y.YodaJediMaster.class));
cards.add(new SetCardInfo("Y-Wing", 62, Rarity.UNCOMMON, mage.cards.y.YWing.class)); cards.add(new SetCardInfo("Y-Wing", 63, Rarity.UNCOMMON, mage.cards.y.YWing.class));
cards.add(new SetCardInfo("Zam Wessel", 63, Rarity.RARE, mage.cards.z.ZamWessel.class)); cards.add(new SetCardInfo("Zam Wesell", 64, Rarity.RARE, mage.cards.z.ZamWesell.class));
} }
} }