Tokens and command objects reworked (part 2 of 2, tokens/emblems)

This commit is contained in:
Oleg Agafonov 2023-05-08 02:18:42 +04:00
parent 5f55c7c667
commit f2d93f224f
591 changed files with 1368 additions and 4425 deletions

View file

@ -36,7 +36,6 @@ public final class ElspethKnightErrant extends CardImpl {
// +1: Create a 1/1 white Soldier creature token.
Token token = new SoldierToken();
token.setOriginalExpansionSetCode("ALA"); // to get the right image
this.addAbility(new LoyaltyAbility(new CreateTokenEffect(token), 1));
// +1: Target creature gets +3/+3 and gains flying until end of turn.

View file

@ -51,13 +51,11 @@ class EnsouledScimitarToken extends TokenImpl {
public EnsouledScimitarToken() {
super("Pincher", "1/5 Spirit artifact creature with flying");
setOriginalExpansionSetCode("5ND");
cardType.add(CardType.CREATURE);
subtype.add(SubType.SPIRIT);
power = new MageInt(1);
toughness = new MageInt(5);
this.addAbility(FlyingAbility.getInstance());
}
public EnsouledScimitarToken(final EnsouledScimitarToken token) {

View file

@ -6,7 +6,7 @@ package mage.designations;
public class CitysBlessing extends Designation {
public CitysBlessing() {
super(DesignationType.CITYS_BLESSING, "RIX");
super(DesignationType.CITYS_BLESSING);
}
private CitysBlessing(final CitysBlessing card) {

View file

@ -2,6 +2,7 @@ package mage.designations;
import mage.MageInt;
import mage.MageObject;
import mage.MageObjectImpl;
import mage.ObjectColor;
import mage.abilities.Abilities;
import mage.abilities.AbilitiesImpl;
@ -23,59 +24,44 @@ import java.util.*;
/**
* @author LevelX2
*/
public abstract class Designation implements MageObject {
public abstract class Designation extends MageObjectImpl {
private static final List<CardType> emptyList = Collections.unmodifiableList(new ArrayList<>());
private static final ObjectColor emptyColor = new ObjectColor();
private static final ManaCostsImpl emptyCost = new ManaCostsImpl<>();
private String name;
private final DesignationType designationType;
private UUID id;
private final FrameStyle frameStyle;
private final boolean unique; // can a designation be added multiple times (false) or only once to an object (true)
private boolean copy;
private MageObject copyFrom; // copied card INFO (used to call original adjusters)
private Abilities<Ability> abilites = new AbilitiesImpl<>();
private String expansionSetCodeForImage;
private final boolean unique; // can a designation be added multiple times (false) or only once to an object (true)
public Designation(DesignationType designationType, String expansionSetCode) {
this(designationType, expansionSetCode, true);
public Designation(DesignationType designationType) {
this(designationType, true);
}
public Designation(DesignationType designationType, String expansionSetCode, boolean unique) {
this.name = designationType.toString();
public Designation(DesignationType designationType, boolean unique) {
super(UUID.randomUUID());
this.designationType = designationType;
this.id = UUID.randomUUID();
this.frameStyle = FrameStyle.M15_NORMAL;
this.expansionSetCodeForImage = expansionSetCode;
this.unique = unique;
this.name = designationType.toString();
this.frameStyle = FrameStyle.M15_NORMAL;
}
public Designation(final Designation designation) {
this.name = designation.name;
super(designation);
this.designationType = designation.designationType;
this.id = designation.id;
this.unique = designation.unique;
this.frameStyle = designation.frameStyle;
this.copy = designation.copy;
this.copyFrom = (designation.copyFrom != null ? designation.copyFrom.copy() : null);
this.abilites = designation.abilites.copy();
this.expansionSetCodeForImage = designation.expansionSetCodeForImage;
this.unique = designation.unique;
}
@Override
public abstract Designation copy();
@Override
public FrameStyle getFrameStyle() {
return frameStyle;
}
public void assignNewId() {
this.id = UUID.randomUUID();
}
@Override
public void setCopy(boolean isCopy, MageObject copyFrom) {
this.copy = isCopy;
@ -92,64 +78,21 @@ public abstract class Designation implements MageObject {
return this.copyFrom;
}
@Override
public String getName() {
return name;
}
@Override
public String getIdName() {
return getName() + " [" + getId().toString().substring(0, 3) + ']';
}
@Override
public String getImageName() {
return this.name;
}
@Override
public void setName(String name) {
this.name = name;
}
public void addAbility(Ability ability) {
ability.setSourceId(id);
ability.setSourceId(this.objectId);
abilites.add(ability);
abilites.addAll(ability.getSubAbilities());
}
@Override
public Abilities<Ability> getAbilities() {
return abilites;
}
@Override
public ObjectColor getFrameColor(Game game) {
return emptyColor;
}
@Override
public UUID getId() {
return this.id;
}
public DesignationType getDesignationType() {
return designationType;
}
public void setExpansionSetCodeForImage(String expansionSetCodeForImage) {
this.expansionSetCodeForImage = expansionSetCodeForImage;
}
public String getExpansionSetCodeForImage() {
return expansionSetCodeForImage;
}
@Override
public String getLogName() {
return GameLog.getColoredObjectIdName(this);
}
@Override
public List<CardType> getCardType(Game game) {
return emptyList;
@ -210,24 +153,6 @@ public abstract class Designation implements MageObject {
return MageInt.EmptyMageInt;
}
@Override
public int getStartingLoyalty() {
return 0;
}
@Override
public void setStartingLoyalty(int startingLoyalty) {
}
@Override
public int getStartingDefense() {
return 0;
}
@Override
public void setStartingDefense(int startingDefense) {
}
@Override
public int getZoneChangeCounter(Game game) {
return 1; // Emblems can't move zones until now so return always 1
@ -247,14 +172,6 @@ public abstract class Designation implements MageObject {
public void removePTCDA() {
}
/**
* @param game
* @param controllerId
*/
public void start(Game game, UUID controllerId) {
}
@Override
public boolean isAllCreatureTypes(Game game) {
return false;

View file

@ -21,7 +21,7 @@ import java.util.UUID;
public class Initiative extends Designation {
public Initiative() {
super(DesignationType.THE_INITIATIVE, "CLB");
super(DesignationType.THE_INITIATIVE);
// Whenever one or more creatures a player controls deals combat damage to you, that player takes the initiative.
this.addAbility(new InitiativeDamageTriggeredAbility());

View file

@ -19,7 +19,7 @@ import mage.target.targetpointer.FixedTarget;
public class Monarch extends Designation {
public Monarch() {
super(DesignationType.THE_MONARCH, "CN2");
super(DesignationType.THE_MONARCH);
addAbility(new MonarchDrawTriggeredAbility());
addAbility(new MonarchDealsCombatDamageToAPlayerTriggeredAbility());
}

View file

@ -29,7 +29,7 @@ import mage.target.common.TargetCreaturePermanent;
public class DungeonOfTheMadMageDungeon extends Dungeon {
public DungeonOfTheMadMageDungeon() {
super("Dungeon of the Mad Mage", "AFR");
super("Dungeon of the Mad Mage");
// (1) Yawning Portal You gain 1 life. ( 2)
DungeonRoom yawningPortal = new DungeonRoom("Yawning Portal", new GainLifeEffect(1));

View file

@ -21,7 +21,7 @@ import mage.target.common.TargetCreaturePermanent;
public class LostMineOfPhandelverDungeon extends Dungeon {
public LostMineOfPhandelverDungeon() {
super("Lost Mine of Phandelver", "AFR");
super("Lost Mine of Phandelver");
// (1) Cave Entrance Scry 1. ( 2a or 2b)
DungeonRoom caveEntrance = new DungeonRoom(
"Cave Entrance", new ScryEffect(1, false)

View file

@ -42,7 +42,7 @@ public final class TombOfAnnihilationDungeon extends Dungeon {
}
public TombOfAnnihilationDungeon() {
super("Tomb of Annihilation", "AFR");
super("Tomb of Annihilation");
// (1) Trapped Entry Each player loses 1 life. ( 2a or 2b)
DungeonRoom trappedEntry = new DungeonRoom("Trapped Entry", new LoseLifeAllPlayersEffect(1));

View file

@ -38,7 +38,7 @@ import mage.util.RandomUtil;
public class UndercityDungeon extends Dungeon {
public UndercityDungeon() {
super("Undercity", "CLB");
super("Undercity");
// Secret Entrance Search your library for a basic land card,
// reveal it,

View file

@ -8,18 +8,25 @@ import mage.game.command.Emblem;
import mage.game.permanent.token.CatToken2;
/**
*
* @author TheElk801
*/
public final class AjaniAdversaryOfTyrantsEmblem extends Emblem {
// 7: You get an emblem with "At the beginning of your end step, create three 1/1 white Cat creature tokens with lifelink."
public AjaniAdversaryOfTyrantsEmblem() {
this.setName("Emblem Ajani");
this.setExpansionSetCodeForImage("M19");
super("Emblem Ajani");
this.getAbilities().add(new BeginningOfEndStepTriggeredAbility(
Zone.COMMAND, new CreateTokenEffect(new CatToken2(), 3),
TargetController.YOU, null, false
));
}
private AjaniAdversaryOfTyrantsEmblem(final AjaniAdversaryOfTyrantsEmblem card) {
super(card);
}
@Override
public AjaniAdversaryOfTyrantsEmblem copy() {
return new AjaniAdversaryOfTyrantsEmblem(this);
}
}

View file

@ -20,10 +20,18 @@ public final class AjaniSleeperAgentEmblem extends Emblem {
// You get an emblem with "Whenever you cast a creature or planeswalker spell, target opponent gets two poison counters."
public AjaniSleeperAgentEmblem() {
this.setName("Emblem Ajani");
this.setExpansionSetCodeForImage("DMU");
super("Emblem Ajani");
Ability ability = new SpellCastControllerTriggeredAbility(Zone.COMMAND, new AddPoisonCounterTargetEffect(2), filter, false, false);
ability.addTarget(new TargetOpponent());
this.getAbilities().add(ability);
}
private AjaniSleeperAgentEmblem(final AjaniSleeperAgentEmblem card) {
super(card);
}
@Override
public AjaniSleeperAgentEmblem copy() {
return new AjaniSleeperAgentEmblem(this);
}
}

View file

@ -1,4 +1,3 @@
package mage.game.command.emblems;
import mage.abilities.Ability;
@ -12,15 +11,22 @@ import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
/**
*
* @author spjspj
*/
public final class AjaniSteadfastEmblem extends Emblem {
public AjaniSteadfastEmblem() {
setName("Emblem Ajani");
super("Emblem Ajani");
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new AjaniSteadfastPreventEffect()));
this.setExpansionSetCodeForImage("M15");
}
private AjaniSteadfastEmblem(final AjaniSteadfastEmblem card) {
super(card);
}
@Override
public AjaniSteadfastEmblem copy() {
return new AjaniSteadfastEmblem(this);
}
}

View file

@ -1,4 +1,3 @@
package mage.game.command.emblems;
import mage.abilities.Ability;
@ -18,14 +17,13 @@ import mage.game.command.Emblem;
import mage.target.common.TargetAnyTarget;
/**
*
* @author spjspj
*/
public final class ArlinnEmbracedByTheMoonEmblem extends Emblem {
// "Creatures you control have haste and '{T}: This creature deals damage equal to its power to any target.'"
public ArlinnEmbracedByTheMoonEmblem() {
this.setName("Emblem Arlinn");
super("Emblem Arlinn");
FilterPermanent filter = new FilterControlledCreaturePermanent("Creatures");
GainAbilityControlledEffect effect = new GainAbilityControlledEffect(HasteAbility.getInstance(), Duration.EndOfGame, filter);
effect.setText("Creatures you control have haste");
@ -38,7 +36,14 @@ public final class ArlinnEmbracedByTheMoonEmblem extends Emblem {
effect.setText("and '{T}: This creature deals damage equal to its power to any target");
ability.addEffect(effect);
this.getAbilities().add(ability);
}
this.setExpansionSetCodeForImage("SOI");
private ArlinnEmbracedByTheMoonEmblem(final ArlinnEmbracedByTheMoonEmblem card) {
super(card);
}
@Override
public ArlinnEmbracedByTheMoonEmblem copy() {
return new ArlinnEmbracedByTheMoonEmblem(this);
}
}

View file

@ -1,23 +1,28 @@
package mage.game.command.emblems;
import mage.abilities.common.LeavesBattlefieldAllTriggeredAbility;
import mage.abilities.effects.common.discard.DiscardControllerEffect;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.permanent.TokenPredicate;
import mage.game.command.Emblem;
/**
*
* @author spjspj
*/
public final class AurraSingBaneOfJediEmblem extends Emblem {
// Whenever a nontoken creature you control leaves the battlefied, discard a card.
public AurraSingBaneOfJediEmblem() {
this.setName("Emblem Aurra Sing, Bane of Jedi");
super("Emblem Aurra Sing, Bane of Jedi");
getAbilities().add(new LeavesBattlefieldAllTriggeredAbility(Zone.COMMAND, new DiscardControllerEffect(1), StaticFilters.FILTER_CONTROLLED_CREATURE_NON_TOKEN, false));
}
private AurraSingBaneOfJediEmblem(final AurraSingBaneOfJediEmblem card) {
super(card);
}
@Override
public AurraSingBaneOfJediEmblem copy() {
return new AurraSingBaneOfJediEmblem(this);
}
}

View file

@ -17,17 +17,24 @@ public final class BasriKetEmblem extends Emblem {
*/
public BasriKetEmblem() {
setName("Emblem Basri");
super("Emblem Basri");
Ability ability = new BeginningOfCombatTriggeredAbility(
Zone.COMMAND,
new CreateTokenEffect(new SoldierToken()),
TargetController.YOU, false, false);
ability.addEffect(
new AddCountersAllEffect(CounterType.P1P1.createInstance(), StaticFilters.FILTER_PERMANENT_CREATURE_CONTROLLED)
.setText(", then put a +1/+1 counter on each creature you control")
.setText(", then put a +1/+1 counter on each creature you control")
);
this.getAbilities().add(ability);
}
this.setExpansionSetCodeForImage("M21");
private BasriKetEmblem(final BasriKetEmblem card) {
super(card);
}
@Override
public BasriKetEmblem copy() {
return new BasriKetEmblem(this);
}
}

View file

@ -17,11 +17,19 @@ public final class ChandraAwakenedInfernoEmblem extends Emblem {
*/
public ChandraAwakenedInfernoEmblem() {
setName("Emblem Chandra");
setExpansionSetCodeForImage("M20");
super("Emblem Chandra");
this.getAbilities().add(new BeginningOfUpkeepTriggeredAbility(
Zone.COMMAND, new DamageControllerEffect(1, "this emblem"),
TargetController.YOU, false, true
));
}
private ChandraAwakenedInfernoEmblem(final ChandraAwakenedInfernoEmblem card) {
super(card);
}
@Override
public ChandraAwakenedInfernoEmblem copy() {
return new ChandraAwakenedInfernoEmblem(this);
}
}

View file

@ -17,7 +17,6 @@ import mage.target.common.TargetAnyTarget;
import mage.watchers.common.ManaPaidSourceWatcher;
/**
*
* @author weirddan455
*/
public class ChandraDressedToKillEmblem extends Emblem {
@ -30,12 +29,19 @@ public class ChandraDressedToKillEmblem extends Emblem {
// Whenever you cast a red spell, this emblem deals X damage to any target, where X is the amount of mana spent to cast that spell.
public ChandraDressedToKillEmblem() {
this.setName("Emblem Chandra");
super("Emblem Chandra");
Ability ability = new SpellCastControllerTriggeredAbility(Zone.COMMAND, new ChandraDressedToKillEmblemEffect(), filter, false, true);
ability.addTarget(new TargetAnyTarget());
this.getAbilities().add(ability);
}
this.setExpansionSetCodeForImage("VOW");
private ChandraDressedToKillEmblem(final ChandraDressedToKillEmblem card) {
super(card);
}
@Override
public ChandraDressedToKillEmblem copy() {
return new ChandraDressedToKillEmblem(this);
}
}

View file

@ -1,4 +1,3 @@
package mage.game.command.emblems;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
@ -9,7 +8,6 @@ import mage.constants.Zone;
import mage.game.command.Emblem;
/**
*
* @author spjspj
*/
public final class ChandraRoaringFlameEmblem extends Emblem {
@ -20,10 +18,18 @@ public final class ChandraRoaringFlameEmblem extends Emblem {
*/
public ChandraRoaringFlameEmblem() {
setName("Emblem Chandra");
setExpansionSetCodeForImage("ORI");
super("Emblem Chandra");
Effect effect = new DamageTargetEffect(3);
effect.setText("this emblem deals 3 damage to you");
this.getAbilities().add(new BeginningOfUpkeepTriggeredAbility(Zone.COMMAND, effect, TargetController.YOU, false, true));
}
private ChandraRoaringFlameEmblem(final ChandraRoaringFlameEmblem card) {
super(card);
}
@Override
public ChandraRoaringFlameEmblem copy() {
return new ChandraRoaringFlameEmblem(this);
}
}

View file

@ -1,4 +1,3 @@
package mage.game.command.emblems;
import mage.abilities.Ability;
@ -6,26 +5,31 @@ import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.constants.Zone;
import mage.filter.FilterSpell;
import mage.filter.StaticFilters;
import mage.game.command.Emblem;
import mage.target.common.TargetAnyTarget;
/**
*
* @author spjspj
*/
public final class ChandraTorchOfDefianceEmblem extends Emblem {
// You get an emblem with "Whenever you cast a spell, this emblem deals 5 damage to any target."
public ChandraTorchOfDefianceEmblem() {
this.setName("Emblem Chandra");
super("Emblem Chandra");
Effect effect = new DamageTargetEffect(5);
effect.setText("this emblem deals 5 damage to any target");
Ability ability = new SpellCastControllerTriggeredAbility(Zone.COMMAND, effect, StaticFilters.FILTER_SPELL_A, false, false);
ability.addTarget(new TargetAnyTarget());
getAbilities().add(ability);
}
this.setExpansionSetCodeForImage("KLD");
private ChandraTorchOfDefianceEmblem(final ChandraTorchOfDefianceEmblem card) {
super(card);
}
@Override
public ChandraTorchOfDefianceEmblem copy() {
return new ChandraTorchOfDefianceEmblem(this);
}
}

View file

@ -1,42 +1,42 @@
package mage.game.command.emblems;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.Mode;
import mage.abilities.SpellAbility;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.effects.ContinuousEffectImpl;
import mage.abilities.effects.Effect;
import mage.constants.Duration;
import mage.constants.Layer;
import mage.constants.Outcome;
import mage.constants.SubLayer;
import mage.constants.Zone;
import mage.constants.*;
import mage.game.Game;
import mage.game.command.Emblem;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.game.permanent.Permanent;
import mage.game.stack.Spell;
import mage.players.Player;
import mage.target.Target;
import mage.target.targetpointer.FixedTargets;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/**
*
* @author spjspj
*/
public final class DackFaydenEmblem extends Emblem {
public DackFaydenEmblem() {
this.setName("Emblem Dack");
super("Emblem Dack");
this.getAbilities().add(new DackFaydenEmblemTriggeredAbility());
}
availableImageSetCodes = Arrays.asList("CNS", "EMA", "MED");
private DackFaydenEmblem(final DackFaydenEmblem card) {
super(card);
}
@Override
public DackFaydenEmblem copy() {
return new DackFaydenEmblem(this);
}
}

View file

@ -1,4 +1,3 @@
package mage.game.command.emblems;
import mage.abilities.Ability;
@ -17,21 +16,25 @@ import mage.game.events.GameEvent;
import mage.game.events.ZoneChangeEvent;
import mage.target.targetpointer.FixedTarget;
import java.util.Arrays;
/**
*
* @author spjspj
*/
public final class DarettiScrapSavantEmblem extends Emblem {
// You get an emblem with "Whenever an artifact is put into your graveyard from the battlefield, return that card to the battlefield at the beginning of the next end step."
public DarettiScrapSavantEmblem() {
setName("Emblem Daretti");
availableImageSetCodes = Arrays.asList("C14", "C16", "CM2");
super("Emblem Daretti");
this.getAbilities().add(new DarettiScrapSavantTriggeredAbility());
}
private DarettiScrapSavantEmblem(final DarettiScrapSavantEmblem card) {
super(card);
}
@Override
public DarettiScrapSavantEmblem copy() {
return new DarettiScrapSavantEmblem(this);
}
}
class DarettiScrapSavantTriggeredAbility extends TriggeredAbilityImpl {

View file

@ -7,8 +7,6 @@ import mage.constants.Zone;
import mage.game.command.Emblem;
import mage.game.permanent.token.RedGreenBeastToken;
import java.util.Arrays;
/**
* @author TheElk801
*/
@ -16,11 +14,19 @@ public final class DomriChaosBringerEmblem extends Emblem {
// -8: You get an emblem with "At the beginning of each end step, create a 4/4 red and green Beast creature token with trample."
public DomriChaosBringerEmblem() {
this.setName("Emblem Domri");
availableImageSetCodes = Arrays.asList("MED", "RNA");
super("Emblem Domri");
this.getAbilities().add(new BeginningOfEndStepTriggeredAbility(
Zone.COMMAND, new CreateTokenEffect(new RedGreenBeastToken()),
TargetController.ANY, null, false
));
}
private DomriChaosBringerEmblem(final DomriChaosBringerEmblem card) {
super(card);
}
@Override
public DomriChaosBringerEmblem copy() {
return new DomriChaosBringerEmblem(this);
}
}

View file

@ -1,4 +1,3 @@
package mage.game.command.emblems;
import mage.abilities.CompoundAbility;
@ -14,17 +13,14 @@ import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.game.command.Emblem;
import java.util.Arrays;
/**
*
* @author spjspj
*/
public final class DomriRadeEmblem extends Emblem {
// "Creatures you control have double strike, trample, hexproof and haste."
public DomriRadeEmblem() {
this.setName("Emblem Domri");
super("Emblem Domri");
FilterPermanent filter = new FilterControlledCreaturePermanent("Creatures");
CompoundAbility compoundAbilities = new CompoundAbility(
@ -34,7 +30,14 @@ public final class DomriRadeEmblem extends Emblem {
HasteAbility.getInstance()
);
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new GainAbilityControlledEffect(compoundAbilities, Duration.EndOfGame, filter)));
}
availableImageSetCodes = Arrays.asList("GTC", "MM3");
private DomriRadeEmblem(final DomriRadeEmblem card) {
super(card);
}
@Override
public DomriRadeEmblem copy() {
return new DomriRadeEmblem(this);
}
}

View file

@ -1,4 +1,3 @@
package mage.game.command.emblems;
import mage.abilities.Ability;
@ -12,17 +11,23 @@ import mage.game.command.Emblem;
import mage.players.Player;
/**
*
* @author spjspj
*/
public final class DovinBaanEmblem extends Emblem {
public DovinBaanEmblem() {
this.setName("Emblem Dovin");
super("Emblem Dovin");
Ability ability = new SimpleStaticAbility(Zone.COMMAND, new DovinBaanCantUntapEffect());
this.getAbilities().add(ability);
}
this.setExpansionSetCodeForImage("KLD");
private DovinBaanEmblem(final DovinBaanEmblem card) {
super(card);
}
@Override
public DovinBaanEmblem copy() {
return new DovinBaanEmblem(this);
}
}

View file

@ -24,8 +24,7 @@ public final class EllywickTumblestrumEmblem extends Emblem {
// 7: You get an emblem with "Creatures you control have trample and haste and get +2/+2 for each differently named dungeon you've completed."
public EllywickTumblestrumEmblem() {
this.setName("Emblem Ellywick");
this.setExpansionSetCodeForImage("AFR");
super("Emblem Ellywick");
Ability ability = new SimpleStaticAbility(new GainAbilityControlledEffect(
TrampleAbility.getInstance(), Duration.EndOfGame,
StaticFilters.FILTER_PERMANENT_CREATURES
@ -41,6 +40,15 @@ public final class EllywickTumblestrumEmblem extends Emblem {
).setText("and get +2/+2 for each differently named dungeon you've completed"));
this.getAbilities().add(ability.addHint(EllywickTumblestrumEmblemHint.instance));
}
private EllywickTumblestrumEmblem(final EllywickTumblestrumEmblem card) {
super(card);
}
@Override
public EllywickTumblestrumEmblem copy() {
return new EllywickTumblestrumEmblem(this);
}
}
enum EllywickTumblestrumEmblemValue implements DynamicValue {

View file

@ -1,4 +1,3 @@
package mage.game.command.emblems;
import mage.abilities.common.SimpleStaticAbility;
@ -12,15 +11,13 @@ import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.Predicates;
import mage.game.command.Emblem;
import java.util.Arrays;
/**
* @author spjspj
*/
public final class ElspethKnightErrantEmblem extends Emblem {
public ElspethKnightErrantEmblem() {
this.setName("Emblem Elspeth");
super("Emblem Elspeth");
FilterControlledPermanent filter = new FilterControlledPermanent("Artifacts, creatures, enchantments, and lands you control");
filter.add(Predicates.or(
CardType.ARTIFACT.getPredicate(),
@ -30,6 +27,14 @@ public final class ElspethKnightErrantEmblem extends Emblem {
Effect effect = new GainAbilityAllEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield, filter, false);
effect.setText("Artifacts, creatures, enchantments, and lands you control have indestructible");
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, effect));
availableImageSetCodes = Arrays.asList("MMA", "MD1", "MED");
}
private ElspethKnightErrantEmblem(final ElspethKnightErrantEmblem card) {
super(card);
}
@Override
public ElspethKnightErrantEmblem copy() {
return new ElspethKnightErrantEmblem(this);
}
}

View file

@ -10,19 +10,14 @@ import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.game.command.Emblem;
import java.util.Arrays;
/**
*
* @author spjspj
*/
public final class ElspethSunsChampionEmblem extends Emblem {
// -7: You get an emblem with "Creatures you control get +2/+2 and have flying."
public ElspethSunsChampionEmblem() {
this.setName("Emblem Elspeth");
availableImageSetCodes = Arrays.asList("THS", "MOC");
super("Emblem Elspeth");
Ability ability = new SimpleStaticAbility(
Zone.COMMAND,
new BoostControlledEffect(
@ -38,4 +33,13 @@ public final class ElspethSunsChampionEmblem extends Emblem {
).setText("and have flying"));
this.getAbilities().add(ability);
}
private ElspethSunsChampionEmblem(final ElspethSunsChampionEmblem card) {
super(card);
}
@Override
public ElspethSunsChampionEmblem copy() {
return new ElspethSunsChampionEmblem(this);
}
}

View file

@ -11,8 +11,6 @@ import mage.constants.SetTargetPointer;
import mage.constants.Zone;
import mage.game.command.Emblem;
import java.util.Arrays;
/**
* @author spjspj
*/
@ -24,7 +22,7 @@ public final class GarrukApexPredatorEmblem extends Emblem {
*/
public GarrukApexPredatorEmblem() {
setName("Emblem Garruk");
super("Emblem Garruk");
Effect effect = new BoostTargetEffect(5, 5, Duration.EndOfTurn);
effect.setText("it gets +5/+5");
@ -32,7 +30,14 @@ public final class GarrukApexPredatorEmblem extends Emblem {
effect = new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn);
ability.addEffect(effect.concatBy("and"));
this.getAbilities().add(ability);
}
availableImageSetCodes = Arrays.asList("M15", "MED");
private GarrukApexPredatorEmblem(final GarrukApexPredatorEmblem card) {
super(card);
}
@Override
public GarrukApexPredatorEmblem copy() {
return new GarrukApexPredatorEmblem(this);
}
}

View file

@ -1,4 +1,3 @@
package mage.game.command.emblems;
import mage.abilities.Ability;
@ -13,7 +12,6 @@ import mage.game.command.Emblem;
import mage.target.common.TargetCardInLibrary;
/**
*
* @author spjspj
*/
public final class GarrukCallerOfBeastsEmblem extends Emblem {
@ -24,11 +22,18 @@ public final class GarrukCallerOfBeastsEmblem extends Emblem {
* library."
*/
public GarrukCallerOfBeastsEmblem() {
this.setName("Emblem Garruk");
super("Emblem Garruk");
Effect effect = new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(new FilterCreatureCard("creature card")), false, true, Outcome.PutCreatureInPlay);
Ability ability = new SpellCastControllerTriggeredAbility(Zone.COMMAND, effect, StaticFilters.FILTER_SPELL_A_CREATURE, true, false);
this.getAbilities().add(ability);
}
this.setExpansionSetCodeForImage("M14");
private GarrukCallerOfBeastsEmblem(final GarrukCallerOfBeastsEmblem card) {
super(card);
}
@Override
public GarrukCallerOfBeastsEmblem copy() {
return new GarrukCallerOfBeastsEmblem(this);
}
}

View file

@ -17,8 +17,7 @@ public final class GarrukCursedHuntsmanEmblem extends Emblem {
// -6: You get an emblem with "Creatures you control get +3/+3 and have trample."
public GarrukCursedHuntsmanEmblem() {
this.setName("Emblem Garruk");
this.setExpansionSetCodeForImage("ELD");
super("Emblem Garruk");
Ability ability = new SimpleStaticAbility(
Zone.COMMAND,
new BoostControlledEffect(
@ -34,4 +33,13 @@ public final class GarrukCursedHuntsmanEmblem extends Emblem {
).setText("and have trample"));
this.getAbilities().add(ability);
}
private GarrukCursedHuntsmanEmblem(final GarrukCursedHuntsmanEmblem card) {
super(card);
}
@Override
public GarrukCursedHuntsmanEmblem copy() {
return new GarrukCursedHuntsmanEmblem(this);
}
}

View file

@ -13,11 +13,18 @@ public class GarrukUnleashedEmblem extends Emblem {
// At the beginning of your end step, you may search your library for a creature card, put it onto the battlefield, then shuffle your library.
public GarrukUnleashedEmblem() {
this.setName("Emblem Garruk");
super("Emblem Garruk");
Effect effect = new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_CREATURE), false, true, Outcome.PutCreatureInPlay)
.setText("search your library for a creature card, put it onto the battlefield, then shuffle");
.setText("search your library for a creature card, put it onto the battlefield, then shuffle");
this.getAbilities().add(new BeginningOfYourEndStepTriggeredAbility(Zone.COMMAND, effect, true));
}
this.setExpansionSetCodeForImage("M21");
private GarrukUnleashedEmblem(final GarrukUnleashedEmblem card) {
super(card);
}
@Override
public GarrukUnleashedEmblem copy() {
return new GarrukUnleashedEmblem(this);
}
}

View file

@ -1,4 +1,3 @@
package mage.game.command.emblems;
import mage.abilities.Ability;
@ -9,16 +8,23 @@ import mage.constants.Zone;
import mage.game.command.Emblem;
/**
*
* @author spjspj
*/
public final class GideonAllyOfZendikarEmblem extends Emblem {
public GideonAllyOfZendikarEmblem() {
this.setName("Emblem Gideon");
super("Emblem Gideon");
BoostControlledEffect effect = new BoostControlledEffect(1, 1, Duration.EndOfGame);
Ability ability = new SimpleStaticAbility(Zone.COMMAND, effect);
this.getAbilities().add(ability);
this.setExpansionSetCodeForImage("BFZ");
}
private GideonAllyOfZendikarEmblem(final GideonAllyOfZendikarEmblem card) {
super(card);
}
@Override
public GideonAllyOfZendikarEmblem copy() {
return new GideonAllyOfZendikarEmblem(this);
}
}

View file

@ -18,11 +18,18 @@ import mage.game.events.GameEvent;
public final class GideonOfTheTrialsEmblem extends Emblem {
public GideonOfTheTrialsEmblem() {
this.setName("Emblem Gideon");
super("Emblem Gideon");
Ability ability = new SimpleStaticAbility(Zone.COMMAND, new GideonOfTheTrialsCantLoseEffect());
this.getAbilities().add(ability);
}
this.setExpansionSetCodeForImage("AKH");
private GideonOfTheTrialsEmblem(final GideonOfTheTrialsEmblem card) {
super(card);
}
@Override
public GideonOfTheTrialsEmblem copy() {
return new GideonOfTheTrialsEmblem(this);
}
}

View file

@ -1,4 +1,3 @@
package mage.game.command.emblems;
import mage.abilities.Ability;
@ -9,18 +8,25 @@ import mage.filter.StaticFilters;
import mage.game.command.Emblem;
/**
*
* @author LevelX2
*/
public final class HuatliRadiantChampionEmblem extends Emblem {
public HuatliRadiantChampionEmblem() {
this.setName("Emblem Huatli");
super("Emblem Huatli");
// Whenever a creature enters the battlefield under your control, you may draw a card.
Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.COMMAND,
new DrawCardSourceControllerEffect(1), StaticFilters.FILTER_CONTROLLED_A_CREATURE, true);
this.getAbilities().add(ability);
this.setExpansionSetCodeForImage("RIX");
}
private HuatliRadiantChampionEmblem(final HuatliRadiantChampionEmblem card) {
super(card);
}
@Override
public HuatliRadiantChampionEmblem copy() {
return new HuatliRadiantChampionEmblem(this);
}
}

View file

@ -5,7 +5,6 @@ import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.MillCardsTargetEffect;
import mage.constants.Zone;
import mage.filter.FilterSpell;
import mage.filter.StaticFilters;
import mage.game.command.Emblem;
import mage.target.common.TargetOpponent;
@ -17,13 +16,20 @@ public final class JaceTelepathUnboundEmblem extends Emblem {
// You get an emblem with "Whenever you cast a spell, target opponent puts the top five cards of their library into their graveyard".
public JaceTelepathUnboundEmblem() {
this.setName("Emblem Jace");
super("Emblem Jace");
Effect effect = new MillCardsTargetEffect(5);
effect.setText("target opponent mills five cards");
Ability ability = new SpellCastControllerTriggeredAbility(Zone.COMMAND, effect, StaticFilters.FILTER_SPELL_A, false, false);
ability.addTarget(new TargetOpponent());
getAbilities().add(ability);
}
this.setExpansionSetCodeForImage("ORI");
private JaceTelepathUnboundEmblem(final JaceTelepathUnboundEmblem card) {
super(card);
}
@Override
public JaceTelepathUnboundEmblem copy() {
return new JaceTelepathUnboundEmblem(this);
}
}

View file

@ -25,14 +25,22 @@ public final class JaceUnravelerOfSecretsEmblem extends Emblem {
* counter that spell."
*/
public JaceUnravelerOfSecretsEmblem() {
this.setName("Emblem Jace");
setExpansionSetCodeForImage("SOI");
super("Emblem Jace");
Effect effect = new CounterTargetEffect();
effect.setText("counter that spell");
Ability ability = new JaceUnravelerOfSecretsTriggeredAbility(effect, false);
ability.addWatcher(new SpellsCastWatcher());
this.getAbilities().add(ability);
}
private JaceUnravelerOfSecretsEmblem(final JaceUnravelerOfSecretsEmblem card) {
super(card);
}
@Override
public JaceUnravelerOfSecretsEmblem copy() {
return new JaceUnravelerOfSecretsEmblem(this);
}
}
class JaceUnravelerOfSecretsTriggeredAbility extends SpellCastOpponentTriggeredAbility {

View file

@ -1,7 +1,5 @@
package mage.game.command.emblems;
import java.util.Arrays;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.AsThoughEffectImpl;
@ -19,21 +17,30 @@ import mage.game.events.ZoneChangeEvent;
import mage.players.Player;
import mage.watchers.common.CastFromGraveyardWatcher;
import java.util.UUID;
/**
*
* @author LevelX2
*/
public final class JayaBallardEmblem extends Emblem {
// You get an emblem with "You may cast instant and sorcery cards from your graveyard. If a card cast this way would be put into your graveyard, exile it instead."
public JayaBallardEmblem() {
setName("Emblem Jaya Ballard");
availableImageSetCodes = Arrays.asList("DOM", "MED");
super("Emblem Jaya Ballard");
Ability ability = new SimpleStaticAbility(Zone.COMMAND, new JayaBallardCastFromGraveyardEffect());
ability.addEffect(new JayaBallardReplacementEffect());
ability.addWatcher(new CastFromGraveyardWatcher());
this.getAbilities().add(ability);
}
private JayaBallardEmblem(final JayaBallardEmblem card) {
super(card);
}
@Override
public JayaBallardEmblem copy() {
return new JayaBallardEmblem(this);
}
}
class JayaBallardCastFromGraveyardEffect extends AsThoughEffectImpl {
@ -120,7 +127,7 @@ class JayaBallardReplacementEffect extends ReplacementEffectImpl {
CastFromGraveyardWatcher watcher = game.getState().getWatcher(CastFromGraveyardWatcher.class);
return watcher != null
&& watcher.spellWasCastFromGraveyard(event.getTargetId(),
game.getState().getZoneChangeCounter(event.getTargetId()));
game.getState().getZoneChangeCounter(event.getTargetId()));
}
}
return false;

View file

@ -25,12 +25,20 @@ public final class JayaFieryNegotiatorEmblem extends Emblem {
// 8: You get an emblem with "Whenever you cast a red instant or sorcery spell, copy it twice. You may choose new targets for the copies."
public JayaFieryNegotiatorEmblem() {
this.setName("Emblem Jaya");
this.setExpansionSetCodeForImage("DMU");
super("Emblem Jaya");
this.getAbilities().add(new SpellCastControllerTriggeredAbility(
new JayaFieryNegotiatorEmblemEffect(), filter, false
));
}
private JayaFieryNegotiatorEmblem(final JayaFieryNegotiatorEmblem card) {
super(card);
}
@Override
public JayaFieryNegotiatorEmblem copy() {
return new JayaFieryNegotiatorEmblem(this);
}
}
class JayaFieryNegotiatorEmblemEffect extends OneShotEffect {

View file

@ -4,6 +4,7 @@ import mage.ObjectColor;
import mage.abilities.common.DealsDamageToAPlayerAllTriggeredAbility;
import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect;
import mage.constants.SetTargetPointer;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
@ -11,7 +12,6 @@ import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.ColorPredicate;
import mage.game.command.Emblem;
import mage.target.common.TargetCardInLibrary;
import mage.constants.Zone;
/**
* @author TheElk801
@ -29,12 +29,20 @@ public final class KaitoShizukiEmblem extends Emblem {
// 7: You get an emblem with "Whenever a creature you control deals combat damage to a player, search your library for a blue or black creature card, put it onto the battlefield, then shuffle."
public KaitoShizukiEmblem() {
this.setName("Emblem Kaito");
this.setExpansionSetCodeForImage("NEO");
super("Emblem Kaito");
this.getAbilities().add(new DealsDamageToAPlayerAllTriggeredAbility(
Zone.COMMAND, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)),
StaticFilters.FILTER_CONTROLLED_A_CREATURE, false,
SetTargetPointer.NONE, true, false
));
}
private KaitoShizukiEmblem(final KaitoShizukiEmblem card) {
super(card);
}
@Override
public KaitoShizukiEmblem copy() {
return new KaitoShizukiEmblem(this);
}
}

View file

@ -25,8 +25,7 @@ public final class KarnLivingLegacyEmblem extends Emblem {
// -7: You get an emblem with "Tap an untapped artifact you control: This emblem deals 1 damage to any target."
public KarnLivingLegacyEmblem() {
this.setName("Emblem Karn");
this.setExpansionSetCodeForImage("DMU");
super("Emblem Karn");
Ability ability = new SimpleActivatedAbility(
Zone.COMMAND, new DamageTargetEffect(1, "this emblem"),
new TapTargetCost(new TargetControlledPermanent(filter))
@ -34,4 +33,13 @@ public final class KarnLivingLegacyEmblem extends Emblem {
ability.addTarget(new TargetAnyTarget());
this.getAbilities().add(ability);
}
private KarnLivingLegacyEmblem(final KarnLivingLegacyEmblem card) {
super(card);
}
@Override
public KarnLivingLegacyEmblem copy() {
return new KarnLivingLegacyEmblem(this);
}
}

View file

@ -29,13 +29,21 @@ public class KayaTheInexorableEmblem extends Emblem {
// 7: You get an emblem with "At the beginning of your upkeep, you may cast a legendary spell from your hand, from your graveyard, or from among cards you own in exile without paying its mana cost."
public KayaTheInexorableEmblem() {
this.setName("Emblem Kaya");
this.setExpansionSetCodeForImage("KHM");
super("Emblem Kaya");
this.getAbilities().add(new BeginningOfUpkeepTriggeredAbility(
Zone.COMMAND, new KayaTheInexorableEmblemEffect(),
TargetController.YOU, true, false
));
}
private KayaTheInexorableEmblem(final KayaTheInexorableEmblem card) {
super(card);
}
@Override
public KayaTheInexorableEmblem copy() {
return new KayaTheInexorableEmblem(this);
}
}
class KayaTheInexorableEmblemEffect extends OneShotEffect {

View file

@ -19,9 +19,17 @@ public final class KioraEmblem extends Emblem {
*/
public KioraEmblem() {
this.setName("Emblem Kiora");
this.setExpansionSetCodeForImage("BNG");
super("Emblem Kiora");
Ability ability = new BeginningOfEndStepTriggeredAbility(Zone.COMMAND, new CreateTokenEffect(new Kraken99Token()), TargetController.YOU, null, false);
this.getAbilities().add(ability);
}
private KioraEmblem(final KioraEmblem card) {
super(card);
}
@Override
public KioraEmblem copy() {
return new KioraEmblem(this);
}
}

View file

@ -1,4 +1,3 @@
package mage.game.command.emblems;
import mage.abilities.Ability;
@ -14,7 +13,6 @@ import mage.game.permanent.Permanent;
import mage.target.common.TargetCreaturePermanent;
/**
*
* @author spjspj
*/
public final class KioraMasterOfTheDepthsEmblem extends Emblem {
@ -22,14 +20,22 @@ public final class KioraMasterOfTheDepthsEmblem extends Emblem {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures");
public KioraMasterOfTheDepthsEmblem() {
this.setName("Emblem Kiora");
super("Emblem Kiora");
Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.COMMAND,
new KioraFightEffect(), filter, true, SetTargetPointer.PERMANENT,
"Whenever a creature enters the battlefield under your control, you may have it fight target creature.");
ability.addTarget(new TargetCreaturePermanent());
this.getAbilities().add(ability);
this.setExpansionSetCodeForImage("BFZ");
}
private KioraMasterOfTheDepthsEmblem(final KioraMasterOfTheDepthsEmblem card) {
super(card);
}
@Override
public KioraMasterOfTheDepthsEmblem copy() {
return new KioraMasterOfTheDepthsEmblem(this);
}
}

View file

@ -22,8 +22,7 @@ public final class KothFireOfResistanceEmblem extends Emblem {
// 7: You get an emblem with "Whenever a Mountain enters the battlefield under your control, this emblem deals 4 damage to any target."
public KothFireOfResistanceEmblem() {
this.setName("Emblem Koth");
this.setExpansionSetCodeForImage("ONE");
super("Emblem Koth");
Ability ability = new EntersBattlefieldControlledTriggeredAbility(
Zone.COMMAND, new DamageTargetEffect(4).setText("this emblem deals 4 damage to any target"),
@ -31,4 +30,13 @@ public final class KothFireOfResistanceEmblem extends Emblem {
ability.addTarget(new TargetAnyTarget());
getAbilities().add(ability);
}
private KothFireOfResistanceEmblem(final KothFireOfResistanceEmblem card) {
super(card);
}
@Override
public KothFireOfResistanceEmblem copy() {
return new KothFireOfResistanceEmblem(this);
}
}

View file

@ -1,4 +1,3 @@
package mage.game.command.emblems;
import mage.abilities.Ability;
@ -8,7 +7,6 @@ import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.ContinuousEffectImpl;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.constants.*;
import mage.filter.common.FilterLandPermanent;
import mage.game.Game;
import mage.game.command.Emblem;
@ -16,17 +14,23 @@ import mage.game.permanent.Permanent;
import mage.target.common.TargetAnyTarget;
/**
*
* @author spjspj
*/
public final class KothOfTheHammerEmblem extends Emblem {
// "Mountains you control have '{T}: This land deals 1 damage to any target.'"
public KothOfTheHammerEmblem() {
this.setName("Emblem Koth");
super("Emblem Koth");
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new KothOfTheHammerThirdEffect()));
}
this.setExpansionSetCodeForImage("DDI");
private KothOfTheHammerEmblem(final KothOfTheHammerEmblem card) {
super(card);
}
@Override
public KothOfTheHammerEmblem copy() {
return new KothOfTheHammerEmblem(this);
}
}

View file

@ -1,4 +1,3 @@
package mage.game.command.emblems;
import mage.abilities.Ability;
@ -17,18 +16,24 @@ import mage.game.command.Emblem;
import mage.target.targetpointer.FixedTarget;
/**
*
* @author spjspj
*/
public final class LilianaDefiantNecromancerEmblem extends Emblem {
// You get an emblem with "Whenever a creature you control dies, return it to the battlefield under your control at the beginning of the next end step."
public LilianaDefiantNecromancerEmblem() {
this.setName("Emblem Liliana");
super("Emblem Liliana");
Ability ability = new DiesCreatureTriggeredAbility(Zone.COMMAND, new LilianaDefiantNecromancerEmblemEffect(), false, StaticFilters.FILTER_PERMANENT_A_CREATURE, true);
this.getAbilities().add(ability);
}
this.setExpansionSetCodeForImage("ORI");
private LilianaDefiantNecromancerEmblem(final LilianaDefiantNecromancerEmblem card) {
super(card);
}
@Override
public LilianaDefiantNecromancerEmblem copy() {
return new LilianaDefiantNecromancerEmblem(this);
}
}

View file

@ -1,4 +1,3 @@
package mage.game.command.emblems;
import mage.Mana;
@ -13,10 +12,7 @@ import mage.constants.Zone;
import mage.filter.common.FilterLandPermanent;
import mage.game.command.Emblem;
import java.util.Arrays;
/**
*
* @author spjspj
*/
public final class LilianaOfTheDarkRealmsEmblem extends Emblem {
@ -28,11 +24,18 @@ public final class LilianaOfTheDarkRealmsEmblem extends Emblem {
}
public LilianaOfTheDarkRealmsEmblem() {
this.setName("Emblem Liliana");
super("Emblem Liliana");
SimpleManaAbility manaAbility = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.BlackMana(4), new TapSourceCost());
Ability ability = new SimpleStaticAbility(Zone.COMMAND, new GainAbilityControlledEffect(manaAbility, Duration.WhileOnBattlefield, filter));
this.getAbilities().add(ability);
}
availableImageSetCodes = Arrays.asList("M13", "M14");
private LilianaOfTheDarkRealmsEmblem(final LilianaOfTheDarkRealmsEmblem card) {
super(card);
}
@Override
public LilianaOfTheDarkRealmsEmblem copy() {
return new LilianaOfTheDarkRealmsEmblem(this);
}
}

View file

@ -13,8 +13,6 @@ import mage.game.Game;
import mage.game.command.Emblem;
import mage.game.permanent.token.ZombieToken;
import java.util.Arrays;
/**
* @author spjspj
*/
@ -22,12 +20,19 @@ public final class LilianaTheLastHopeEmblem extends Emblem {
// "At the beginning of your end step, create X 2/2 black Zombie creature tokens, where X is two plus the number of Zombies you control."
public LilianaTheLastHopeEmblem() {
this.setName("Emblem Liliana");
super("Emblem Liliana");
Ability ability = new BeginningOfEndStepTriggeredAbility(Zone.COMMAND, new CreateTokenEffect(new ZombieToken(), new LilianaZombiesCount()),
TargetController.YOU, null, false);
this.getAbilities().add(ability);
}
availableImageSetCodes = Arrays.asList("EMN", "MED", "2X2");
private LilianaTheLastHopeEmblem(final LilianaTheLastHopeEmblem card) {
super(card);
}
@Override
public LilianaTheLastHopeEmblem copy() {
return new LilianaTheLastHopeEmblem(this);
}
}

View file

@ -15,14 +15,21 @@ public final class LilianaWakerOfTheDeadEmblem extends Emblem {
*/
public LilianaWakerOfTheDeadEmblem() {
setName("Emblem Liliana");
super("Emblem Liliana");
Ability ability = new BeginningOfCombatTriggeredAbility(
Zone.COMMAND,
new ReturnCreatureFromGraveyardToBattlefieldAndGainHasteEffect(),
TargetController.YOU, false, false);
ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE));
this.getAbilities().add(ability);
}
this.setExpansionSetCodeForImage("M21");
private LilianaWakerOfTheDeadEmblem(final LilianaWakerOfTheDeadEmblem card) {
super(card);
}
@Override
public LilianaWakerOfTheDeadEmblem copy() {
return new LilianaWakerOfTheDeadEmblem(this);
}
}

View file

@ -22,8 +22,7 @@ public final class LolthSpiderQueenEmblem extends Emblem {
// 8: You get an emblem with "Whenever an opponent is dealt combat damage by one or more creatures you control, if that player lost less than 8 life this turn, they lose life equal to the difference."
public LolthSpiderQueenEmblem() {
this.setName("Emblem Lolth");
this.setExpansionSetCodeForImage("AFR");
super("Emblem Lolth");
this.getAbilities().add(new ConditionalInterveningIfTriggeredAbility(
new DealCombatDamageControlledTriggeredAbility(
Zone.COMMAND, new LolthSpiderQueenEmblemEffect(), true, true
@ -32,6 +31,15 @@ public final class LolthSpiderQueenEmblem extends Emblem {
"if that player lost less than 8 life this turn, they lose life equal to the difference."
));
}
private LolthSpiderQueenEmblem(final LolthSpiderQueenEmblem card) {
super(card);
}
@Override
public LolthSpiderQueenEmblem copy() {
return new LolthSpiderQueenEmblem(this);
}
}
enum LolthSpiderQueenEmblemCondition implements Condition {

View file

@ -3,24 +3,33 @@ package mage.game.command.emblems;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.PreventionEffectImpl;
import mage.constants.*;
import mage.constants.Duration;
import mage.constants.TurnPhase;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.command.Emblem;
import mage.game.events.GameEvent;
import mage.players.Player;
/**
*
* @author NinthWorld
*/
public final class LukeSkywalkerEmblem extends Emblem {
// -6: You get an emblem with "Prevent all damage that would be dealt to you during combat." Exile Luke Skywalker, the Last Jedi.
public LukeSkywalkerEmblem() {
this.setName("Emblem Luke Skywalker");
this.setExpansionSetCodeForImage("SWS");
super("Emblem Luke Skywalker");
this.getAbilities().add(new SimpleStaticAbility(Zone.BATTLEFIELD, new LukeSkywalkerEmblemEffect()));
}
private LukeSkywalkerEmblem(final LukeSkywalkerEmblem card) {
super(card);
}
@Override
public LukeSkywalkerEmblem copy() {
return new LukeSkywalkerEmblem(this);
}
}
class LukeSkywalkerEmblemEffect extends PreventionEffectImpl {

View file

@ -19,8 +19,7 @@ public final class LukkaWaywardBonderEmblem extends Emblem {
// 7: You get an emblem with "Whenever a creature enters the battlefield under your control, it deals damage equal to its power to any target."
public LukkaWaywardBonderEmblem() {
this.setName("Emblem Lukka");
this.setExpansionSetCodeForImage("STX");
super("Emblem Lukka");
Ability ability = new EntersBattlefieldControlledTriggeredAbility(
Zone.COMMAND, new LukkaWaywardBonderEmblemEffect(),
StaticFilters.FILTER_PERMANENT_A_CREATURE, false
@ -28,6 +27,15 @@ public final class LukkaWaywardBonderEmblem extends Emblem {
ability.addTarget(new TargetAnyTarget());
this.getAbilities().add(ability);
}
private LukkaWaywardBonderEmblem(final LukkaWaywardBonderEmblem card) {
super(card);
}
@Override
public LukkaWaywardBonderEmblem copy() {
return new LukkaWaywardBonderEmblem(this);
}
}
class LukkaWaywardBonderEmblemEffect extends OneShotEffect {

View file

@ -32,8 +32,7 @@ public final class MomirEmblem extends Emblem {
// Faking Vanguard as an Emblem; need to come back to this and add a new type of CommandObject
public MomirEmblem() {
setName("Emblem Momir Vig, Simic Visionary");
setExpansionSetCodeForImage("DIS");
super("Emblem Momir Vig, Simic Visionary");
// {X}, Discard a card: Create a token that's a copy of a creature card with converted mana cost X chosen at random.
// Activate this ability only any time you could cast a sorcery and only once each turn.
@ -42,6 +41,15 @@ public final class MomirEmblem extends Emblem {
ability.setTiming(TimingRule.SORCERY);
this.getAbilities().add(ability);
}
private MomirEmblem(final MomirEmblem card) {
super(card);
}
@Override
public MomirEmblem copy() {
return new MomirEmblem(this);
}
}
class MomirEffect extends OneShotEffect {

View file

@ -7,18 +7,24 @@ import mage.constants.Zone;
import mage.game.command.Emblem;
/**
*
* @author weirddan455
*/
public final class MordenkainenEmblem extends Emblem {
// You get an emblem with "You have no maximum hand size."
public MordenkainenEmblem() {
this.setName("Emblem Mordenkainen");
super("Emblem Mordenkainen");
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new MaximumHandSizeControllerEffect(
Integer.MAX_VALUE, Duration.WhileOnBattlefield, MaximumHandSizeControllerEffect.HandSizeModification.SET
)));
}
this.setExpansionSetCodeForImage("AFR");
private MordenkainenEmblem(final MordenkainenEmblem card) {
super(card);
}
@Override
public MordenkainenEmblem copy() {
return new MordenkainenEmblem(this);
}
}

View file

@ -22,8 +22,7 @@ public final class MuYanlingSkyDancerEmblem extends Emblem {
// "Islands you control have '{T}: Draw a card'."
public MuYanlingSkyDancerEmblem() {
this.setName("Emblem Yanling");
this.setExpansionSetCodeForImage("M20");
super("Emblem Yanling");
this.getAbilities().add(new SimpleStaticAbility(
Zone.COMMAND,
new GainAbilityControlledEffect(new SimpleActivatedAbility(
@ -31,4 +30,13 @@ public final class MuYanlingSkyDancerEmblem extends Emblem {
), Duration.EndOfGame, filter)
));
}
private MuYanlingSkyDancerEmblem(final MuYanlingSkyDancerEmblem card) {
super(card);
}
@Override
public MuYanlingSkyDancerEmblem copy() {
return new MuYanlingSkyDancerEmblem(this);
}
}

View file

@ -15,14 +15,21 @@ public final class NarsetOfTheAncientWayEmblem extends Emblem {
// 6: You get an emblem with "Whenever you cast a noncreature spell, this emblem deals 2 damage to any target."
public NarsetOfTheAncientWayEmblem() {
this.setName("Emblem Narset");
super("Emblem Narset");
Ability ability = new SpellCastControllerTriggeredAbility(
Zone.COMMAND, new DamageTargetEffect(2, "this emblem"),
StaticFilters.FILTER_SPELL_A_NON_CREATURE, false, false
);
ability.addTarget(new TargetAnyTarget());
this.getAbilities().add(ability);
}
this.setExpansionSetCodeForImage("IKO");
private NarsetOfTheAncientWayEmblem(final NarsetOfTheAncientWayEmblem card) {
super(card);
}
@Override
public NarsetOfTheAncientWayEmblem copy() {
return new NarsetOfTheAncientWayEmblem(this);
}
}

View file

@ -1,4 +1,3 @@
package mage.game.command.emblems;
import mage.MageObject;
@ -15,18 +14,26 @@ import mage.game.events.GameEvent;
import mage.players.Player;
/**
*
* @author spjspj
*/
public final class NarsetTranscendentEmblem extends Emblem {
// "Your opponents can't cast noncreature spells.
public NarsetTranscendentEmblem() {
this.setName("Emblem Narset");
super("Emblem Narset");
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new NarsetTranscendentCantCastEffect()));
}
private NarsetTranscendentEmblem(final NarsetTranscendentEmblem card) {
super(card);
}
@Override
public NarsetTranscendentEmblem copy() {
return new NarsetTranscendentEmblem(this);
}
}
class NarsetTranscendentCantCastEffect extends ContinuousRuleModifyingEffectImpl {

View file

@ -1,4 +1,3 @@
package mage.game.command.emblems;
import mage.abilities.Ability;
@ -9,18 +8,24 @@ import mage.filter.common.FilterControlledLandPermanent;
import mage.game.command.Emblem;
/**
*
* @author spjspj
*/
public final class NissaVitalForceEmblem extends Emblem {
// You get an emblem with "Whenever a land enters the battlefield under your control, you may draw a card."
public NissaVitalForceEmblem() {
this.setName("Emblem Nissa");
super("Emblem Nissa");
Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.COMMAND, new DrawCardSourceControllerEffect(1), new FilterControlledLandPermanent("a land"),
true, null, true);
getAbilities().add(ability);
}
this.setExpansionSetCodeForImage("KLD");
private NissaVitalForceEmblem(final NissaVitalForceEmblem card) {
super(card);
}
@Override
public NissaVitalForceEmblem copy() {
return new NissaVitalForceEmblem(this);
}
}

View file

@ -1,4 +1,3 @@
package mage.game.command.emblems;
import mage.abilities.common.SimpleStaticAbility;
@ -15,7 +14,7 @@ import mage.game.command.Emblem;
public final class NissaWhoShakesTheWorldEmblem extends Emblem {
public NissaWhoShakesTheWorldEmblem() {
this.setName("Emblem Nissa");
super("Emblem Nissa");
this.getAbilities().add(new SimpleStaticAbility(
Zone.COMMAND,
new GainAbilityAllEffect(
@ -23,6 +22,14 @@ public final class NissaWhoShakesTheWorldEmblem extends Emblem {
StaticFilters.FILTER_CONTROLLED_PERMANENT_LANDS, false
)
));
this.setExpansionSetCodeForImage("WAR");
}
private NissaWhoShakesTheWorldEmblem(final NissaWhoShakesTheWorldEmblem card) {
super(card);
}
@Override
public NissaWhoShakesTheWorldEmblem copy() {
return new NissaWhoShakesTheWorldEmblem(this);
}
}

View file

@ -1,4 +1,3 @@
package mage.game.command.emblems;
import mage.abilities.Ability;
@ -17,14 +16,13 @@ import mage.target.common.TargetControlledCreaturePermanent;
import static mage.filter.StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT;
/**
*
* @author spjspj
*/
public final class ObNixilisOfTheBlackOathEmblem extends Emblem {
// You get an emblem with "{1}{B}, Sacrifice a creature: You gain X life and draw X cards, where X is the sacrificed creature's power."
public ObNixilisOfTheBlackOathEmblem() {
this.setName("Emblem Nixilis");
super("Emblem Nixilis");
DynamicValue xValue = SacrificeCostCreaturesPower.instance;
Effect effect = new GainLifeEffect(xValue);
effect.setText("You gain X life");
@ -34,7 +32,14 @@ public final class ObNixilisOfTheBlackOathEmblem extends Emblem {
effect.setText("and draw X cards, where X is the sacrificed creature's power");
ability.addEffect(effect);
this.getAbilities().add(ability);
}
this.setExpansionSetCodeForImage("C14");
private ObNixilisOfTheBlackOathEmblem(final ObNixilisOfTheBlackOathEmblem card) {
super(card);
}
@Override
public ObNixilisOfTheBlackOathEmblem copy() {
return new ObNixilisOfTheBlackOathEmblem(this);
}
}

View file

@ -1,4 +1,3 @@
package mage.game.command.emblems;
import mage.abilities.TriggeredAbilityImpl;
@ -8,21 +7,24 @@ import mage.constants.Zone;
import mage.game.Game;
import mage.game.command.Emblem;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import java.util.Arrays;
/**
*
* @author spjspj
*/
public final class ObNixilisReignitedEmblem extends Emblem {
public ObNixilisReignitedEmblem() {
setName("Emblem Nixilis");
super("Emblem Nixilis");
this.getAbilities().add(new ObNixilisEmblemTriggeredAbility(new LoseLifeSourceControllerEffect(2), false));
availableImageSetCodes = Arrays.asList("BFZ", "DDR", "C19");
}
private ObNixilisReignitedEmblem(final ObNixilisReignitedEmblem card) {
super(card);
}
@Override
public ObNixilisReignitedEmblem copy() {
return new ObNixilisReignitedEmblem(this);
}
}

View file

@ -1,4 +1,3 @@
package mage.game.command.emblems;
import mage.abilities.Ability;
@ -14,15 +13,13 @@ import mage.constants.Zone;
import mage.game.command.Emblem;
/**
*
* @author spjspj
*/
public final class ObiWanKenobiEmblem extends Emblem {
// Creatures you control get +1/+1 and have vigilance, first strike, and lifelink
public ObiWanKenobiEmblem() {
this.setName("Emblem Obi-Wan Kenobi");
this.setExpansionSetCodeForImage("SWS");
super("Emblem Obi-Wan Kenobi");
Ability ability = new SimpleStaticAbility(Zone.COMMAND, new BoostControlledEffect(1, 1, Duration.EndOfGame));
Effect effect = new GainAbilityControlledEffect(VigilanceAbility.getInstance(), Duration.EndOfGame);
effect.setText("and have vigilance");
@ -35,4 +32,13 @@ public final class ObiWanKenobiEmblem extends Emblem {
ability.addEffect(effect);
getAbilities().add(ability);
}
private ObiWanKenobiEmblem(final ObiWanKenobiEmblem card) {
super(card);
}
@Override
public ObiWanKenobiEmblem copy() {
return new ObiWanKenobiEmblem(this);
}
}

View file

@ -9,19 +9,16 @@ import mage.filter.StaticFilters;
import mage.game.command.Emblem;
import mage.target.common.TargetAnyTarget;
import java.util.Arrays;
/**
*
* @author TheElk801
*/
public final class RalIzzetViceroyEmblem extends Emblem {
// You get an emblem with "Whenever you cast an instant or sorcery spell, this emblem deals 4 damage to any target and you draw two cards."
public RalIzzetViceroyEmblem() {
this.setName("Emblem Ral");
super("Emblem Ral");
Ability ability = new SpellCastControllerTriggeredAbility(
Zone.COMMAND, new DamageTargetEffect(4, "this emblem"),
Zone.COMMAND, new DamageTargetEffect(4, "this emblem"),
StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY, false, false
);
ability.addEffect(
@ -30,7 +27,14 @@ public final class RalIzzetViceroyEmblem extends Emblem {
);
ability.addTarget(new TargetAnyTarget());
getAbilities().add(ability);
}
availableImageSetCodes = Arrays.asList("MED", "GRN");
private RalIzzetViceroyEmblem(final RalIzzetViceroyEmblem card) {
super(card);
}
@Override
public RalIzzetViceroyEmblem copy() {
return new RalIzzetViceroyEmblem(this);
}
}

View file

@ -9,8 +9,6 @@ import mage.game.command.Emblem;
import mage.game.events.GameEvent;
import mage.game.stack.StackAbility;
import java.util.Arrays;
/**
* @author TheElk801
*/
@ -18,10 +16,17 @@ public final class RowanKenrithEmblem extends Emblem {
// Target player gets an emblem with "Whenever you activate an ability that isn't a mana ability, copy it. You may choose new targets for the copy."
public RowanKenrithEmblem() {
this.setName("Emblem Rowan Kenrith");
super("Emblem Rowan Kenrith");
this.getAbilities().add(new RowanKenrithEmblemTriggeredAbility());
}
availableImageSetCodes = Arrays.asList("BBD", "CLB");
private RowanKenrithEmblem(final RowanKenrithEmblem card) {
super(card);
}
@Override
public RowanKenrithEmblem copy() {
return new RowanKenrithEmblem(this);
}
}

View file

@ -15,11 +15,19 @@ public final class RowanScholarOfSparksEmblem extends Emblem {
// 4: You get an emblem with "Whenever you cast an instant or sorcery spell, you may pay {2}. If you do, copy that spell. You may choose new targets for the copy."
public RowanScholarOfSparksEmblem() {
this.setName("Emblem Rowan");
this.setExpansionSetCodeForImage("STX");
super("Emblem Rowan");
this.getAbilities().add(new SpellCastControllerTriggeredAbility(
Zone.COMMAND, new DoIfCostPaid(new CopyTargetSpellEffect(true), new GenericManaCost(2)),
StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY, false, true
));
}
private RowanScholarOfSparksEmblem(final RowanScholarOfSparksEmblem card) {
super(card);
}
@Override
public RowanScholarOfSparksEmblem copy() {
return new RowanScholarOfSparksEmblem(this);
}
}

View file

@ -15,8 +15,7 @@ public final class SaheeliFiligreeMasterEmblem extends Emblem {
// 4: You get an emblem with "Artifact creatures you control get +1/+1" and "Artifact spells you cast cost {1} less to cast."
public SaheeliFiligreeMasterEmblem() {
this.setName("Emblem Saheeli");
this.setExpansionSetCodeForImage("BRO");
super("Emblem Saheeli");
this.getAbilities().add(new SimpleStaticAbility(
Zone.COMMAND,
new BoostControlledEffect(
@ -31,4 +30,13 @@ public final class SaheeliFiligreeMasterEmblem extends Emblem {
).setText("Artifact spells you cast cost {1} less to cast")
));
}
private SaheeliFiligreeMasterEmblem(final SaheeliFiligreeMasterEmblem card) {
super(card);
}
@Override
public SaheeliFiligreeMasterEmblem copy() {
return new SaheeliFiligreeMasterEmblem(this);
}
}

View file

@ -1,4 +1,3 @@
package mage.game.command.emblems;
import mage.abilities.common.BeginningOfDrawTriggeredAbility;
@ -10,16 +9,23 @@ import mage.constants.Zone;
import mage.game.command.Emblem;
/**
*
* @author spjspj
*/
public final class SarkhanTheDragonspeakerEmblem extends Emblem {
public SarkhanTheDragonspeakerEmblem() {
setName("Emblem Sarkhan");
this.setExpansionSetCodeForImage("KTK");
super("Emblem Sarkhan");
this.getAbilities().add(new BeginningOfDrawTriggeredAbility(Zone.COMMAND, new DrawCardSourceControllerEffect(2), TargetController.YOU, false));
this.getAbilities().add(new BeginningOfEndStepTriggeredAbility(Zone.COMMAND, new DiscardHandControllerEffect(), TargetController.YOU, null, false));
}
private SarkhanTheDragonspeakerEmblem(final SarkhanTheDragonspeakerEmblem card) {
super(card);
}
@Override
public SarkhanTheDragonspeakerEmblem copy() {
return new SarkhanTheDragonspeakerEmblem(this);
}
}

View file

@ -19,10 +19,17 @@ public final class SerraTheBenevolentEmblem extends Emblem {
// -6: You get an emblem with "If you control a creature, damage that would reduce your life total to less than 1 reduces it to 1 instead."
public SerraTheBenevolentEmblem() {
this.setName("Emblem Serra");
super("Emblem Serra");
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new SerraTheBenevolentEmblemEffect()));
}
this.setExpansionSetCodeForImage("MH1");
private SerraTheBenevolentEmblem(final SerraTheBenevolentEmblem card) {
super(card);
}
@Override
public SerraTheBenevolentEmblem copy() {
return new SerraTheBenevolentEmblem(this);
}
}

View file

@ -1,4 +1,3 @@
package mage.game.command.emblems;
import mage.abilities.Ability;
@ -9,17 +8,23 @@ import mage.constants.Zone;
import mage.game.command.Emblem;
/**
*
* @author spjspj
*/
public final class SorinLordOfInnistradEmblem extends Emblem {
public SorinLordOfInnistradEmblem() {
this.setName("Emblem Sorin");
super("Emblem Sorin");
BoostControlledEffect effect = new BoostControlledEffect(1, 0, Duration.EndOfGame);
Ability ability = new SimpleStaticAbility(Zone.COMMAND, effect);
this.getAbilities().add(ability);
}
this.setExpansionSetCodeForImage("DKA");
private SorinLordOfInnistradEmblem(final SorinLordOfInnistradEmblem card) {
super(card);
}
@Override
public SorinLordOfInnistradEmblem copy() {
return new SorinLordOfInnistradEmblem(this);
}
}

View file

@ -1,4 +1,3 @@
package mage.game.command.emblems;
import mage.abilities.Ability;
@ -10,7 +9,6 @@ import mage.filter.StaticFilters;
import mage.game.command.Emblem;
/**
*
* @author spjspj
*/
public final class SorinSolemnVisitorEmblem extends Emblem {
@ -20,8 +18,17 @@ public final class SorinSolemnVisitorEmblem extends Emblem {
* sacrifices a creature."
*/
public SorinSolemnVisitorEmblem() {
this.setName("Emblem Sorin");
super("Emblem Sorin");
Ability ability = new BeginningOfUpkeepTriggeredAbility(Zone.COMMAND, new SacrificeEffect(StaticFilters.FILTER_PERMANENT_CREATURE, 1, "that player"), TargetController.OPPONENT, false, true);
this.getAbilities().add(ability);
}
private SorinSolemnVisitorEmblem(final SorinSolemnVisitorEmblem card) {
super(card);
}
@Override
public SorinSolemnVisitorEmblem copy() {
return new SorinSolemnVisitorEmblem(this);
}
}

View file

@ -1,4 +1,3 @@
package mage.game.command.emblems;
import mage.abilities.common.SimpleStaticAbility;
@ -6,8 +5,7 @@ import mage.abilities.effects.common.continuous.CastFromHandWithoutPayingManaCos
import mage.constants.Zone;
import mage.game.command.Emblem;
/*
*
/**
* Author: spjspj
*/
public final class TamiyoFieldResearcherEmblem extends Emblem {
@ -15,10 +13,17 @@ public final class TamiyoFieldResearcherEmblem extends Emblem {
public TamiyoFieldResearcherEmblem() {
this.setName("Emblem Tamiyo");
super("Emblem Tamiyo");
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new CastFromHandWithoutPayingManaCostEffect()));
}
this.setExpansionSetCodeForImage("EMN");
private TamiyoFieldResearcherEmblem(final TamiyoFieldResearcherEmblem card) {
super(card);
}
@Override
public TamiyoFieldResearcherEmblem copy() {
return new TamiyoFieldResearcherEmblem(this);
}
}

View file

@ -12,8 +12,6 @@ import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.game.command.Emblem;
import java.util.Arrays;
/**
* @author spjspj
*/
@ -25,7 +23,7 @@ public final class TamiyoTheMoonSageEmblem extends Emblem {
*/
public TamiyoTheMoonSageEmblem() {
this.setName("Emblem Tamiyo");
super("Emblem Tamiyo");
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new MaximumHandSizeControllerEffect(
Integer.MAX_VALUE, Duration.Custom, HandSizeModification.SET
)));
@ -33,7 +31,14 @@ public final class TamiyoTheMoonSageEmblem extends Emblem {
Zone.COMMAND, new ReturnToHandTargetEffect().setText("return it to your hand"),
true, StaticFilters.FILTER_CARD_A, TargetController.YOU, SetTargetPointer.CARD
));
}
availableImageSetCodes = Arrays.asList("AVR", "MED");
private TamiyoTheMoonSageEmblem(final TamiyoTheMoonSageEmblem card) {
super(card);
}
@Override
public TamiyoTheMoonSageEmblem copy() {
return new TamiyoTheMoonSageEmblem(this);
}
}

View file

@ -23,8 +23,7 @@ public final class TeferiAkosaOfZhalfirEmblem extends Emblem {
// -2: You get an emblem with "Knights you control get +1/+0 and have ward {1}."
public TeferiAkosaOfZhalfirEmblem() {
this.setName("Emblem Teferi");
this.setExpansionSetCodeForImage("MOM");
super("Emblem Teferi");
Ability ability = new SimpleStaticAbility(
Zone.COMMAND, new BoostControlledEffect(1, 0, Duration.WhileOnBattlefield, filter)
);
@ -34,4 +33,13 @@ public final class TeferiAkosaOfZhalfirEmblem extends Emblem {
).setText("and have ward {1}"));
this.getAbilities().add(ability);
}
private TeferiAkosaOfZhalfirEmblem(final TeferiAkosaOfZhalfirEmblem card) {
super(card);
}
@Override
public TeferiAkosaOfZhalfirEmblem copy() {
return new TeferiAkosaOfZhalfirEmblem(this);
}
}

View file

@ -9,24 +9,28 @@ import mage.filter.FilterPermanent;
import mage.game.command.Emblem;
import mage.target.TargetPermanent;
import java.util.Arrays;
/**
*
* @author LevelX2
*/
public final class TeferiHeroOfDominariaEmblem extends Emblem {
// Whenever you draw a card, exile target permanent an opponent controls.
public TeferiHeroOfDominariaEmblem() {
this.setName("Emblem Teferi");
super("Emblem Teferi");
Ability ability = new DrawCardControllerTriggeredAbility(Zone.COMMAND, new ExileTargetEffect(), false);
FilterPermanent filter = new FilterPermanent("permanent an opponent controls");
filter.add(TargetController.OPPONENT.getControllerPredicate());
ability.addTarget(new TargetPermanent(filter));
this.getAbilities().add(ability);
}
availableImageSetCodes = Arrays.asList("DOM", "MED");
private TeferiHeroOfDominariaEmblem(final TeferiHeroOfDominariaEmblem card) {
super(card);
}
@Override
public TeferiHeroOfDominariaEmblem copy() {
return new TeferiHeroOfDominariaEmblem(this);
}
}

View file

@ -1,4 +1,3 @@
package mage.game.command.emblems;
import mage.abilities.LoyaltyAbility;
@ -8,16 +7,22 @@ import mage.constants.Zone;
import mage.game.command.Emblem;
/**
*
* @author spjspj
*/
public final class TeferiTemporalArchmageEmblem extends Emblem {
// "You may activate loyalty abilities of planeswalkers you control on any player's turn any time you could cast an instant."
public TeferiTemporalArchmageEmblem() {
this.setName("Emblem Teferi");
super("Emblem Teferi");
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new ActivateAbilitiesAnyTimeYouCouldCastInstantEffect(LoyaltyAbility.class, "loyalty abilities of planeswalkers you control on any player's turn")));
}
this.setExpansionSetCodeForImage("C14");
private TeferiTemporalArchmageEmblem(final TeferiTemporalArchmageEmblem card) {
super(card);
}
@Override
public TeferiTemporalArchmageEmblem copy() {
return new TeferiTemporalArchmageEmblem(this);
}
}

View file

@ -13,13 +13,20 @@ import mage.players.Player;
public class TeferiWhoSlowsTheSunsetEmblem extends Emblem {
// You get an emblem with "Untap all permanents you control during each opponent's untap step" and "You draw a card during each opponent's draw step."
public TeferiWhoSlowsTheSunsetEmblem() {
this.setName("Emblem Teferi");
super("Emblem Teferi");
this.getAbilities().add(new SimpleStaticAbility(
Zone.COMMAND, new UntapAllDuringEachOtherPlayersUntapStepEffect(StaticFilters.FILTER_CONTROLLED_PERMANENTS)
));
this.getAbilities().add(new SimpleStaticAbility(new TeferiWhoSlowsTheSunsetEmblemEffect()));
}
this.setExpansionSetCodeForImage("MID");
private TeferiWhoSlowsTheSunsetEmblem(final TeferiWhoSlowsTheSunsetEmblem card) {
super(card);
}
@Override
public TeferiWhoSlowsTheSunsetEmblem copy() {
return new TeferiWhoSlowsTheSunsetEmblem(this);
}
}

View file

@ -13,7 +13,7 @@ public final class TeferisTalentEmblem extends Emblem {
// -12: "You may activate loyalty abilities of planeswalkers you control on any player's turn any time you could cast an instant."
public TeferisTalentEmblem() {
this.setName("Emblem Teferi");
super("Emblem Teferi");
this.getAbilities().add(new SimpleStaticAbility(
Zone.COMMAND,
new ActivateAbilitiesAnyTimeYouCouldCastInstantEffect(
@ -21,7 +21,14 @@ public final class TeferisTalentEmblem extends Emblem {
"loyalty abilities of planeswalkers you control on any player's turn"
)
));
}
this.setExpansionSetCodeForImage("MOC");
private TeferisTalentEmblem(final TeferisTalentEmblem card) {
super(card);
}
@Override
public TeferisTalentEmblem copy() {
return new TeferisTalentEmblem(this);
}
}

View file

@ -9,15 +9,13 @@ import mage.game.command.Emblem;
import mage.target.common.TargetCardInLibrary;
/**
*
* @author TheElk801
*/
public final class TezzeretArtificeMasterEmblem extends Emblem {
// 9: You get an emblem with "At the beginning of your end step, search your library for a permanent card, put it into the battlefield, then shuffle your library."
public TezzeretArtificeMasterEmblem() {
this.setName("Emblem Tezzeret");
this.setExpansionSetCodeForImage("M19");
super("Emblem Tezzeret");
this.getAbilities().add(new BeginningOfEndStepTriggeredAbility(
Zone.COMMAND,
new SearchLibraryPutInPlayEffect(
@ -25,4 +23,13 @@ public final class TezzeretArtificeMasterEmblem extends Emblem {
), TargetController.YOU, null, false
));
}
private TezzeretArtificeMasterEmblem(final TezzeretArtificeMasterEmblem card) {
super(card);
}
@Override
public TezzeretArtificeMasterEmblem copy() {
return new TezzeretArtificeMasterEmblem(this);
}
}

View file

@ -13,11 +13,19 @@ public final class TezzeretBetrayerOfFleshEmblem extends Emblem {
// 6: You get an emblem with "Whenever an artifact you control becomes tapped, draw a card."
public TezzeretBetrayerOfFleshEmblem() {
this.setName("Emblem Tezzeret");
this.setExpansionSetCodeForImage("NEO");
super("Emblem Tezzeret");
this.getAbilities().add(new BecomesTappedTriggeredAbility(
Zone.COMMAND, new DrawCardSourceControllerEffect(1), false,
StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT, false
));
}
private TezzeretBetrayerOfFleshEmblem(final TezzeretBetrayerOfFleshEmblem card) {
super(card);
}
@Override
public TezzeretBetrayerOfFleshEmblem copy() {
return new TezzeretBetrayerOfFleshEmblem(this);
}
}

View file

@ -1,4 +1,3 @@
package mage.game.command.emblems;
import mage.abilities.Ability;
@ -10,18 +9,18 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.TargetController;
import mage.constants.Zone;
import static mage.filter.StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT;
import mage.game.command.Emblem;
import mage.target.TargetPermanent;
import static mage.filter.StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT;
/**
*
* @author spjspj
*/
public final class TezzeretTheSchemerEmblem extends Emblem {
public TezzeretTheSchemerEmblem() {
this.setName("Emblem Tezzeret");
super("Emblem Tezzeret");
Effect effect = new AddCardTypeTargetEffect(Duration.EndOfGame, CardType.ARTIFACT, CardType.CREATURE);
effect.setText("target artifact you control becomes an artifact creature");
@ -31,7 +30,14 @@ public final class TezzeretTheSchemerEmblem extends Emblem {
ability.addEffect(effect);
ability.addTarget(new TargetPermanent(FILTER_CONTROLLED_PERMANENT_ARTIFACT));
this.getAbilities().add(ability);
}
this.setExpansionSetCodeForImage("AER");
private TezzeretTheSchemerEmblem(final TezzeretTheSchemerEmblem card) {
super(card);
}
@Override
public TezzeretTheSchemerEmblem copy() {
return new TezzeretTheSchemerEmblem(this);
}
}

View file

@ -31,6 +31,7 @@ import java.util.UUID;
* @author TheElk801
*/
public final class TheRingEmblem extends Emblem {
private static final FilterPermanent filter = new FilterControlledPermanent("your Ring-bearer");
static {
@ -38,12 +39,19 @@ public final class TheRingEmblem extends Emblem {
}
public TheRingEmblem(UUID controllerId) {
super();
this.setName("The Ring");
this.setExpansionSetCodeForImage("LTR");
super("The Ring");
this.setControllerId(controllerId);
}
private TheRingEmblem(final TheRingEmblem card) {
super(card);
}
@Override
public TheRingEmblem copy() {
return new TheRingEmblem(this);
}
public void addNextAbility(Game game) {
Ability ability;
switch (TemptedByTheRingWatcher.getCount(this.getControllerId(), game)) {

View file

@ -22,10 +22,17 @@ public final class TibaltCosmicImpostorEmblem extends Emblem {
// You may play cards exiled with Tibalt, Cosmic Impostor, and you may spend mana as though it were mana of any color to cast those spells."
public TibaltCosmicImpostorEmblem() {
setName("Emblem Tibalt");
super("Emblem Tibalt");
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new TibaltCosmicImpostorPlayFromExileEffect()));
}
this.setExpansionSetCodeForImage("KHM");
private TibaltCosmicImpostorEmblem(final TibaltCosmicImpostorEmblem card) {
super(card);
}
@Override
public TibaltCosmicImpostorEmblem copy() {
return new TibaltCosmicImpostorEmblem(this);
}
}

View file

@ -24,8 +24,7 @@ public final class TyvarKellEmblem extends Emblem {
// 6: You get an emblem with "Whenever you cast an Elf spell, it gains haste until end of turn and you draw two cards."
public TyvarKellEmblem() {
this.setName("Emblem Tyvar");
this.setExpansionSetCodeForImage("KHM");
super("Emblem Tyvar");
Ability ability = new SpellCastControllerTriggeredAbility(
Zone.COMMAND,
@ -36,4 +35,13 @@ public final class TyvarKellEmblem extends Emblem {
ability.addEffect(new DrawCardSourceControllerEffect(2, "you").concatBy("and"));
this.getAbilities().add(ability);
}
private TyvarKellEmblem(final TyvarKellEmblem card) {
super(card);
}
@Override
public TyvarKellEmblem copy() {
return new TyvarKellEmblem(this);
}
}

View file

@ -1,4 +1,3 @@
package mage.game.command.emblems;
import mage.abilities.Ability;
@ -6,18 +5,15 @@ import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.ExileTargetEffect;
import mage.constants.Zone;
import mage.filter.FilterSpell;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.command.Emblem;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.game.stack.Spell;
import mage.target.Target;
import mage.target.TargetPermanent;
/**
*
* @author spjspj
*/
public final class VenserTheSojournerEmblem extends Emblem {
@ -27,13 +23,20 @@ public final class VenserTheSojournerEmblem extends Emblem {
*/
public VenserTheSojournerEmblem() {
this.setName("Emblem Venser");
super("Emblem Venser");
Ability ability = new VenserTheSojournerSpellCastTriggeredAbility(new ExileTargetEffect(), false);
Target target = new TargetPermanent();
ability.addTarget(target);
this.getAbilities().add(ability);
}
this.setExpansionSetCodeForImage("DDI");
private VenserTheSojournerEmblem(final VenserTheSojournerEmblem card) {
super(card);
}
@Override
public VenserTheSojournerEmblem copy() {
return new VenserTheSojournerEmblem(this);
}
}

View file

@ -13,15 +13,13 @@ import mage.filter.StaticFilters;
import mage.game.command.Emblem;
/**
*
* @author TheElk801
*/
public final class VivienReidEmblem extends Emblem {
// -8: You get an emblem with "Creatures you control get +2/+2 and have vigilance, trample, and indestructible.
public VivienReidEmblem() {
this.setName("Emblem Vivien");
this.setExpansionSetCodeForImage("M19");
super("Emblem Vivien");
Ability ability = new SimpleStaticAbility(
Zone.COMMAND,
new BoostControlledEffect(
@ -47,4 +45,13 @@ public final class VivienReidEmblem extends Emblem {
).setText(", and indestructible"));
this.getAbilities().add(ability);
}
private VivienReidEmblem(final VivienReidEmblem card) {
super(card);
}
@Override
public VivienReidEmblem copy() {
return new VivienReidEmblem(this);
}
}

View file

@ -7,8 +7,6 @@ import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.game.command.Emblem;
import java.util.Arrays;
/**
* @author TheElk801
*/
@ -16,12 +14,20 @@ public final class VraskaGolgariQueenEmblem extends Emblem {
// -9: You get an emblem with "Whenever a creature you control deals combat damage to a player, that player loses the game."
public VraskaGolgariQueenEmblem() {
this.setName("Emblem Vraska");
availableImageSetCodes = Arrays.asList("MED", "GRN");
super("Emblem Vraska");
this.getAbilities().add(new DealsDamageToAPlayerAllTriggeredAbility(
Zone.COMMAND, new LoseGameTargetPlayerEffect(),
StaticFilters.FILTER_CONTROLLED_A_CREATURE,
false, SetTargetPointer.NONE, true, true
));
}
private VraskaGolgariQueenEmblem(final VraskaGolgariQueenEmblem card) {
super(card);
}
@Override
public VraskaGolgariQueenEmblem copy() {
return new VraskaGolgariQueenEmblem(this);
}
}

View file

@ -6,8 +6,6 @@ import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.game.command.Emblem;
import java.util.Arrays;
/**
* @author TheElk801
*/
@ -15,7 +13,7 @@ public final class WillKenrithEmblem extends Emblem {
// Target player gets an emblem with "Whenever you cast an instant or sorcery spell, copy it. You may choose new targets for the copy."
public WillKenrithEmblem() {
this.setName("Emblem Will Kenrith");
super("Emblem Will Kenrith");
this.getAbilities().add(new SpellCastControllerTriggeredAbility(
Zone.COMMAND,
new CopyTargetSpellEffect(true).withSpellName("it"),
@ -23,7 +21,14 @@ public final class WillKenrithEmblem extends Emblem {
false,
true
));
}
availableImageSetCodes = Arrays.asList("BBD", "CLB");
private WillKenrithEmblem(final WillKenrithEmblem card) {
super(card);
}
@Override
public WillKenrithEmblem copy() {
return new WillKenrithEmblem(this);
}
}

View file

@ -20,10 +20,18 @@ public final class WrennAndRealmbreakerEmblem extends Emblem {
// -7: You get an emblem with "You may play lands and cast permanent spells from your graveyard."
public WrennAndRealmbreakerEmblem() {
this.setName("Emblem Wrenn");
this.setExpansionSetCodeForImage("MOM");
super("Emblem Wrenn");
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new WrennAndRealmbreakerEmblemEffect()));
}
private WrennAndRealmbreakerEmblem(final WrennAndRealmbreakerEmblem card) {
super(card);
}
@Override
public WrennAndRealmbreakerEmblem copy() {
return new WrennAndRealmbreakerEmblem(this);
}
}
class WrennAndRealmbreakerEmblemEffect extends AsThoughEffectImpl {

View file

@ -13,11 +13,18 @@ public final class WrennAndSevenEmblem extends Emblem {
// You get an emblem with "You have no maximum hand size."
public WrennAndSevenEmblem() {
this.setName("Emblem Wrenn");
super("Emblem Wrenn");
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new MaximumHandSizeControllerEffect(
Integer.MAX_VALUE, Duration.WhileOnBattlefield, MaximumHandSizeControllerEffect.HandSizeModification.SET
)));
}
this.setExpansionSetCodeForImage("MID");
private WrennAndSevenEmblem(final WrennAndSevenEmblem card) {
super(card);
}
@Override
public WrennAndSevenEmblem copy() {
return new WrennAndSevenEmblem(this);
}
}

View file

@ -4,19 +4,13 @@ import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.ContinuousEffectImpl;
import mage.abilities.keyword.RetraceAbility;
import mage.cards.AdventureCard;
import mage.cards.Card;
import mage.cards.*;
import mage.constants.*;
import mage.game.Game;
import mage.game.command.Emblem;
import mage.players.Player;
import java.util.Arrays;
import java.util.UUID;
import mage.cards.ModalDoubleFacesCard;
import mage.cards.ModalDoubleFacesCardHalf;
import mage.cards.SplitCard;
import mage.cards.SplitCardHalf;
/**
* @author TheElk801
@ -24,10 +18,17 @@ import mage.cards.SplitCardHalf;
public final class WrennAndSixEmblem extends Emblem {
public WrennAndSixEmblem() {
this.setName("Emblem Wrenn");
super("Emblem Wrenn");
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new WrennAndSixEmblemEffect()));
}
availableImageSetCodes = Arrays.asList("MH1", "2X2");
private WrennAndSixEmblem(final WrennAndSixEmblem card) {
super(card);
}
@Override
public WrennAndSixEmblem copy() {
return new WrennAndSixEmblem(this);
}
}

View file

@ -1,4 +1,3 @@
package mage.game.command.emblems;
import mage.abilities.Ability;
@ -13,14 +12,13 @@ import mage.filter.common.FilterCreaturePermanent;
import mage.game.command.Emblem;
/**
*
* @author spjspj
*/
public final class YodaEmblem extends Emblem {
// You get an emblem with "Hexproof, you and your creatures have."
public YodaEmblem() {
this.setName("Emblem Yoda, Jedi Master");
super("Emblem Yoda, Jedi Master");
Effect effect = new GainAbilityControllerEffect(HexproofAbility.getInstance(), Duration.EndOfGame);
effect.setText("Hexproof, you");
Ability ability = new SimpleStaticAbility(Zone.COMMAND, effect);
@ -29,4 +27,13 @@ public final class YodaEmblem extends Emblem {
ability.addEffect(effect);
getAbilities().add(ability);
}
private YodaEmblem(final YodaEmblem card) {
super(card);
}
@Override
public YodaEmblem copy() {
return new YodaEmblem(this);
}
}

View file

@ -17,10 +17,18 @@ public final class ZarielArchdukeOfAvernusEmblem extends Emblem {
// 6: You get an emblem with "At the end of the first combat phase on your turn, untap target creature you control. After this phase, there is an additional combat phase."
public ZarielArchdukeOfAvernusEmblem() {
this.setName("Emblem Zariel");
this.setExpansionSetCodeForImage("AFR");
super("Emblem Zariel");
this.getAbilities().add(new ZarielArchdukeOfAvernusEmblemAbility());
}
private ZarielArchdukeOfAvernusEmblem(final ZarielArchdukeOfAvernusEmblem card) {
super(card);
}
@Override
public ZarielArchdukeOfAvernusEmblem copy() {
return new ZarielArchdukeOfAvernusEmblem(this);
}
}
class ZarielArchdukeOfAvernusEmblemAbility extends TriggeredAbilityImpl {

View file

@ -35,7 +35,6 @@ public class AcademyAtTolariaWestPlane extends Plane {
public AcademyAtTolariaWestPlane() {
this.setPlaneType(Planes.PLANE_ACADEMY_AT_TOLARIA_WEST);
this.setExpansionSetCodeForImage("PCA");
// At the beginning of your end step, if you have 0 cards in hand, draw seven cards
Ability ability = new BeginningOfEndStepTriggeredAbility(Zone.COMMAND, new DrawCardsActivePlayerEffect(7), TargetController.ANY, HellbentAPCondition.instance, false);
@ -57,6 +56,15 @@ public class AcademyAtTolariaWestPlane extends Plane {
chaosAbility.setMayActivate(TargetController.ANY);
this.getAbilities().add(new SimpleStaticAbility(Zone.ALL, new PlanarDieRollCostIncreasingEffect(chaosAbility.getOriginalId())));
}
private AcademyAtTolariaWestPlane(final AcademyAtTolariaWestPlane plane) {
super(plane);
}
@Override
public AcademyAtTolariaWestPlane copy() {
return new AcademyAtTolariaWestPlane(this);
}
}
class DrawCardsActivePlayerEffect extends OneShotEffect {

View file

@ -46,7 +46,6 @@ public class AgyremPlane extends Plane {
public AgyremPlane() {
this.setPlaneType(Planes.PLANE_AGYREM);
this.setExpansionSetCodeForImage("PCA");
// Whenever a white creature dies, return it to the battlefield under its owner's control at the beginning of the next end step
DiesCreatureTriggeredAbility ability = new DiesCreatureTriggeredAbility(Zone.COMMAND, new AgyremEffect(), false, filterWhite, true);
@ -70,6 +69,15 @@ public class AgyremPlane extends Plane {
chaosAbility.setMayActivate(TargetController.ANY);
this.getAbilities().add(new SimpleStaticAbility(Zone.ALL, new PlanarDieRollCostIncreasingEffect(chaosAbility.getOriginalId())));
}
private AgyremPlane(final AgyremPlane plane) {
super(plane);
}
@Override
public AgyremPlane copy() {
return new AgyremPlane(this);
}
}
class AgyremEffect extends OneShotEffect {

View file

@ -37,7 +37,6 @@ public class AkoumPlane extends Plane {
public AkoumPlane() {
this.setPlaneType(Planes.PLANE_AKOUM);
this.setExpansionSetCodeForImage("PCA");
// Players may cast enchantment spells as if they had flash
SimpleStaticAbility ability = new SimpleStaticAbility(Zone.COMMAND, new CastAsThoughItHadFlashAllEffect(Duration.Custom, filterCard, true));
@ -58,4 +57,13 @@ public class AkoumPlane extends Plane {
chaosAbility.setMayActivate(TargetController.ANY);
this.getAbilities().add(new SimpleStaticAbility(Zone.ALL, new PlanarDieRollCostIncreasingEffect(chaosAbility.getOriginalId())));
}
private AkoumPlane(final AkoumPlane plane) {
super(plane);
}
@Override
public AkoumPlane copy() {
return new AkoumPlane(this);
}
}

View file

@ -33,7 +33,6 @@ public class AstralArenaPlane extends Plane {
public AstralArenaPlane() {
this.setPlaneType(Planes.PLANE_ASTRAL_ARENA);
this.setExpansionSetCodeForImage("PCA");
// No more than one creature can attack each turn. No more than one creature can block each turn.
SimpleStaticAbility ability = new SimpleStaticAbility(Zone.COMMAND, new AstralArenaAttackRestrictionEffect());
@ -58,6 +57,15 @@ public class AstralArenaPlane extends Plane {
chaosAbility.setMayActivate(TargetController.ANY);
this.getAbilities().add(new SimpleStaticAbility(Zone.ALL, new PlanarDieRollCostIncreasingEffect(chaosAbility.getOriginalId())));
}
private AstralArenaPlane(final AstralArenaPlane plane) {
super(plane);
}
@Override
public AstralArenaPlane copy() {
return new AstralArenaPlane(this);
}
}
class AstralArenaAttackRestrictionEffect extends RestrictionEffect {

View file

@ -50,7 +50,6 @@ public class BantPlane extends Plane {
public BantPlane() {
this.setPlaneType(Planes.PLANE_BANT);
this.setExpansionSetCodeForImage("PCA");
// All creatures have exalted
SimpleStaticAbility ability
@ -80,4 +79,13 @@ public class BantPlane extends Plane {
chaosAbility.setMayActivate(TargetController.ANY);
this.getAbilities().add(new SimpleStaticAbility(Zone.ALL, new PlanarDieRollCostIncreasingEffect(chaosAbility.getOriginalId())));
}
private BantPlane(final BantPlane plane) {
super(plane);
}
@Override
public BantPlane copy() {
return new BantPlane(this);
}
}

View file

@ -18,7 +18,6 @@ import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game;
import mage.game.command.Plane;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.game.permanent.Permanent;
import mage.target.Target;
import mage.target.targetpointer.FixedTarget;
@ -36,7 +35,6 @@ public class EdgeOfMalacolPlane extends Plane {
public EdgeOfMalacolPlane() {
this.setPlaneType(Planes.PLANE_EDGE_OF_MALACOL);
this.setExpansionSetCodeForImage("PCA");
// If a creature you control would untap during your untap step, put two +1/+1 counters on it instead.
SimpleStaticAbility ability = new SimpleStaticAbility(Zone.COMMAND, new EdgeOfMalacolEffect());
@ -57,6 +55,15 @@ public class EdgeOfMalacolPlane extends Plane {
chaosAbility.setMayActivate(TargetController.ANY);
this.getAbilities().add(new SimpleStaticAbility(Zone.ALL, new PlanarDieRollCostIncreasingEffect(chaosAbility.getOriginalId())));
}
private EdgeOfMalacolPlane(final EdgeOfMalacolPlane plane) {
super(plane);
}
@Override
public EdgeOfMalacolPlane copy() {
return new EdgeOfMalacolPlane(this);
}
}
class EdgeOfMalacolEffect extends ContinuousRuleModifyingEffectImpl {

View file

@ -1,7 +1,5 @@
package mage.game.command.planes;
import java.util.ArrayList;
import java.util.List;
import mage.MageObject;
import mage.ObjectColor;
import mage.abilities.Ability;
@ -31,6 +29,9 @@ import mage.target.common.TargetCreaturePermanent;
import mage.util.CardUtil;
import mage.watchers.common.PlanarRollWatcher;
import java.util.ArrayList;
import java.util.List;
/**
* @author spjspj
*/
@ -40,7 +41,6 @@ public class FeedingGroundsPlane extends Plane {
public FeedingGroundsPlane() {
this.setPlaneType(Planes.PLANE_FEEDING_GROUNDS);
this.setExpansionSetCodeForImage("PCA");
// Red spells cost {1} less to cast. Green spells cost {1} less to cast
Ability ability = new SimpleStaticAbility(Zone.COMMAND, new FeedingGroundsEffect());
@ -61,6 +61,15 @@ public class FeedingGroundsPlane extends Plane {
chaosAbility.setMayActivate(TargetController.ANY);
this.getAbilities().add(new SimpleStaticAbility(Zone.ALL, new PlanarDieRollCostIncreasingEffect(chaosAbility.getOriginalId())));
}
private FeedingGroundsPlane(final FeedingGroundsPlane plane) {
super(plane);
}
@Override
public FeedingGroundsPlane copy() {
return new FeedingGroundsPlane(this);
}
}
class FeedingGroundsEffect extends CostModificationEffectImpl {

Some files were not shown because too many files have changed in this diff Show more