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.abilities.Ability;
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.common.DoIfCostPaid;
import mage.abilities.effects.common.GainLifeEffect;
@ -53,14 +53,14 @@ import mage.target.TargetPlayer;
public class AAT1 extends CardImpl {
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("Construct");
this.power = 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.
DoIfCostPaid effect = new DoIfCostPaid(new LoseLifeTargetEffect(1), new GenericManaCost(1));
// 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 ManaCostsImpl("{W/B}"));
Effect additionalEffect = new GainLifeEffect(1);
additionalEffect.setText("and you gain 1 life");
effect.addEffect(additionalEffect);

View file

@ -52,9 +52,9 @@ public class ATST extends CardImpl {
}
public ATST(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{5}{G}");
this.subtype.add("Human");
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{5}{G}");
this.subtype.add("Trooper");
this.subtype.add("Construct");
this.power = 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) {
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.subtype.add("Human");
this.subtype.add("Sith");
@ -87,7 +87,7 @@ public class AnakinSkywalker extends CardImpl {
ability.addTarget(new TargetCreaturePermanent());
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 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;
import java.util.HashSet;
import java.util.List;
import java.util.UUID;
import mage.abilities.Ability;
@ -44,8 +43,6 @@ import mage.abilities.effects.common.discard.DiscardControllerEffect;
import mage.abilities.effects.common.discard.DiscardHandAllEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.choices.Choice;
import mage.choices.ChoiceImpl;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.TargetController;
@ -68,14 +65,14 @@ import mage.target.common.TargetCreaturePermanent;
public class AurraSingBaneOfJedi extends CardImpl {
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.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.addTarget(new TargetCreaturePermanent(1));
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
// -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 {
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() {
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) {
@ -128,23 +118,10 @@ class AurraSingBaneOfJediEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
Choice choice = new ChoiceImpl(true);
choice.setMessage("Choose mode");
choice.setChoices(choices);
while (!controller.choose(outcome, choice, game)) {
if (!controller.canRespond()) {
return false;
}
}
String chosen = choice.getChoice();
switch (chosen) {
case "Deal 2 damage to target creature":
if (controller.chooseUse(outcome, "Deal 2 damage to " + game.getPermanent(getTargetPointer().getFirst(game, source)).getName() + "?", source, game)) {
new DamageTargetEffect(2).apply(game, source);
break;
default: //"Deal 1 damage to you"
} else {
new DamageControllerEffect(1).apply(game, source);
break;
}
return true;
}

View file

@ -49,13 +49,13 @@ import mage.players.Player;
public class BanthaHerd extends CardImpl {
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.power = new MageInt(2);
this.toughness = new MageInt(2);
// {X}{1}{W}{W}: Monstrosity X.
this.addAbility(new MonstrosityAbility("{X}{1}{W}{W}", Integer.MAX_VALUE));
// {X}{W}{W}: Monstrosity X.
this.addAbility(new MonstrosityAbility("{X}{W}{W}", Integer.MAX_VALUE));
// When Batha Herd becomes monstrous, create X 1/1 white Tusken Raider tokens.
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.common.continuous.BoostControlledEffect;
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
import mage.abilities.keyword.VigilanceAbility;
import mage.abilities.keyword.LifelinkAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@ -44,14 +44,14 @@ import mage.constants.Duration;
public class BattleTactics extends CardImpl {
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.setText("Creatures you control get +2/+1");
this.getSpellAbility().addEffect(effect);
effect = new GainAbilityControlledEffect(VigilanceAbility.getInstance(), Duration.EndOfTurn);
effect.setText("and gain vigilance until end of turn");
effect = new GainAbilityControlledEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn);
effect.setText("and gain lifelink until end of turn");
this.getSpellAbility().addEffect(effect);
}

View file

@ -47,12 +47,12 @@ import mage.target.common.TargetCardInLibrary;
public class BibFortuna extends CardImpl {
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.subtype.add("Twi'lek");
this.subtype.add("Advisor");
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.
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 {
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 {
filter.add(new ControllerPredicate(TargetController.YOU));
filter.add(Predicates.or(new SubtypePredicate("Rogue"), new SubtypePredicate("Hunter")));
}
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("Rogue");
this.power = 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.addTarget(new TargetOpponentsCreaturePermanent());
this.addAbility(ability);

View file

@ -32,7 +32,7 @@ import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
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.cards.CardImpl;
import mage.cards.CardSetInfo;
@ -56,13 +56,13 @@ public class CantinaBand extends CardImpl {
}
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.power = new MageInt(1);
this.power = new MageInt(0);
this.toughness = new MageInt(1);
// {T}, {W}: Tap target nonartifact creature.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new TapTargetEffect(), new ManaCostsImpl("{W}"));
// {T}, {1}: Tap target nonartifact creature.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new TapTargetEffect(), new GenericManaCost(1));
ability.addCost(new TapSourceCost());
ability.addTarget(new TargetCreaturePermanent(filter));
this.addAbility(ability);

View file

@ -28,6 +28,10 @@
package mage.cards.c;
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.continuous.GainAbilityTargetEffect;
import mage.abilities.effects.common.continuous.GainControlTargetEffect;
@ -36,6 +40,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.counters.CounterType;
import mage.target.common.TargetCreaturePermanent;
/**
@ -45,7 +50,7 @@ import mage.target.common.TargetCreaturePermanent;
public class Capture extends CardImpl {
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.
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
@ -57,6 +62,8 @@ public class Capture extends CardImpl {
// It gains haste until end of turn.
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) {

View file

@ -31,23 +31,17 @@ 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.common.AttachEffect;
import mage.abilities.effects.common.combat.CantBlockAttackActivateAttachedEffect;
import mage.abilities.effects.common.continuous.ControlEnchantedEffect;
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
import mage.abilities.effects.common.ruleModifying.CantHaveCountersSourceEffect;
import mage.abilities.effects.common.counter.RemoveCounterTargetEffect;
import mage.abilities.keyword.EnchantAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.AttachmentType;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.counters.CounterType;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
@ -58,7 +52,7 @@ import mage.target.common.TargetCreaturePermanent;
public class CarboniteChamber extends CardImpl {
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");
// Enchant creature
@ -68,19 +62,15 @@ public class CarboniteChamber extends CardImpl {
Ability ability = new EnchantAbility(auraTarget.getTargetName());
this.addAbility(ability);
// When Carbonite Chamber enters the battlefield, remove all bounty counters from all creatures.
this.addAbility(new EntersBattlefieldTriggeredAbility(new RemoveAllCountersEffect()));
// When Carbonite Chamber enters the battlefield, you may remove a bounty counter from target creature.
ability = new EntersBattlefieldTriggeredAbility(new RemoveCounterTargetEffect(CounterType.BOUNTY.createInstance()), true);
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
// You control enchanted creature.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ControlEnchantedEffect()));
// It can't have counters placed on it.
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.
// It can't attack or block, and its activated abilities can't be activated.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBlockAttackActivateAttachedEffect()));
}
@ -94,28 +84,3 @@ public class CarboniteChamber extends CardImpl {
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.effects.common.continuous.GainAbilitySourceEffect;
import mage.abilities.keyword.MonstrosityAbility;
import mage.abilities.keyword.TrampleAbility;
import mage.abilities.keyword.SwampwalkAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@ -47,19 +47,19 @@ import mage.constants.Zone;
public class DagobahMawSlug extends CardImpl {
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.power = new MageInt(4);
this.toughness = new MageInt(3);
this.toughness = new MageInt(2);
// {6}{G}: Monstrosity 3.
this.addAbility(new MonstrosityAbility("{6}{G}", 3));
// {3}{R}{G}{W}: Monstrosity 2.
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(
new GainAbilitySourceEffect(TrampleAbility.getInstance()),
new GainAbilitySourceEffect(new SwampwalkAbility()),
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 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(
new BeginningOfEndStepTriggeredAbility(new DamageTargetEffect(2), TargetController.ANY, false),
new BeginningOfEndStepTriggeredAbility(new DamageTargetEffect(2), TargetController.YOU, false),
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());
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.
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());
}

View file

@ -41,14 +41,14 @@ import mage.constants.CardType;
public class DarkTrooper extends CardImpl {
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("Trooper");
this.power = new MageInt(2);
this.toughness = new MageInt(2);
// Repair 4
this.addAbility(new RepairAbility(4));
// Repair 2
this.addAbility(new RepairAbility(2));
}
public DarkTrooper(final DarkTrooper card) {

View file

@ -33,7 +33,7 @@ import mage.abilities.Ability;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.condition.common.HateCondition;
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.HasteAbility;
import mage.cards.CardImpl;
@ -50,7 +50,7 @@ import mage.watchers.common.LifeLossOtherFromCombatWatcher;
public class DarthMaul extends CardImpl {
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.subtype.add("Zabrak");
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.
Ability ability = new ConditionalTriggeredAbility(
new AttacksTriggeredAbility(new CantBlockTargetEffect(Duration.EndOfTurn), false),
new AttacksTriggeredAbility(new CantBeBlockedByTargetSourceEffect(Duration.EndOfTurn), false),
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.");
ability.addTarget(new TargetCreaturePermanent());

View file

@ -60,7 +60,7 @@ public class DarthSidiousSithLord extends CardImpl {
}
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.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(5));

View file

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

View file

@ -52,12 +52,12 @@ import mage.counters.CounterType;
public class DroneHolocron extends CardImpl {
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()));
// {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));
Ability ability = new WhiteManaAbility();
ability.addCost(cost);
@ -71,7 +71,7 @@ public class DroneHolocron extends CardImpl {
ability.addCost(cost);
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));
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) {
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("Rebel");
this.power = new MageInt(3);
@ -91,7 +91,7 @@ public class EchoBaseCommando extends CardImpl {
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();
static {

View file

@ -33,7 +33,7 @@ import mage.abilities.Ability;
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect;
import mage.abilities.effects.common.ReturnToBattlefieldUnderYourControlTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@ -52,7 +52,7 @@ public class EscapePod extends CardImpl {
public EscapePod(UUID ownerId, CardSetInfo setInfo) {
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().addTarget(new TargetControlledCreaturePermanent());
@ -72,7 +72,7 @@ class EscapePodEffect extends OneShotEffect {
public EscapePodEffect() {
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) {
@ -85,8 +85,8 @@ class EscapePodEffect extends OneShotEffect {
MageObject sourceObject = game.getObject(source.getSourceId());
if (permanent != null && sourceObject != null) {
if (permanent.moveToExile(source.getSourceId(), sourceObject.getIdName(), source.getSourceId(), game)) {
Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect();
effect.setText("Return that card to the battlefield under its owner's control at the beginning of the next end step");
Effect effect = new ReturnToBattlefieldUnderYourControlTargetEffect();
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));
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect), source);
return true;

View file

@ -29,12 +29,19 @@ package mage.cards.e;
import java.util.UUID;
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.SpaceflightAbility;
import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
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) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{G}{G}");
this.subtype.add("Slug");
this.power = new MageInt(7);
this.power = new MageInt(8);
this.toughness = new MageInt(7);
// Flash
@ -54,8 +61,8 @@ public class Exogorth extends CardImpl {
// Trample
this.addAbility(TrampleAbility.getInstance());
// Exogorth can block creatures with spaceflight.
this.addAbility(CanBlockSpaceflightAbility.getInstance());
// Exogorth can block only creatures with spaceflight.
this.addAbility(new CanBlockOnlySpaceflightAbility());
}
public Exogorth(final Exogorth card) {
@ -67,3 +74,47 @@ public class Exogorth extends CardImpl {
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) {
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.
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new DoIfCostPaid(new AddCountersSourceEffect(CounterType.CHARGE.createInstance()), new ExileFromGraveCost(new TargetCardInYourGraveyard()), null, true), TargetController.YOU, false));
// 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.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.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new FlamesOfRemembranceExileEffect(new CountersSourceCount(CounterType.CHARGE)), new SacrificeSourceCost()));
// 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.LORE)), new SacrificeSourceCost()));
}
public FlamesOfRemembrance(final FlamesOfRemembrance card) {
@ -88,7 +88,7 @@ class FlamesOfRemembranceExileEffect extends OneShotEffect {
public FlamesOfRemembranceExileEffect(CountersSourceCount amount) {
super(Outcome.Benefit);
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) {

View file

@ -28,12 +28,20 @@
package mage.cards.f;
import java.util.UUID;
import mage.abilities.effects.common.CounterTargetEffect;
import mage.abilities.effects.common.LoseLifeTargetControllerEffect;
import mage.abilities.Ability;
import mage.abilities.costs.Cost;
import mage.abilities.costs.common.PayLifeCost;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.keyword.ScryEffect;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
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;
/**
@ -43,14 +51,11 @@ import mage.target.TargetSpell;
public class ForceChoke extends CardImpl {
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().addEffect(new CounterTargetEffect());
// It controller loses 2 life.
this.getSpellAbility().addEffect(new LoseLifeTargetControllerEffect(2));
this.getSpellAbility().addEffect(new ForceChokeEffect());
// Scry 2
this.getSpellAbility().addEffect(new ScryEffect(2));
@ -65,3 +70,39 @@ public class ForceChoke extends CardImpl {
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;
import java.util.UUID;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.keyword.ScryEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
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;
/**
@ -43,12 +47,11 @@ import mage.target.common.TargetCreatureOrPlayer;
public class ForceDrain extends CardImpl {
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().addEffect(new DamageTargetEffect(2));
this.getSpellAbility().addEffect(new GainLifeEffect(2));
this.getSpellAbility().addEffect(new ForceDrainEffect());
// Scry 1
this.getSpellAbility().addEffect(new ScryEffect(1));
@ -63,3 +66,41 @@ public class ForceDrain extends CardImpl {
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
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.cards.j;
package mage.cards.f;
import java.util.UUID;
import mage.abilities.effects.Effect;
@ -44,9 +44,9 @@ import mage.target.common.TargetCreaturePermanent;
*
* @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}");
// 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.setText("and gains first strike until end of turn");
this.getSpellAbility().addEffect(effect);
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
// Scry 1
this.getSpellAbility().addEffect(new ScryEffect(1));
}
public JediReflex(final JediReflex card) {
public ForceReflex(final ForceReflex card) {
super(card);
}
@Override
public JediReflex copy() {
return new JediReflex(this);
public ForceReflex copy() {
return new ForceReflex(this);
}
}

View file

@ -28,13 +28,22 @@
package mage.cards.f;
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.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.counters.CounterType;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.SubtypePredicate;
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;
/**
@ -43,18 +52,22 @@ import mage.target.common.TargetCreaturePermanent;
*/
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 {
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) {
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) {
@ -66,3 +79,36 @@ public class FulfillContract extends CardImpl {
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) {
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("Zyborg");
this.subtype.add("Cyborg");
this.subtype.add("Trooper");
this.power = 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 HeadHunting(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{B}");
// Each opponent loses 1 life.
this.getSpellAbility().addEffect(new LoseLifeOpponentsEffect(1));
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{B}");
// Put a bounty counter on target creature an opponent controls.
this.getSpellAbility().addTarget(new TargetOpponentsCreaturePermanent());
this.getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.BOUNTY.createInstance()));
// Each opponent loses 1 life.
this.getSpellAbility().addEffect(new LoseLifeOpponentsEffect(1));
// Draw a card.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));
}

View file

@ -29,7 +29,9 @@ package mage.cards.h;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.effects.common.DontUntapInControllersNextUntapStepSourceEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@ -43,7 +45,7 @@ import mage.counters.CounterType;
public class HuttCrimeLord extends CardImpl {
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("Rogue");
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.
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) {

View file

@ -51,7 +51,7 @@ import mage.game.permanent.Permanent;
public class IG88B extends CardImpl {
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.subtype.add("Droid");
this.subtype.add("Hunter");

View file

@ -25,14 +25,16 @@
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.cards.p;
package mage.cards.i;
import java.util.List;
import java.util.UUID;
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.common.counter.AddCountersTargetEffect;
import mage.abilities.keyword.BountyAbility;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@ -40,67 +42,69 @@ import mage.constants.Outcome;
import mage.counters.CounterType;
import mage.game.Game;
import mage.players.Player;
import mage.players.PlayerList;
import mage.target.common.TargetOpponentsCreaturePermanent;
/**
*
* @author Styxo
*/
public class PublicArrangement extends CardImpl {
public class ImpulsiveWager extends CardImpl {
public PublicArrangement(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{B}");
public ImpulsiveWager(UUID ownerId, CardSetInfo setInfo) {
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.
Ability ability = new EntersBattlefieldTriggeredAbility(new AddCountersTargetEffect(CounterType.BOUNTY.createInstance()));
ability.addTarget(new TargetOpponentsCreaturePermanent(0, 2));
this.addAbility(ability);
// As an additional cost to cast Irresponsible Gambling, discard a card at random.
this.getSpellAbility().addCost(new DiscardCardCost(true));
// <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.
this.addAbility(new BountyAbility(new PublicArrangementEffect(), false, true));
// If the discarded card was a nonland card, draw two cards. Otherwise, put a bounty counter on target creature.
this.getSpellAbility().addEffect(new ImpulsiveWagerEffect());
this.getSpellAbility().addTarget(new TargetOpponentsCreaturePermanent());
}
public PublicArrangement(final PublicArrangement card) {
public ImpulsiveWager(final ImpulsiveWager card) {
super(card);
}
@Override
public PublicArrangement copy() {
return new PublicArrangement(this);
public ImpulsiveWager copy() {
return new ImpulsiveWager(this);
}
}
class PublicArrangementEffect extends OneShotEffect {
class ImpulsiveWagerEffect extends OneShotEffect {
public PublicArrangementEffect() {
super(Outcome.LoseLife);
staticText = "that creature's controler loses 2 life. Each other player gains 2 life";
public ImpulsiveWagerEffect() {
super(Outcome.Benefit);
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);
}
@Override
public PublicArrangementEffect copy() {
return new PublicArrangementEffect(this);
public boolean apply(Game game, Ability source) {
Player player = game.getPlayer(source.getControllerId());
if (player != null) {
DiscardCardCost cost = (DiscardCardCost) source.getCosts().get(0);
if (cost != null) {
List<Card> cards = cost.getCards();
if (cards.size() == 1 && cards.get(0).getCardType().contains(CardType.LAND)) {
Effect effect = new AddCountersTargetEffect(CounterType.BOUNTY.createInstance());
effect.setTargetPointer(getTargetPointer());
effect.apply(game, source);
} else {
player.drawCards(2, game);
}
@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;
}
@Override
public ImpulsiveWagerEffect copy() {
return new ImpulsiveWagerEffect(this);
}
}

View file

@ -52,10 +52,10 @@ import mage.watchers.Watcher;
public class InsatiableRakghoul extends CardImpl {
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("Mutant");
this.power = new MageInt(5);
this.power = new MageInt(4);
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.

View file

@ -50,10 +50,10 @@ import mage.watchers.common.LifeLossOtherFromCombatWatcher;
public class IronFistOfTheEmpire extends CardImpl {
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.
TriggeredAbility triggeredAbility = new BeginningOfEndStepTriggeredAbility(new GainLifeEffect(1), TargetController.ANY, false);
// <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(2), TargetController.ANY, false);
triggeredAbility.addEffect(new CreateTokenEffect(new RoyalGuardToken()));
Ability ability = new ConditionalTriggeredAbility(
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.common.counter.AddCountersTargetEffect;
import mage.abilities.keyword.HasteAbility;
import mage.abilities.keyword.IntimidateAbility;
import mage.abilities.keyword.MenaceAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@ -54,7 +54,6 @@ import mage.target.TargetPermanent;
import mage.target.common.TargetOpponentsCreaturePermanent;
import mage.filter.predicate.permanent.CounterPredicate;
/**
*
* @author Styxo/spjspj
@ -62,15 +61,15 @@ import mage.filter.predicate.permanent.CounterPredicate;
public class JangoFett extends CardImpl {
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.subtype.add("Human");
this.subtype.add("Hunter");
this.power = new MageInt(2);
this.toughness = new MageInt(2);
// Intimidate
this.addAbility(IntimidateAbility.getInstance());
// Menace
this.addAbility(new MenaceAbility());
// Haste
this.addAbility(HasteAbility.getInstance());

View file

@ -27,8 +27,6 @@
*/
package mage.cards.j;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
@ -54,8 +52,7 @@ import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.Target;
import mage.target.TargetPermanent;
import mage.target.targetpointer.FixedTarget;
import mage.util.RandomUtil;
import mage.target.common.TargetOpponent;
/**
*
@ -64,7 +61,7 @@ import mage.util.RandomUtil;
public class JarJarBinks extends CardImpl {
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.subtype.add("Gungan");
this.power = new MageInt(0);
@ -73,8 +70,10 @@ public class JarJarBinks extends CardImpl {
// Jar jar Binks can't block.
this.addAbility(new CantBlockAbility());
// When Jar Jar Binks enter the battlefield, an opponent gains control of it.
this.addAbility(new EntersBattlefieldTriggeredAbility(new JarJarBinksEffect()));
// When Jar Jar Binks enter the battlefield, target opponent gains control of it.
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.
this.addAbility(new BeginningOfCombatTriggeredAbility(new JarJarBinksTapEffect(), TargetController.YOU, false));
@ -94,7 +93,7 @@ class JarJarBinksEffect extends OneShotEffect {
public JarJarBinksEffect() {
super(Outcome.GainControl);
this.staticText = "an opponent gains control of it";
this.staticText = "target opponent gains control of it";
}
public JarJarBinksEffect(final JarJarBinksEffect effect) {
@ -109,13 +108,13 @@ class JarJarBinksEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
Permanent jarJar = (Permanent) source.getSourceObjectIfItStillExists(game);
List<UUID> list = new ArrayList<UUID>(game.getOpponents(source.getControllerId()));
UUID player = list.get(RandomUtil.nextInt(list.size()));
if (player != null && jarJar != null) {
Player player = game.getPlayer(source.getControllerId());
Player opponent = game.getPlayer(getTargetPointer().getFirst(game, source));
if (player != null && jarJar != null && opponent != null) {
ContinuousEffect effect = new JarJarBinksGainControlSourceEffect();
effect.setTargetPointer(new FixedTarget(player));
effect.setTargetPointer(getTargetPointer());
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 false;

View file

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

View file

@ -52,12 +52,12 @@ import mage.counters.CounterType;
public class JediHolocron extends CardImpl {
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()));
// {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));
Ability ability = new GreenManaAbility();
ability.addCost(cost);
@ -71,7 +71,7 @@ public class JediHolocron extends CardImpl {
ability.addCost(cost);
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));
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.abilities.common.LeavesBattlefieldTriggeredAbility;
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.cards.CardImpl;
import mage.cards.CardSetInfo;
@ -45,14 +45,14 @@ import mage.target.common.TargetEnchantmentPermanent;
public class JediInquirer extends CardImpl {
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("Jedi");
this.power = new MageInt(2);
this.toughness = new MageInt(2);
// When Jedi Inquirer enters the battlefield, you may destroy target enchantment.
LeavesBattlefieldTriggeredAbility ability = new LeavesBattlefieldTriggeredAbility(new DestroyTargetEffect(), true);
// When Jedi Inquirer leaves the battlefield, you may exile target enchantment.
LeavesBattlefieldTriggeredAbility ability = new LeavesBattlefieldTriggeredAbility(new ExileTargetEffect(), true);
ability.addTarget(new TargetEnchantmentPermanent());
this.addAbility(ability);

View file

@ -29,7 +29,8 @@ package mage.cards.j;
import java.util.UUID;
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.effects.common.ReturnToHandTargetEffect;
import mage.abilities.keyword.MeditateAbility;
@ -47,22 +48,22 @@ import mage.target.common.TargetNonlandPermanent;
*/
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 {
filter.add(new ControllerPredicate(TargetController.NOT_YOU));
}
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("Jedi");
this.subtype.add("Knight");
this.power = 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.
EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect());
// When Jedi Knight leaves the battlefield, return target nonland permanent you don't control to its owner's hands.
Ability ability = new LeavesBattlefieldTriggeredAbility(new ReturnToHandTargetEffect(), false);
ability.addTarget(new TargetNonlandPermanent(filter));
this.addAbility(ability);

View file

@ -41,7 +41,7 @@ import mage.target.TargetPlayer;
public class JediMindTrick extends CardImpl {
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.
this.getSpellAbility().addEffect(new ControlTargetPlayerNextTurnEffect());

View file

@ -25,26 +25,23 @@
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.cards.f;
package mage.cards.j;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
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.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.AnotherPredicate;
import mage.filter.predicate.permanent.ControllerPredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.common.TargetControlledCreaturePermanent;
import mage.target.common.TargetCreaturePermanent;
@ -52,7 +49,7 @@ import mage.target.common.TargetCreaturePermanent;
*
* @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 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));
}
public ForceAdept(UUID ownerId, CardSetInfo setInfo) {
public JediSentinel(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}{U}{W}");
this.subtype.add("Mirialan");
this.subtype.add("Twi'lek");
this.subtype.add("Jedi");
this.power = new MageInt(2);
this.toughness = new MageInt(2);
@ -72,52 +69,22 @@ public class ForceAdept extends CardImpl {
// Flash
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.
Ability ability = new EntersBattlefieldTriggeredAbility(new ForceAdeptEffect());
// When Jedi Sentinel enters the battlefield, return another target creature you control and target creature you don't control to their owners' hands.
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 TargetCreaturePermanent(filter2));
this.addAbility(ability);
}
public ForceAdept(final ForceAdept card) {
public JediSentinel(final JediSentinel card) {
super(card);
}
@Override
public ForceAdept copy() {
return new ForceAdept(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;
public JediSentinel copy() {
return new JediSentinel(this);
}
}

View file

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

View file

@ -29,8 +29,8 @@ package mage.cards.l;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
@ -49,7 +49,7 @@ import mage.game.permanent.token.TrooperToken;
public class LAATGunship extends CardImpl {
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.power = new MageInt(3);
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.
this.addAbility(new AttacksTriggeredAbility(new CreateTokenEffect(new TrooperToken(), 1, true, true), false));
// {W}: LAAT Gunship attacks gains spaceflight until the end of turn.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilitySourceEffect(SpaceflightAbility.getInstance(), Duration.EndOfTurn), new ManaCostsImpl("{W}")));
// {W}: LAAT Gunship gains spaceflight until the end of turn. Activate this ability only as a sorcery
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.constants.CardType;
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;
/**
@ -49,22 +46,16 @@ import mage.target.common.TargetCreaturePermanent;
*/
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) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}");
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}");
this.subtype.add("Beast");
this.power = new MageInt(2);
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.addCost(new SacrificeSourceCost());
ability.addTarget(new TargetCreaturePermanent(filter));
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
}

View file

@ -48,14 +48,14 @@ import mage.game.permanent.Permanent;
public class MantellianSavrip extends CardImpl {
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("Berserker");
this.power = new MageInt(4);
this.toughness = new MageInt(4);
// {5}{G}{G}: Monstrosity 3.
this.addAbility(new MonstrosityAbility("{5}{G}{G}", 3));
// {5}{G}{G}: Monstrosity 2.
this.addAbility(new MonstrosityAbility("{5}{G}{G}", 2));
// Creatures with power less than Mantellian Savrip's power can't block it.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new MantellianSavripRestrictionEffect()));

View file

@ -29,23 +29,22 @@ package mage.cards.m;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.effects.AsThoughEffectImpl;
import mage.abilities.effects.ContinuousEffect;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.cards.Cards;
import mage.cards.CardsImpl;
import mage.constants.AsThoughEffectType;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.counters.CounterType;
import mage.filter.FilterPermanent;
import mage.game.Game;
import mage.game.permanent.token.DroidToken;
import mage.players.Player;
import mage.target.targetpointer.FixedTargets;
/**
*
@ -54,12 +53,13 @@ import mage.target.targetpointer.FixedTargets;
public class MarchOfTheDroids extends CardImpl {
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());
// 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) {
@ -76,7 +76,7 @@ class MarchOfTheDroidsEffect extends OneShotEffect {
public MarchOfTheDroidsEffect() {
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) {
@ -92,61 +92,21 @@ class MarchOfTheDroidsEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
Cards castable = new CardsImpl();
Cards cardsToReturn = new CardsImpl();
for (Card card : controller.getGraveyard().getCards(game)) {
if (card.getOwnerId().equals(controller.getId()) && card.getCounters(game).getCount(CounterType.REPAIR) > 0) {
int number = card.getCounters(game).getCount(CounterType.REPAIR);
if (number > 0) {
castable.add(card);
cardsToReturn.add(card);
card.removeCounters(CounterType.REPAIR.createInstance(number), game);
}
}
}
if (!castable.isEmpty()) {
ContinuousEffect effect = new MarchOfTheDroidsCastFromExileEffect();
effect.setTargetPointer(new FixedTargets(castable, game));
game.addEffect(effect, source);
if (!cardsToReturn.isEmpty()) {
controller.moveCards(cardsToReturn, Zone.BATTLEFIELD, source, game);
}
return true;
}
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
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.cards.t;
package mage.cards.m;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.keyword.ProvokeAbility;
import mage.abilities.keyword.MonstrosityAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@ -38,25 +38,26 @@ import mage.constants.CardType;
*
* @author Styxo
*/
public class TwilekSeductess extends CardImpl {
public class MassiffSwarm extends CardImpl {
public TwilekSeductess(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
this.subtype.add("Twi'lek");
this.power = new MageInt(2);
this.toughness = new MageInt(2);
public MassiffSwarm(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
this.subtype.add("Crocodile");
this.subtype.add("Beast");
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.
this.addAbility(new ProvokeAbility("Whenever {this} attacks, you may have target creature defending player controls untap and block it if able."));
// {6}{G}: Monstrosity 3.
this.addAbility(new MonstrosityAbility("{6}{G}", 3));
}
public TwilekSeductess(final TwilekSeductess card) {
public MassiffSwarm(final MassiffSwarm card) {
super(card);
}
@Override
public TwilekSeductess copy() {
return new TwilekSeductess(this);
public MassiffSwarm copy() {
return new MassiffSwarm(this);
}
}

View file

@ -44,7 +44,7 @@ import mage.constants.CardType;
public class MonCalamariInitiate extends CardImpl {
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("Jedi");
this.power = new MageInt(3);

View file

@ -31,7 +31,7 @@ import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
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.common.DoIfCostPaid;
import mage.abilities.effects.common.ExileTargetForSourceEffect;
@ -57,7 +57,7 @@ public class N1Starfighter extends CardImpl {
}
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.power = new MageInt(2);
this.toughness = new MageInt(2);
@ -65,8 +65,8 @@ public class N1Starfighter extends CardImpl {
// Spaceflight
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.
Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(new DoIfCostPaid(new ExileTargetForSourceEffect(), new GenericManaCost(1)), false);
// 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 ManaCostsImpl("{1}{W/U}")), false);
Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, true);
effect.setText(", then return the card to the battlefield under their owner's control");
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 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("Sith");
this.power = 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.addCost(new PayLifeCost(2));
ability.addCost(new PayLifeCost(1));
this.addAbility(ability);
}

View file

@ -62,7 +62,7 @@ public class NuteGunray extends CardImpl {
}
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.subtype.add("Neimidian");
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.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.common.FightTargetsEffect;
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.permanent.AnotherPredicate;
import mage.target.common.TargetControlledCreaturePermanent;
import mage.target.common.TargetOpponentsCreaturePermanent;
import mage.counters.CounterType;
import mage.target.common.TargetCreaturePermanent;
/**
*
@ -46,23 +45,18 @@ import mage.target.common.TargetOpponentsCreaturePermanent;
*/
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) {
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("Hunter");
this.subtype.add("Rogue");
this.power = 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.
Ability ability = new EntersBattlefieldTriggeredAbility(new FightTargetsEffect("another target creature you control fight target creature an opponent controls"), true);
ability.addTarget(new TargetControlledCreaturePermanent(controlledCreature));
ability.addTarget(new TargetOpponentsCreaturePermanent());
// 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 AddCountersTargetEffect(CounterType.BOUNTY.createInstance()), true);
ability.addEffect(new FightTargetsEffect("another target creature fights that creature"));
ability.addTarget(new TargetCreaturePermanent());
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
}

View file

@ -46,7 +46,7 @@ import mage.target.TargetSpell;
*
* @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");
@ -54,7 +54,7 @@ public class PersonalEnergyField extends CardImpl {
filter.add(new PersonalEnergyFieldPredicate());
}
public PersonalEnergyField(UUID ownerId, CardSetInfo setInfo) {
public PersonalEnergyShield(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{U}");
// 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));
}
public PersonalEnergyField(final PersonalEnergyField card) {
public PersonalEnergyShield(final PersonalEnergyShield card) {
super(card);
}
@Override
public PersonalEnergyField copy() {
return new PersonalEnergyField(this);
public PersonalEnergyShield copy() {
return new PersonalEnergyShield(this);
}
}

View file

@ -29,22 +29,20 @@ package mage.cards.p;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.Mode;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.keyword.MeditateAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.ReplacementEffectImpl;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.mageobject.AbilityPredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.game.stack.StackAbility;
import mage.players.Player;
import mage.target.common.TargetTriggeredAbility;
import mage.game.events.EntersTheBattlefieldEvent;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.game.events.NumberOfTriggersEvent;
import mage.game.events.ZoneChangeEvent;
/**
*
@ -52,19 +50,12 @@ import mage.target.common.TargetTriggeredAbility;
*/
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) {
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) {
@ -77,40 +68,67 @@ public class PrecipiceOfMortis extends CardImpl {
}
}
class PrecipiceOfMortisEffect extends OneShotEffect {
class PrecipiceOfMortisEffect extends ReplacementEffectImpl {
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) {
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
public PrecipiceOfMortisEffect copy() {
return new PrecipiceOfMortisEffect(this);
}
@Override
public String getText(Mode mode) {
StringBuilder sb = new StringBuilder();
sb.append("copy ").append(mode.getTargets().get(0).getTargetName()).append(". You may choose new targets for that ability");
return sb.toString();
public boolean checksEventType(GameEvent event, Game game) {
return event.getType() == EventType.NUMBER_OF_TRIGGERS;
}
@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
*/
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}");
// 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());
}
public PrimalInstict(final PrimalInstict card) {
public PrimalInstinct(final PrimalInstinct card) {
super(card);
}
@Override
public PrimalInstict copy() {
return new PrimalInstict(this);
public PrimalInstinct copy() {
return new PrimalInstinct(this);
}
}

View file

@ -42,7 +42,7 @@ import mage.constants.CardType;
public class RagingReek extends CardImpl {
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.power = new MageInt(4);
this.toughness = new MageInt(4);
@ -50,8 +50,8 @@ public class RagingReek extends CardImpl {
// Raging Reek attacks each turn if able.
this.addAbility(new AttacksEachTurnStaticAbility());
//{4}{R}{R}: Monstrosity 2
this.addAbility(new MonstrosityAbility("{4}{R}{R}", 2));
//{5}{R}: Monstrosity 2
this.addAbility(new MonstrosityAbility("{5}{R}", 2));
}
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 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.power = new MageInt(4);
this.toughness = new MageInt(4);
// {1}{G}, Sacrifice another creature: Monstrosity 2.
Ability ability = new MonstrosityAbility("{1}{G}", 2);
// {2}{G}, Sacrifice another creature: Monstrosity 2.
Ability ability = new MonstrosityAbility("{2}{G}", 2);
ability.addCost(new RavenousWampaSacrificeTargetCost(new TargetControlledCreaturePermanent(filter)));
this.addAbility(ability);

View file

@ -54,19 +54,19 @@ import mage.watchers.common.PlayerLostLifeWatcher;
public class Revenge extends CardImpl {
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.
this.getSpellAbility().addEffect(new FightTargetsEffect());
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
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());
}

View file

@ -29,11 +29,17 @@ package mage.cards.r;
import java.util.UUID;
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.VigilanceAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
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 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.power = new MageInt(2);
this.toughness = new MageInt(4);
// Vigilance
this.addAbility(VigilanceAbility.getInstance());
// {3}{W}{W}: Monstrosity 3.
// {3}{W}{W}: Monstrosity 2.
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) {

View file

@ -41,7 +41,7 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Zone;
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 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("Trooper");
this.power = 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.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.addTarget(new TargetCreatureOrPlayer());
ability.addTarget(new TargetOpponentsCreaturePermanent());
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
new GainAbilityControlledEffect(ability, Duration.WhileOnBattlefield,
new FilterCreaturePermanent("Trooper", "Trooper creatures"), false)));

View file

@ -62,8 +62,6 @@ public class SabaccGame extends CardImpl {
public SabaccGame(UUID ownerId, CardSetInfo setInfo) {
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.
* 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.effects.common.DoIfCostPaid;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.GainLifeEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@ -46,14 +47,16 @@ import mage.target.common.TargetControlledPermanent;
public class SalvageSquad extends CardImpl {
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("Artificier");
this.power = 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.
this.addAbility(new EntersBattlefieldTriggeredAbility(new DoIfCostPaid(new DrawCardSourceControllerEffect(2), new SacrificeTargetCost(new TargetControlledPermanent(new FilterControlledArtifactPermanent())))));
// When you Salvage Squad enters the battlefied, you may sacrifice an artifact. If you do, you gain 2 life and draw two cards.
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) {

View file

@ -52,9 +52,9 @@ public class ShaakHerd extends CardImpl {
}
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.power = new MageInt(2);
this.power = new MageInt(1);
this.toughness = new MageInt(2);
// 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) {
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("Sith");
this.power = new MageInt(1);
this.toughness = new MageInt(1);
this.power = new MageInt(3);
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(
new EntersBattlefieldTriggeredAbility(new DestroyTargetEffect()),
new EntersBattlefieldTriggeredAbility(new DestroyTargetEffect(), true),
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));
this.addAbility(ability, new LifeLossOtherFromCombatWatcher());
}

View file

@ -58,14 +58,14 @@ import mage.target.common.TargetControlledCreaturePermanent;
public class SithEvoker extends CardImpl {
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("Sith");
this.power = new MageInt(3);
this.toughness = new MageInt(3);
// {T}, {2}, 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}"));
// {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("{B}"));
ability.addCost(new TapSourceCost());
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 mage.MageInt;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
import mage.abilities.keyword.HasteAbility;
import mage.abilities.keyword.TrampleAbility;
@ -48,13 +49,13 @@ import mage.game.events.GameEvent;
public class SithRavager extends CardImpl {
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("Sith");
this.power = new MageInt(4);
this.toughness = new MageInt(2);
this.power = new MageInt(3);
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());
}
@ -70,7 +71,8 @@ public class SithRavager extends CardImpl {
public class LostNonCombatLifeTriggeredAbility extends TriggeredAbilityImpl {
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));
}

View file

@ -51,7 +51,7 @@ public class SithSorcerer extends CardImpl {
this.subtype.add("Human");
this.subtype.add("Sith");
this.power = new MageInt(2);
this.toughness = new MageInt(3);
this.toughness = new MageInt(2);
// When Sith Sorcerer enters the battlefield, scry 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 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.
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 mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.condition.common.IsPhaseCondition;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.decorator.ConditionalActivatedAbility;
import mage.abilities.effects.common.continuous.LoseAbilitySourceEffect;
import mage.abilities.keyword.SpaceflightAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.TurnPhase;
import mage.constants.Zone;
/**
@ -47,7 +48,7 @@ import mage.constants.Zone;
public class TIEBomber extends CardImpl {
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.power = new MageInt(3);
this.toughness = new MageInt(2);
@ -55,9 +56,13 @@ public class TIEBomber extends CardImpl {
// Spaceflight
this.addAbility(SpaceflightAbility.getInstance());
// {1}: TIE Bomber loses Spaceflight until end od turn.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new LoseAbilitySourceEffect(SpaceflightAbility.getInstance(), Duration.EndOfTurn), new ManaCostsImpl("{1}"));
this.addAbility(ability);
// {1}: TIE Bomber loses Spaceflight until end od turn. Activate this ability only during combat.
this.addAbility(new ConditionalActivatedAbility(
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) {

View file

@ -46,7 +46,7 @@ import mage.game.permanent.token.DroidToken;
public class TankDroid extends CardImpl {
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.power = new MageInt(5);
this.toughness = new MageInt(5);
@ -56,6 +56,7 @@ public class TankDroid extends CardImpl {
this.addAbility(ability);
ability = new EntersBattlefieldOrDiesSourceTriggeredAbility(new CreateTokenEffect(new DroidToken()), false);
this.addAbility(ability);
// Repair 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;
import java.util.UUID;
import mage.abilities.dynamicvalue.IntPlusDynamicValue;
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
import mage.abilities.dynamicvalue.common.StaticValue;
import mage.abilities.effects.Effect;
@ -40,8 +41,7 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.TargetController;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.ControllerPredicate;
import mage.filter.common.FilterOpponentsCreaturePermanent;
/**
*
@ -49,21 +49,15 @@ import mage.filter.predicate.permanent.ControllerPredicate;
*/
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) {
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.
Effect effect = new DamagePlayersEffect(Outcome.Damage, new ManacostVariableValue(), TargetController.OPPONENT);
effect.setText("The Battle of Geonosis deals X damage to each opponent");
// The Battle of Geonosis deals X + 1 damage to each opponent and each creature your opponents control.
Effect effect = new DamagePlayersEffect(Outcome.Damage, new IntPlusDynamicValue(1, new ManacostVariableValue()), TargetController.OPPONENT);
effect.setText("The Battle of Geonosis deals X plus 1 damage to each opponent");
this.getSpellAbility().addEffect(effect);
effect = new DamageAllEffect(new ManacostVariableValue(), filter);
effect.setText("and each creature you don't control");
effect = new DamageAllEffect(new IntPlusDynamicValue(1, new ManacostVariableValue()), new FilterOpponentsCreaturePermanent());
effect.setText("and each creature your opponents control");
this.getSpellAbility().addEffect(effect);
// 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 mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.common.RemoveCountersSourceCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.continuous.BoostControlledEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.SpaceflightAbility;
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.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.game.permanent.token.DroidToken;
@ -73,14 +68,8 @@ public class TradeFederationBattleship extends CardImpl {
// Droid creatures you control get +1/+1
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.
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.CHARGE.createInstance(3), true),
"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);
// {T}: Create two 1/1 colorless Droid artifact token cretures.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new DroidToken(), 2), new TapSourceCost()));
}
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 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("Starship");
this.power = new MageInt(3);
this.power = new MageInt(2);
this.toughness = new MageInt(2);
// Spaceflight

View file

@ -28,8 +28,10 @@
package mage.cards.t;
import java.util.UUID;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
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.BoostEquippedEffect;
import mage.abilities.keyword.EquipAbility;
@ -39,7 +41,9 @@ import mage.constants.AttachmentType;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.SetTargetPointer;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
/**
*
@ -48,13 +52,21 @@ import mage.constants.Zone;
public class TrooperArmor extends CardImpl {
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");
// 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 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}
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
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.cards.g;
package mage.cards.t;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
import mage.abilities.common.BecomesBlockedByCreatureTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.combat.MustBeBlockedByAtLeastOneSourceEffect;
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
import mage.abilities.keyword.HasteAbility;
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.target.common.TargetOpponentsCreaturePermanent;
/**
*
* @author Styxo
*/
public class GamorreanEnforcer extends CardImpl {
public class TwilekSeductress extends CardImpl {
public GamorreanEnforcer(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}");
this.subtype.add("Gamorrean");
this.subtype.add("Warrior");
this.power = new MageInt(3);
public TwilekSeductress(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
this.subtype.add("Twi'lek");
this.subtype.add("Rogue");
this.power = new MageInt(2);
this.toughness = new MageInt(1);
// Haste
this.addAbility(HasteAbility.getInstance());
// {this} must be blocked it if able.
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.
Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(new AddCountersTargetEffect(CounterType.BOUNTY.createInstance()), false);
ability.addTarget(new TargetOpponentsCreaturePermanent());
this.addAbility(ability);
// Whenever {this} becomes blocked by a creature, put a bounty counter on that creature
this.addAbility(new BecomesBlockedByCreatureTriggeredAbility(new AddCountersTargetEffect(CounterType.BOUNTY.createInstance()), false));
}
public GamorreanEnforcer(final GamorreanEnforcer card) {
public TwilekSeductress(final TwilekSeductress card) {
super(card);
}
@Override
public GamorreanEnforcer copy() {
return new GamorreanEnforcer(this);
public TwilekSeductress copy() {
return new TwilekSeductress(this);
}
}

View file

@ -52,7 +52,7 @@ import mage.counters.CounterType;
public class WildHolocron extends CardImpl {
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.
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);
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));
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.abilities.Ability;
import mage.abilities.common.BecomesMonstrousSourceTriggeredAbility;
import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.effects.common.ExileTargetEffect;
import mage.abilities.keyword.MonstrosityAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.target.common.TargetCardInGraveyard;
/**
*
@ -44,7 +45,7 @@ import mage.constants.CardType;
public class WompRat extends CardImpl {
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("Beast");
this.power = new MageInt(3);
@ -53,8 +54,10 @@ public class WompRat extends CardImpl {
// {4}{W}: Monstrosity 1
this.addAbility(new MonstrosityAbility("{4}{W}", 1));
// When Womp Rat becomes monstrous you gain two life.
this.addAbility(new BecomesMonstrousSourceTriggeredAbility(new GainLifeEffect(2)));
// When Womp Rat becomes monstrous you may exilte target card from a graveyard
Ability ability = new BecomesMonstrousSourceTriggeredAbility(new ExileTargetEffect(), true);
ability.addTarget(new TargetCardInGraveyard());
this.addAbility(ability);
}
public WompRat(final WompRat card) {

View file

@ -47,7 +47,7 @@ import mage.constants.Zone;
public class XWing extends CardImpl {
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("Starship");
this.power = new MageInt(2);
@ -56,8 +56,8 @@ public class XWing extends CardImpl {
// Spaceflight
this.addAbility(SpaceflightAbility.getInstance());
// {1}{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}")));
// {W}: X-Wing gains viginlance until end of turn.
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));
this.addAbility(ability);
// -7: You get an emblem with "Hexproof, you and your creatures have."
this.addAbility(new LoyaltyAbility(new GetEmblemEffect(new YodaEmblem()), -7));
// -5: You get an emblem with "Hexproof, you and your creatures have."
this.addAbility(new LoyaltyAbility(new GetEmblemEffect(new YodaEmblem()), -5));
}

View file

@ -51,9 +51,9 @@ import mage.target.common.TargetOpponent;
*
* @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}");
this.supertype.add("Legendary");
this.subtype.add("Shapeshifter");
@ -67,13 +67,13 @@ public class ZamWessel extends CardImpl {
this.addAbility(ability);
}
public ZamWessel(final ZamWessel card) {
public ZamWesell(final ZamWesell card) {
super(card);
}
@Override
public ZamWessel copy() {
return new ZamWessel(this);
public ZamWesell copy() {
return new ZamWesell(this);
}
}

View file

@ -46,7 +46,7 @@ public class StarWars extends ExpansionSet {
}
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.hasBoosters = true;
this.hasBasicLands = true;
@ -55,272 +55,278 @@ public class StarWars extends ExpansionSet {
this.numBoosterUncommon = 3;
this.numBoosterRare = 1;
this.ratioBoosterMythic = 8;
cards.add(new SetCardInfo("AAT-1", 179, 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("Acquire Target", 64, 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("Adroit Hateflayer", 181, 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("AAT-1", 160, Rarity.UNCOMMON, mage.cards.a.AAT1.class));
cards.add(new SetCardInfo("Acklay of the Arena", 161, Rarity.RARE, mage.cards.a.AcklayOfTheArena.class));
cards.add(new SetCardInfo("Acquire Target", 65, Rarity.COMMON, mage.cards.a.AcquireTarget.class));
cards.add(new SetCardInfo("Admiral Ackbar", 35, Rarity.RARE, mage.cards.a.AdmiralAckbar.class));
cards.add(new SetCardInfo("Adroit Hateflayer", 162, Rarity.COMMON, mage.cards.a.AdroitHateflayer.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("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("Asajj Ventress", 183, Rarity.RARE, mage.cards.a.AsajjVentress.class));
cards.add(new SetCardInfo("ATST", 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("Asajj Ventress", 164, Rarity.RARE, mage.cards.a.AsajjVentress.class));
cards.add(new SetCardInfo("AT-ST", 128, Rarity.RARE, mage.cards.a.ATST.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("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("Battle Tactics", 5, Rarity.COMMON, mage.cards.b.BattleTactics.class));
cards.add(new SetCardInfo("Bib Fortuna", 67, 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("Blind Worship", 184, 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("Battle Tactics", 5, Rarity.UNCOMMON, mage.cards.b.BattleTactics.class));
cards.add(new SetCardInfo("Bib Fortuna", 68, Rarity.RARE, mage.cards.b.BibFortuna.class));
cards.add(new SetCardInfo("Black Market Dealer", 69, Rarity.UNCOMMON, mage.cards.b.BlackMarketDealer.class));
cards.add(new SetCardInfo("Blind Worship", 166, Rarity.RARE, mage.cards.b.BlindWorship.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("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 Spotter", 69, 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("C-3PO and R2D2", 160, Rarity.RARE, mage.cards.c.C3POAndR2D2.class));
cards.add(new SetCardInfo("Bounty Spotter", 70, Rarity.UNCOMMON, mage.cards.b.BountySpotter.class));
cards.add(new SetCardInfo("Bull Rancor", 168, Rarity.RARE, mage.cards.b.BullRancor.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("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("Chewbacca", 187, 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("Cloaking Device", 36, 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("Carbonite Chamber", 170, Rarity.UNCOMMON, mage.cards.c.CarboniteChamber.class));
cards.add(new SetCardInfo("Chewbacca", 171, Rarity.RARE, mage.cards.c.Chewbacca.class));
cards.add(new SetCardInfo("Chief Chirpa", 172, Rarity.RARE, mage.cards.c.ChiefChirpa.class));
cards.add(new SetCardInfo("Cloaking Device", 38, Rarity.COMMON, mage.cards.c.CloakingDevice.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("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("Cruelty of the Sith", 190, 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("Dagobah Maw Slug", 191, Rarity.COMMON, mage.cards.d.DagobahMawSlug.class));
cards.add(new SetCardInfo("Cruelty of the Sith", 174, Rarity.UNCOMMON, mage.cards.c.CrueltyOfTheSith.class));
cards.add(new SetCardInfo("Cunning Abduction", 175, Rarity.RARE, mage.cards.c.CunningAbduction.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 Decision", 169, 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 Decision", 177, Rarity.COMMON, mage.cards.d.DarkDecision.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 Sidious, Sith Lord", 192, 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 Vader", 182, 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("Darth Sidious, Sith Lord", 179, Rarity.MYTHIC, mage.cards.d.DarthSidiousSithLord.class));
cards.add(new SetCardInfo("Darth Tyranus", 180, Rarity.MYTHIC, mage.cards.d.DarthTyranus.class));
cards.add(new SetCardInfo("Darth Vader", 140, Rarity.MYTHIC, mage.cards.d.DarthVader.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("Doom Blade", 71, Rarity.UNCOMMON, mage.cards.d.DoomBlade.class));
cards.add(new SetCardInfo("Droideka", 9, Rarity.UNCOMMON, mage.cards.d.Droideka.class));
cards.add(new SetCardInfo("Doom Blade", 72, Rarity.UNCOMMON, mage.cards.d.DoomBlade.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 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("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("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 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("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", 194, Rarity.UNCOMMON, mage.cards.f.FerocityOfTheUnderworld.class));
cards.add(new SetCardInfo("Ferocity of the Underworld", 182, 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("Force Adept", 195, Rarity.COMMON, mage.cards.f.ForceAdept.class));
cards.add(new SetCardInfo("Force Choke", 166, Rarity.COMMON, mage.cards.f.ForceChoke.class));
cards.add(new SetCardInfo("Force Denial", 37, Rarity.COMMON, mage.cards.f.ForceDenial.class));
cards.add(new SetCardInfo("Force Drain", 73, Rarity.COMMON, mage.cards.f.ForceDrain.class));
cards.add(new SetCardInfo("Force Choke", 183, 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 Drain", 74, 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 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 Pull", 138, 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 Mastery", 184, Rarity.RARE, mage.cards.f.ForceMastery.class));
cards.add(new SetCardInfo("Force Pull", 137, Rarity.COMMON, mage.cards.f.ForcePull.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 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", 265, 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("Fulfill Contract", 226, Rarity.COMMON, mage.cards.f.FulfillContract.class));
cards.add(new SetCardInfo("Gamorrean Enforcer", 106, Rarity.COMMON, mage.cards.g.GamorreanEnforcer.class));
cards.add(new SetCardInfo("Gamorrean Prison Guard", 107, 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("Gifted Initiate", 13, 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("Greater Krayt Dragon", 198, Rarity.MYTHIC, mage.cards.g.GreaterKraytDragon.class));
cards.add(new SetCardInfo("Greedo", 199, Rarity.RARE, mage.cards.g.Greedo.class));
cards.add(new SetCardInfo("Gundark", 108, 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("Han Solo", 109, 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("Head Hunting", 76, 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("Hot Pursuit", 200, 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("Hunt to Extinction", 201, 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("Forest", 268, 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", 270, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
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("Fulfill Contract", 224, Rarity.COMMON, mage.cards.f.FulfillContract.class));
cards.add(new SetCardInfo("Gamorrean Prison Guard", 106, Rarity.UNCOMMON, mage.cards.g.GamorreanPrisonGuard.class));
cards.add(new SetCardInfo("General Grievous", 185, Rarity.MYTHIC, mage.cards.g.GeneralGrievous.class));
cards.add(new SetCardInfo("Gifted Initiate", 14, Rarity.COMMON, mage.cards.g.GiftedInitiate.class));
cards.add(new SetCardInfo("Grand Moff Tarkin", 75, Rarity.RARE, mage.cards.g.GrandMoffTarkin.class));
cards.add(new SetCardInfo("Greater Krayt Dragon", 186, Rarity.MYTHIC, mage.cards.g.GreaterKraytDragon.class));
cards.add(new SetCardInfo("Greedo", 187, Rarity.RARE, mage.cards.g.Greedo.class));
cards.add(new SetCardInfo("Gundark", 107, Rarity.UNCOMMON, mage.cards.g.Gundark.class));
cards.add(new SetCardInfo("Gungan Captain", 41, Rarity.COMMON, mage.cards.g.GunganCaptain.class));
cards.add(new SetCardInfo("Han Solo", 108, Rarity.RARE, mage.cards.h.HanSolo.class));
cards.add(new SetCardInfo("Hazard Trooper", 76, Rarity.UNCOMMON, mage.cards.h.HazardTrooper.class));
cards.add(new SetCardInfo("Head Hunting", 77, Rarity.COMMON, mage.cards.h.HeadHunting.class));
cards.add(new SetCardInfo("Heavy Trooper", 78, Rarity.COMMON, mage.cards.h.HeavyTrooper.class));
cards.add(new SetCardInfo("Hot Pursuit", 188, Rarity.RARE, mage.cards.h.HotPursuit.class));
cards.add(new SetCardInfo("Hungry Dragonsnake", 138, Rarity.COMMON, mage.cards.h.HungryDragonsnake.class));
cards.add(new SetCardInfo("Hunt to Extinction", 189, Rarity.RARE, mage.cards.h.HuntToExtinction.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("IG-88B", 78, 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("Imperial Gunner", 110, 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("Insatiable Rakghoul", 79, Rarity.COMMON, mage.cards.i.InsatiableRakghoul.class));
cards.add(new SetCardInfo("Interrogation", 80, 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("Iron Fist of the Empire", 202, 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("IG-88B", 79, Rarity.RARE, mage.cards.i.IG88B.class));
cards.add(new SetCardInfo("Images of the Past", 190, Rarity.COMMON, mage.cards.i.ImagesOfThePast.class));
cards.add(new SetCardInfo("Imperial Gunner", 109, Rarity.COMMON, mage.cards.i.ImperialGunner.class));
cards.add(new SetCardInfo("Impulsive Wager", 110, Rarity.COMMON, mage.cards.i.ImpulsiveWager.class));
cards.add(new SetCardInfo("Insatiable Rakghoul", 80, Rarity.COMMON, mage.cards.i.InsatiableRakghoul.class));
cards.add(new SetCardInfo("Interrogation", 81, Rarity.COMMON, mage.cards.i.Interrogation.class));
cards.add(new SetCardInfo("Ion Cannon", 15, Rarity.COMMON, mage.cards.i.IonCannon.class));
cards.add(new SetCardInfo("Iron Fist of the Empire", 191, Rarity.RARE, mage.cards.i.IronFistOfTheEmpire.class));
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("Ithorian Initiate", 141, Rarity.COMMON, mage.cards.i.IthorianInitiate.class));
cards.add(new SetCardInfo("Jabba the Hutt", 203, Rarity.RARE, mage.cards.j.JabbaTheHutt.class));
cards.add(new SetCardInfo("Jango Fett", 112, Rarity.RARE, mage.cards.j.JangoFett.class));
cards.add(new SetCardInfo("Jar Jar Binks", 41, Rarity.RARE, mage.cards.j.JarJarBinks.class));
cards.add(new SetCardInfo("Jar'Kai Battle Stance", 113, Rarity.COMMON, mage.cards.j.JarKaiBattleStance.class));
cards.add(new SetCardInfo("Jedi Battle Healer", 15, Rarity.UNCOMMON, mage.cards.j.JediBattleHealer.class));
cards.add(new SetCardInfo("Jedi Battle Mage", 42, Rarity.UNCOMMON, mage.cards.j.JediBattleMage.class));
cards.add(new SetCardInfo("Jedi Battle Sage", 142, Rarity.UNCOMMON, mage.cards.j.JediBattleSage.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("Island", 259, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
cards.add(new SetCardInfo("Ithorian Initiate", 140, Rarity.COMMON, mage.cards.i.IthorianInitiate.class));
cards.add(new SetCardInfo("Jabba the Hutt", 192, Rarity.RARE, mage.cards.j.JabbaTheHutt.class));
cards.add(new SetCardInfo("Jango Fett", 111, Rarity.RARE, mage.cards.j.JangoFett.class));
cards.add(new SetCardInfo("Jar Jar Binks", 42, Rarity.RARE, mage.cards.j.JarJarBinks.class));
cards.add(new SetCardInfo("Jar'Kai Battle Stance", 112, Rarity.COMMON, mage.cards.j.JarKaiBattleStance.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 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 Knight", 204, 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 Reflex", 18, Rarity.COMMON, mage.cards.j.JediReflex.class));
cards.add(new SetCardInfo("Jedi Knight", 193, Rarity.UNCOMMON, mage.cards.j.JediKnight.class));
cards.add(new SetCardInfo("Jedi Mind Trick", 44, Rarity.RARE, mage.cards.j.JediMindTrick.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 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("Jump Trooper", 45, Rarity.UNCOMMON, mage.cards.j.JumpTrooper.class));
cards.add(new SetCardInfo("Jedi Training", 45, Rarity.UNCOMMON, mage.cards.j.JediTraining.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("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("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("Lightning Bolt", 114, Rarity.UNCOMMON, mage.cards.l.LightningBolt.class));
cards.add(new SetCardInfo("Legacy of the Beloved", 143, Rarity.RARE, mage.cards.l.LegacyOfTheBeloved.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("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("Mace Windu", 46, 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 Hangar", 23, Rarity.UNCOMMON, mage.cards.m.MaintenanceHangar.class));
cards.add(new SetCardInfo("Mantellian Savrip", 145, 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("Might of the Wild", 207, Rarity.UNCOMMON, mage.cards.m.MightOfTheWild.class));
cards.add(new SetCardInfo("Luke Skywalker", 195, Rarity.MYTHIC, mage.cards.l.LukeSkywalker.class));
cards.add(new SetCardInfo("Mace Windu", 47, Rarity.RARE, mage.cards.m.MaceWindu.class));
cards.add(new SetCardInfo("Maintenance Droid", 196, Rarity.COMMON, mage.cards.m.MaintenanceDroid.class));
cards.add(new SetCardInfo("Maintenance Hangar", 23, Rarity.RARE, mage.cards.m.MaintenanceHangar.class));
cards.add(new SetCardInfo("Mantellian Savrip", 144, Rarity.UNCOMMON, mage.cards.m.MantellianSavrip.class));
cards.add(new SetCardInfo("March of the Droids", 197, Rarity.RARE, mage.cards.m.MarchOfTheDroids.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("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("Mon Calamari Cruiser", 47, 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("Mountain", 261, 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", 263, 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("Neophyte Hateflayer", 81, Rarity.COMMON, mage.cards.n.NeophyteHateflayer.class));
cards.add(new SetCardInfo("Mon Calamari Cruiser", 48, Rarity.UNCOMMON, mage.cards.m.MonCalamariCruiser.class));
cards.add(new SetCardInfo("Mon Calamari Initiate", 49, Rarity.COMMON, mage.cards.m.MonCalamariInitiate.class));
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", 265, 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("Mountain", 267, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
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("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("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("Nute Gunray", 208, 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("Orbital Bombardment", 25, Rarity.RARE, mage.cards.o.OrbitalBombardment.class));
cards.add(new SetCardInfo("Order 66", 82, Rarity.RARE, mage.cards.o.Order66.class));
cards.add(new SetCardInfo("Ortolan Keyboardist", 49, Rarity.COMMON, mage.cards.o.OrtolanKeyboardist.class));
cards.add(new SetCardInfo("Outer Rim Slaver", 209, Rarity.COMMON, mage.cards.o.OuterRimSlaver.class));
cards.add(new SetCardInfo("Novice Bounty Hunter", 114, Rarity.COMMON, mage.cards.n.NoviceBountyHunter.class));
cards.add(new SetCardInfo("Nute Gunray", 199, Rarity.RARE, mage.cards.n.NuteGunray.class));
cards.add(new SetCardInfo("Obi-Wan Kenobi", 200, Rarity.MYTHIC, mage.cards.o.ObiWanKenobi.class));
cards.add(new SetCardInfo("Open Season", 83, Rarity.UNCOMMON, mage.cards.o.OpenSeason.class));
cards.add(new SetCardInfo("Orbital Bombardment", 26, Rarity.RARE, mage.cards.o.OrbitalBombardment.class));
cards.add(new SetCardInfo("Order 66", 84, Rarity.RARE, mage.cards.o.Order66.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("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", 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("Plo Koon", 26, Rarity.RARE, mage.cards.p.PloKoon.class));
cards.add(new SetCardInfo("Precipice of Mortis", 210, Rarity.RARE, mage.cards.p.PrecipiceOfMortis.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("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("Preordain", 33, 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("Princess Leia", 211, 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("Public Arrangement", 83, Rarity.UNCOMMON, mage.cards.p.PublicArrangement.class));
cards.add(new SetCardInfo("Qui-Gon Jinn", 212, Rarity.RARE, mage.cards.q.QuiGonJinn.class));
cards.add(new SetCardInfo("Raging Reek", 116, Rarity.COMMON, mage.cards.r.RagingReek.class));
cards.add(new SetCardInfo("Rallying Fire", 117, Rarity.COMMON, mage.cards.r.RallyingFire.class));
cards.add(new SetCardInfo("Ravenous Wampa", 229, Rarity.UNCOMMON, mage.cards.r.RavenousWampa.class));
cards.add(new SetCardInfo("Preordain", 34, Rarity.UNCOMMON, mage.cards.p.Preordain.class));
cards.add(new SetCardInfo("Primal Instinct", 203, Rarity.COMMON, mage.cards.p.PrimalInstinct.class));
cards.add(new SetCardInfo("Princess Leia", 204, Rarity.RARE, mage.cards.p.PrincessLeia.class));
cards.add(new SetCardInfo("Probe Droid", 52, Rarity.COMMON, mage.cards.p.ProbeDroid.class));
cards.add(new SetCardInfo("Qui-Gon Jinn", 205, 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("Rallying Fire", 116, 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("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("Repurpose", 84, Rarity.COMMON, mage.cards.r.Repurpose.class));
cards.add(new SetCardInfo("Revenge", 118, 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("Rocket Trooper", 119, Rarity.RARE, mage.cards.r.RocketTrooper.class));
cards.add(new SetCardInfo("Republic Frigate", 53, Rarity.COMMON, mage.cards.r.RepublicFrigate.class));
cards.add(new SetCardInfo("Repurpose", 85, Rarity.COMMON, mage.cards.r.Repurpose.class));
cards.add(new SetCardInfo("Revenge", 117, Rarity.COMMON, mage.cards.r.Revenge.class));
cards.add(new SetCardInfo("Riding Ronto", 28, Rarity.UNCOMMON, mage.cards.r.RidingRonto.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("Rule of two", 85, Rarity.UNCOMMON, mage.cards.r.RuleOfTwo.class));
cards.add(new SetCardInfo("Rumination", 53, 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("Sabacc Game", 54, 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("Sand Trooper", 28, 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("Rule of two", 86, Rarity.UNCOMMON, mage.cards.r.RuleOfTwo.class));
cards.add(new SetCardInfo("Rumination", 54, Rarity.COMMON, mage.cards.r.Rumination.class));
cards.add(new SetCardInfo("Rumor Monger", 206, Rarity.UNCOMMON, mage.cards.r.RumorMonger.class));
cards.add(new SetCardInfo("Sabacc Game", 55, Rarity.UNCOMMON, mage.cards.s.SabaccGame.class));
cards.add(new SetCardInfo("Salvage Squad", 207, Rarity.COMMON, mage.cards.s.SalvageSquad.class));
cards.add(new SetCardInfo("Sand Trooper", 29, Rarity.COMMON, mage.cards.s.SandTrooper.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 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("Senator Bail Organa", 177, 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 Onaconda Farr", 174, 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 Passel Argente", 171, Rarity.UNCOMMON, mage.cards.s.SenatorPasselArgente.class));
cards.add(new SetCardInfo("Security Droid", 30, Rarity.COMMON, mage.cards.s.SecurityDroid.class));
cards.add(new SetCardInfo("Senator Bail Organa", 209, Rarity.UNCOMMON, mage.cards.s.SenatorBailOrgana.class));
cards.add(new SetCardInfo("Senator Lott Dod", 210, Rarity.UNCOMMON, mage.cards.s.SenatorLottDod.class));
cards.add(new SetCardInfo("Senator Onaconda Farr", 211, Rarity.UNCOMMON, mage.cards.s.SenatorOnacondaFarr.class));
cards.add(new SetCardInfo("Senator Padmé Amidala", 212, Rarity.UNCOMMON, mage.cards.s.SenatorPadmeAmidala.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("Shadow Trooper", 55, 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("Shadow Trooper", 56, Rarity.COMMON, mage.cards.s.ShadowTrooper.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("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 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 Inquisitor", 88, 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 Magic", 215, 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 Marauder", 121, 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 Ravager", 122, Rarity.COMMON, mage.cards.s.SithRavager.class));
cards.add(new SetCardInfo("Sith Inquisitor", 89, Rarity.COMMON, mage.cards.s.SithInquisitor.class));
cards.add(new SetCardInfo("Sith Lord", 90, Rarity.RARE, mage.cards.s.SithLord.class));
cards.add(new SetCardInfo("Sith Magic", 214, Rarity.RARE, mage.cards.s.SithMagic.class));
cards.add(new SetCardInfo("Sith Manipulator", 57, Rarity.UNCOMMON, mage.cards.s.SithManipulator.class));
cards.add(new SetCardInfo("Sith Marauder", 120, Rarity.UNCOMMON, mage.cards.s.SithMarauder.class));
cards.add(new SetCardInfo("Sith Mindseer", 215, Rarity.UNCOMMON, mage.cards.s.SithMindseer.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 Sorcerer", 57, 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("Slave I", 217, 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("Snow Trooper", 30, 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("Star Destroyer", 218, 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("Super Battle Droid", 58, 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("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("Sith Sorcerer", 58, Rarity.COMMON, mage.cards.s.SithSorcerer.class));
cards.add(new SetCardInfo("Sith Thoughtseeker", 91, Rarity.COMMON, mage.cards.s.SithThoughtseeker.class));
cards.add(new SetCardInfo("Slave I", 216, Rarity.RARE, mage.cards.s.SlaveI.class));
cards.add(new SetCardInfo("Smash to Smithereens", 122, Rarity.UNCOMMON, mage.cards.s.SmashToSmithereens.class));
cards.add(new SetCardInfo("Snow Trooper", 31, Rarity.UNCOMMON, mage.cards.s.SnowTrooper.class));
cards.add(new SetCardInfo("Speeder Trooper", 123, Rarity.COMMON, mage.cards.s.SpeederTrooper.class));
cards.add(new SetCardInfo("Star Destroyer", 217, Rarity.RARE, mage.cards.s.StarDestroyer.class));
cards.add(new SetCardInfo("Strike Team Commando", 227, Rarity.COMMON, mage.cards.s.StrikeTeamCommando.class));
cards.add(new SetCardInfo("Super Battle Droid", 59, Rarity.COMMON, mage.cards.s.SuperBattleDroid.class));
cards.add(new SetCardInfo("Surprise Maneuver", 60, Rarity.COMMON, mage.cards.s.SurpriseManeuver.class));
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("Tank Droid", 219, Rarity.RARE, mage.cards.t.TankDroid.class));
cards.add(new SetCardInfo("Terentatek", 125, Rarity.COMMON, mage.cards.t.Terentatek.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("Swamp", 262, Rarity.LAND, mage.cards.basiclands.Swamp.class, new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true)));
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 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 Naboo", 35, 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 Naboo", 37, Rarity.MYTHIC, mage.cards.t.TheBattleOfNaboo.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("TIE Bomber", 92, 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("Trade Federation Battleship", 220, 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", 225, Rarity.UNCOMMON, mage.cards.t.TriFighter.class));
cards.add(new SetCardInfo("TIE Bomber", 93, Rarity.UNCOMMON, mage.cards.t.TIEBomber.class));
cards.add(new SetCardInfo("TIE Interceptor", 94, Rarity.COMMON, mage.cards.t.TIEInterceptor.class));
cards.add(new SetCardInfo("Trade Federation Battleship", 219, Rarity.RARE, mage.cards.t.TradeFederationBattleship.class));
cards.add(new SetCardInfo("Tri-Fighter", 228, Rarity.COMMON, mage.cards.t.TriFighter.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("Twi'lek Seductess", 158, Rarity.COMMON, mage.cards.t.TwilekSeductess.class));
cards.add(new SetCardInfo("Ugnaught Scrap Worker", 60, Rarity.COMMON, mage.cards.u.UgnaughtScrapWorker.class));
cards.add(new SetCardInfo("Twi'lek Seductress", 158, Rarity.COMMON, mage.cards.t.TwilekSeductress.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("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("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("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("Wisdom of the Jedi", 222, 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("Wisdom of the Jedi", 221, Rarity.UNCOMMON, mage.cards.w.WisdomOfTheJedi.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 Mystic", 223, 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("X-Wing", 32, 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("Y-Wing", 62, 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("Wookiee Mystic", 222, Rarity.UNCOMMON, mage.cards.w.WookieeMystic.class));
cards.add(new SetCardInfo("Wookiee Raidleader", 229, Rarity.COMMON, mage.cards.w.WookieeRaidleader.class));
cards.add(new SetCardInfo("X-Wing", 33, Rarity.COMMON, mage.cards.x.XWing.class));
cards.add(new SetCardInfo("Yoda, Jedi Master", 223, Rarity.MYTHIC, mage.cards.y.YodaJediMaster.class));
cards.add(new SetCardInfo("Y-Wing", 63, Rarity.UNCOMMON, mage.cards.y.YWing.class));
cards.add(new SetCardInfo("Zam Wesell", 64, Rarity.RARE, mage.cards.z.ZamWesell.class));
}
}