mirror of
https://github.com/magefree/mage.git
synced 2026-01-26 05:09:16 -08:00
Merge branch 'master' of https://github.com/magefree/mage
This commit is contained in:
commit
3a471e61ae
52 changed files with 2496 additions and 11 deletions
44
Mage.Sets/src/mage/cards/b/BarrierOfBones.java
Normal file
44
Mage.Sets/src/mage/cards/b/BarrierOfBones.java
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
package mage.cards.b;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.effects.keyword.SurveilEffect;
|
||||
import mage.constants.SubType;
|
||||
import mage.abilities.keyword.DefenderAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class BarrierOfBones extends CardImpl {
|
||||
|
||||
public BarrierOfBones(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B}");
|
||||
|
||||
this.subtype.add(SubType.SKELETON);
|
||||
this.subtype.add(SubType.WALL);
|
||||
this.power = new MageInt(0);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// Defender
|
||||
this.addAbility(DefenderAbility.getInstance());
|
||||
|
||||
// When Barrier of Bones enters the battlefield, surveil 1.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(
|
||||
new SurveilEffect(1), false
|
||||
));
|
||||
}
|
||||
|
||||
public BarrierOfBones(final BarrierOfBones card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BarrierOfBones copy() {
|
||||
return new BarrierOfBones(this);
|
||||
}
|
||||
}
|
||||
36
Mage.Sets/src/mage/cards/b/BartizanBats.java
Normal file
36
Mage.Sets/src/mage/cards/b/BartizanBats.java
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
package mage.cards.b;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.constants.SubType;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class BartizanBats extends CardImpl {
|
||||
|
||||
public BartizanBats(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}");
|
||||
|
||||
this.subtype.add(SubType.BAT);
|
||||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// Flying
|
||||
this.addAbility(FlyingAbility.getInstance());
|
||||
}
|
||||
|
||||
public BartizanBats(final BartizanBats card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BartizanBats copy() {
|
||||
return new BartizanBats(this);
|
||||
}
|
||||
}
|
||||
44
Mage.Sets/src/mage/cards/b/BurglarRat.java
Normal file
44
Mage.Sets/src/mage/cards/b/BurglarRat.java
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
package mage.cards.b;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.common.StaticValue;
|
||||
import mage.abilities.effects.common.discard.DiscardEachPlayerEffect;
|
||||
import mage.constants.SubType;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.TargetController;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class BurglarRat extends CardImpl {
|
||||
|
||||
public BurglarRat(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}");
|
||||
|
||||
this.subtype.add(SubType.RAT);
|
||||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// When Burglar Rat enters the battlefield, each opponent discards a card.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(
|
||||
new DiscardEachPlayerEffect(
|
||||
new StaticValue(1), false,
|
||||
TargetController.OPPONENT
|
||||
)
|
||||
));
|
||||
}
|
||||
|
||||
public BurglarRat(final BurglarRat card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BurglarRat copy() {
|
||||
return new BurglarRat(this);
|
||||
}
|
||||
}
|
||||
72
Mage.Sets/src/mage/cards/c/Camaraderie.java
Normal file
72
Mage.Sets/src/mage/cards/c/Camaraderie.java
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
package mage.cards.c;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostControlledEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class Camaraderie extends CardImpl {
|
||||
|
||||
public Camaraderie(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{G}{W}");
|
||||
|
||||
// You gain X life and draw X cards, where X is the number of creatures you control. Creatures you control get +1/+1 until end of turn.
|
||||
this.getSpellAbility().addEffect(new CamaraderieEffect());
|
||||
}
|
||||
|
||||
public Camaraderie(final Camaraderie card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Camaraderie copy() {
|
||||
return new Camaraderie(this);
|
||||
}
|
||||
}
|
||||
|
||||
class CamaraderieEffect extends OneShotEffect {
|
||||
|
||||
public CamaraderieEffect() {
|
||||
super(Outcome.Benefit);
|
||||
this.staticText = "You gain X life and draw X cards, "
|
||||
+ "where X is the number of creatures you control. "
|
||||
+ "Creatures you control get +1/+1 until end of turn.";
|
||||
}
|
||||
|
||||
public CamaraderieEffect(final CamaraderieEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CamaraderieEffect copy() {
|
||||
return new CamaraderieEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player player = game.getPlayer(source.getSourceId());
|
||||
if (player == null) {
|
||||
return false;
|
||||
}
|
||||
int xValue = game.getBattlefield().count(
|
||||
StaticFilters.FILTER_CONTROLLED_CREATURE,
|
||||
source.getSourceId(), source.getControllerId(), game
|
||||
);
|
||||
player.gainLife(xValue, game, source);
|
||||
player.drawCards(xValue, game);
|
||||
game.addEffect(new BoostControlledEffect(1, 1, Duration.EndOfTurn), source);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
57
Mage.Sets/src/mage/cards/c/CaptureSphere.java
Normal file
57
Mage.Sets/src/mage/cards/c/CaptureSphere.java
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
package mage.cards.c;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.constants.SubType;
|
||||
import mage.abilities.keyword.FlashAbility;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.common.AttachEffect;
|
||||
import mage.abilities.effects.common.DontUntapInControllersUntapStepEnchantedEffect;
|
||||
import mage.abilities.effects.common.TapEnchantedEffect;
|
||||
import mage.constants.Outcome;
|
||||
import mage.target.TargetPermanent;
|
||||
import mage.abilities.keyword.EnchantAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Zone;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class CaptureSphere extends CardImpl {
|
||||
|
||||
public CaptureSphere(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{U}");
|
||||
|
||||
this.subtype.add(SubType.AURA);
|
||||
|
||||
// Flash
|
||||
this.addAbility(FlashAbility.getInstance());
|
||||
|
||||
// Enchant creature
|
||||
TargetPermanent auraTarget = new TargetCreaturePermanent();
|
||||
this.getSpellAbility().addTarget(auraTarget);
|
||||
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
|
||||
Ability ability = new EnchantAbility(auraTarget.getTargetName());
|
||||
this.addAbility(ability);
|
||||
|
||||
// When Capture Sphere enters the battlefield, tap enchanted creature.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new TapEnchantedEffect()));
|
||||
|
||||
// Enchanted creature doesn't untap during its controller's untap step.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DontUntapInControllersUntapStepEnchantedEffect()));
|
||||
}
|
||||
|
||||
public CaptureSphere(final CaptureSphere card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CaptureSphere copy() {
|
||||
return new CaptureSphere(this);
|
||||
}
|
||||
}
|
||||
36
Mage.Sets/src/mage/cards/c/ChanceForGlory.java
Normal file
36
Mage.Sets/src/mage/cards/c/ChanceForGlory.java
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
package mage.cards.c;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||
import mage.abilities.effects.common.turn.AddExtraTurnControllerEffect;
|
||||
import mage.abilities.keyword.IndestructibleAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class ChanceForGlory extends CardImpl {
|
||||
|
||||
public ChanceForGlory(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{R}{W}");
|
||||
|
||||
// Creatures you control gain indestructible. Take an extra turn after this one. At the beginning of that turn's end step, you lose the game.
|
||||
this.getSpellAbility().addEffect(new GainAbilityControlledEffect(
|
||||
IndestructibleAbility.getInstance(), Duration.EndOfGame
|
||||
).setText("Creatures you control gain indestructible."));
|
||||
this.getSpellAbility().addEffect(new AddExtraTurnControllerEffect(true));
|
||||
}
|
||||
|
||||
public ChanceForGlory(final ChanceForGlory card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChanceForGlory copy() {
|
||||
return new ChanceForGlory(this);
|
||||
}
|
||||
}
|
||||
49
Mage.Sets/src/mage/cards/d/DawnOfHope.java
Normal file
49
Mage.Sets/src/mage/cards/d/DawnOfHope.java
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
package mage.cards.d;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.common.GainLifeControllerTriggeredAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.effects.common.DoIfCostPaid;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.permanent.token.SoldierLifelinkToken;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class DawnOfHope extends CardImpl {
|
||||
|
||||
public DawnOfHope(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}");
|
||||
|
||||
// Whenever you gain life, you may pay {2}. If you do, draw a card.
|
||||
this.addAbility(new GainLifeControllerTriggeredAbility(
|
||||
new DoIfCostPaid(
|
||||
new DrawCardSourceControllerEffect(1),
|
||||
new GenericManaCost(2)), false
|
||||
));
|
||||
|
||||
// {3}{W}: Create a 1/1 white Soldier creature token with lifelink.
|
||||
this.addAbility(new SimpleActivatedAbility(
|
||||
Zone.BATTLEFIELD,
|
||||
new CreateTokenEffect(new SoldierLifelinkToken()),
|
||||
new ManaCostsImpl("{3}{W}")
|
||||
));
|
||||
}
|
||||
|
||||
public DawnOfHope(final DawnOfHope card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DawnOfHope copy() {
|
||||
return new DawnOfHope(this);
|
||||
}
|
||||
}
|
||||
37
Mage.Sets/src/mage/cards/d/DazzlingLights.java
Normal file
37
Mage.Sets/src/mage/cards/d/DazzlingLights.java
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
package mage.cards.d;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||
import mage.abilities.effects.keyword.SurveilEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class DazzlingLights extends CardImpl {
|
||||
|
||||
public DazzlingLights(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{U}");
|
||||
|
||||
// Target creature gets -3/-0 until end of turn.
|
||||
this.getSpellAbility().addEffect(new BoostTargetEffect(-3, 0, Duration.EndOfTurn));
|
||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||
|
||||
// Surveil 2.
|
||||
this.getSpellAbility().addEffect(new SurveilEffect(2));
|
||||
}
|
||||
|
||||
public DazzlingLights(final DazzlingLights card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DazzlingLights copy() {
|
||||
return new DazzlingLights(this);
|
||||
}
|
||||
}
|
||||
45
Mage.Sets/src/mage/cards/d/DevkarinDissident.java
Normal file
45
Mage.Sets/src/mage/cards/d/DevkarinDissident.java
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
package mage.cards.d;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.constants.SubType;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Zone;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class DevkarinDissident extends CardImpl {
|
||||
|
||||
public DevkarinDissident(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
|
||||
|
||||
this.subtype.add(SubType.ELF);
|
||||
this.subtype.add(SubType.WARRIOR);
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
// {4}{G}: Devkarin Dissident gets +2/+2 until end of turn.
|
||||
this.addAbility(new SimpleActivatedAbility(
|
||||
Zone.BATTLEFIELD,
|
||||
new BoostSourceEffect(2, 2, Duration.EndOfTurn),
|
||||
new ManaCostsImpl("{4}{G}")
|
||||
));
|
||||
}
|
||||
|
||||
public DevkarinDissident(final DevkarinDissident card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DevkarinDissident copy() {
|
||||
return new DevkarinDissident(this);
|
||||
}
|
||||
}
|
||||
85
Mage.Sets/src/mage/cards/d/DivineVisitation.java
Normal file
85
Mage.Sets/src/mage/cards/d/DivineVisitation.java
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
package mage.cards.d;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.ReplacementEffectImpl;
|
||||
import mage.abilities.effects.common.CopyEffect;
|
||||
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.game.Game;
|
||||
import mage.game.events.EntersTheBattlefieldEvent;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.game.permanent.PermanentToken;
|
||||
import mage.game.permanent.token.AngelVigilanceToken;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class DivineVisitation extends CardImpl {
|
||||
|
||||
public DivineVisitation(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{W}{W}");
|
||||
|
||||
// TODO: This implementation is not entirely correct, see https://twitter.com/EliShffrn/status/1042145606582591490
|
||||
// If one or more creature tokens would be created under your control, that many 4/4 white Angel creature tokens with flying and vigilance are created instead.
|
||||
this.addAbility(new SimpleStaticAbility(
|
||||
Zone.BATTLEFIELD, new DivineVisitationEffect()
|
||||
));
|
||||
}
|
||||
|
||||
public DivineVisitation(final DivineVisitation card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DivineVisitation copy() {
|
||||
return new DivineVisitation(this);
|
||||
}
|
||||
}
|
||||
|
||||
class DivineVisitationEffect extends ReplacementEffectImpl {
|
||||
|
||||
public DivineVisitationEffect() {
|
||||
super(Duration.WhileOnBattlefield, Outcome.Copy, false);
|
||||
staticText = "If one or more creature tokens would be created "
|
||||
+ "under your control, that many 4/4 white Angel creature "
|
||||
+ "tokens with flying and vigilance are created instead.";
|
||||
}
|
||||
|
||||
public DivineVisitationEffect(DivineVisitationEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checksEventType(GameEvent event, Game game) {
|
||||
return event.getType() == GameEvent.EventType.ENTERS_THE_BATTLEFIELD;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applies(GameEvent event, Ability source, Game game) {
|
||||
Permanent perm = ((EntersTheBattlefieldEvent) event).getTarget();
|
||||
return perm != null
|
||||
&& perm.isCreature()
|
||||
&& perm instanceof PermanentToken
|
||||
&& perm.isControlledBy(source.getControllerId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean replaceEvent(GameEvent event, Ability source, Game game) {
|
||||
game.addEffect(new CopyEffect(Duration.Custom, new AngelVigilanceToken(), event.getTargetId()), source);
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DivineVisitationEffect copy() {
|
||||
return new DivineVisitationEffect(this);
|
||||
}
|
||||
|
||||
}
|
||||
32
Mage.Sets/src/mage/cards/d/DouserOfLights.java
Normal file
32
Mage.Sets/src/mage/cards/d/DouserOfLights.java
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
package mage.cards.d;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.constants.SubType;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class DouserOfLights extends CardImpl {
|
||||
|
||||
public DouserOfLights(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{B}");
|
||||
|
||||
this.subtype.add(SubType.HORROR);
|
||||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(5);
|
||||
}
|
||||
|
||||
public DouserOfLights(final DouserOfLights card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DouserOfLights copy() {
|
||||
return new DouserOfLights(this);
|
||||
}
|
||||
}
|
||||
46
Mage.Sets/src/mage/cards/d/DrownedSecrets.java
Normal file
46
Mage.Sets/src/mage/cards/d/DrownedSecrets.java
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
package mage.cards.d;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.ObjectColor;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SpellCastControllerTriggeredAbility;
|
||||
import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.filter.FilterSpell;
|
||||
import mage.filter.predicate.mageobject.ColorPredicate;
|
||||
import mage.target.TargetPlayer;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class DrownedSecrets extends CardImpl {
|
||||
|
||||
private static final FilterSpell filter = new FilterSpell("a blue spell");
|
||||
|
||||
static {
|
||||
filter.add(new ColorPredicate(ObjectColor.BLUE));
|
||||
}
|
||||
|
||||
public DrownedSecrets(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}");
|
||||
|
||||
// Whenever you cast a blue spell, target player puts the top two cards if their library into their graveyard.
|
||||
Ability ability = new SpellCastControllerTriggeredAbility(
|
||||
new PutLibraryIntoGraveTargetEffect(2), filter, false
|
||||
);
|
||||
ability.addTarget(new TargetPlayer());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
public DrownedSecrets(final DrownedSecrets card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DrownedSecrets copy() {
|
||||
return new DrownedSecrets(this);
|
||||
}
|
||||
}
|
||||
46
Mage.Sets/src/mage/cards/e/ElectrostaticField.java
Normal file
46
Mage.Sets/src/mage/cards/e/ElectrostaticField.java
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
package mage.cards.e;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.SpellCastControllerTriggeredAbility;
|
||||
import mage.abilities.effects.common.DamagePlayersEffect;
|
||||
import mage.constants.SubType;
|
||||
import mage.abilities.keyword.DefenderAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.TargetController;
|
||||
import mage.filter.StaticFilters;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class ElectrostaticField extends CardImpl {
|
||||
|
||||
public ElectrostaticField(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}");
|
||||
|
||||
this.subtype.add(SubType.WALL);
|
||||
this.power = new MageInt(0);
|
||||
this.toughness = new MageInt(4);
|
||||
|
||||
// Defender
|
||||
this.addAbility(DefenderAbility.getInstance());
|
||||
|
||||
// When you cast an instant or sorcery spell, Electrostatic Field deals 1 damage to each opponent.
|
||||
this.addAbility(new SpellCastControllerTriggeredAbility(
|
||||
new DamagePlayersEffect(1, TargetController.OPPONENT),
|
||||
StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY, false
|
||||
));
|
||||
}
|
||||
|
||||
public ElectrostaticField(final ElectrostaticField card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElectrostaticField copy() {
|
||||
return new ElectrostaticField(this);
|
||||
}
|
||||
}
|
||||
58
Mage.Sets/src/mage/cards/e/ErstwhileTrooper.java
Normal file
58
Mage.Sets/src/mage/cards/e/ErstwhileTrooper.java
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
package mage.cards.e;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.LimitedTimesPerTurnActivatedAbility;
|
||||
import mage.abilities.costs.common.DiscardTargetCost;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||
import mage.abilities.keyword.TrampleAbility;
|
||||
import mage.constants.SubType;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.target.common.TargetCardInHand;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class ErstwhileTrooper extends CardImpl {
|
||||
|
||||
public ErstwhileTrooper(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{G}");
|
||||
|
||||
this.subtype.add(SubType.ZOMBIE);
|
||||
this.subtype.add(SubType.SOLDIER);
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
// Discard a creature card: Erstwhile Trooper gets +2/+2 and gains trample until end of turn. Activate this ability only once each turn.
|
||||
Ability ability = new LimitedTimesPerTurnActivatedAbility(
|
||||
Zone.BATTLEFIELD,
|
||||
new BoostSourceEffect(
|
||||
2, 2, Duration.EndOfTurn
|
||||
).setText("{this} gets +2/+2"),
|
||||
new DiscardTargetCost(new TargetCardInHand(
|
||||
StaticFilters.FILTER_CARD_CREATURE_A
|
||||
))
|
||||
);
|
||||
ability.addEffect(new GainAbilitySourceEffect(
|
||||
TrampleAbility.getInstance(), Duration.EndOfTurn
|
||||
).setText("and gains trample until end of turn"));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
public ErstwhileTrooper(final ErstwhileTrooper card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ErstwhileTrooper copy() {
|
||||
return new ErstwhileTrooper(this);
|
||||
}
|
||||
}
|
||||
33
Mage.Sets/src/mage/cards/f/FearlessHalberdier.java
Normal file
33
Mage.Sets/src/mage/cards/f/FearlessHalberdier.java
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
package mage.cards.f;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.constants.SubType;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class FearlessHalberdier extends CardImpl {
|
||||
|
||||
public FearlessHalberdier(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}");
|
||||
|
||||
this.subtype.add(SubType.HUMAN);
|
||||
this.subtype.add(SubType.WARRIOR);
|
||||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(2);
|
||||
}
|
||||
|
||||
public FearlessHalberdier(final FearlessHalberdier card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public FearlessHalberdier copy() {
|
||||
return new FearlessHalberdier(this);
|
||||
}
|
||||
}
|
||||
46
Mage.Sets/src/mage/cards/f/FireUrchin.java
Normal file
46
Mage.Sets/src/mage/cards/f/FireUrchin.java
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
package mage.cards.f;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.SpellCastControllerTriggeredAbility;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.constants.SubType;
|
||||
import mage.abilities.keyword.TrampleAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.filter.StaticFilters;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class FireUrchin extends CardImpl {
|
||||
|
||||
public FireUrchin(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}");
|
||||
|
||||
this.subtype.add(SubType.ELEMENTAL);
|
||||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// Trample
|
||||
this.addAbility(TrampleAbility.getInstance());
|
||||
|
||||
// Whenever you cast an instant or sorcery spell, Fire Urchin gets +1/+0 until end of turn.
|
||||
this.addAbility(new SpellCastControllerTriggeredAbility(
|
||||
new BoostSourceEffect(1, 0, Duration.EndOfTurn),
|
||||
StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY, false
|
||||
));
|
||||
}
|
||||
|
||||
public FireUrchin(final FireUrchin card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public FireUrchin copy() {
|
||||
return new FireUrchin(this);
|
||||
}
|
||||
}
|
||||
41
Mage.Sets/src/mage/cards/f/FlightOfEquenauts.java
Normal file
41
Mage.Sets/src/mage/cards/f/FlightOfEquenauts.java
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
package mage.cards.f;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.constants.SubType;
|
||||
import mage.abilities.keyword.ConvokeAbility;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class FlightOfEquenauts extends CardImpl {
|
||||
|
||||
public FlightOfEquenauts(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{7}{W}");
|
||||
|
||||
this.subtype.add(SubType.HUMAN);
|
||||
this.subtype.add(SubType.KNIGHT);
|
||||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(5);
|
||||
|
||||
// Convoke
|
||||
this.addAbility(new ConvokeAbility());
|
||||
|
||||
// Flying
|
||||
this.addAbility(FlyingAbility.getInstance());
|
||||
}
|
||||
|
||||
public FlightOfEquenauts(final FlightOfEquenauts card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public FlightOfEquenauts copy() {
|
||||
return new FlightOfEquenauts(this);
|
||||
}
|
||||
}
|
||||
62
Mage.Sets/src/mage/cards/f/FlowerFlourish.java
Normal file
62
Mage.Sets/src/mage/cards/f/FlowerFlourish.java
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
package mage.cards.f;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.effects.common.continuous.BoostControlledEffect;
|
||||
import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.cards.SplitCard;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SpellAbilityType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.filter.FilterCard;
|
||||
import mage.filter.predicate.Predicates;
|
||||
import mage.filter.predicate.mageobject.SubtypePredicate;
|
||||
import mage.filter.predicate.mageobject.SupertypePredicate;
|
||||
import mage.target.common.TargetCardInLibrary;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class FlowerFlourish extends SplitCard {
|
||||
|
||||
private static final FilterCard filter
|
||||
= new FilterCard("basic Forest or Plains card");
|
||||
|
||||
static {
|
||||
filter.add(new SupertypePredicate(SuperType.BASIC));
|
||||
filter.add(Predicates.or(
|
||||
new SubtypePredicate(SubType.FOREST),
|
||||
new SubtypePredicate(SubType.PLAINS)
|
||||
));
|
||||
}
|
||||
|
||||
public FlowerFlourish(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{G/W}", "{4}{G}{W}", SpellAbilityType.SPLIT);
|
||||
|
||||
// Flower
|
||||
// Search your library for a basic Forest or Plains card, reveal it, put it into your hand, then shuffle your library.
|
||||
this.getLeftHalfCard().getSpellAbility().addEffect(
|
||||
new SearchLibraryPutInHandEffect(
|
||||
new TargetCardInLibrary(filter), true, true
|
||||
)
|
||||
);
|
||||
|
||||
// Flourish
|
||||
// Creatures you control get +2/+2 until end of turn.
|
||||
this.getRightHalfCard().getSpellAbility().addEffect(
|
||||
new BoostControlledEffect(2, 2, Duration.EndOfTurn)
|
||||
);
|
||||
}
|
||||
|
||||
public FlowerFlourish(final FlowerFlourish card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public FlowerFlourish copy() {
|
||||
return new FlowerFlourish(this);
|
||||
}
|
||||
}
|
||||
57
Mage.Sets/src/mage/cards/g/GatekeeperGargoyle.java
Normal file
57
Mage.Sets/src/mage/cards/g/GatekeeperGargoyle.java
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
package mage.cards.g;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.EntersBattlefieldAbility;
|
||||
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
import mage.constants.SubType;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.counters.CounterType;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.filter.predicate.mageobject.SubtypePredicate;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class GatekeeperGargoyle extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterControlledPermanent();
|
||||
|
||||
static {
|
||||
filter.add(new SubtypePredicate(SubType.GATE));
|
||||
}
|
||||
|
||||
public GatekeeperGargoyle(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{6}");
|
||||
|
||||
this.subtype.add(SubType.GARGOYLE);
|
||||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// Flying
|
||||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// Gargoyle Guardian enters the battlefield with a +1/+1 counter on it for each Gate you control.
|
||||
this.addAbility(new EntersBattlefieldAbility(
|
||||
new AddCountersSourceEffect(
|
||||
CounterType.P1P1.createInstance(),
|
||||
new PermanentsOnBattlefieldCount(filter), true
|
||||
), "with a +1/+1 counter on it for each Gate you control"
|
||||
));
|
||||
}
|
||||
|
||||
public GatekeeperGargoyle(final GatekeeperGargoyle card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GatekeeperGargoyle copy() {
|
||||
return new GatekeeperGargoyle(this);
|
||||
}
|
||||
}
|
||||
39
Mage.Sets/src/mage/cards/g/GenerousStray.java
Normal file
39
Mage.Sets/src/mage/cards/g/GenerousStray.java
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
package mage.cards.g;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.constants.SubType;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class GenerousStray extends CardImpl {
|
||||
|
||||
public GenerousStray(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
|
||||
|
||||
this.subtype.add(SubType.CAT);
|
||||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
// When Generous Stray enters the battlefield, draw a card.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(
|
||||
new DrawCardSourceControllerEffect(1)
|
||||
));
|
||||
}
|
||||
|
||||
public GenerousStray(final GenerousStray card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GenerousStray copy() {
|
||||
return new GenerousStray(this);
|
||||
}
|
||||
}
|
||||
51
Mage.Sets/src/mage/cards/g/GoblinLocksmith.java
Normal file
51
Mage.Sets/src/mage/cards/g/GoblinLocksmith.java
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
package mage.cards.g;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.AttacksTriggeredAbility;
|
||||
import mage.abilities.effects.common.combat.CantBlockAllEffect;
|
||||
import mage.abilities.keyword.DefenderAbility;
|
||||
import mage.constants.SubType;
|
||||
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.mageobject.AbilityPredicate;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class GoblinLocksmith extends CardImpl {
|
||||
|
||||
private static final FilterCreaturePermanent filter
|
||||
= new FilterCreaturePermanent("creatures with defender");
|
||||
|
||||
static {
|
||||
filter.add(new AbilityPredicate(DefenderAbility.class));
|
||||
}
|
||||
|
||||
public GoblinLocksmith(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}");
|
||||
|
||||
this.subtype.add(SubType.GOBLIN);
|
||||
this.subtype.add(SubType.ROGUE);
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// Whenever Goblin Locksmith attacks, creatures with defender can't block this turn.
|
||||
this.addAbility(new AttacksTriggeredAbility(
|
||||
new CantBlockAllEffect(filter, Duration.EndOfTurn), false
|
||||
));
|
||||
}
|
||||
|
||||
public GoblinLocksmith(final GoblinLocksmith card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GoblinLocksmith copy() {
|
||||
return new GoblinLocksmith(this);
|
||||
}
|
||||
}
|
||||
55
Mage.Sets/src/mage/cards/g/GrapplingSundew.java
Normal file
55
Mage.Sets/src/mage/cards/g/GrapplingSundew.java
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
package mage.cards.g;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||
import mage.constants.SubType;
|
||||
import mage.abilities.keyword.DefenderAbility;
|
||||
import mage.abilities.keyword.IndestructibleAbility;
|
||||
import mage.abilities.keyword.ReachAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Zone;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class GrapplingSundew extends CardImpl {
|
||||
|
||||
public GrapplingSundew(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
|
||||
|
||||
this.subtype.add(SubType.PLANT);
|
||||
this.power = new MageInt(0);
|
||||
this.toughness = new MageInt(4);
|
||||
|
||||
// Defender
|
||||
this.addAbility(DefenderAbility.getInstance());
|
||||
|
||||
// Reach
|
||||
this.addAbility(ReachAbility.getInstance());
|
||||
|
||||
// {4}{G}: Grappling Sundew gains indestructible until end of turn.
|
||||
this.addAbility(new SimpleActivatedAbility(
|
||||
Zone.BATTLEFIELD,
|
||||
new GainAbilitySourceEffect(
|
||||
IndestructibleAbility.getInstance(),
|
||||
Duration.EndOfTurn
|
||||
), new ManaCostsImpl("{4}{G}")
|
||||
));
|
||||
}
|
||||
|
||||
public GrapplingSundew(final GrapplingSundew card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GrapplingSundew copy() {
|
||||
return new GrapplingSundew(this);
|
||||
}
|
||||
}
|
||||
73
Mage.Sets/src/mage/cards/g/GraviticPunch.java
Normal file
73
Mage.Sets/src/mage/cards/g/GraviticPunch.java
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
package mage.cards.g;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.keyword.JumpStartAbility;
|
||||
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.TargetPlayer;
|
||||
import mage.target.common.TargetControlledCreaturePermanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class GraviticPunch extends CardImpl {
|
||||
|
||||
public GraviticPunch(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{R}");
|
||||
|
||||
// Target creature you control deals damage equal to its power to target player.
|
||||
this.getSpellAbility().addEffect(new GraviticPunchEffect());
|
||||
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
|
||||
this.getSpellAbility().addTarget(new TargetPlayer());
|
||||
|
||||
// Jump-start
|
||||
this.addAbility(new JumpStartAbility(this));
|
||||
|
||||
}
|
||||
|
||||
public GraviticPunch(final GraviticPunch card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GraviticPunch copy() {
|
||||
return new GraviticPunch(this);
|
||||
}
|
||||
}
|
||||
|
||||
class GraviticPunchEffect extends OneShotEffect {
|
||||
|
||||
public GraviticPunchEffect() {
|
||||
super(Outcome.Benefit);
|
||||
this.staticText = "Target creature you control deals damage "
|
||||
+ "equal to its power to target player.";
|
||||
}
|
||||
|
||||
public GraviticPunchEffect(final GraviticPunchEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GraviticPunchEffect copy() {
|
||||
return new GraviticPunchEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Permanent controlledCreature = game.getPermanentOrLKIBattlefield(getTargetPointer().getFirst(game, source));
|
||||
Player player = game.getPlayer(source.getTargets().get(1).getFirstTarget());
|
||||
if (player == null || controlledCreature == null) {
|
||||
return false;
|
||||
}
|
||||
player.damage(controlledCreature.getPower().getValue(), controlledCreature.getId(), game, false, true);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
109
Mage.Sets/src/mage/cards/g/GruesomeMenagerie.java
Normal file
109
Mage.Sets/src/mage/cards/g/GruesomeMenagerie.java
Normal file
|
|
@ -0,0 +1,109 @@
|
|||
package mage.cards.g;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.cards.Cards;
|
||||
import mage.cards.CardsImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.ComparisonType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.FilterCard;
|
||||
import mage.filter.common.FilterCreatureCard;
|
||||
import mage.filter.predicate.mageobject.ConvertedManaCostPredicate;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
import mage.target.Target;
|
||||
import mage.target.common.TargetCardInYourGraveyard;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class GruesomeMenagerie extends CardImpl {
|
||||
|
||||
public GruesomeMenagerie(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{B}{B}");
|
||||
|
||||
// Choose a creature card with converted mana cost 1 in your graveyard, then do the same for creature cards with converted mana costs 2 and 3. Return those cards to the battlefield.
|
||||
this.getSpellAbility().addEffect(new GruesomeMenagerieEffect());
|
||||
}
|
||||
|
||||
public GruesomeMenagerie(final GruesomeMenagerie card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GruesomeMenagerie copy() {
|
||||
return new GruesomeMenagerie(this);
|
||||
}
|
||||
}
|
||||
|
||||
class GruesomeMenagerieEffect extends OneShotEffect {
|
||||
|
||||
private static final FilterCard filter1
|
||||
= new FilterCreatureCard("creature card with converted mana cost 1");
|
||||
private static final FilterCard filter2
|
||||
= new FilterCreatureCard("creature card with converted mana cost 2");
|
||||
private static final FilterCard filter3
|
||||
= new FilterCreatureCard("creature card with converted mana cost 3");
|
||||
|
||||
static {
|
||||
filter1.add(new ConvertedManaCostPredicate(ComparisonType.EQUAL_TO, 1));
|
||||
filter2.add(new ConvertedManaCostPredicate(ComparisonType.EQUAL_TO, 2));
|
||||
filter3.add(new ConvertedManaCostPredicate(ComparisonType.EQUAL_TO, 3));
|
||||
}
|
||||
|
||||
public GruesomeMenagerieEffect() {
|
||||
super(Outcome.Benefit);
|
||||
this.staticText = "Choose a creature card with converted mana cost 1 "
|
||||
+ "in your graveyard, then do the same for creature cards "
|
||||
+ "with converted mana costs 2 and 3. "
|
||||
+ "Return those cards to the battlefield.";
|
||||
}
|
||||
|
||||
public GruesomeMenagerieEffect(final GruesomeMenagerieEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GruesomeMenagerieEffect copy() {
|
||||
return new GruesomeMenagerieEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player player = game.getPlayer(source.getControllerId());
|
||||
if (player == null) {
|
||||
return false;
|
||||
}
|
||||
Cards cards = new CardsImpl();
|
||||
Target target;
|
||||
target = new TargetCardInYourGraveyard(filter1);
|
||||
if (player.choose(outcome, target, source.getSourceId(), game)) {
|
||||
Card card = game.getCard(target.getFirstTarget());
|
||||
if (card != null) {
|
||||
cards.add(card);
|
||||
}
|
||||
}
|
||||
target = new TargetCardInYourGraveyard(filter2);
|
||||
if (player.choose(outcome, target, source.getSourceId(), game)) {
|
||||
Card card = game.getCard(target.getFirstTarget());
|
||||
if (card != null) {
|
||||
cards.add(card);
|
||||
}
|
||||
}
|
||||
target = new TargetCardInYourGraveyard(filter3);
|
||||
if (player.choose(outcome, target, source.getSourceId(), game)) {
|
||||
Card card = game.getCard(target.getFirstTarget());
|
||||
if (card != null) {
|
||||
cards.add(card);
|
||||
}
|
||||
}
|
||||
return player.moveCards(cards, Zone.BATTLEFIELD, source, game);
|
||||
}
|
||||
}
|
||||
57
Mage.Sets/src/mage/cards/h/HellkiteWhelp.java
Normal file
57
Mage.Sets/src/mage/cards/h/HellkiteWhelp.java
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
package mage.cards.h;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.AttacksTriggeredAbility;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.constants.SubType;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.predicate.mageobject.CardTypePredicate;
|
||||
import mage.filter.predicate.permanent.DefendingPlayerControlsPredicate;
|
||||
import mage.target.TargetPermanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class HellkiteWhelp extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterPermanent("creature defending player controls");
|
||||
|
||||
static {
|
||||
filter.add(new CardTypePredicate(CardType.CREATURE));
|
||||
filter.add(new DefendingPlayerControlsPredicate());
|
||||
}
|
||||
|
||||
public HellkiteWhelp(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{R}");
|
||||
|
||||
this.subtype.add(SubType.DRAGON);
|
||||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(34);
|
||||
|
||||
// Flying
|
||||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// Whenever Hellkite Whelp attacks, it deals 1 damage to target creature defending player controls.
|
||||
Ability ability = new AttacksTriggeredAbility(
|
||||
new DamageTargetEffect(1, "it"), false
|
||||
);
|
||||
ability.addTarget(new TargetPermanent(filter));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
public HellkiteWhelp(final HellkiteWhelp card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HellkiteWhelp copy() {
|
||||
return new HellkiteWhelp(this);
|
||||
}
|
||||
}
|
||||
37
Mage.Sets/src/mage/cards/h/HiredPoisoner.java
Normal file
37
Mage.Sets/src/mage/cards/h/HiredPoisoner.java
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
package mage.cards.h;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.constants.SubType;
|
||||
import mage.abilities.keyword.DeathtouchAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class HiredPoisoner extends CardImpl {
|
||||
|
||||
public HiredPoisoner(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B}");
|
||||
|
||||
this.subtype.add(SubType.HUMAN);
|
||||
this.subtype.add(SubType.ASSASSIN);
|
||||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// Deathtouch
|
||||
this.addAbility(DeathtouchAbility.getInstance());
|
||||
}
|
||||
|
||||
public HiredPoisoner(final HiredPoisoner card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HiredPoisoner copy() {
|
||||
return new HiredPoisoner(this);
|
||||
}
|
||||
}
|
||||
40
Mage.Sets/src/mage/cards/i/InspiringUnicorn.java
Normal file
40
Mage.Sets/src/mage/cards/i/InspiringUnicorn.java
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
package mage.cards.i;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.AttacksTriggeredAbility;
|
||||
import mage.abilities.effects.common.continuous.BoostControlledEffect;
|
||||
import mage.constants.SubType;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class InspiringUnicorn extends CardImpl {
|
||||
|
||||
public InspiringUnicorn(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}{W}");
|
||||
|
||||
this.subtype.add(SubType.UNICORN);
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
// Whenever Inspiring Unicorn attacks, creatures you control get +1/+1 until end of turn.
|
||||
this.addAbility(new AttacksTriggeredAbility(
|
||||
new BoostControlledEffect(1, 1, Duration.EndOfTurn), false
|
||||
));
|
||||
}
|
||||
|
||||
public InspiringUnicorn(final InspiringUnicorn card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public InspiringUnicorn copy() {
|
||||
return new InspiringUnicorn(this);
|
||||
}
|
||||
}
|
||||
45
Mage.Sets/src/mage/cards/i/IntrusivePackbeast.java
Normal file
45
Mage.Sets/src/mage/cards/i/IntrusivePackbeast.java
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
package mage.cards.i;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.effects.common.TapTargetEffect;
|
||||
import mage.constants.SubType;
|
||||
import mage.abilities.keyword.VigilanceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.target.common.TargetOpponentsCreaturePermanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class IntrusivePackbeast extends CardImpl {
|
||||
|
||||
public IntrusivePackbeast(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{W}");
|
||||
|
||||
this.subtype.add(SubType.BEAST);
|
||||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// Vigilance
|
||||
this.addAbility(VigilanceAbility.getInstance());
|
||||
|
||||
// When Intrusive Packbeast enters the battlefield, tap up to two target creatures your opponents control.
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(new TapTargetEffect());
|
||||
ability.addTarget(new TargetOpponentsCreaturePermanent(0, 2));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
public IntrusivePackbeast(final IntrusivePackbeast card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IntrusivePackbeast copy() {
|
||||
return new IntrusivePackbeast(this);
|
||||
}
|
||||
}
|
||||
42
Mage.Sets/src/mage/cards/k/KraulForagers.java
Normal file
42
Mage.Sets/src/mage/cards/k/KraulForagers.java
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
package mage.cards.k;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount;
|
||||
import mage.abilities.effects.common.GainLifeEffect;
|
||||
import mage.constants.SubType;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class KraulForagers extends CardImpl {
|
||||
|
||||
public KraulForagers(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}");
|
||||
|
||||
this.subtype.add(SubType.INSECT);
|
||||
this.subtype.add(SubType.SCOUT);
|
||||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(4);
|
||||
|
||||
// Undergrowth — When Kraul Foragers enters the battlefield, you gain 1 life for each creature card in your graveyard.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(
|
||||
new GainLifeEffect(new CardsInControllerGraveyardCount()),
|
||||
false, "<i>Undergrowth</i> — "
|
||||
));
|
||||
}
|
||||
|
||||
public KraulForagers(final KraulForagers card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public KraulForagers copy() {
|
||||
return new KraulForagers(this);
|
||||
}
|
||||
}
|
||||
105
Mage.Sets/src/mage/cards/k/KraulHarpooner.java
Normal file
105
Mage.Sets/src/mage/cards/k/KraulHarpooner.java
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
package mage.cards.k;
|
||||
|
||||
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.common.continuous.BoostSourceEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.constants.SubType;
|
||||
import mage.abilities.keyword.ReachAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.TargetController;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.filter.predicate.mageobject.AbilityPredicate;
|
||||
import mage.filter.predicate.permanent.ControllerPredicate;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
import mage.target.TargetPermanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class KraulHarpooner extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterCreaturePermanent("creature with flying you don't control");
|
||||
|
||||
static {
|
||||
filter.add(new ControllerPredicate(TargetController.NOT_YOU));
|
||||
filter.add(new AbilityPredicate(FlyingAbility.class));
|
||||
}
|
||||
|
||||
public KraulHarpooner(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
|
||||
|
||||
this.subtype.add(SubType.INSECT);
|
||||
this.subtype.add(SubType.WARRIOR);
|
||||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
// Reach
|
||||
this.addAbility(ReachAbility.getInstance());
|
||||
|
||||
// Undergrowth — When Kraul Harpooner enters the battlefield, choose up to one target creature with flying you don't control. Kraul Harpooner gets +X/+0 until end of turn, where X is the number of creature cards in your graveyard, then you may have Kraul Harpooner fight that creature.
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(
|
||||
new KraulHarpoonerEffect(), false,
|
||||
"<i>Undergrowth</i> — "
|
||||
);
|
||||
ability.addTarget(new TargetPermanent(0, 1, filter, false));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
public KraulHarpooner(final KraulHarpooner card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public KraulHarpooner copy() {
|
||||
return new KraulHarpooner(this);
|
||||
}
|
||||
}
|
||||
|
||||
class KraulHarpoonerEffect extends OneShotEffect {
|
||||
|
||||
public KraulHarpoonerEffect() {
|
||||
super(Outcome.Benefit);
|
||||
this.staticText = "choose up to one target creature with flying "
|
||||
+ "you don't control. {this} gets +X/+0 until end of turn, "
|
||||
+ "where X is the number of creature cards in your graveyard, "
|
||||
+ "then you may have {this} fight that creature.";
|
||||
}
|
||||
|
||||
public KraulHarpoonerEffect(final KraulHarpoonerEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public KraulHarpoonerEffect copy() {
|
||||
return new KraulHarpoonerEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Permanent sourcePerm = game.getPermanent(source.getSourceId());
|
||||
Player player = game.getPlayer(source.getControllerId());
|
||||
if (sourcePerm == null || player == null) {
|
||||
return false;
|
||||
}
|
||||
int xValue = player.getGraveyard().count(StaticFilters.FILTER_CARD_CREATURE, game);
|
||||
game.addEffect(new BoostSourceEffect(xValue, 0, Duration.EndOfTurn), source);
|
||||
Permanent creature = game.getPermanent(source.getFirstTarget());
|
||||
if (creature == null || !player.chooseUse(outcome, "Have " + sourcePerm.getLogName() + " fight " + creature.getLogName() + "?", source, game)) {
|
||||
return true;
|
||||
}
|
||||
return creature.fight(sourcePerm, source, game);
|
||||
}
|
||||
}
|
||||
|
|
@ -34,7 +34,7 @@ public final class LedevChampion extends CardImpl {
|
|||
public LedevChampion(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}{W}");
|
||||
|
||||
this.subtype.add(SubType.HUMAN);
|
||||
this.subtype.add(SubType.ELF);
|
||||
this.subtype.add(SubType.KNIGHT);
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
|
|
|
|||
43
Mage.Sets/src/mage/cards/m/MuseDrake.java
Normal file
43
Mage.Sets/src/mage/cards/m/MuseDrake.java
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
package mage.cards.m;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.constants.SubType;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class MuseDrake extends CardImpl {
|
||||
|
||||
public MuseDrake(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}");
|
||||
|
||||
this.subtype.add(SubType.DRAKE);
|
||||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// Flying
|
||||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// When Muse Drake enters the battlefield, draw a card.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(
|
||||
new DrawCardSourceControllerEffect(1)
|
||||
));
|
||||
}
|
||||
|
||||
public MuseDrake(final MuseDrake card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MuseDrake copy() {
|
||||
return new MuseDrake(this);
|
||||
}
|
||||
}
|
||||
39
Mage.Sets/src/mage/cards/p/PacksFavor.java
Normal file
39
Mage.Sets/src/mage/cards/p/PacksFavor.java
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
package mage.cards.p;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||
import mage.abilities.keyword.ConvokeAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class PacksFavor extends CardImpl {
|
||||
|
||||
public PacksFavor(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{G}");
|
||||
|
||||
// Convoke
|
||||
this.addAbility(new ConvokeAbility());
|
||||
|
||||
// Target creature gets +3/+3 until end of turn.
|
||||
this.getSpellAbility().addEffect(
|
||||
new BoostTargetEffect(3, 3, Duration.EndOfTurn)
|
||||
);
|
||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||
}
|
||||
|
||||
public PacksFavor(final PacksFavor card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PacksFavor copy() {
|
||||
return new PacksFavor(this);
|
||||
}
|
||||
}
|
||||
35
Mage.Sets/src/mage/cards/p/PauseForReflection.java
Normal file
35
Mage.Sets/src/mage/cards/p/PauseForReflection.java
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
package mage.cards.p;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.effects.common.PreventAllDamageByAllPermanentsEffect;
|
||||
import mage.abilities.keyword.ConvokeAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class PauseForReflection extends CardImpl {
|
||||
|
||||
public PauseForReflection(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{G}");
|
||||
|
||||
// Convoke
|
||||
this.addAbility(new ConvokeAbility());
|
||||
|
||||
// Precent all combat damage that would be dealt this turn.
|
||||
this.getSpellAbility().addEffect(new PreventAllDamageByAllPermanentsEffect(Duration.EndOfTurn, true));
|
||||
}
|
||||
|
||||
public PauseForReflection(final PauseForReflection card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PauseForReflection copy() {
|
||||
return new PauseForReflection(this);
|
||||
}
|
||||
}
|
||||
36
Mage.Sets/src/mage/cards/p/PitilessGorgon.java
Normal file
36
Mage.Sets/src/mage/cards/p/PitilessGorgon.java
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
package mage.cards.p;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.constants.SubType;
|
||||
import mage.abilities.keyword.DeathtouchAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class PitilessGorgon extends CardImpl {
|
||||
|
||||
public PitilessGorgon(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B/G}{B/G}");
|
||||
|
||||
this.subtype.add(SubType.GORGON);
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
// Deathtouch
|
||||
this.addAbility(DeathtouchAbility.getInstance());
|
||||
}
|
||||
|
||||
public PitilessGorgon(final PitilessGorgon card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PitilessGorgon copy() {
|
||||
return new PitilessGorgon(this);
|
||||
}
|
||||
}
|
||||
64
Mage.Sets/src/mage/cards/p/PortcullisVine.java
Normal file
64
Mage.Sets/src/mage/cards/p/PortcullisVine.java
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
package mage.cards.p;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.SacrificeTargetCost;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.constants.SubType;
|
||||
import mage.abilities.keyword.DefenderAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.filter.predicate.mageobject.AbilityPredicate;
|
||||
import mage.target.common.TargetControlledPermanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class PortcullisVine extends CardImpl {
|
||||
|
||||
private static final FilterControlledPermanent filter
|
||||
= new FilterControlledCreaturePermanent("a creature with defender");
|
||||
|
||||
static {
|
||||
filter.add(new AbilityPredicate(DefenderAbility.class));
|
||||
}
|
||||
|
||||
public PortcullisVine(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}");
|
||||
|
||||
this.subtype.add(SubType.PLANT);
|
||||
this.subtype.add(SubType.WALL);
|
||||
this.power = new MageInt(0);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// Defender
|
||||
this.addAbility(DefenderAbility.getInstance());
|
||||
|
||||
// {2}, {T}, Sacrifice a creature with defender: Draw a card.
|
||||
Ability ability = new SimpleActivatedAbility(
|
||||
new DrawCardSourceControllerEffect(1), new GenericManaCost(2)
|
||||
);
|
||||
ability.addCost(new TapSourceCost());
|
||||
ability.addCost(new SacrificeTargetCost(
|
||||
new TargetControlledPermanent(filter)
|
||||
));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
public PortcullisVine(final PortcullisVine card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PortcullisVine copy() {
|
||||
return new PortcullisVine(this);
|
||||
}
|
||||
}
|
||||
|
|
@ -20,7 +20,7 @@ import mage.constants.ComparisonType;
|
|||
import mage.constants.Duration;
|
||||
import mage.constants.TargetController;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.permanent.token.AngelToken2;
|
||||
import mage.game.permanent.token.AngelVigilanceToken;
|
||||
import mage.watchers.common.PlayerGainedLifeWatcher;
|
||||
|
||||
/**
|
||||
|
|
@ -42,7 +42,7 @@ public final class ResplendentAngel extends CardImpl {
|
|||
// At the beginning of each end step, if you gained 5 or more life this turn, create a 4/4 white Angel creature token with flying and vigilance.
|
||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(
|
||||
Zone.BATTLEFIELD,
|
||||
new CreateTokenEffect(new AngelToken2()),
|
||||
new CreateTokenEffect(new AngelVigilanceToken()),
|
||||
TargetController.ANY,
|
||||
new YouGainedLifeCondition(ComparisonType.MORE_THAN, 4),
|
||||
false
|
||||
|
|
|
|||
44
Mage.Sets/src/mage/cards/r/RubblebeltBoar.java
Normal file
44
Mage.Sets/src/mage/cards/r/RubblebeltBoar.java
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
package mage.cards.r;
|
||||
|
||||
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.constants.SubType;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class RubblebeltBoar extends CardImpl {
|
||||
|
||||
public RubblebeltBoar(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}");
|
||||
|
||||
this.subtype.add(SubType.BOAR);
|
||||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// When Rubblebelt Boar enters the battlefield, target creature gets +2/+0 until end of turn.
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(
|
||||
new BoostTargetEffect(2, 0, Duration.EndOfTurn)
|
||||
);
|
||||
ability.addTarget(new TargetCreaturePermanent());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
public RubblebeltBoar(final RubblebeltBoar card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RubblebeltBoar copy() {
|
||||
return new RubblebeltBoar(this);
|
||||
}
|
||||
}
|
||||
45
Mage.Sets/src/mage/cards/s/SilentDart.java
Normal file
45
Mage.Sets/src/mage/cards/s/SilentDart.java
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
package mage.cards.s;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.SacrificeSourceCost;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Zone;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class SilentDart extends CardImpl {
|
||||
|
||||
public SilentDart(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}");
|
||||
|
||||
// {4}, {T}, Sacrifice Silent Dart: It deals 3 damage to target creature.
|
||||
Ability ability = new SimpleActivatedAbility(
|
||||
Zone.BATTLEFIELD,
|
||||
new DamageTargetEffect(3, "it"),
|
||||
new GenericManaCost(4)
|
||||
);
|
||||
ability.addCost(new TapSourceCost());
|
||||
ability.addCost(new SacrificeSourceCost());
|
||||
ability.addTarget(new TargetCreaturePermanent());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
public SilentDart(final SilentDart card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SilentDart copy() {
|
||||
return new SilentDart(this);
|
||||
}
|
||||
}
|
||||
44
Mage.Sets/src/mage/cards/s/SpinalCentipede.java
Normal file
44
Mage.Sets/src/mage/cards/s/SpinalCentipede.java
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
package mage.cards.s;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.DiesTriggeredAbility;
|
||||
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
|
||||
import mage.constants.SubType;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.counters.CounterType;
|
||||
import mage.target.common.TargetControlledCreaturePermanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class SpinalCentipede extends CardImpl {
|
||||
|
||||
public SpinalCentipede(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}");
|
||||
|
||||
this.subtype.add(SubType.INSECT);
|
||||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
// When Spinal Centipede dies, put a +1/+1 counter on target creature you control.
|
||||
Ability ability = new DiesTriggeredAbility(new AddCountersTargetEffect(
|
||||
CounterType.P1P1.createInstance()
|
||||
), false);
|
||||
ability.addTarget(new TargetControlledCreaturePermanent());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
public SpinalCentipede(final SpinalCentipede card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SpinalCentipede copy() {
|
||||
return new SpinalCentipede(this);
|
||||
}
|
||||
}
|
||||
33
Mage.Sets/src/mage/cards/s/SwornCompanions.java
Normal file
33
Mage.Sets/src/mage/cards/s/SwornCompanions.java
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
package mage.cards.s;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.game.permanent.token.SoldierLifelinkToken;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class SwornCompanions extends CardImpl {
|
||||
|
||||
public SwornCompanions(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{W}");
|
||||
|
||||
// Creature two 1/1 white Soldier creature tokens with lifelink.
|
||||
this.getSpellAbility().addEffect(
|
||||
new CreateTokenEffect(new SoldierLifelinkToken(), 2)
|
||||
);
|
||||
}
|
||||
|
||||
public SwornCompanions(final SwornCompanions card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SwornCompanions copy() {
|
||||
return new SwornCompanions(this);
|
||||
}
|
||||
}
|
||||
77
Mage.Sets/src/mage/cards/t/TajicLegionsEdge.java
Normal file
77
Mage.Sets/src/mage/cards/t/TajicLegionsEdge.java
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
package mage.cards.t;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.PreventAllNonCombatDamageToAllEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||
import mage.abilities.keyword.FirstStrikeAbility;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.abilities.keyword.HasteAbility;
|
||||
import mage.abilities.keyword.MentorAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
import mage.filter.predicate.permanent.AnotherPredicate;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class TajicLegionsEdge extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterControlledCreaturePermanent("other creatures you control");
|
||||
|
||||
static {
|
||||
filter.add(new AnotherPredicate());
|
||||
}
|
||||
|
||||
public TajicLegionsEdge(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}{W}");
|
||||
|
||||
this.addSuperType(SuperType.LEGENDARY);
|
||||
this.subtype.add(SubType.HUMAN);
|
||||
this.subtype.add(SubType.SOLDIER);
|
||||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
// Haste
|
||||
this.addAbility(HasteAbility.getInstance());
|
||||
|
||||
// Mentor
|
||||
this.addAbility(new MentorAbility());
|
||||
|
||||
// Prevent all noncombat damage that would be dealt to other creatures you control.
|
||||
this.addAbility(new SimpleStaticAbility(
|
||||
Zone.BATTLEFIELD,
|
||||
new PreventAllNonCombatDamageToAllEffect(
|
||||
Duration.WhileOnBattlefield, filter
|
||||
)
|
||||
));
|
||||
|
||||
// {R}{W}: Tajic, Legion's Edge gains first strike until end of turn.
|
||||
this.addAbility(new SimpleActivatedAbility(
|
||||
Zone.BATTLEFIELD,
|
||||
new GainAbilitySourceEffect(
|
||||
FirstStrikeAbility.getInstance(),
|
||||
Duration.EndOfTurn
|
||||
), new ManaCostsImpl("{R}{W}")
|
||||
));
|
||||
}
|
||||
|
||||
public TajicLegionsEdge(final TajicLegionsEdge card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TajicLegionsEdge copy() {
|
||||
return new TajicLegionsEdge(this);
|
||||
}
|
||||
}
|
||||
45
Mage.Sets/src/mage/cards/t/TenthDistrictGuard.java
Normal file
45
Mage.Sets/src/mage/cards/t/TenthDistrictGuard.java
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
package mage.cards.t;
|
||||
|
||||
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.constants.SubType;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class TenthDistrictGuard extends CardImpl {
|
||||
|
||||
public TenthDistrictGuard(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}");
|
||||
|
||||
this.subtype.add(SubType.HUMAN);
|
||||
this.subtype.add(SubType.SOLDIER);
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
// When Tenth District Guard enters the battlefield, target creature gets +0/+1 until end of turn.
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(
|
||||
new BoostTargetEffect(0, 1, Duration.EndOfTurn)
|
||||
);
|
||||
ability.addTarget(new TargetCreaturePermanent());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
public TenthDistrictGuard(final TenthDistrictGuard card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TenthDistrictGuard copy() {
|
||||
return new TenthDistrictGuard(this);
|
||||
}
|
||||
}
|
||||
63
Mage.Sets/src/mage/cards/u/UrbanUtopia.java
Normal file
63
Mage.Sets/src/mage/cards/u/UrbanUtopia.java
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
package mage.cards.u;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.constants.SubType;
|
||||
import mage.target.common.TargetLandPermanent;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.common.AttachEffect;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
|
||||
import mage.constants.Outcome;
|
||||
import mage.target.TargetPermanent;
|
||||
import mage.abilities.keyword.EnchantAbility;
|
||||
import mage.abilities.mana.AnyColorManaAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AttachmentType;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Zone;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class UrbanUtopia extends CardImpl {
|
||||
|
||||
public UrbanUtopia(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{G}");
|
||||
|
||||
this.subtype.add(SubType.AURA);
|
||||
|
||||
// Enchant Land
|
||||
TargetPermanent auraTarget = new TargetLandPermanent();
|
||||
this.getSpellAbility().addTarget(auraTarget);
|
||||
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
|
||||
Ability ability = new EnchantAbility(auraTarget.getTargetName());
|
||||
this.addAbility(ability);
|
||||
|
||||
// When Urban Utopia enters the battlefield, draw a card.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(
|
||||
new DrawCardSourceControllerEffect(1)
|
||||
));
|
||||
|
||||
// Enchanted land has "{T}: Add one mana of any color."
|
||||
this.addAbility(new SimpleStaticAbility(
|
||||
Zone.BATTLEFIELD,
|
||||
new GainAbilityAttachedEffect(
|
||||
new AnyColorManaAbility(), AttachmentType.AURA
|
||||
).setText("Enchanted land has "
|
||||
+ "\"{T}: Add one mana of any color.\"")
|
||||
));
|
||||
}
|
||||
|
||||
public UrbanUtopia(final UrbanUtopia card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public UrbanUtopia copy() {
|
||||
return new UrbanUtopia(this);
|
||||
}
|
||||
}
|
||||
45
Mage.Sets/src/mage/cards/v/VedalkenMesmerist.java
Normal file
45
Mage.Sets/src/mage/cards/v/VedalkenMesmerist.java
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
package mage.cards.v;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.AttacksTriggeredAbility;
|
||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||
import mage.constants.SubType;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.target.common.TargetOpponentsCreaturePermanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class VedalkenMesmerist extends CardImpl {
|
||||
|
||||
public VedalkenMesmerist(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}");
|
||||
|
||||
this.subtype.add(SubType.VEDALKEN);
|
||||
this.subtype.add(SubType.WIZARD);
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// Whenever Vedalken Mesmerist attacks, target creature an opponent controls gets -2/-0 until end of turn.
|
||||
Ability ability = new AttacksTriggeredAbility(
|
||||
new BoostTargetEffect(-2, 0, Duration.EndOfTurn), false
|
||||
);
|
||||
ability.addTarget(new TargetOpponentsCreaturePermanent());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
public VedalkenMesmerist(final VedalkenMesmerist card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public VedalkenMesmerist copy() {
|
||||
return new VedalkenMesmerist(this);
|
||||
}
|
||||
}
|
||||
44
Mage.Sets/src/mage/cards/v/VeiledShade.java
Normal file
44
Mage.Sets/src/mage/cards/v/VeiledShade.java
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
package mage.cards.v;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.constants.SubType;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Zone;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class VeiledShade extends CardImpl {
|
||||
|
||||
public VeiledShade(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}");
|
||||
|
||||
this.subtype.add(SubType.SHADE);
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
// {1}{B}: Veiled Shade gets +1/+1 until end of turn.
|
||||
this.addAbility(new SimpleActivatedAbility(
|
||||
Zone.BATTLEFIELD,
|
||||
new BoostSourceEffect(1, 1, Duration.EndOfTurn),
|
||||
new ManaCostsImpl("{1}{B}")
|
||||
));
|
||||
}
|
||||
|
||||
public VeiledShade(final VeiledShade card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public VeiledShade copy() {
|
||||
return new VeiledShade(this);
|
||||
}
|
||||
}
|
||||
37
Mage.Sets/src/mage/cards/v/VernadiShieldmate.java
Normal file
37
Mage.Sets/src/mage/cards/v/VernadiShieldmate.java
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
package mage.cards.v;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.constants.SubType;
|
||||
import mage.abilities.keyword.VigilanceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class VernadiShieldmate extends CardImpl {
|
||||
|
||||
public VernadiShieldmate(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G/W}");
|
||||
|
||||
this.subtype.add(SubType.HUMAN);
|
||||
this.subtype.add(SubType.SOLDIER);
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
// Vigilance
|
||||
this.addAbility(VigilanceAbility.getInstance());
|
||||
}
|
||||
|
||||
public VernadiShieldmate(final VernadiShieldmate card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public VernadiShieldmate copy() {
|
||||
return new VernadiShieldmate(this);
|
||||
}
|
||||
}
|
||||
32
Mage.Sets/src/mage/cards/w/WildCeratok.java
Normal file
32
Mage.Sets/src/mage/cards/w/WildCeratok.java
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
package mage.cards.w;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.constants.SubType;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class WildCeratok extends CardImpl {
|
||||
|
||||
public WildCeratok(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}");
|
||||
|
||||
this.subtype.add(SubType.RHINO);
|
||||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(3);
|
||||
}
|
||||
|
||||
public WildCeratok(final WildCeratok card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public WildCeratok copy() {
|
||||
return new WildCeratok(this);
|
||||
}
|
||||
}
|
||||
32
Mage.Sets/src/mage/cards/w/WishcoinCrab.java
Normal file
32
Mage.Sets/src/mage/cards/w/WishcoinCrab.java
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
package mage.cards.w;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.constants.SubType;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class WishcoinCrab extends CardImpl {
|
||||
|
||||
public WishcoinCrab(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}");
|
||||
|
||||
this.subtype.add(SubType.CRAB);
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(5);
|
||||
}
|
||||
|
||||
public WishcoinCrab(final WishcoinCrab card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public WishcoinCrab copy() {
|
||||
return new WishcoinCrab(this);
|
||||
}
|
||||
}
|
||||
|
|
@ -31,6 +31,8 @@ public final class GuildsOfRavnica extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Attendant of Vraska", 271, Rarity.UNCOMMON, mage.cards.a.AttendantOfVraska.class));
|
||||
cards.add(new SetCardInfo("Aurelia, Exemplar of Justice", 153, Rarity.MYTHIC, mage.cards.a.AureliaExemplarOfJustice.class));
|
||||
cards.add(new SetCardInfo("Barging Sergeant", 92, Rarity.COMMON, mage.cards.b.BargingSergeant.class));
|
||||
cards.add(new SetCardInfo("Barrier of Bones", 61, Rarity.COMMON, mage.cards.b.BarrierOfBones.class));
|
||||
cards.add(new SetCardInfo("Bartizan Bats", 62, Rarity.COMMON, mage.cards.b.BartizanBats.class));
|
||||
cards.add(new SetCardInfo("Beacon Bolt", 154, Rarity.UNCOMMON, mage.cards.b.BeaconBolt.class));
|
||||
cards.add(new SetCardInfo("Beast Whisperer", 123, Rarity.RARE, mage.cards.b.BeastWhisperer.class));
|
||||
cards.add(new SetCardInfo("Blade Instructor", 1, Rarity.COMMON, mage.cards.b.BladeInstructor.class));
|
||||
|
|
@ -41,9 +43,14 @@ public final class GuildsOfRavnica extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Boros Guildgate", 244, Rarity.COMMON, mage.cards.b.BorosGuildgate.class));
|
||||
cards.add(new SetCardInfo("Boros Locket", 231, Rarity.COMMON, mage.cards.b.BorosLocket.class));
|
||||
cards.add(new SetCardInfo("Bounty Agent", 2, Rarity.RARE, mage.cards.b.BountyAgent.class));
|
||||
cards.add(new SetCardInfo("Burglar Rat", 64, Rarity.COMMON, mage.cards.b.BurglarRat.class));
|
||||
cards.add(new SetCardInfo("Camaraderie", 157, Rarity.RARE, mage.cards.c.Camaraderie.class));
|
||||
cards.add(new SetCardInfo("Capture Sphere", 31, Rarity.COMMON, mage.cards.c.CaptureSphere.class));
|
||||
cards.add(new SetCardInfo("Centaur Peacemaker", 158, Rarity.COMMON, mage.cards.c.CentaurPeacemaker.class));
|
||||
cards.add(new SetCardInfo("Chance for Glory", 159, Rarity.MYTHIC, mage.cards.c.ChanceForGlory.class));
|
||||
cards.add(new SetCardInfo("Charnel Troll", 160, Rarity.RARE, mage.cards.c.CharnelTroll.class));
|
||||
cards.add(new SetCardInfo("Chemister's Insight", 32, Rarity.UNCOMMON, mage.cards.c.ChemistersInsight.class));
|
||||
cards.add(new SetCardInfo("Child of Night", 65, Rarity.COMMON, mage.cards.c.ChildOfNight.class));
|
||||
cards.add(new SetCardInfo("Chromatic Lantern", 233, Rarity.RARE, mage.cards.c.ChromaticLantern.class));
|
||||
cards.add(new SetCardInfo("Circuitous Route", 125, Rarity.UNCOMMON, mage.cards.c.CircuitousRoute.class));
|
||||
cards.add(new SetCardInfo("Citywatch Sphinx", 33, Rarity.UNCOMMON, mage.cards.c.CitywatchSphinx.class));
|
||||
|
|
@ -55,9 +62,14 @@ public final class GuildsOfRavnica extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Connive // Concoct", 222, Rarity.RARE, mage.cards.c.ConniveConcoct.class));
|
||||
cards.add(new SetCardInfo("Crackling Drake", 163, Rarity.UNCOMMON, mage.cards.c.CracklingDrake.class));
|
||||
cards.add(new SetCardInfo("Creeping Chill", 66, Rarity.UNCOMMON, mage.cards.c.CreepingChill.class));
|
||||
cards.add(new SetCardInfo("Crushing Canopy", 126, Rarity.COMMON, mage.cards.c.CrushingCanopy.class));
|
||||
cards.add(new SetCardInfo("Darkblade Agent", 164, Rarity.COMMON, mage.cards.d.DarkbladeAgent.class));
|
||||
cards.add(new SetCardInfo("Dawn of Hope", 8, Rarity.RARE, mage.cards.d.DawnOfHope.class));
|
||||
cards.add(new SetCardInfo("Dazzling Lights", 34, Rarity.COMMON, mage.cards.d.DazzlingLights.class));
|
||||
cards.add(new SetCardInfo("Dead Weight", 67, Rarity.COMMON, mage.cards.d.DeadWeight.class));
|
||||
cards.add(new SetCardInfo("Deadly Visit", 68, Rarity.COMMON, mage.cards.d.DeadlyVisit.class));
|
||||
cards.add(new SetCardInfo("Deafening Clarion", 165, Rarity.RARE, mage.cards.d.DeafeningClarion.class));
|
||||
cards.add(new SetCardInfo("Devkarin Dissident", 127, Rarity.COMMON, mage.cards.d.DevkarinDissident.class));
|
||||
cards.add(new SetCardInfo("Dimir Guildgate", 245, Rarity.COMMON, mage.cards.d.DimirGuildgate.class));
|
||||
cards.add(new SetCardInfo("Dimir Guildgate", 246, Rarity.COMMON, mage.cards.d.DimirGuildgate.class));
|
||||
cards.add(new SetCardInfo("Dimir Informant", 36, Rarity.COMMON, mage.cards.d.DimirInformant.class));
|
||||
|
|
@ -68,43 +80,65 @@ public final class GuildsOfRavnica extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Disdainful Stroke", 37, Rarity.COMMON, mage.cards.d.DisdainfulStroke.class));
|
||||
cards.add(new SetCardInfo("Disinformation Campaign", 167, Rarity.UNCOMMON, mage.cards.d.DisinformationCampaign.class));
|
||||
cards.add(new SetCardInfo("District Guide", 128, Rarity.UNCOMMON, mage.cards.d.DistrictGuide.class));
|
||||
cards.add(new SetCardInfo("Divine Visitation", 10, Rarity.MYTHIC, mage.cards.d.DivineVisitation.class));
|
||||
cards.add(new SetCardInfo("Doom Whisperer", 69, Rarity.MYTHIC, mage.cards.d.DoomWhisperer.class));
|
||||
cards.add(new SetCardInfo("Douser of Lights", 70, Rarity.COMMON, mage.cards.d.DouserOfLights.class));
|
||||
cards.add(new SetCardInfo("Dream Eater", 38, Rarity.MYTHIC, mage.cards.d.DreamEater.class));
|
||||
cards.add(new SetCardInfo("Drowned Secrets", 39, Rarity.RARE, mage.cards.d.DrownedSecrets.class));
|
||||
cards.add(new SetCardInfo("Electrostatic Field", 97, Rarity.UNCOMMON, mage.cards.e.ElectrostaticField.class));
|
||||
cards.add(new SetCardInfo("Emmara, Soul of the Accord", 168, Rarity.RARE, mage.cards.e.EmmaraSoulOfTheAccord.class));
|
||||
cards.add(new SetCardInfo("Enhanced Surveillance", 40, Rarity.UNCOMMON, mage.cards.e.EnhancedSurveillance.class));
|
||||
cards.add(new SetCardInfo("Erratic Cyclops", 98, Rarity.RARE, mage.cards.e.ErraticCyclops.class));
|
||||
cards.add(new SetCardInfo("Erstwhile Trooper", 169, Rarity.COMMON, mage.cards.e.ErstwhileTrooper.class));
|
||||
cards.add(new SetCardInfo("Etrata, the Silencer", 170, Rarity.RARE, mage.cards.e.EtrataTheSilencer.class));
|
||||
cards.add(new SetCardInfo("Expansion // Explosion", 224, Rarity.RARE, mage.cards.e.ExpansionExplosion.class));
|
||||
cards.add(new SetCardInfo("Fearless Halberdier", 100, Rarity.COMMON, mage.cards.f.FearlessHalberdier.class));
|
||||
cards.add(new SetCardInfo("Find // Finality", 225, Rarity.RARE, mage.cards.f.FindFinality.class));
|
||||
cards.add(new SetCardInfo("Fire Urchin", 101, Rarity.COMMON, mage.cards.f.FireUrchin.class));
|
||||
cards.add(new SetCardInfo("Firemind's Research", 171, Rarity.RARE, mage.cards.f.FiremindsResearch.class));
|
||||
cards.add(new SetCardInfo("Flight of Equenauts", 11, Rarity.UNCOMMON, mage.cards.f.FlightOfEquenauts.class));
|
||||
cards.add(new SetCardInfo("Flower // Flourish", 226, Rarity.UNCOMMON, mage.cards.f.FlowerFlourish.class));
|
||||
cards.add(new SetCardInfo("Forest", 264, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Fresh-Faced Recruit", 216, Rarity.COMMON, mage.cards.f.FreshFacedRecruit.class));
|
||||
cards.add(new SetCardInfo("Garrison Sergeant", 172, Rarity.COMMON, mage.cards.g.GarrisonSergeant.class));
|
||||
cards.add(new SetCardInfo("Gatekeeper Gargoyle", 235, Rarity.UNCOMMON, mage.cards.g.GatekeeperGargoyle.class));
|
||||
cards.add(new SetCardInfo("Gateway Plaza", 247, Rarity.COMMON, mage.cards.g.GatewayPlaza.class));
|
||||
cards.add(new SetCardInfo("Generous Stray", 129, Rarity.COMMON, mage.cards.g.GenerousStray.class));
|
||||
cards.add(new SetCardInfo("Gird for Battle", 12, Rarity.UNCOMMON, mage.cards.g.GirdForBattle.class));
|
||||
cards.add(new SetCardInfo("Glaive of the Guildpact", 236, Rarity.UNCOMMON, mage.cards.g.GlaiveOfTheGuildpact.class));
|
||||
cards.add(new SetCardInfo("Glowspore Shaman", 173, Rarity.UNCOMMON, mage.cards.g.GlowsporeShaman.class));
|
||||
cards.add(new SetCardInfo("Goblin Banneret", 102, Rarity.UNCOMMON, mage.cards.g.GoblinBanneret.class));
|
||||
cards.add(new SetCardInfo("Goblin Cratermaker", 103, Rarity.UNCOMMON, mage.cards.g.GoblinCratermaker.class));
|
||||
cards.add(new SetCardInfo("Goblin Electromancer", 174, Rarity.COMMON, mage.cards.g.GoblinElectromancer.class));
|
||||
cards.add(new SetCardInfo("Goblin Locksmith", 104, Rarity.COMMON, mage.cards.g.GoblinLocksmith.class));
|
||||
cards.add(new SetCardInfo("Golgari Findbroker", 175, Rarity.UNCOMMON, mage.cards.g.GolgariFindbroker.class));
|
||||
cards.add(new SetCardInfo("Golgari Guildgate", 248, Rarity.COMMON, mage.cards.g.GolgariGuildgate.class));
|
||||
cards.add(new SetCardInfo("Golgari Guildgate", 249, Rarity.COMMON, mage.cards.g.GolgariGuildgate.class));
|
||||
cards.add(new SetCardInfo("Golgari Locket", 237, Rarity.COMMON, mage.cards.g.GolgariLocket.class));
|
||||
cards.add(new SetCardInfo("Golgari Raiders", 130, Rarity.UNCOMMON, mage.cards.g.GolgariRaiders.class));
|
||||
cards.add(new SetCardInfo("Grappling Sundew", 131, Rarity.UNCOMMON, mage.cards.g.GrapplingSundew.class));
|
||||
cards.add(new SetCardInfo("Gravitic Punch", 105, Rarity.COMMON, mage.cards.g.GraviticPunch.class));
|
||||
cards.add(new SetCardInfo("Gruesome Menagerie", 71, Rarity.RARE, mage.cards.g.GruesomeMenagerie.class));
|
||||
cards.add(new SetCardInfo("Guild Summit", 41, Rarity.UNCOMMON, mage.cards.g.GuildSummit.class));
|
||||
cards.add(new SetCardInfo("Haazda Marshal", 13, Rarity.UNCOMMON, mage.cards.h.HaazdaMarshal.class));
|
||||
cards.add(new SetCardInfo("Hammer Dropper", 176, Rarity.COMMON, mage.cards.h.HammerDropper.class));
|
||||
cards.add(new SetCardInfo("Hatchery Spider", 132, Rarity.RARE, mage.cards.h.HatcherySpider.class));
|
||||
cards.add(new SetCardInfo("Healer's Hawk", 14, Rarity.COMMON, mage.cards.h.HealersHawk.class));
|
||||
cards.add(new SetCardInfo("Hellkite Whelp", 106, Rarity.UNCOMMON, mage.cards.h.HellkiteWhelp.class));
|
||||
cards.add(new SetCardInfo("Hired Poisoner", 72, Rarity.COMMON, mage.cards.h.HiredPoisoner.class));
|
||||
cards.add(new SetCardInfo("Hitchclaw Recluse", 133, Rarity.COMMON, mage.cards.h.HitchclawRecluse.class));
|
||||
cards.add(new SetCardInfo("House Guildmage", 177, Rarity.UNCOMMON, mage.cards.h.HouseGuildmage.class));
|
||||
cards.add(new SetCardInfo("Hunted Witness", 15, Rarity.COMMON, mage.cards.h.HuntedWitness.class));
|
||||
cards.add(new SetCardInfo("Hypothesizzle", 178, Rarity.COMMON, mage.cards.h.Hypothesizzle.class));
|
||||
cards.add(new SetCardInfo("Impervious Greatwurm", 273, Rarity.MYTHIC, mage.cards.i.ImperviousGreatwurm.class));
|
||||
cards.add(new SetCardInfo("Inescapable Blaze", 107, Rarity.UNCOMMON, mage.cards.i.InescapableBlaze.class));
|
||||
cards.add(new SetCardInfo("Integrity // Intervention", 227, Rarity.UNCOMMON, mage.cards.i.IntegrityIntervention.class));
|
||||
cards.add(new SetCardInfo("Intrusive Packbeast", 17, Rarity.COMMON, mage.cards.i.IntrusivePackbeast.class));
|
||||
cards.add(new SetCardInfo("Invert // Invent", 228, Rarity.UNCOMMON, mage.cards.i.InvertInvent.class));
|
||||
cards.add(new SetCardInfo("Inspiring Unicorn", 16, Rarity.UNCOMMON, mage.cards.i.InspiringUnicorn.class));
|
||||
cards.add(new SetCardInfo("Intrusive Packbeast", 17, Rarity.COMMON, mage.cards.i.IntrusivePackbeast.class));
|
||||
cards.add(new SetCardInfo("Ionize", 179, Rarity.RARE, mage.cards.i.Ionize.class));
|
||||
cards.add(new SetCardInfo("Ironshell Beetle", 134, Rarity.COMMON, mage.cards.i.IronshellBeetle.class));
|
||||
cards.add(new SetCardInfo("Island", 261, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Izoni, Thousand-Eyed", 180, Rarity.RARE, mage.cards.i.IzoniThousandEyed.class));
|
||||
cards.add(new SetCardInfo("Izzet Guildgate", 251, Rarity.COMMON, mage.cards.i.IzzetGuildgate.class));
|
||||
|
|
@ -113,6 +147,8 @@ public final class GuildsOfRavnica extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Join Shields", 181, Rarity.UNCOMMON, mage.cards.j.JoinShields.class));
|
||||
cards.add(new SetCardInfo("Justice Strike", 182, Rarity.UNCOMMON, mage.cards.j.JusticeStrike.class));
|
||||
cards.add(new SetCardInfo("Knight of Autumn", 183, Rarity.RARE, mage.cards.k.KnightOfAutumn.class));
|
||||
cards.add(new SetCardInfo("Kraul Foragers", 135, Rarity.COMMON, mage.cards.k.KraulForagers.class));
|
||||
cards.add(new SetCardInfo("Kraul Harpooner", 136, Rarity.UNCOMMON, mage.cards.k.KraulHarpooner.class));
|
||||
cards.add(new SetCardInfo("Lava Coil", 108, Rarity.UNCOMMON, mage.cards.l.LavaCoil.class));
|
||||
cards.add(new SetCardInfo("Lazav, the Multifarious", 184, Rarity.MYTHIC, mage.cards.l.LazavTheMultifarious.class));
|
||||
cards.add(new SetCardInfo("League Guildmage", 185, Rarity.UNCOMMON, mage.cards.l.LeagueGuildmage.class));
|
||||
|
|
@ -123,16 +159,20 @@ public final class GuildsOfRavnica extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Light of the Legion", 19, Rarity.RARE, mage.cards.l.LightOfTheLegion.class));
|
||||
cards.add(new SetCardInfo("Lotleth Giant", 74, Rarity.UNCOMMON, mage.cards.l.LotlethGiant.class));
|
||||
cards.add(new SetCardInfo("Loxodon Restorer", 20, Rarity.COMMON, mage.cards.l.LoxodonRestorer.class));
|
||||
cards.add(new SetCardInfo("Luminous Bonds", 21, Rarity.COMMON, mage.cards.l.LuminousBonds.class));
|
||||
cards.add(new SetCardInfo("Maniacal Rage", 110, Rarity.COMMON, mage.cards.m.ManiacalRage.class));
|
||||
cards.add(new SetCardInfo("March of the Multitudes", 188, Rarity.MYTHIC, mage.cards.m.MarchOfTheMultitudes.class));
|
||||
cards.add(new SetCardInfo("Mausoleum Secrets", 75, Rarity.RARE, mage.cards.m.MausoleumSecrets.class));
|
||||
cards.add(new SetCardInfo("Maximize Altitude", 43, Rarity.COMMON, mage.cards.m.MaximizeAltitude.class));
|
||||
cards.add(new SetCardInfo("Maximize Velocity", 111, Rarity.COMMON, mage.cards.m.MaximizeVelocity.class));
|
||||
cards.add(new SetCardInfo("Midnight Reaper", 77, Rarity.RARE, mage.cards.m.MidnightReaper.class));
|
||||
cards.add(new SetCardInfo("Might of the Masses", 137, Rarity.UNCOMMON, mage.cards.m.MightOfTheMasses.class));
|
||||
cards.add(new SetCardInfo("Mission Briefing", 44, Rarity.RARE, mage.cards.m.MissionBriefing.class));
|
||||
cards.add(new SetCardInfo("Molderhulk", 190, Rarity.UNCOMMON, mage.cards.m.Molderhulk.class));
|
||||
cards.add(new SetCardInfo("Moodmark Painter", 78, Rarity.COMMON, mage.cards.m.MoodmarkPainter.class));
|
||||
cards.add(new SetCardInfo("Mountain", 263, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Murmuring Mystic", 45, Rarity.UNCOMMON, mage.cards.m.MurmuringMystic.class));
|
||||
cards.add(new SetCardInfo("Muse Drake", 46, Rarity.COMMON, mage.cards.m.MuseDrake.class));
|
||||
cards.add(new SetCardInfo("Narcomoeba", 47, Rarity.RARE, mage.cards.n.Narcomoeba.class));
|
||||
cards.add(new SetCardInfo("Necrotic Wound", 79, Rarity.UNCOMMON, mage.cards.n.NecroticWound.class));
|
||||
cards.add(new SetCardInfo("Never Happened", 80, Rarity.COMMON, mage.cards.n.NeverHappened.class));
|
||||
|
|
@ -144,10 +184,15 @@ public final class GuildsOfRavnica extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Ochran Assassin", 194, Rarity.UNCOMMON, mage.cards.o.OchranAssassin.class));
|
||||
cards.add(new SetCardInfo("Omnispell Adept", 49, Rarity.RARE, mage.cards.o.OmnispellAdept.class));
|
||||
cards.add(new SetCardInfo("Overgrown Tomb", 253, Rarity.RARE, mage.cards.o.OvergrownTomb.class));
|
||||
cards.add(new SetCardInfo("Pack's Favor", 139, Rarity.COMMON, mage.cards.p.PacksFavor.class));
|
||||
cards.add(new SetCardInfo("Parhelion Patrol", 22, Rarity.COMMON, mage.cards.p.ParhelionPatrol.class));
|
||||
cards.add(new SetCardInfo("Passwall Adept", 50, Rarity.COMMON, mage.cards.p.PasswallAdept.class));
|
||||
cards.add(new SetCardInfo("Pause for Reflection", 140, Rarity.COMMON, mage.cards.p.PauseForReflection.class));
|
||||
cards.add(new SetCardInfo("Piston-Fist Cyclops", 217, Rarity.COMMON, mage.cards.p.PistonFistCyclops.class));
|
||||
cards.add(new SetCardInfo("Pitiless Gorgon", 218, Rarity.COMMON, mage.cards.p.PitilessGorgon.class));
|
||||
cards.add(new SetCardInfo("Plains", 260, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Portcullis Vine", 142, Rarity.COMMON, mage.cards.p.PortcullisVine.class));
|
||||
cards.add(new SetCardInfo("Prey Upon", 143, Rarity.COMMON, mage.cards.p.PreyUpon.class));
|
||||
cards.add(new SetCardInfo("Price of Fame", 83, Rarity.UNCOMMON, mage.cards.p.PriceOfFame.class));
|
||||
cards.add(new SetCardInfo("Quasiduplicate", 51, Rarity.RARE, mage.cards.q.Quasiduplicate.class));
|
||||
cards.add(new SetCardInfo("Radical Idea", 52, Rarity.COMMON, mage.cards.r.RadicalIdea.class));
|
||||
|
|
@ -157,29 +202,37 @@ public final class GuildsOfRavnica extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Ral, Izzet Viceroy", 195, Rarity.MYTHIC, mage.cards.r.RalIzzetViceroy.class));
|
||||
cards.add(new SetCardInfo("Response // Resurgence", 229, Rarity.RARE, mage.cards.r.ResponseResurgence.class));
|
||||
cards.add(new SetCardInfo("Rhizome Lurcher", 196, Rarity.COMMON, mage.cards.r.RhizomeLurcher.class));
|
||||
cards.add(new SetCardInfo("Righteous Blow", 23, Rarity.COMMON, mage.cards.r.RighteousBlow.class));
|
||||
cards.add(new SetCardInfo("Risk Factor", 113, Rarity.RARE, mage.cards.r.RiskFactor.class));
|
||||
cards.add(new SetCardInfo("Ritual of Soot", 84, Rarity.RARE, mage.cards.r.RitualOfSoot.class));
|
||||
cards.add(new SetCardInfo("Roc Charger", 24, Rarity.UNCOMMON, mage.cards.r.RocCharger.class));
|
||||
cards.add(new SetCardInfo("Rosemane Centaur", 197, Rarity.COMMON, mage.cards.r.RosemaneCentaur.class));
|
||||
cards.add(new SetCardInfo("Rubblebelt Boar", 114, Rarity.COMMON, mage.cards.r.RubblebeltBoar.class));
|
||||
cards.add(new SetCardInfo("Runaway Steam-Kin", 115, Rarity.RARE, mage.cards.r.RunawaySteamKin.class));
|
||||
cards.add(new SetCardInfo("Sacred Foundry", 254, Rarity.RARE, mage.cards.s.SacredFoundry.class));
|
||||
cards.add(new SetCardInfo("Selesnya Guildgate", 255, Rarity.COMMON, mage.cards.s.SelesnyaGuildgate.class));
|
||||
cards.add(new SetCardInfo("Selesnya Guildgate", 256, Rarity.COMMON, mage.cards.s.SelesnyaGuildgate.class));
|
||||
cards.add(new SetCardInfo("Selesnya Locket", 240, Rarity.COMMON, mage.cards.s.SelesnyaLocket.class));
|
||||
cards.add(new SetCardInfo("Siege Wurm", 144, Rarity.COMMON, mage.cards.s.SiegeWurm.class));
|
||||
cards.add(new SetCardInfo("Silent Dart", 241, Rarity.UNCOMMON, mage.cards.s.SilentDart.class));
|
||||
cards.add(new SetCardInfo("Sinister Sabotage", 54, Rarity.UNCOMMON, mage.cards.s.SinisterSabotage.class));
|
||||
cards.add(new SetCardInfo("Skyknight Legionnaire", 198, Rarity.COMMON, mage.cards.s.SkyknightLegionnaire.class));
|
||||
cards.add(new SetCardInfo("Sonic Assault", 199, Rarity.COMMON, mage.cards.s.SonicAssault.class));
|
||||
cards.add(new SetCardInfo("Spinal Centipede", 86, Rarity.COMMON, mage.cards.s.SpinalCentipede.class));
|
||||
cards.add(new SetCardInfo("Sprouting Renewal", 145, Rarity.UNCOMMON, mage.cards.s.SproutingRenewal.class));
|
||||
cards.add(new SetCardInfo("Status // Statue", 230, Rarity.UNCOMMON, mage.cards.s.StatusStatue.class));
|
||||
cards.add(new SetCardInfo("Steam Vents", 257, Rarity.RARE, mage.cards.s.SteamVents.class));
|
||||
cards.add(new SetCardInfo("Sumala Woodshaper", 200, Rarity.COMMON, mage.cards.s.SumalaWoodshaper.class));
|
||||
cards.add(new SetCardInfo("Sunhome Stalwart", 26, Rarity.UNCOMMON, mage.cards.s.SunhomeStalwart.class));
|
||||
cards.add(new SetCardInfo("Sure Strike", 118, Rarity.COMMON, mage.cards.s.SureStrike.class));
|
||||
cards.add(new SetCardInfo("Swamp", 262, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS));
|
||||
cards.add(new SetCardInfo("Swarm Guildmage", 201, Rarity.UNCOMMON, mage.cards.s.SwarmGuildmage.class));
|
||||
cards.add(new SetCardInfo("Swathcutter Giant", 202, Rarity.UNCOMMON, mage.cards.s.SwathcutterGiant.class));
|
||||
cards.add(new SetCardInfo("Swiftblade Vindicator", 203, Rarity.RARE, mage.cards.s.SwiftbladeVindicator.class));
|
||||
cards.add(new SetCardInfo("Sworn Companions", 27, Rarity.COMMON, mage.cards.s.SwornCompanions.class));
|
||||
cards.add(new SetCardInfo("Tajic, Legion's Edge", 204, Rarity.RARE, mage.cards.t.TajicLegionsEdge.class));
|
||||
cards.add(new SetCardInfo("Temple Garden", 258, Rarity.RARE, mage.cards.t.TempleGarden.class));
|
||||
cards.add(new SetCardInfo("Tenth District Guard", 29, Rarity.COMMON, mage.cards.t.TenthDistrictGuard.class));
|
||||
cards.add(new SetCardInfo("Thought Erasure", 206, Rarity.UNCOMMON, mage.cards.t.ThoughtErasure.class));
|
||||
cards.add(new SetCardInfo("Thoughtbound Phantasm", 55, Rarity.UNCOMMON, mage.cards.t.ThoughtboundPhantasm.class));
|
||||
cards.add(new SetCardInfo("Trostani Discordant", 208, Rarity.MYTHIC, mage.cards.t.TrostaniDiscordant.class));
|
||||
|
|
@ -187,11 +240,16 @@ public final class GuildsOfRavnica extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Undercity Uprising", 210, Rarity.COMMON, mage.cards.u.UndercityUprising.class));
|
||||
cards.add(new SetCardInfo("Underrealm Lich", 211, Rarity.MYTHIC, mage.cards.u.UnderrealmLich.class));
|
||||
cards.add(new SetCardInfo("Unexplained Disappearance", 56, Rarity.COMMON, mage.cards.u.UnexplainedDisappearance.class));
|
||||
cards.add(new SetCardInfo("Urban Utopia", 146, Rarity.COMMON, mage.cards.u.UrbanUtopia.class));
|
||||
cards.add(new SetCardInfo("Vedalken Mesmerist", 57, Rarity.COMMON, mage.cards.v.VedalkenMesmerist.class));
|
||||
cards.add(new SetCardInfo("Veiled Shade", 88, Rarity.COMMON, mage.cards.v.VeiledShade.class));
|
||||
cards.add(new SetCardInfo("Venerated Loxodon", 30, Rarity.RARE, mage.cards.v.VeneratedLoxodon.class));
|
||||
cards.add(new SetCardInfo("Vernadi Shieldmate", 219, Rarity.COMMON, mage.cards.v.VernadiShieldmate.class));
|
||||
cards.add(new SetCardInfo("Vivid Revival", 148, Rarity.RARE, mage.cards.v.VividRevival.class));
|
||||
cards.add(new SetCardInfo("Vraska's Stoneglare", 272, Rarity.RARE, mage.cards.v.VraskasStoneglare.class));
|
||||
cards.add(new SetCardInfo("Vraska, Golgari Queen", 213, Rarity.MYTHIC, mage.cards.v.VraskaGolgariQueen.class));
|
||||
cards.add(new SetCardInfo("Vraska, Regal Gorgon", 269, Rarity.MYTHIC, mage.cards.v.VraskaRegalGorgon.class));
|
||||
cards.add(new SetCardInfo("Wall of Mist", 58, Rarity.COMMON, mage.cards.w.WallOfMist.class));
|
||||
cards.add(new SetCardInfo("Wand of Vertebrae", 242, Rarity.UNCOMMON, mage.cards.w.WandOfVertebrae.class));
|
||||
cards.add(new SetCardInfo("Wary Okapi", 149, Rarity.COMMON, mage.cards.w.WaryOkapi.class));
|
||||
cards.add(new SetCardInfo("Watcher in the Mist", 59, Rarity.COMMON, mage.cards.w.WatcherInTheMist.class));
|
||||
|
|
@ -199,6 +257,8 @@ public final class GuildsOfRavnica extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Wee Dragonauts", 214, Rarity.UNCOMMON, mage.cards.w.WeeDragonauts.class));
|
||||
cards.add(new SetCardInfo("Whisper Agent", 220, Rarity.COMMON, mage.cards.w.WhisperAgent.class));
|
||||
cards.add(new SetCardInfo("Whispering Snitch", 90, Rarity.UNCOMMON, mage.cards.w.WhisperingSnitch.class));
|
||||
cards.add(new SetCardInfo("Wild Ceratok", 150, Rarity.COMMON, mage.cards.w.WildCeratok.class));
|
||||
cards.add(new SetCardInfo("Wishcoin Crab", 60, Rarity.COMMON, mage.cards.w.WishcoinCrab.class));
|
||||
cards.add(new SetCardInfo("Wojek Bodyguard", 120, Rarity.COMMON, mage.cards.w.WojekBodyguard.class));
|
||||
cards.add(new SetCardInfo("Worldsoul Colossus", 215, Rarity.UNCOMMON, mage.cards.w.WorldsoulColossus.class));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue