diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MythicspoilerComSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MythicspoilerComSource.java index baa1830363e..9fc3658775a 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MythicspoilerComSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MythicspoilerComSource.java @@ -64,6 +64,7 @@ public enum MythicspoilerComSource implements CardImageSource { private final Map> cardNameAliasesStart; private final Map> sets; private final Set supportedSets; + private final Map> manualLinks; @Override public String getSourceName() { @@ -277,6 +278,21 @@ public enum MythicspoilerComSource implements CardImageSource { cardNameAliases.put("XLN-infuriatedgladiodon", "ragingswordtooth"); cardNameAliases.put("XLN-redoubledvolley", "repeatingbarrage"); + // + manualLinks = new HashMap<>(); + HashMap links = new HashMap<>(); + links.put("templeofaclazotz", "templeofaclazotz"); + links.put("conquerorsfoothold", "conquerorsfoothold"); + links.put("primalwellspring", "primalwellspring"); + links.put("azcantathesunkenruin", "azcantathesunkenruin"); + links.put("spiresoforazca", "spiresoforazca"); + links.put("treasurecove", "treasurecove"); + links.put("itlimoccradleofthesun", "itlimoccradleofthesun"); + links.put("lostvale", "lostvale"); + links.put("adantothefirstfort", "adantothefirstport"); + links.put("spitfirebastion", "spitfirebastion"); + manualLinks.put("XLN", links); + cardNameAliasesStart = new HashMap<>(); HashSet names = new HashSet<>(); names.add("eldrazidevastator.jpg"); @@ -372,7 +388,12 @@ public enum MythicspoilerComSource implements CardImageSource { pageLinks.put(cardName, baseUrl + cardLink); } } - + Map linksToAdd = manualLinks.get(cardSet); + if (linksToAdd != null) { + for (Map.Entry link : linksToAdd.entrySet()) { + pageLinks.put(link.getKey(), baseUrl + "cards/" + link.getValue() + ".jpg"); + } + } return pageLinks; } diff --git a/Mage.Sets/src/mage/cards/a/AdmiralBeckettBrass.java b/Mage.Sets/src/mage/cards/a/AdmiralBeckettBrass.java index a5554dd505c..77f6f600259 100644 --- a/Mage.Sets/src/mage/cards/a/AdmiralBeckettBrass.java +++ b/Mage.Sets/src/mage/cards/a/AdmiralBeckettBrass.java @@ -85,7 +85,8 @@ public class AdmiralBeckettBrass extends CardImpl { this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostAllEffect(1, 1, Duration.WhileOnBattlefield, filter, true))); // At the beginning of your end step, gain control of target nonland permanent controlled by a player who was dealt combat damage by three or more Pirates this turn. - Ability ability = new BeginningOfEndStepTriggeredAbility(new GainControlTargetEffect(Duration.Custom), TargetController.YOU, false); + Ability ability = new BeginningOfEndStepTriggeredAbility(new GainControlTargetEffect(Duration.Custom) + .setText("gain control of target nonland permanent controlled by a player who was dealt combat damage by three or more Pirates this turn"), TargetController.YOU, false); ability.addTarget(new TargetNonlandPermanent()); originalId = ability.getOriginalId(); this.addAbility(ability, new DamagedByPiratesWatcher()); diff --git a/Mage.Sets/src/mage/cards/a/AdroitHateflayer.java b/Mage.Sets/src/mage/cards/a/AdroitHateflayer.java index e233c665125..a8019903e37 100644 --- a/Mage.Sets/src/mage/cards/a/AdroitHateflayer.java +++ b/Mage.Sets/src/mage/cards/a/AdroitHateflayer.java @@ -51,7 +51,7 @@ public class AdroitHateflayer extends CardImpl { this.toughness = new MageInt(3); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // Whenever Adroit Hateflayer attacks, each opponent loses 2 life. this.addAbility(new AttacksTriggeredAbility(new LoseLifeOpponentsEffect(2), false)); diff --git a/Mage.Sets/src/mage/cards/a/AlleyStrangler.java b/Mage.Sets/src/mage/cards/a/AlleyStrangler.java index 39c189faa44..2dec0ba20c0 100644 --- a/Mage.Sets/src/mage/cards/a/AlleyStrangler.java +++ b/Mage.Sets/src/mage/cards/a/AlleyStrangler.java @@ -50,7 +50,7 @@ public class AlleyStrangler extends CardImpl { this.toughness = new MageInt(3); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); } public AlleyStrangler(final AlleyStrangler card) { diff --git a/Mage.Sets/src/mage/cards/a/AnointedDeacon.java b/Mage.Sets/src/mage/cards/a/AnointedDeacon.java index fd6c5757a03..fff9f721308 100644 --- a/Mage.Sets/src/mage/cards/a/AnointedDeacon.java +++ b/Mage.Sets/src/mage/cards/a/AnointedDeacon.java @@ -32,13 +32,12 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.BeginningOfCombatTriggeredAbility; import mage.abilities.effects.common.continuous.BoostTargetEffect; -import mage.constants.*; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.*; import mage.filter.common.FilterCreaturePermanent; -import mage.target.common.TargetCreaturePermanent; import mage.filter.predicate.mageobject.SubtypePredicate; - +import mage.target.common.TargetCreaturePermanent; /** * @@ -54,14 +53,16 @@ public class AnointedDeacon extends CardImpl { public AnointedDeacon(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{B}"); - + this.subtype.add(SubType.VAMPIRE); this.subtype.add(SubType.CLERIC); this.power = new MageInt(3); this.toughness = new MageInt(3); // At the beginning of combat on your turn, you may have target Vampire get +2/+0 until end of turn. - Ability ability = new BeginningOfCombatTriggeredAbility(Zone.BATTLEFIELD, new BoostTargetEffect(2, 0, Duration.EndOfTurn), TargetController.YOU, true, false); + Ability ability = new BeginningOfCombatTriggeredAbility(Zone.BATTLEFIELD, + new BoostTargetEffect(2, 0, Duration.EndOfTurn).setText("you may have target Vampire get +2/+0 until end of turn"), + TargetController.YOU, true, false); ability.addTarget(new TargetCreaturePermanent(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/a/AradaraExpress.java b/Mage.Sets/src/mage/cards/a/AradaraExpress.java index 15ef9ba6868..9decfe74033 100644 --- a/Mage.Sets/src/mage/cards/a/AradaraExpress.java +++ b/Mage.Sets/src/mage/cards/a/AradaraExpress.java @@ -49,7 +49,7 @@ public class AradaraExpress extends CardImpl { this.toughness = new MageInt(6); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // Crew 4 this.addAbility(new CrewAbility(4)); } diff --git a/Mage.Sets/src/mage/cards/a/AshesOfTheAbhorrent.java b/Mage.Sets/src/mage/cards/a/AshesOfTheAbhorrent.java index 6591636360f..482cfc09ac0 100644 --- a/Mage.Sets/src/mage/cards/a/AshesOfTheAbhorrent.java +++ b/Mage.Sets/src/mage/cards/a/AshesOfTheAbhorrent.java @@ -52,7 +52,7 @@ public class AshesOfTheAbhorrent extends CardImpl { public AshesOfTheAbhorrent(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}"); - // Players can't cast spells from graveyards or activate abilities from graveyards. + // Players can't cast spells from graveyards or activate abilities of cards in graveyards. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new AshesOfTheAbhorrentEffect())); // Whenever a creature dies, you gain 1 life. @@ -73,7 +73,7 @@ class AshesOfTheAbhorrentEffect extends ContinuousRuleModifyingEffectImpl { public AshesOfTheAbhorrentEffect() { super(Duration.WhileOnBattlefield, Outcome.Neutral); - staticText = "Players can't cast spells from graveyards or activate abilities from graveyards"; + staticText = "Players can't cast spells from graveyards or activate abilities of cards in graveyards"; } public AshesOfTheAbhorrentEffect(final AshesOfTheAbhorrentEffect effect) { diff --git a/Mage.Sets/src/mage/cards/a/AtarkaPummeler.java b/Mage.Sets/src/mage/cards/a/AtarkaPummeler.java index b71d99d5afb..631bbb377ec 100644 --- a/Mage.Sets/src/mage/cards/a/AtarkaPummeler.java +++ b/Mage.Sets/src/mage/cards/a/AtarkaPummeler.java @@ -63,7 +63,7 @@ public class AtarkaPummeler extends CardImpl { // Formidable - {3}{R}{R}: Creatures you control gain menace until end of turn. Activate this ability only if creature you control have total power 8 or greater. (They can't be blocked except by two or more creatures.) Ability ability = new ActivateIfConditionActivatedAbility( Zone.BATTLEFIELD, - new GainAbilityAllEffect(MenaceAbility.getInstance(), Duration.EndOfTurn, filter), + new GainAbilityAllEffect(new MenaceAbility(), Duration.EndOfTurn, filter), new ManaCostsImpl("{3}{R}{R}"), FormidableCondition.instance); ability.setAbilityWord(AbilityWord.FORMIDABLE); diff --git a/Mage.Sets/src/mage/cards/b/BelligerentSliver.java b/Mage.Sets/src/mage/cards/b/BelligerentSliver.java index 4237231bc90..02af27ab0ce 100644 --- a/Mage.Sets/src/mage/cards/b/BelligerentSliver.java +++ b/Mage.Sets/src/mage/cards/b/BelligerentSliver.java @@ -62,7 +62,7 @@ public class BelligerentSliver extends CardImpl { this.toughness = new MageInt(2); // Sliver creatures you control have menace. (They can't be blocked except by two or more creatures.)" - Effect effect = new GainAbilityAllEffect(MenaceAbility.getInstance(), Duration.WhileOnBattlefield, filter); + Effect effect = new GainAbilityAllEffect(new MenaceAbility(), Duration.WhileOnBattlefield, filter); effect.setText("Sliver creatures you control have menace. (They can't be blocked except by two or more creatures.)"); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); } diff --git a/Mage.Sets/src/mage/cards/b/BishopOfRebirth.java b/Mage.Sets/src/mage/cards/b/BishopOfRebirth.java index f60e12001b6..590ac7d9a35 100644 --- a/Mage.Sets/src/mage/cards/b/BishopOfRebirth.java +++ b/Mage.Sets/src/mage/cards/b/BishopOfRebirth.java @@ -36,8 +36,8 @@ import mage.abilities.keyword.VigilanceAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.ComparisonType; +import mage.constants.SubType; import mage.filter.FilterCard; import mage.filter.common.FilterCreatureCard; import mage.filter.predicate.mageobject.CardTypePredicate; @@ -49,7 +49,7 @@ import mage.target.common.TargetCardInYourGraveyard; * @author TacomenX */ public class BishopOfRebirth extends CardImpl { - + private static final FilterCard filter = new FilterCreatureCard("creature card with converted mana cost 3 or less from your graveyard"); static { @@ -59,7 +59,7 @@ public class BishopOfRebirth extends CardImpl { public BishopOfRebirth(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}{W}"); - + this.subtype.add(SubType.VAMPIRE); this.subtype.add(SubType.CLERIC); this.power = new MageInt(3); @@ -69,7 +69,8 @@ public class BishopOfRebirth extends CardImpl { this.addAbility(VigilanceAbility.getInstance()); // Whenever Bishop of Rebirth attacks, you may return target creature card with converted mana cost 3 or less from your graveyard to the battlefield. - Ability ability = new AttacksTriggeredAbility(new ReturnFromGraveyardToBattlefieldTargetEffect(), true); + Ability ability = new AttacksTriggeredAbility(new ReturnFromGraveyardToBattlefieldTargetEffect() + .setText("you may return target creature card with converted mana cost 3 or less from your graveyard to the battlefield"), true); ability.addTarget(new TargetCardInYourGraveyard(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/b/BishopOfTheBloodstained.java b/Mage.Sets/src/mage/cards/b/BishopOfTheBloodstained.java index e0164886e0c..d301e788ac3 100644 --- a/Mage.Sets/src/mage/cards/b/BishopOfTheBloodstained.java +++ b/Mage.Sets/src/mage/cards/b/BishopOfTheBloodstained.java @@ -33,15 +33,15 @@ import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; import mage.abilities.effects.common.LoseLifeTargetEffect; -import mage.constants.SubType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.SubType; import mage.constants.TargetController; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.mageobject.SubtypePredicate; import mage.filter.predicate.permanent.ControllerPredicate; -import mage.target.TargetPlayer; +import mage.target.common.TargetOpponent; /** * @@ -64,9 +64,9 @@ public class BishopOfTheBloodstained extends CardImpl { this.power = new MageInt(3); this.toughness = new MageInt(3); - // When Bishop of the Bloodstained enters the battlefield, target player loses 1 life for each vampire you control. + // When Bishop of the Bloodstained enters the battlefield, target opponent loses 1 life for each vampire you control. Ability ability = new EntersBattlefieldTriggeredAbility(new LoseLifeTargetEffect(new PermanentsOnBattlefieldCount(filter))); - ability.addTarget(new TargetPlayer()); + ability.addTarget(new TargetOpponent()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/b/BlightKeeper.java b/Mage.Sets/src/mage/cards/b/BlightKeeper.java index 89303c6d926..b0c7d19305a 100644 --- a/Mage.Sets/src/mage/cards/b/BlightKeeper.java +++ b/Mage.Sets/src/mage/cards/b/BlightKeeper.java @@ -36,11 +36,11 @@ import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.LoseLifeTargetEffect; -import mage.constants.SubType; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.SubType; import mage.constants.Zone; import mage.target.common.TargetOpponent; @@ -63,7 +63,7 @@ public class BlightKeeper extends CardImpl { // {7}{B}, {T}, Sacrifice Blight Keeper: Target opponent loses 4 life and you gain 4 life. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new LoseLifeTargetEffect(4), new ManaCostsImpl("{7}{B}")); - ability.addEffect(new GainLifeEffect(4)); + ability.addEffect(new GainLifeEffect(4).setText("and you gain 4 life")); ability.addTarget(new TargetOpponent()); ability.addCost(new TapSourceCost()); ability.addCost(new SacrificeSourceCost()); diff --git a/Mage.Sets/src/mage/cards/b/BloodChinRager.java b/Mage.Sets/src/mage/cards/b/BloodChinRager.java index 286f2aafa1b..2657e0931bc 100644 --- a/Mage.Sets/src/mage/cards/b/BloodChinRager.java +++ b/Mage.Sets/src/mage/cards/b/BloodChinRager.java @@ -60,7 +60,7 @@ public class BloodChinRager extends CardImpl { this.toughness = new MageInt(2); // Whenever Blood-Chin Rager attacks, Warrior creatures you control gain menace until end of turn. (They can't be blocked except by two or more creatures.) - this.addAbility(new AttacksTriggeredAbility(new GainAbilityAllEffect(MenaceAbility.getInstance(), Duration.EndOfTurn, filter), false)); + this.addAbility(new AttacksTriggeredAbility(new GainAbilityAllEffect(new MenaceAbility(), Duration.EndOfTurn, filter), false)); } public BloodChinRager(final BloodChinRager card) { diff --git a/Mage.Sets/src/mage/cards/b/BobaFett.java b/Mage.Sets/src/mage/cards/b/BobaFett.java index 6efbf2d0d6d..7680e3cfdb6 100644 --- a/Mage.Sets/src/mage/cards/b/BobaFett.java +++ b/Mage.Sets/src/mage/cards/b/BobaFett.java @@ -60,7 +60,7 @@ public class BobaFett extends CardImpl { this.toughness = new MageInt(4); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // Deathtouch this.addAbility(DeathtouchAbility.getInstance()); diff --git a/Mage.Sets/src/mage/cards/b/BoggartBrute.java b/Mage.Sets/src/mage/cards/b/BoggartBrute.java index 33931e649fe..dbf317e2f2b 100644 --- a/Mage.Sets/src/mage/cards/b/BoggartBrute.java +++ b/Mage.Sets/src/mage/cards/b/BoggartBrute.java @@ -48,7 +48,7 @@ public class BoggartBrute extends CardImpl { this.toughness = new MageInt(2); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); } public BoggartBrute(final BoggartBrute card) { diff --git a/Mage.Sets/src/mage/cards/b/BontuTheGlorified.java b/Mage.Sets/src/mage/cards/b/BontuTheGlorified.java index 8165cbbf054..41bb478723d 100644 --- a/Mage.Sets/src/mage/cards/b/BontuTheGlorified.java +++ b/Mage.Sets/src/mage/cards/b/BontuTheGlorified.java @@ -65,7 +65,7 @@ public class BontuTheGlorified extends CardImpl { this.toughness = new MageInt(6); //Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); //Indestructible this.addAbility(IndestructibleAbility.getInstance()); diff --git a/Mage.Sets/src/mage/cards/b/BullRancor.java b/Mage.Sets/src/mage/cards/b/BullRancor.java index a65a4333b0d..b61ec2923c5 100644 --- a/Mage.Sets/src/mage/cards/b/BullRancor.java +++ b/Mage.Sets/src/mage/cards/b/BullRancor.java @@ -59,7 +59,7 @@ public class BullRancor extends CardImpl { // As long as Bull Rancor is monstrous, creatures you control have menace. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new GainAbilityControlledEffect(MenaceAbility.getInstance(), Duration.WhileOnBattlefield), + new GainAbilityControlledEffect(new MenaceAbility(), Duration.WhileOnBattlefield), MonstrousCondition.instance, "As long as Bull Rancor is monstrous, creatures you control have menace") )); diff --git a/Mage.Sets/src/mage/cards/c/CaterwaulingBoggart.java b/Mage.Sets/src/mage/cards/c/CaterwaulingBoggart.java index b2b68486c28..23593081c23 100644 --- a/Mage.Sets/src/mage/cards/c/CaterwaulingBoggart.java +++ b/Mage.Sets/src/mage/cards/c/CaterwaulingBoggart.java @@ -66,13 +66,13 @@ public class CaterwaulingBoggart extends CardImpl { // Each Goblin you control has menace. (They can't be blocked except by two or more creatures.) this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect( - MenaceAbility.getInstance(), + new MenaceAbility(), Duration.WhileOnBattlefield, filterGoblin, "Each Goblin you control has menace. (They can't be blocked except by two or more creatures.)"))); // Each Elemental you control has menace. (They can't be blocked except by two or more creatures.) this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect( - MenaceAbility.getInstance(), + new MenaceAbility(), Duration.WhileOnBattlefield, filterElemental, "Each Elemental you control has menace. (They can't be blocked except by two or more creatures.)"))); } diff --git a/Mage.Sets/src/mage/cards/c/ChitinousCloak.java b/Mage.Sets/src/mage/cards/c/ChitinousCloak.java index 505ab9a6001..165c8f52c20 100644 --- a/Mage.Sets/src/mage/cards/c/ChitinousCloak.java +++ b/Mage.Sets/src/mage/cards/c/ChitinousCloak.java @@ -56,7 +56,7 @@ public class ChitinousCloak extends CardImpl { // Equipped creature gets +2/+2 and has menace. Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(2, 2)); - Effect effect = new GainAbilityAttachedEffect(MenaceAbility.getInstance(), AttachmentType.EQUIPMENT); + Effect effect = new GainAbilityAttachedEffect(new MenaceAbility(), AttachmentType.EQUIPMENT); effect.setText("and has menace"); ability.addEffect(effect); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/c/ChitteringHost.java b/Mage.Sets/src/mage/cards/c/ChitteringHost.java index 2f638f1f4f8..9e65b786e82 100644 --- a/Mage.Sets/src/mage/cards/c/ChitteringHost.java +++ b/Mage.Sets/src/mage/cards/c/ChitteringHost.java @@ -61,13 +61,13 @@ public class ChitteringHost extends MeldCard { this.addAbility(HasteAbility.getInstance()); // Menace (This creature can't be blocked except by two or more creatures. - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // When Chittering Host enters the battlefield, other creatures you control get +1/+0 and gain menace until end of turn. Effect effect = new BoostControlledEffect(1, 0, Duration.EndOfTurn, true); effect.setText("other creatures you control get +1/+0"); Ability ability = new EntersBattlefieldTriggeredAbility(effect, false); - effect = new GainAbilityAllEffect(MenaceAbility.getInstance(), Duration.EndOfTurn, new FilterControlledCreaturePermanent("other creatures"), true); + effect = new GainAbilityAllEffect(new MenaceAbility(), Duration.EndOfTurn, new FilterControlledCreaturePermanent("other creatures"), true); effect.setText("and gain menace until end of turn"); ability.addEffect(effect); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/c/ConquerorsFoothold.java b/Mage.Sets/src/mage/cards/c/ConquerorsFoothold.java index 0c50dac9194..13c53d85bfc 100644 --- a/Mage.Sets/src/mage/cards/c/ConquerorsFoothold.java +++ b/Mage.Sets/src/mage/cards/c/ConquerorsFoothold.java @@ -33,7 +33,7 @@ import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawDiscardControllerEffect; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.mana.ColorlessManaAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -71,7 +71,7 @@ public class ConquerorsFoothold extends CardImpl { // {6}, {T}: Return target card from your graveyard to your hand. SimpleActivatedAbility ability3 = new SimpleActivatedAbility(Zone.BATTLEFIELD, - new ReturnToHandTargetEffect(), + new ReturnFromGraveyardToHandTargetEffect(), new ManaCostsImpl("{6}")); ability3.addCost(new TapSourceCost()); ability3.addTarget(new TargetCardInYourGraveyard()); diff --git a/Mage.Sets/src/mage/cards/c/CursedMinotaur.java b/Mage.Sets/src/mage/cards/c/CursedMinotaur.java index 2e37c6d8f90..a363957ba02 100644 --- a/Mage.Sets/src/mage/cards/c/CursedMinotaur.java +++ b/Mage.Sets/src/mage/cards/c/CursedMinotaur.java @@ -50,7 +50,7 @@ public class CursedMinotaur extends CardImpl { this.toughness = new MageInt(2); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); } diff --git a/Mage.Sets/src/mage/cards/d/DarkNourishment.java b/Mage.Sets/src/mage/cards/d/DarkNourishment.java index a7709f9df8e..4ade700f3cc 100644 --- a/Mage.Sets/src/mage/cards/d/DarkNourishment.java +++ b/Mage.Sets/src/mage/cards/d/DarkNourishment.java @@ -42,9 +42,9 @@ import mage.target.common.TargetCreatureOrPlayer; public class DarkNourishment extends CardImpl { public DarkNourishment(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{9}{7}"); + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{4}{B}"); - // Dark Nourishment deals 3 damage to target creature or player. You gain 3 life. + // Dark Nourishment deals 3 damage to target creature or player. You gain 3 life. this.getSpellAbility().addEffect(new DamageTargetEffect(3)); this.getSpellAbility().addTarget(new TargetCreatureOrPlayer()); this.getSpellAbility().addEffect(new GainLifeEffect(3)); diff --git a/Mage.Sets/src/mage/cards/d/DarthVader.java b/Mage.Sets/src/mage/cards/d/DarthVader.java index 2907d5f1f8a..85a40aca5d2 100644 --- a/Mage.Sets/src/mage/cards/d/DarthVader.java +++ b/Mage.Sets/src/mage/cards/d/DarthVader.java @@ -63,7 +63,7 @@ public class DarthVader extends CardImpl { this.nightCard = true; // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // Lifelink this.addAbility(LifelinkAbility.getInstance()); diff --git a/Mage.Sets/src/mage/cards/d/DeathlessAncient.java b/Mage.Sets/src/mage/cards/d/DeathlessAncient.java index d1c0ee4ab73..1db85ec80bb 100644 --- a/Mage.Sets/src/mage/cards/d/DeathlessAncient.java +++ b/Mage.Sets/src/mage/cards/d/DeathlessAncient.java @@ -31,7 +31,7 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapTargetCost; -import mage.abilities.effects.common.ReturnToHandSourceEffect; +import mage.abilities.effects.common.ReturnSourceFromGraveyardToHandEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -59,7 +59,7 @@ public class DeathlessAncient extends CardImpl { public DeathlessAncient(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{B}{B}"); - + this.subtype.add(SubType.VAMPIRE); this.subtype.add(SubType.KNIGHT); this.power = new MageInt(4); @@ -69,7 +69,9 @@ public class DeathlessAncient extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // Tap three untapped Vampires you control: Return Deathless Ancient from your graveyard to your hand. - this.addAbility(new SimpleActivatedAbility(Zone.GRAVEYARD, new ReturnToHandSourceEffect(), new TapTargetCost(new TargetControlledPermanent(3, 3, filter, true)))); + this.addAbility(new SimpleActivatedAbility(Zone.GRAVEYARD, + new ReturnSourceFromGraveyardToHandEffect(), + new TapTargetCost(new TargetControlledPermanent(3, 3, filter, true)))); } diff --git a/Mage.Sets/src/mage/cards/d/Demoralize.java b/Mage.Sets/src/mage/cards/d/Demoralize.java index bbf15fec7bf..fc29a2b247a 100644 --- a/Mage.Sets/src/mage/cards/d/Demoralize.java +++ b/Mage.Sets/src/mage/cards/d/Demoralize.java @@ -52,7 +52,7 @@ public class Demoralize extends CardImpl { // All creatures gain menace until end of turn. (They can't be blocked except by two or more creatures.) - this.getSpellAbility().addEffect(new GainAbilityAllEffect(MenaceAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES)); + this.getSpellAbility().addEffect(new GainAbilityAllEffect(new MenaceAbility(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES)); // Threshold — If seven or more cards are in your graveyard, creatures can't block this turn. this.getSpellAbility().addEffect( diff --git a/Mage.Sets/src/mage/cards/d/DeputizedProtester.java b/Mage.Sets/src/mage/cards/d/DeputizedProtester.java index 0851efc39ef..b5550b88287 100644 --- a/Mage.Sets/src/mage/cards/d/DeputizedProtester.java +++ b/Mage.Sets/src/mage/cards/d/DeputizedProtester.java @@ -50,7 +50,7 @@ public class DeputizedProtester extends CardImpl { this.toughness = new MageInt(1); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // Melee this.addAbility(new MeleeAbility()); } diff --git a/Mage.Sets/src/mage/cards/d/DerangedWhelp.java b/Mage.Sets/src/mage/cards/d/DerangedWhelp.java index 1cdf0c5631a..7b00a45fb70 100644 --- a/Mage.Sets/src/mage/cards/d/DerangedWhelp.java +++ b/Mage.Sets/src/mage/cards/d/DerangedWhelp.java @@ -48,7 +48,7 @@ public class DerangedWhelp extends CardImpl { this.toughness = new MageInt(1); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); } public DerangedWhelp(final DerangedWhelp card) { diff --git a/Mage.Sets/src/mage/cards/d/DireFleetCaptain.java b/Mage.Sets/src/mage/cards/d/DireFleetCaptain.java index e264cc78fa1..cf82dab8751 100644 --- a/Mage.Sets/src/mage/cards/d/DireFleetCaptain.java +++ b/Mage.Sets/src/mage/cards/d/DireFleetCaptain.java @@ -64,7 +64,8 @@ public class DireFleetCaptain extends CardImpl { // Whenever Dire Fleet Captain attacks, it gets +1/+1 until end of turn for each other attacking Pirate. PermanentsOnBattlefieldCount value = new PermanentsOnBattlefieldCount(filter); - this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(value, value, Duration.EndOfTurn, true), false)); + this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(value, value, Duration.EndOfTurn, true) + .setText("it gets +1/+1 until end of turn for each other attacking Pirate"), false)); } public DireFleetCaptain(final DireFleetCaptain card) { diff --git a/Mage.Sets/src/mage/cards/d/DireFleetInterloper.java b/Mage.Sets/src/mage/cards/d/DireFleetInterloper.java index 65703fdf0dc..f0ccc16a903 100644 --- a/Mage.Sets/src/mage/cards/d/DireFleetInterloper.java +++ b/Mage.Sets/src/mage/cards/d/DireFleetInterloper.java @@ -52,7 +52,7 @@ public class DireFleetInterloper extends CardImpl { this.toughness = new MageInt(2); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // When Dire Fleet Interloper enters the battlefield, it explores. this.addAbility(new EntersBattlefieldTriggeredAbility(new ExploreSourceEffect())); diff --git a/Mage.Sets/src/mage/cards/d/DireFleetRavager.java b/Mage.Sets/src/mage/cards/d/DireFleetRavager.java index 821e8beb0c9..2cb8e9204a3 100644 --- a/Mage.Sets/src/mage/cards/d/DireFleetRavager.java +++ b/Mage.Sets/src/mage/cards/d/DireFleetRavager.java @@ -58,7 +58,7 @@ public class DireFleetRavager extends CardImpl { this.toughness = new MageInt(4); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // Deathtouch this.addAbility(DeathtouchAbility.getInstance()); diff --git a/Mage.Sets/src/mage/cards/d/Dreamstealer.java b/Mage.Sets/src/mage/cards/d/Dreamstealer.java index 9bda51702d4..d48f9a3a77e 100644 --- a/Mage.Sets/src/mage/cards/d/Dreamstealer.java +++ b/Mage.Sets/src/mage/cards/d/Dreamstealer.java @@ -58,7 +58,7 @@ public class Dreamstealer extends CardImpl { this.toughness = new MageInt(2); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // When Dreamstealer deals combat damage to a player, that player discards that many cards. this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new DreamstealerDiscardEffect(), false, true)); diff --git a/Mage.Sets/src/mage/cards/d/DrivenDespair.java b/Mage.Sets/src/mage/cards/d/DrivenDespair.java index 82afbe7ce2f..7d15b56b480 100644 --- a/Mage.Sets/src/mage/cards/d/DrivenDespair.java +++ b/Mage.Sets/src/mage/cards/d/DrivenDespair.java @@ -63,7 +63,7 @@ public class DrivenDespair extends SplitCard { // Aftermath ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true)); // Until end of turn, creatures you control gain menace and "Whenever this creature deals combat damage to a player, that player discards a card." - getRightHalfCard().getSpellAbility().addEffect(new GainAbilityControlledEffect(MenaceAbility.getInstance(), Duration.EndOfTurn)); + getRightHalfCard().getSpellAbility().addEffect(new GainAbilityControlledEffect(new MenaceAbility(), Duration.EndOfTurn)); ability = new DealsCombatDamageToAPlayerTriggeredAbility(new DiscardTargetEffect(1), false, true); getRightHalfCard().getSpellAbility().addEffect(new GainAbilityControlledEffect(ability, Duration.EndOfTurn) .setText("and \"Whenever this creature deals combat damage to a player, that player discards a card.\"")); diff --git a/Mage.Sets/src/mage/cards/e/EmberhornMinotaur.java b/Mage.Sets/src/mage/cards/e/EmberhornMinotaur.java index eb5aab3ed48..855609590cb 100644 --- a/Mage.Sets/src/mage/cards/e/EmberhornMinotaur.java +++ b/Mage.Sets/src/mage/cards/e/EmberhornMinotaur.java @@ -59,7 +59,7 @@ public class EmberhornMinotaur extends CardImpl { Effect effect = new BoostSourceEffect(1, 1, Duration.EndOfTurn); effect.setText("it gets +1/+1"); BecomesExertSourceTriggeredAbility ability = new BecomesExertSourceTriggeredAbility(effect); - effect = new GainAbilitySourceEffect(MenaceAbility.getInstance(), Duration.EndOfTurn); + effect = new GainAbilitySourceEffect(new MenaceAbility(), Duration.EndOfTurn); effect.setText("and gains menace until end of turn"); ability.addEffect(effect); this.addAbility(new ExertAbility(ability)); diff --git a/Mage.Sets/src/mage/cards/e/EmbraalBruiser.java b/Mage.Sets/src/mage/cards/e/EmbraalBruiser.java index 74c8ed3d52d..9904469165c 100644 --- a/Mage.Sets/src/mage/cards/e/EmbraalBruiser.java +++ b/Mage.Sets/src/mage/cards/e/EmbraalBruiser.java @@ -60,7 +60,7 @@ public class EmbraalBruiser extends CardImpl { // Embraal Bruiser has menace as long as you control an artifact. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new GainAbilitySourceEffect(MenaceAbility.getInstance()), + new GainAbilitySourceEffect(new MenaceAbility()), new PermanentsOnTheBattlefieldCondition(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT), "{this} has menace as long as you control an artifact"))); } diff --git a/Mage.Sets/src/mage/cards/f/FathomFleetCaptain.java b/Mage.Sets/src/mage/cards/f/FathomFleetCaptain.java index 45715268b92..72f6e09eaed 100644 --- a/Mage.Sets/src/mage/cards/f/FathomFleetCaptain.java +++ b/Mage.Sets/src/mage/cards/f/FathomFleetCaptain.java @@ -70,7 +70,7 @@ public class FathomFleetCaptain extends CardImpl { this.toughness = new MageInt(1); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // Whenever Fathom Fleet Captain attacks, if you control another nontoken Pirate, you may pay {2}. If you do, creature a 2/2 black Pirate creature token with menace. this.addAbility(new ConditionalTriggeredAbility( diff --git a/Mage.Sets/src/mage/cards/f/FathomFleetCutthroat.java b/Mage.Sets/src/mage/cards/f/FathomFleetCutthroat.java index a20944d0d79..cb3a84b6190 100644 --- a/Mage.Sets/src/mage/cards/f/FathomFleetCutthroat.java +++ b/Mage.Sets/src/mage/cards/f/FathomFleetCutthroat.java @@ -32,10 +32,10 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.common.DestroyTargetEffect; -import mage.constants.SubType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.SubType; import mage.constants.TargetController; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.permanent.ControllerPredicate; @@ -66,6 +66,7 @@ public class FathomFleetCutthroat extends CardImpl { // When Fathom Fleet Cutthroat enters the battlefield, destroy target creature an opponent controls that was dealt damage this turn. Ability ability = new EntersBattlefieldTriggeredAbility(new DestroyTargetEffect(), false); ability.addTarget(new TargetCreaturePermanent(filter)); + this.addAbility(ability); } public FathomFleetCutthroat(final FathomFleetCutthroat card) { diff --git a/Mage.Sets/src/mage/cards/f/FieldOfRuin.java b/Mage.Sets/src/mage/cards/f/FieldOfRuin.java index ccd0cc0f343..93cce26254a 100644 --- a/Mage.Sets/src/mage/cards/f/FieldOfRuin.java +++ b/Mage.Sets/src/mage/cards/f/FieldOfRuin.java @@ -36,9 +36,9 @@ import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.mana.ColorlessManaAbility; -import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.cards.CardsImpl; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SuperType; @@ -79,6 +79,7 @@ public class FieldOfRuin extends CardImpl { ability.addCost(new SacrificeSourceCost()); ability.addEffect(new FieldOfRuinEffect()); ability.addTarget(new TargetLandPermanent(filter)); + this.addAbility(ability); } public FieldOfRuin(final FieldOfRuin card) { @@ -95,7 +96,7 @@ class FieldOfRuinEffect extends OneShotEffect { FieldOfRuinEffect() { super(Outcome.Benefit); - this.staticText = "Each player searches his or her library for a basic land card, puts it onto the battlefield, then shuffles his or her library."; + this.staticText = "Each player searches his or her library for a basic land card, puts it onto the battlefield, then shuffles his or her library"; } FieldOfRuinEffect(final FieldOfRuinEffect effect) { @@ -116,13 +117,7 @@ class FieldOfRuinEffect extends OneShotEffect { if (player != null) { TargetCardInLibrary target = new TargetCardInLibrary(0, 1, StaticFilters.FILTER_BASIC_LAND_CARD); if (player.searchLibrary(target, game)) { - for (UUID cardId : target.getTargets()) { - Card card = player.getLibrary().getCard(cardId, game); - if (card != null) { - card.putOntoBattlefield(game, Zone.LIBRARY, source.getSourceId(), player.getId()); - } - - } + player.moveCards(new CardsImpl(target.getTargets()), Zone.BATTLEFIELD, source, game); player.shuffleLibrary(source, game); } } diff --git a/Mage.Sets/src/mage/cards/f/FireShrineKeeper.java b/Mage.Sets/src/mage/cards/f/FireShrineKeeper.java index e7ff050e4a9..442e83b0b87 100644 --- a/Mage.Sets/src/mage/cards/f/FireShrineKeeper.java +++ b/Mage.Sets/src/mage/cards/f/FireShrineKeeper.java @@ -57,7 +57,7 @@ public class FireShrineKeeper extends CardImpl { this.toughness = new MageInt(1); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // {7}{R}, {T}, Sacrifice Fire Shrine Keeper: It deals 3 damage to each of up to two target creatures. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, diff --git a/Mage.Sets/src/mage/cards/f/FiremantleMage.java b/Mage.Sets/src/mage/cards/f/FiremantleMage.java index 6123439b52b..0de938a125c 100644 --- a/Mage.Sets/src/mage/cards/f/FiremantleMage.java +++ b/Mage.Sets/src/mage/cards/f/FiremantleMage.java @@ -55,7 +55,7 @@ public class FiremantleMage extends CardImpl { // Rally — Whenver Firemantle Mage or another Ally enters the battlefield under your control, creatures you control gain menace until end of turn. this.addAbility(new AllyEntersBattlefieldTriggeredAbility( - new GainAbilityControlledEffect(MenaceAbility.getInstance(), Duration.EndOfTurn, FILTER_PERMANENT_CREATURES), false)); + new GainAbilityControlledEffect(new MenaceAbility(), Duration.EndOfTurn, FILTER_PERMANENT_CREATURES), false)); } public FiremantleMage(final FiremantleMage card) { diff --git a/Mage.Sets/src/mage/cards/f/FlamebladeAdept.java b/Mage.Sets/src/mage/cards/f/FlamebladeAdept.java index ab1b40c5c44..f464c8c1337 100644 --- a/Mage.Sets/src/mage/cards/f/FlamebladeAdept.java +++ b/Mage.Sets/src/mage/cards/f/FlamebladeAdept.java @@ -53,7 +53,7 @@ public class FlamebladeAdept extends CardImpl { this.toughness = new MageInt(2); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // Whenever you cycle or discard a card, Flameblade Adept gets +1/+0 until end of turn. this.addAbility(new CycleOrDiscardControllerTriggeredAbility(new BoostSourceEffect(1, 0, Duration.EndOfTurn))); diff --git a/Mage.Sets/src/mage/cards/g/GatstafRavagers.java b/Mage.Sets/src/mage/cards/g/GatstafRavagers.java index 00b7d4fa11d..f84e3cf6b46 100644 --- a/Mage.Sets/src/mage/cards/g/GatstafRavagers.java +++ b/Mage.Sets/src/mage/cards/g/GatstafRavagers.java @@ -60,7 +60,7 @@ public class GatstafRavagers extends CardImpl { this.nightCard = true; // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // At the beginning of each upkeep, if a player cast two or more spells last turn, transform Gatstaf Ravagers. TriggeredAbility ability = new BeginningOfUpkeepTriggeredAbility(new TransformSourceEffect(false), TargetController.ANY, false); this.addAbility(new ConditionalTriggeredAbility(ability, TwoOrMoreSpellsWereCastLastTurnCondition.instance, TransformAbility.TWO_OR_MORE_SPELLS_TRANSFORM_RULE)); diff --git a/Mage.Sets/src/mage/cards/g/GeyserfieldStalker.java b/Mage.Sets/src/mage/cards/g/GeyserfieldStalker.java index 3fd4a648b22..265d515e2c3 100644 --- a/Mage.Sets/src/mage/cards/g/GeyserfieldStalker.java +++ b/Mage.Sets/src/mage/cards/g/GeyserfieldStalker.java @@ -51,7 +51,7 @@ public class GeyserfieldStalker extends CardImpl { this.toughness = new MageInt(2); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // Landfall - Whenever a land enters the battlefield under your control, Geyserfield Stalker gets +2/+2 until end of turn. this.addAbility(new LandfallAbility(new BoostSourceEffect(2, 2, Duration.EndOfTurn), false)); } diff --git a/Mage.Sets/src/mage/cards/g/GiantSpectacle.java b/Mage.Sets/src/mage/cards/g/GiantSpectacle.java index 64d45642ba9..230a5d5b699 100644 --- a/Mage.Sets/src/mage/cards/g/GiantSpectacle.java +++ b/Mage.Sets/src/mage/cards/g/GiantSpectacle.java @@ -65,7 +65,7 @@ public class GiantSpectacle extends CardImpl { // Enchanted creature gets +2/+1 and has menace. ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2, 1)); - Effect effect = new GainAbilityAttachedEffect(MenaceAbility.getInstance(), AttachmentType.AURA); + Effect effect = new GainAbilityAttachedEffect(new MenaceAbility(), AttachmentType.AURA); effect.setText("and has menace"); ability.addEffect(effect); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/g/GiltLeafWinnower.java b/Mage.Sets/src/mage/cards/g/GiltLeafWinnower.java index f34f1a538de..ccd3ff2cbaf 100644 --- a/Mage.Sets/src/mage/cards/g/GiltLeafWinnower.java +++ b/Mage.Sets/src/mage/cards/g/GiltLeafWinnower.java @@ -66,7 +66,7 @@ public class GiltLeafWinnower extends CardImpl { this.toughness = new MageInt(3); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // When Gilt-Leaf Winnower enters the battlefield, you may destroy target non-Elf creature whose power and toughness aren't equal. Ability ability = new EntersBattlefieldTriggeredAbility(new DestroyTargetEffect(), true); diff --git a/Mage.Sets/src/mage/cards/g/GlintSleeveSiphoner.java b/Mage.Sets/src/mage/cards/g/GlintSleeveSiphoner.java index c0d760847e4..826eda15049 100644 --- a/Mage.Sets/src/mage/cards/g/GlintSleeveSiphoner.java +++ b/Mage.Sets/src/mage/cards/g/GlintSleeveSiphoner.java @@ -60,7 +60,7 @@ public class GlintSleeveSiphoner extends CardImpl { this.toughness = new MageInt(1); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // Whenever Glint-Sleeve Siphoner enters the battlefield or attacks, you get {E}. this.addAbility(new EntersBattlefieldOrAttacksSourceTriggeredAbility(new GetEnergyCountersControllerEffect(1))); diff --git a/Mage.Sets/src/mage/cards/g/GlorifierOfDusk.java b/Mage.Sets/src/mage/cards/g/GlorifierOfDusk.java index 1b7d2659a14..6e27e1ee5e0 100644 --- a/Mage.Sets/src/mage/cards/g/GlorifierOfDusk.java +++ b/Mage.Sets/src/mage/cards/g/GlorifierOfDusk.java @@ -34,11 +34,11 @@ import mage.abilities.costs.common.PayLifeCost; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.VigilanceAbility; -import mage.constants.SubType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; +import mage.constants.SubType; import mage.constants.Zone; /** @@ -56,10 +56,10 @@ public class GlorifierOfDusk extends CardImpl { this.toughness = new MageInt(4); // Pay 2 life: Glorifier of Dusk gains flying until end of turn. - this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.EndOfTurn), new PayLifeCost(4))); + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.EndOfTurn), new PayLifeCost(2))); // Pay 2 life: Glorifier of Dusk gains vigilance until end of turn. - this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilitySourceEffect(VigilanceAbility.getInstance(), Duration.EndOfTurn), new PayLifeCost(4))); + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilitySourceEffect(VigilanceAbility.getInstance(), Duration.EndOfTurn), new PayLifeCost(2))); } public GlorifierOfDusk(final GlorifierOfDusk card) { diff --git a/Mage.Sets/src/mage/cards/g/GoblinDarkDwellers.java b/Mage.Sets/src/mage/cards/g/GoblinDarkDwellers.java index e4c2ee68cc5..31b558779ce 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinDarkDwellers.java +++ b/Mage.Sets/src/mage/cards/g/GoblinDarkDwellers.java @@ -72,7 +72,7 @@ public class GoblinDarkDwellers extends CardImpl { this.toughness = new MageInt(4); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // When Goblin Dark-Dwellers enters the battlefield, you may cast target instant or sorcery card with converted mana cost 3 or less // from your graveyard without paying its mana cost. If that card would be put into your graveyard this turn, exile it instead. diff --git a/Mage.Sets/src/mage/cards/g/GoblinFreerunner.java b/Mage.Sets/src/mage/cards/g/GoblinFreerunner.java index 84483903b78..a35e8f22c78 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinFreerunner.java +++ b/Mage.Sets/src/mage/cards/g/GoblinFreerunner.java @@ -54,7 +54,7 @@ public class GoblinFreerunner extends CardImpl { addAbility(new SurgeAbility(this, "{1}{R}")); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); } public GoblinFreerunner(final GoblinFreerunner card) { diff --git a/Mage.Sets/src/mage/cards/g/GoblinGloryChaser.java b/Mage.Sets/src/mage/cards/g/GoblinGloryChaser.java index ccb9e7e70ef..d63dd615c17 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinGloryChaser.java +++ b/Mage.Sets/src/mage/cards/g/GoblinGloryChaser.java @@ -62,7 +62,7 @@ public class GoblinGloryChaser extends CardImpl { // As long as Goblin Glory Chaser is renowned, it has menace. Effect effect = new ConditionalContinuousEffect( - new GainAbilitySourceEffect(MenaceAbility.getInstance(), Duration.WhileOnBattlefield), + new GainAbilitySourceEffect(new MenaceAbility(), Duration.WhileOnBattlefield), RenownedSourceCondition.instance, "As long as {this} is renowned, it has menace"); Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect); diff --git a/Mage.Sets/src/mage/cards/g/GoblinWarDrums.java b/Mage.Sets/src/mage/cards/g/GoblinWarDrums.java index de6f4e1b4ae..f53fba68300 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinWarDrums.java +++ b/Mage.Sets/src/mage/cards/g/GoblinWarDrums.java @@ -56,7 +56,7 @@ import mage.filter.predicate.permanent.ControllerPredicate; // Creatures you control have menace. (They can't be blocked except by two or more creatures.) - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(MenaceAbility.getInstance(), Duration.WhileOnBattlefield, filter))); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(new MenaceAbility(), Duration.WhileOnBattlefield, filter))); } public GoblinWarDrums(final GoblinWarDrums card) { diff --git a/Mage.Sets/src/mage/cards/g/GorillaWarCry.java b/Mage.Sets/src/mage/cards/g/GorillaWarCry.java index 3e80fa03e23..3b0f9366fba 100644 --- a/Mage.Sets/src/mage/cards/g/GorillaWarCry.java +++ b/Mage.Sets/src/mage/cards/g/GorillaWarCry.java @@ -56,7 +56,7 @@ public class GorillaWarCry extends CardImpl { this.addAbility(new CastOnlyDuringPhaseStepSourceAbility(TurnPhase.COMBAT, BeforeBlockersAreDeclaredCondition.instance)); // All creatures gain menace until end of turn. (They can't be blocked except by two or more creatures.) - Effect effect = new GainAbilityAllEffect(MenaceAbility.getInstance(), Duration.EndOfTurn, new FilterCreaturePermanent()); + Effect effect = new GainAbilityAllEffect(new MenaceAbility(), Duration.EndOfTurn, new FilterCreaturePermanent()); effect.setText("All creatures gain menace until end of turn. (They can't be blocked except by two or more creatures.)"); this.getSpellAbility().addEffect(effect); diff --git a/Mage.Sets/src/mage/cards/g/GoringCeratops.java b/Mage.Sets/src/mage/cards/g/GoringCeratops.java index 9d7b378700f..b8a30f1a262 100644 --- a/Mage.Sets/src/mage/cards/g/GoringCeratops.java +++ b/Mage.Sets/src/mage/cards/g/GoringCeratops.java @@ -37,8 +37,8 @@ import mage.abilities.keyword.DoubleStrikeAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; +import mage.constants.SubType; import mage.filter.StaticFilters; /** @@ -59,7 +59,7 @@ public class GoringCeratops extends CardImpl { // Whenever Goring Ceratops attacks, other creatures you control gain double strike until end of turn. Effect effect = new GainAbilityControlledEffect(DoubleStrikeAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE, true); - effect.setText("other creatures you control gain double strike"); + effect.setText("other creatures you control gain double strike until end of turn"); Ability ability = new AttacksTriggeredAbility(effect, false); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/g/GrafHarvest.java b/Mage.Sets/src/mage/cards/g/GrafHarvest.java index 5aff10b6080..e6ae038832b 100644 --- a/Mage.Sets/src/mage/cards/g/GrafHarvest.java +++ b/Mage.Sets/src/mage/cards/g/GrafHarvest.java @@ -65,7 +65,7 @@ public class GrafHarvest extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{B}"); // Zombies you control have menace. - Effect effect = new GainAbilityAllEffect(MenaceAbility.getInstance(), Duration.WhileOnBattlefield, filter); + Effect effect = new GainAbilityAllEffect(new MenaceAbility(), Duration.WhileOnBattlefield, filter); effect.setText("Zombies you control have menace. (They can't be blocked except by two or more creatures.)"); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); diff --git a/Mage.Sets/src/mage/cards/g/GraniticTitan.java b/Mage.Sets/src/mage/cards/g/GraniticTitan.java index 8485fc9e8d3..22fd617fe8d 100644 --- a/Mage.Sets/src/mage/cards/g/GraniticTitan.java +++ b/Mage.Sets/src/mage/cards/g/GraniticTitan.java @@ -19,7 +19,7 @@ public class GraniticTitan extends CardImpl { toughness = new MageInt(4); // Menace - addAbility(MenaceAbility.getInstance()); + addAbility(new MenaceAbility()); // Cycling {2} addAbility(new CyclingAbility(new ManaCostsImpl<>("{2}"))); diff --git a/Mage.Sets/src/mage/cards/g/GruulNodorog.java b/Mage.Sets/src/mage/cards/g/GruulNodorog.java index ad4d87a336a..961d2d966b6 100644 --- a/Mage.Sets/src/mage/cards/g/GruulNodorog.java +++ b/Mage.Sets/src/mage/cards/g/GruulNodorog.java @@ -54,7 +54,7 @@ public class GruulNodorog extends CardImpl { this.toughness = new MageInt(4); //{R}: Gruul Nodorog gains menace until end of turn. (It can't be blocked except by two or more creatures.) - this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilitySourceEffect(MenaceAbility.getInstance(), Duration.EndOfTurn), new ManaCostsImpl("{R}"))); + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilitySourceEffect(new MenaceAbility(), Duration.EndOfTurn), new ManaCostsImpl("{R}"))); } public GruulNodorog(final GruulNodorog card) { diff --git a/Mage.Sets/src/mage/cards/g/GruulWarChant.java b/Mage.Sets/src/mage/cards/g/GruulWarChant.java index 3f4ffe47266..9f0b2125d3d 100644 --- a/Mage.Sets/src/mage/cards/g/GruulWarChant.java +++ b/Mage.Sets/src/mage/cards/g/GruulWarChant.java @@ -60,7 +60,7 @@ public class GruulWarChant extends CardImpl { // Attacking creatures you control get +1/+0 and have menace. (They can't be blocked except by two or more creatures.) - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(MenaceAbility.getInstance(), Duration.WhileOnBattlefield, filter)); + Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(new MenaceAbility(), Duration.WhileOnBattlefield, filter)); ability.addEffect(new BoostAllEffect(1,0, Duration.WhileOnBattlefield, filter, false)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/h/HeadstrongBrute.java b/Mage.Sets/src/mage/cards/h/HeadstrongBrute.java index c2b9c57a9d0..c70577694a8 100644 --- a/Mage.Sets/src/mage/cards/h/HeadstrongBrute.java +++ b/Mage.Sets/src/mage/cards/h/HeadstrongBrute.java @@ -71,7 +71,7 @@ public class HeadstrongBrute extends CardImpl { // Headstrong Brute has menace as long as you control another Pirate. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, - new ConditionalContinuousEffect(new GainAbilitySourceEffect(MenaceAbility.getInstance(), Duration.WhileOnBattlefield), + new ConditionalContinuousEffect(new GainAbilitySourceEffect(new MenaceAbility(), Duration.WhileOnBattlefield), new PermanentsOnTheBattlefieldCondition(filter), "{this} has menace as long as you control another Pirate"))); } diff --git a/Mage.Sets/src/mage/cards/h/HordeOfBoggarts.java b/Mage.Sets/src/mage/cards/h/HordeOfBoggarts.java index ad750f0937c..06d1816e65f 100644 --- a/Mage.Sets/src/mage/cards/h/HordeOfBoggarts.java +++ b/Mage.Sets/src/mage/cards/h/HordeOfBoggarts.java @@ -66,7 +66,7 @@ public class HordeOfBoggarts extends CardImpl { this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetPowerToughnessSourceEffect(new PermanentsOnBattlefieldCount(filter), Duration.EndOfGame))); // Menace (This creature can't be blocked except by two or more creatures.) - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); } public HordeOfBoggarts(final HordeOfBoggarts card) { diff --git a/Mage.Sets/src/mage/cards/h/HoundOfTheFarbogs.java b/Mage.Sets/src/mage/cards/h/HoundOfTheFarbogs.java index 3b8e8060a72..71772a177c2 100644 --- a/Mage.Sets/src/mage/cards/h/HoundOfTheFarbogs.java +++ b/Mage.Sets/src/mage/cards/h/HoundOfTheFarbogs.java @@ -60,7 +60,7 @@ public class HoundOfTheFarbogs extends CardImpl { // Delirium — Hound of the Farborgs has menace as long as there are four or more card types among cards in your graveyard. Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, - new ConditionalContinuousEffect(new GainAbilitySourceEffect(MenaceAbility.getInstance(), Duration.WhileOnBattlefield), DeliriumCondition.instance, RULE)); + new ConditionalContinuousEffect(new GainAbilitySourceEffect(new MenaceAbility(), Duration.WhileOnBattlefield), DeliriumCondition.instance, RULE)); ability.setAbilityWord(AbilityWord.DELIRIUM); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/i/IkraShidiqiTheUsurper.java b/Mage.Sets/src/mage/cards/i/IkraShidiqiTheUsurper.java index b8d88ed1a2e..cb990d46229 100644 --- a/Mage.Sets/src/mage/cards/i/IkraShidiqiTheUsurper.java +++ b/Mage.Sets/src/mage/cards/i/IkraShidiqiTheUsurper.java @@ -61,7 +61,7 @@ public class IkraShidiqiTheUsurper extends CardImpl { this.toughness = new MageInt(7); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // Whenever a creature you control deals combat damage to a player, you gain life equal to that creature's toughness. this.addAbility(new IkraShidiqiTheUsurperTriggeredAbility()); diff --git a/Mage.Sets/src/mage/cards/i/ImperialAerosaur.java b/Mage.Sets/src/mage/cards/i/ImperialAerosaur.java index c7831a9b20a..5fbffa9852b 100644 --- a/Mage.Sets/src/mage/cards/i/ImperialAerosaur.java +++ b/Mage.Sets/src/mage/cards/i/ImperialAerosaur.java @@ -29,17 +29,16 @@ package mage.cards.i; import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.Effect; import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; -import mage.constants.SubType; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; +import mage.constants.SubType; import mage.constants.TargetController; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.permanent.AnotherPredicate; @@ -72,7 +71,7 @@ public class ImperialAerosaur extends CardImpl { // When Imperial Aerosaur enters the battlefield, another target creature you control gets +1/+1 and gains flying until end of turn. Effect effect = new BoostTargetEffect(1, 1, Duration.EndOfTurn); effect.setText("another target creature you control gets +1/+1"); - Ability ability = new EntersBattlefieldTriggeredAbility(effect); + EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(effect); ability.addEffect(effect); effect = new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn); effect.setText("and gains flying until end of turn"); diff --git a/Mage.Sets/src/mage/cards/i/ImposingVisage.java b/Mage.Sets/src/mage/cards/i/ImposingVisage.java index 6d3bd7685cb..8e3d76dd726 100644 --- a/Mage.Sets/src/mage/cards/i/ImposingVisage.java +++ b/Mage.Sets/src/mage/cards/i/ImposingVisage.java @@ -63,7 +63,7 @@ public class ImposingVisage extends CardImpl { this.addAbility(ability); // Enchanted creature has menace. (It can't be blocked except by two or more creatures.) - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(MenaceAbility.getInstance(), AttachmentType.AURA))); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(new MenaceAbility(), AttachmentType.AURA))); } public ImposingVisage(final ImposingVisage card) { diff --git a/Mage.Sets/src/mage/cards/i/InsolentNeonate.java b/Mage.Sets/src/mage/cards/i/InsolentNeonate.java index 8cbcc6144f6..b7c186a823e 100644 --- a/Mage.Sets/src/mage/cards/i/InsolentNeonate.java +++ b/Mage.Sets/src/mage/cards/i/InsolentNeonate.java @@ -54,7 +54,7 @@ public class InsolentNeonate extends CardImpl { this.toughness = new MageInt(1); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // Discard a card, Sacrifice Insolent Neonate: Draw a card. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new DiscardCardCost()); ability.addCost(new SacrificeSourceCost()); diff --git a/Mage.Sets/src/mage/cards/i/IreShaman.java b/Mage.Sets/src/mage/cards/i/IreShaman.java index 2d8544a4d18..e58fe289629 100644 --- a/Mage.Sets/src/mage/cards/i/IreShaman.java +++ b/Mage.Sets/src/mage/cards/i/IreShaman.java @@ -64,7 +64,7 @@ public class IreShaman extends CardImpl { this.toughness = new MageInt(1); // Menace (This creature can't be blocked except by two or more creatures.) - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // Megamorph {R} this.addAbility(new MorphAbility(this, new ManaCostsImpl("{R}"), true)); diff --git a/Mage.Sets/src/mage/cards/i/IroasGodOfVictory.java b/Mage.Sets/src/mage/cards/i/IroasGodOfVictory.java index aa2381b6805..00b036f9d9f 100644 --- a/Mage.Sets/src/mage/cards/i/IroasGodOfVictory.java +++ b/Mage.Sets/src/mage/cards/i/IroasGodOfVictory.java @@ -75,7 +75,7 @@ public class IroasGodOfVictory extends CardImpl { this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); // Creatures you control have menace. (They can't be blocked except by two or more creatures.) - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(MenaceAbility.getInstance(), Duration.WhileOnBattlefield, filter))); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(new MenaceAbility(), Duration.WhileOnBattlefield, filter))); // Prevent all damage that would be dealt to attacking creatures you control. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new PreventAllDamageToAllEffect(Duration.WhileOnBattlefield, filterAttacking))); diff --git a/Mage.Sets/src/mage/cards/j/JacesSentinel.java b/Mage.Sets/src/mage/cards/j/JacesSentinel.java index dfdedbaa661..a9288ece7d5 100644 --- a/Mage.Sets/src/mage/cards/j/JacesSentinel.java +++ b/Mage.Sets/src/mage/cards/j/JacesSentinel.java @@ -78,6 +78,7 @@ public class JacesSentinel extends CardImpl { new CantBeBlockedSourceEffect(), new PermanentsOnTheBattlefieldCondition(filter), "and has can't be blocked")); + this.addAbility(ability); } public JacesSentinel(final JacesSentinel card) { diff --git a/Mage.Sets/src/mage/cards/j/JangoFett.java b/Mage.Sets/src/mage/cards/j/JangoFett.java index 6079f99bc60..1f62423053a 100644 --- a/Mage.Sets/src/mage/cards/j/JangoFett.java +++ b/Mage.Sets/src/mage/cards/j/JangoFett.java @@ -71,7 +71,7 @@ public class JangoFett extends CardImpl { this.toughness = new MageInt(2); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // Haste this.addAbility(HasteAbility.getInstance()); diff --git a/Mage.Sets/src/mage/cards/k/KariZevSkyshipRaider.java b/Mage.Sets/src/mage/cards/k/KariZevSkyshipRaider.java index b7f67f6043f..43c4993629b 100644 --- a/Mage.Sets/src/mage/cards/k/KariZevSkyshipRaider.java +++ b/Mage.Sets/src/mage/cards/k/KariZevSkyshipRaider.java @@ -64,7 +64,7 @@ public class KariZevSkyshipRaider extends CardImpl { this.addAbility(FirstStrikeAbility.getInstance()); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // Whenever Kari Zev, Skyship Raider attacks, create a legendary 2/1 red Monkey creature token named Ragavan that's tapped and attacking. Exile that token at end of combat. this.addAbility(new AttacksTriggeredAbility(new KariZevSkyshipRaiderEffect(), false)); diff --git a/Mage.Sets/src/mage/cards/k/KederektCreeper.java b/Mage.Sets/src/mage/cards/k/KederektCreeper.java index 2fa7de084b3..e806e4fafbe 100644 --- a/Mage.Sets/src/mage/cards/k/KederektCreeper.java +++ b/Mage.Sets/src/mage/cards/k/KederektCreeper.java @@ -53,7 +53,7 @@ public class KederektCreeper extends CardImpl { this.addAbility(DeathtouchAbility.getInstance()); // Menace (This creature can't be blocked except by two or more creatures.) - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); } public KederektCreeper(final KederektCreeper card) { diff --git a/Mage.Sets/src/mage/cards/k/KhenraScrapper.java b/Mage.Sets/src/mage/cards/k/KhenraScrapper.java index 74163295842..df5a4af154d 100644 --- a/Mage.Sets/src/mage/cards/k/KhenraScrapper.java +++ b/Mage.Sets/src/mage/cards/k/KhenraScrapper.java @@ -54,7 +54,7 @@ public class KhenraScrapper extends CardImpl { this.toughness = new MageInt(3); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // You may exert Khenra Scrapper as it attacks. When you do, it gets +2/+0 until end of turn. this.addAbility(new ExertAbility(new BecomesExertSourceTriggeredAbility(new BoostSourceEffect(2, 0, Duration.EndOfTurn)))); diff --git a/Mage.Sets/src/mage/cards/k/KheruMindEater.java b/Mage.Sets/src/mage/cards/k/KheruMindEater.java index fb07722cd29..5be14b360be 100644 --- a/Mage.Sets/src/mage/cards/k/KheruMindEater.java +++ b/Mage.Sets/src/mage/cards/k/KheruMindEater.java @@ -67,7 +67,7 @@ public class KheruMindEater extends CardImpl { this.toughness = new MageInt(3); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // Whenever Kheru Mind-Eater deals combat damage to a player, that player exiles a card from his or her hand face down. this.addAbility(new DealsDamageToAPlayerTriggeredAbility(new KheruMindEaterExileEffect(), false, true)); diff --git a/Mage.Sets/src/mage/cards/k/KozilekTheGreatDistortion.java b/Mage.Sets/src/mage/cards/k/KozilekTheGreatDistortion.java index b285af76211..31db10e3dc2 100644 --- a/Mage.Sets/src/mage/cards/k/KozilekTheGreatDistortion.java +++ b/Mage.Sets/src/mage/cards/k/KozilekTheGreatDistortion.java @@ -79,7 +79,7 @@ public class KozilekTheGreatDistortion extends CardImpl { new CardsInHandCondition(ComparisonType.FEWER_THAN, 7), "When you cast {this}, if you have fewer than seven cards in hand, draw cards equal to the difference.")); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // Discard a card with converted mana cost X: Counter target spell with converted mana cost X. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CounterTargetEffect(), new KozilekDiscardCost()); diff --git a/Mage.Sets/src/mage/cards/k/KozileksShrieker.java b/Mage.Sets/src/mage/cards/k/KozileksShrieker.java index 6e5daf684b5..ef2a66100c4 100644 --- a/Mage.Sets/src/mage/cards/k/KozileksShrieker.java +++ b/Mage.Sets/src/mage/cards/k/KozileksShrieker.java @@ -63,7 +63,7 @@ public class KozileksShrieker extends CardImpl { Effect effect = new BoostSourceEffect(1, 0, Duration.EndOfTurn); effect.setText("{this} gets +1/+0"); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{C}")); - effect = new GainAbilitySourceEffect(MenaceAbility.getInstance(), Duration.EndOfTurn); + effect = new GainAbilitySourceEffect(new MenaceAbility(), Duration.EndOfTurn); effect.setText("and gains menace until end of turn"); ability.addEffect(effect); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/l/LightningRigCrew.java b/Mage.Sets/src/mage/cards/l/LightningRigCrew.java index 5efca5ac86a..9afcd776e5f 100644 --- a/Mage.Sets/src/mage/cards/l/LightningRigCrew.java +++ b/Mage.Sets/src/mage/cards/l/LightningRigCrew.java @@ -35,10 +35,10 @@ import mage.abilities.common.SpellCastControllerTriggeredAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.effects.common.DamagePlayersEffect; import mage.abilities.effects.common.UntapSourceEffect; -import mage.constants.SubType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.SubType; import mage.constants.TargetController; import mage.constants.Zone; import mage.filter.FilterSpell; @@ -50,7 +50,7 @@ import mage.filter.predicate.mageobject.SubtypePredicate; */ public class LightningRigCrew extends CardImpl { - private static final FilterSpell filter = new FilterSpell(); + private static final FilterSpell filter = new FilterSpell("a Pirate spell"); static { filter.add(new SubtypePredicate(SubType.PIRATE)); diff --git a/Mage.Sets/src/mage/cards/l/LordOfTheAccursed.java b/Mage.Sets/src/mage/cards/l/LordOfTheAccursed.java index fad3fc6aa86..7ba04117a0b 100644 --- a/Mage.Sets/src/mage/cards/l/LordOfTheAccursed.java +++ b/Mage.Sets/src/mage/cards/l/LordOfTheAccursed.java @@ -65,7 +65,7 @@ public class LordOfTheAccursed extends CardImpl { //{2}{B}, Tap: All Zombies gain menace until end of turn. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect( - MenaceAbility.getInstance(), + new MenaceAbility(), Duration.EndOfTurn, filter, "All Zombies gains menace until end of turn."), new ManaCostsImpl("{1}{B}")); diff --git a/Mage.Sets/src/mage/cards/l/LoseCalm.java b/Mage.Sets/src/mage/cards/l/LoseCalm.java index 6f28ff7ac1e..7891c5c802c 100644 --- a/Mage.Sets/src/mage/cards/l/LoseCalm.java +++ b/Mage.Sets/src/mage/cards/l/LoseCalm.java @@ -56,7 +56,7 @@ public class LoseCalm extends CardImpl { this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn, "It gains haste until end of turn")); this.getSpellAbility().addTarget(new TargetCreaturePermanent()); - effect = new GainAbilityTargetEffect(MenaceAbility.getInstance(), Duration.EndOfTurn); + effect = new GainAbilityTargetEffect(new MenaceAbility(), Duration.EndOfTurn); effect.setText("and menace until end of turn. (A creature with menace can't be blocked except by two or more creatures.) "); this.getSpellAbility().addEffect(effect); } diff --git a/Mage.Sets/src/mage/cards/l/LurkingChupacabra.java b/Mage.Sets/src/mage/cards/l/LurkingChupacabra.java index 7f607f32f94..8740ed771a5 100644 --- a/Mage.Sets/src/mage/cards/l/LurkingChupacabra.java +++ b/Mage.Sets/src/mage/cards/l/LurkingChupacabra.java @@ -32,11 +32,11 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.effects.common.CreatureExploresTriggeredAbility; 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.constants.SubType; import mage.constants.TargetController; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.permanent.ControllerPredicate; @@ -65,6 +65,7 @@ public class LurkingChupacabra extends CardImpl { // Whenever a creature you control explores, target creature an opponent controls gets -2/-2 until end of turn Ability ability = new CreatureExploresTriggeredAbility(new BoostTargetEffect(-2, -2, Duration.EndOfTurn)); ability.addTarget(new TargetCreaturePermanent(filter)); + this.addAbility(ability); } public LurkingChupacabra(final LurkingChupacabra card) { diff --git a/Mage.Sets/src/mage/cards/m/MadcapSkills.java b/Mage.Sets/src/mage/cards/m/MadcapSkills.java index 20e4d5d57b6..b3c89573c6c 100644 --- a/Mage.Sets/src/mage/cards/m/MadcapSkills.java +++ b/Mage.Sets/src/mage/cards/m/MadcapSkills.java @@ -65,7 +65,7 @@ public class MadcapSkills extends CardImpl { // Enchanted creature gets +3/+0 and and has menace. (It can't be blocked except by two or more creatures.) this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(3, 0))); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(MenaceAbility.getInstance(), AttachmentType.AURA))); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(new MenaceAbility(), AttachmentType.AURA))); } public MadcapSkills(final MadcapSkills card) { diff --git a/Mage.Sets/src/mage/cards/m/MajesticMyriarch.java b/Mage.Sets/src/mage/cards/m/MajesticMyriarch.java index f1c3ccdd0ab..eb20db682b9 100644 --- a/Mage.Sets/src/mage/cards/m/MajesticMyriarch.java +++ b/Mage.Sets/src/mage/cards/m/MajesticMyriarch.java @@ -187,7 +187,7 @@ class MajesticMyriarchEffect extends OneShotEffect { // Menace if (game.getBattlefield().contains(filterMenace, source.getControllerId(), 1, game)) { - game.addEffect(new GainAbilitySourceEffect(MenaceAbility.getInstance(), Duration.EndOfTurn), source); + game.addEffect(new GainAbilitySourceEffect(new MenaceAbility(), Duration.EndOfTurn), source); } // Reach diff --git a/Mage.Sets/src/mage/cards/m/MarchOfTheDrowned.java b/Mage.Sets/src/mage/cards/m/MarchOfTheDrowned.java index f90824d1cd0..393917cb020 100644 --- a/Mage.Sets/src/mage/cards/m/MarchOfTheDrowned.java +++ b/Mage.Sets/src/mage/cards/m/MarchOfTheDrowned.java @@ -29,6 +29,7 @@ package mage.cards.m; import java.util.UUID; import mage.abilities.Mode; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -60,7 +61,7 @@ public class MarchOfTheDrowned extends CardImpl { this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(new FilterCreatureCard("creature card from your graveyard"))); // &bull; Return two target Pirate cards from your graveyard to your hand. Mode mode = new Mode(); - mode.getEffects().add(new ReturnToHandTargetEffect()); + mode.getEffects().add(new ReturnFromGraveyardToHandTargetEffect()); mode.getTargets().add(new TargetCardInYourGraveyard(2, filter)); this.getSpellAbility().addMode(mode); } diff --git a/Mage.Sets/src/mage/cards/m/MarkOfTheVampire.java b/Mage.Sets/src/mage/cards/m/MarkOfTheVampire.java index 0ffebe20cdc..1e192063002 100644 --- a/Mage.Sets/src/mage/cards/m/MarkOfTheVampire.java +++ b/Mage.Sets/src/mage/cards/m/MarkOfTheVampire.java @@ -28,6 +28,7 @@ package mage.cards.m; import java.util.UUID; +import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.continuous.BoostEnchantedEffect; @@ -38,9 +39,9 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AttachmentType; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Outcome; +import mage.constants.SubType; import mage.constants.Zone; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; @@ -52,10 +53,9 @@ import mage.target.common.TargetCreaturePermanent; public class MarkOfTheVampire extends CardImpl { public MarkOfTheVampire(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{B}"); this.subtype.add(SubType.AURA); - // Enchant creature TargetPermanent target = new TargetCreaturePermanent(); this.getSpellAbility().addTarget(target); @@ -63,8 +63,9 @@ public class MarkOfTheVampire extends CardImpl { this.addAbility(new EnchantAbility(target.getTargetName())); // Enchanted creature gets +2/+2 and has lifelink. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2, 2, Duration.WhileOnBattlefield))); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(LifelinkAbility.getInstance(), AttachmentType.AURA))); + Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2, 2, Duration.WhileOnBattlefield)); + ability.addEffect(new GainAbilityAttachedEffect(LifelinkAbility.getInstance(), AttachmentType.AURA).setText("and has lifelink")); + this.addAbility(ability); } public MarkOfTheVampire(final MarkOfTheVampire card) { diff --git a/Mage.Sets/src/mage/cards/m/MathasFiendSeeker.java b/Mage.Sets/src/mage/cards/m/MathasFiendSeeker.java index 61710ca3b1b..5e9422278a3 100644 --- a/Mage.Sets/src/mage/cards/m/MathasFiendSeeker.java +++ b/Mage.Sets/src/mage/cards/m/MathasFiendSeeker.java @@ -76,7 +76,7 @@ public class MathasFiendSeeker extends CardImpl { this.toughness = new MageInt(3); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // At the beginning of your end step, put a bounty counter on target creature an opponent controls. For as long as that creature has a bounty counter on it, it has "When this creature dies, each opponent draws a card and gains 2 life." Ability ability = new BeginningOfYourEndStepTriggeredAbility(new AddCountersTargetEffect(CounterType.BOUNTY.createInstance()), false); diff --git a/Mage.Sets/src/mage/cards/m/MaulfistSquad.java b/Mage.Sets/src/mage/cards/m/MaulfistSquad.java index 36064255ed5..21ba08c1b11 100644 --- a/Mage.Sets/src/mage/cards/m/MaulfistSquad.java +++ b/Mage.Sets/src/mage/cards/m/MaulfistSquad.java @@ -50,7 +50,7 @@ public class MaulfistSquad extends CardImpl { this.toughness = new MageInt(1); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // Fabricate 1 this.addAbility(new FabricateAbility(1)); diff --git a/Mage.Sets/src/mage/cards/m/MoonriseIntruder.java b/Mage.Sets/src/mage/cards/m/MoonriseIntruder.java index 17508ecef28..52451801a1e 100644 --- a/Mage.Sets/src/mage/cards/m/MoonriseIntruder.java +++ b/Mage.Sets/src/mage/cards/m/MoonriseIntruder.java @@ -60,7 +60,7 @@ public class MoonriseIntruder extends CardImpl { this.transformable = true; // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // At the beginning of each upkeep, if a player cast two or more spells last turn, transform Moonrise Intruder. TriggeredAbility ability = new BeginningOfUpkeepTriggeredAbility(new TransformSourceEffect(false), TargetController.ANY, false); diff --git a/Mage.Sets/src/mage/cards/m/MorkrutNecropod.java b/Mage.Sets/src/mage/cards/m/MorkrutNecropod.java index e94e979e3a0..af45b60e8ed 100644 --- a/Mage.Sets/src/mage/cards/m/MorkrutNecropod.java +++ b/Mage.Sets/src/mage/cards/m/MorkrutNecropod.java @@ -64,7 +64,7 @@ public class MorkrutNecropod extends CardImpl { this.toughness = new MageInt(7); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // Whenever Morkrut Necropod attacks or blocks, sacrifice another creature or land. this.addAbility(new AttacksOrBlocksTriggeredAbility(new SacrificeControllerEffect(filter, 1, ""), false)); diff --git a/Mage.Sets/src/mage/cards/n/NoxiousGearhulk.java b/Mage.Sets/src/mage/cards/n/NoxiousGearhulk.java index ea283f6b40a..ac970257543 100644 --- a/Mage.Sets/src/mage/cards/n/NoxiousGearhulk.java +++ b/Mage.Sets/src/mage/cards/n/NoxiousGearhulk.java @@ -64,7 +64,7 @@ public class NoxiousGearhulk extends CardImpl { this.toughness = new MageInt(4); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // When Noxious Gearhulk enters the battlefield, you may destroy another target creature. If a creature is destroyed this way, you gain life equal to its toughness. Ability ability = new EntersBattlefieldTriggeredAbility(new NoxiousGearhulkEffect()); diff --git a/Mage.Sets/src/mage/cards/o/OdricLunarchMarshal.java b/Mage.Sets/src/mage/cards/o/OdricLunarchMarshal.java index b7d535e0d14..353a072d4b1 100644 --- a/Mage.Sets/src/mage/cards/o/OdricLunarchMarshal.java +++ b/Mage.Sets/src/mage/cards/o/OdricLunarchMarshal.java @@ -161,7 +161,7 @@ class OdricLunarchMarshalEffect extends OneShotEffect { // Menace if (game.getBattlefield().contains(filterMenace, source.getControllerId(), 1, game)) { - game.addEffect(new GainAbilityControlledEffect(MenaceAbility.getInstance(), Duration.EndOfTurn, filterCreatures), source); + game.addEffect(new GainAbilityControlledEffect(new MenaceAbility(), Duration.EndOfTurn, filterCreatures), source); } // Reach diff --git a/Mage.Sets/src/mage/cards/o/OneWithTheWind.java b/Mage.Sets/src/mage/cards/o/OneWithTheWind.java index a3a3915c018..487892e8eb9 100644 --- a/Mage.Sets/src/mage/cards/o/OneWithTheWind.java +++ b/Mage.Sets/src/mage/cards/o/OneWithTheWind.java @@ -28,15 +28,11 @@ package mage.cards.o; import java.util.UUID; -import mage.constants.SubType; -import mage.target.common.TargetCreaturePermanent; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.continuous.BoostEnchantedEffect; import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; -import mage.constants.Outcome; -import mage.target.TargetPermanent; import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; @@ -44,7 +40,11 @@ import mage.cards.CardSetInfo; import mage.constants.AttachmentType; import mage.constants.CardType; import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.SubType; import mage.constants.Zone; +import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; /** * @@ -65,8 +65,10 @@ public class OneWithTheWind extends CardImpl { this.addAbility(ability); // Enchanted creature gets +2/+2 and has flying. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2, 2, Duration.WhileOnBattlefield))); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA))); + ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2, 2, Duration.WhileOnBattlefield)); + ability.addEffect(new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA) + .setText("and has flying")); + this.addAbility(ability); } public OneWithTheWind(final OneWithTheWind card) { diff --git a/Mage.Sets/src/mage/cards/p/PlagueBelcher.java b/Mage.Sets/src/mage/cards/p/PlagueBelcher.java index 048ee5f58bd..8fb0c4c615b 100644 --- a/Mage.Sets/src/mage/cards/p/PlagueBelcher.java +++ b/Mage.Sets/src/mage/cards/p/PlagueBelcher.java @@ -70,7 +70,7 @@ public class PlagueBelcher extends CardImpl { this.toughness = new MageInt(4); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // When Plague Belcher enters the battlefield, put two -1/-1 counters on target creature you control. Ability ability = new EntersBattlefieldTriggeredAbility(new AddCountersTargetEffect(CounterType.M1M1.createInstance(2))); diff --git a/Mage.Sets/src/mage/cards/p/PriestOfTheWakeningSun.java b/Mage.Sets/src/mage/cards/p/PriestOfTheWakeningSun.java index 84bf9affeb7..7e40ff57213 100644 --- a/Mage.Sets/src/mage/cards/p/PriestOfTheWakeningSun.java +++ b/Mage.Sets/src/mage/cards/p/PriestOfTheWakeningSun.java @@ -78,7 +78,7 @@ public class PriestOfTheWakeningSun extends CardImpl { this.addAbility(ability); // {3}{W}{W}, Sacrifice Priest of the Wakening Sun: Search your library for a Dinosaur card, reveal it, put it into your hand, then shuffle your library. - TargetCardInLibrary target = new TargetCardInLibrary(0, 1, filter); + TargetCardInLibrary target = new TargetCardInLibrary(filter); Ability ability2 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInHandEffect(new TargetCardInLibrary(target), true, true), new ManaCostsImpl("{3}{W}{W}")); ability2.addCost(new SacrificeSourceCost()); this.addAbility(ability2); diff --git a/Mage.Sets/src/mage/cards/p/PurphorossEmissary.java b/Mage.Sets/src/mage/cards/p/PurphorossEmissary.java index 1a129f3138e..a427dc47c55 100644 --- a/Mage.Sets/src/mage/cards/p/PurphorossEmissary.java +++ b/Mage.Sets/src/mage/cards/p/PurphorossEmissary.java @@ -60,11 +60,11 @@ public class PurphorossEmissary extends CardImpl { this.addAbility(new BestowAbility(this, "{6}{R}")); // Menace (This creature can't be blocked except by two or more creatures.) - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // Enchanted creature gets +3/+3 and and has menace. Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(3,3)); - Effect effect = new GainAbilityAttachedEffect(MenaceAbility.getInstance(), AttachmentType.AURA); + Effect effect = new GainAbilityAttachedEffect(new MenaceAbility(), AttachmentType.AURA); effect.setText("and has menace"); ability.addEffect(effect); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/p/PyreheartWolf.java b/Mage.Sets/src/mage/cards/p/PyreheartWolf.java index 7f2a4d74777..8ab32e9b2b4 100644 --- a/Mage.Sets/src/mage/cards/p/PyreheartWolf.java +++ b/Mage.Sets/src/mage/cards/p/PyreheartWolf.java @@ -62,7 +62,7 @@ public class PyreheartWolf extends CardImpl { this.toughness = new MageInt(1); // Whenever Pyreheart Wolf attacks, creatures you control gain menace until end of turn. (They can't be blocked except by two or more creatures.) - this.addAbility(new AttacksTriggeredAbility(new GainAbilityAllEffect(MenaceAbility.getInstance(), Duration.EndOfTurn, filter), false)); + this.addAbility(new AttacksTriggeredAbility(new GainAbilityAllEffect(new MenaceAbility(), Duration.EndOfTurn, filter), false)); // Undying (When this creature dies, if it had no +1/+1 counters on it, return it to the battlefield under its owner's control with a +1/+1 counter on it.) this.addAbility(new UndyingAbility()); diff --git a/Mage.Sets/src/mage/cards/r/RampagingFerocidon.java b/Mage.Sets/src/mage/cards/r/RampagingFerocidon.java index 2efeba3540f..17663bc7fa6 100644 --- a/Mage.Sets/src/mage/cards/r/RampagingFerocidon.java +++ b/Mage.Sets/src/mage/cards/r/RampagingFerocidon.java @@ -71,7 +71,7 @@ public class RampagingFerocidon extends CardImpl { this.toughness = new MageInt(3); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // Players can't gain life. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new RampagingFerocidonEffect())); diff --git a/Mage.Sets/src/mage/cards/r/RelentlessDead.java b/Mage.Sets/src/mage/cards/r/RelentlessDead.java index 58f00840328..48e4026b520 100644 --- a/Mage.Sets/src/mage/cards/r/RelentlessDead.java +++ b/Mage.Sets/src/mage/cards/r/RelentlessDead.java @@ -63,7 +63,7 @@ public class RelentlessDead extends CardImpl { this.toughness = new MageInt(2); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // When Relentless Dead dies, you may pay {B}. If you do, return it to its owner's hand. this.addAbility(new DiesTriggeredAbility(new DoIfCostPaid(new ReturnToHandSourceEffect(), new ManaCostsImpl("{B}")))); diff --git a/Mage.Sets/src/mage/cards/r/RipscalePredator.java b/Mage.Sets/src/mage/cards/r/RipscalePredator.java index 7f7e7d00a0f..916b3383d9d 100644 --- a/Mage.Sets/src/mage/cards/r/RipscalePredator.java +++ b/Mage.Sets/src/mage/cards/r/RipscalePredator.java @@ -49,7 +49,7 @@ public class RipscalePredator extends CardImpl { this.toughness = new MageInt(5); // Ripscale Predator can't be blocked except by two or more creatures. - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); } public RipscalePredator(final RipscalePredator card) { diff --git a/Mage.Sets/src/mage/cards/r/RuthlessKnave.java b/Mage.Sets/src/mage/cards/r/RuthlessKnave.java index 76d1c47b707..c78724c8d22 100644 --- a/Mage.Sets/src/mage/cards/r/RuthlessKnave.java +++ b/Mage.Sets/src/mage/cards/r/RuthlessKnave.java @@ -35,10 +35,10 @@ import mage.abilities.costs.common.SacrificeTargetCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; -import mage.constants.SubType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.SubType; import mage.constants.Zone; import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledPermanent; @@ -53,7 +53,7 @@ import mage.target.common.TargetControlledPermanent; */ public class RuthlessKnave extends CardImpl { - private static final FilterControlledPermanent filter = new FilterControlledPermanent("three other creatures"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent("three three Treasures"); static { filter.add(new SubtypePredicate(SubType.TREASURE)); diff --git a/Mage.Sets/src/mage/cards/s/SavageStomp.java b/Mage.Sets/src/mage/cards/s/SavageStomp.java index 1b8b13dd8bd..96c8084d4c5 100644 --- a/Mage.Sets/src/mage/cards/s/SavageStomp.java +++ b/Mage.Sets/src/mage/cards/s/SavageStomp.java @@ -69,7 +69,9 @@ public class SavageStomp extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{G}"); // Savage Stomp costs {2} less to cast if it targets a Dinosaur you control. - this.addAbility(new SimpleStaticAbility(Zone.STACK, new SpellCostReductionSourceEffect(2, SavageStompCondition.instance))); + this.addAbility(new SimpleStaticAbility(Zone.STACK, + new SpellCostReductionSourceEffect(2, SavageStompCondition.instance)) + .setRuleAtTheTop(true)); // Put a +1/+1 counter on target creature you control. Then that creature fights target creature you don't control. Effect effect = new AddCountersTargetEffect(CounterType.P1P1.createInstance()); diff --git a/Mage.Sets/src/mage/cards/s/ScroungedScythe.java b/Mage.Sets/src/mage/cards/s/ScroungedScythe.java index ceb1af837fc..eded8abdd17 100644 --- a/Mage.Sets/src/mage/cards/s/ScroungedScythe.java +++ b/Mage.Sets/src/mage/cards/s/ScroungedScythe.java @@ -60,7 +60,7 @@ public class ScroungedScythe extends CardImpl { // As long as equipped creature is a Human, it has menace. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, - new ConditionalContinuousEffect(new GainAbilityAttachedEffect(MenaceAbility.getInstance(), AttachmentType.EQUIPMENT), + new ConditionalContinuousEffect(new GainAbilityAttachedEffect(new MenaceAbility(), AttachmentType.EQUIPMENT), new EquippedHasSubtypeCondition(SubType.HUMAN), staticText))); // Equip {2} diff --git a/Mage.Sets/src/mage/cards/s/SearingSpearAskari.java b/Mage.Sets/src/mage/cards/s/SearingSpearAskari.java index 9f1d878f865..95e1ac33b16 100644 --- a/Mage.Sets/src/mage/cards/s/SearingSpearAskari.java +++ b/Mage.Sets/src/mage/cards/s/SearingSpearAskari.java @@ -59,7 +59,7 @@ public class SearingSpearAskari extends CardImpl { this.addAbility(new FlankingAbility()); // {1}{R}: Searing Spear Askari gains menace until end of turn. (It can't be blocked except by two or more creatures.) - this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilitySourceEffect(MenaceAbility.getInstance(), Duration.EndOfTurn), new ManaCostsImpl("{1}{R}"))); + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilitySourceEffect(new MenaceAbility(), Duration.EndOfTurn), new ManaCostsImpl("{1}{R}"))); } public SearingSpearAskari(final SearingSpearAskari card) { diff --git a/Mage.Sets/src/mage/cards/s/ShatterskullRecruit.java b/Mage.Sets/src/mage/cards/s/ShatterskullRecruit.java index 719ef835506..692c50fdc3e 100644 --- a/Mage.Sets/src/mage/cards/s/ShatterskullRecruit.java +++ b/Mage.Sets/src/mage/cards/s/ShatterskullRecruit.java @@ -50,7 +50,7 @@ public class ShatterskullRecruit extends CardImpl { this.toughness = new MageInt(4); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); } public ShatterskullRecruit(final ShatterskullRecruit card) { diff --git a/Mage.Sets/src/mage/cards/s/SinProdder.java b/Mage.Sets/src/mage/cards/s/SinProdder.java index 9df1da79ada..bae067a022c 100644 --- a/Mage.Sets/src/mage/cards/s/SinProdder.java +++ b/Mage.Sets/src/mage/cards/s/SinProdder.java @@ -61,7 +61,7 @@ public class SinProdder extends CardImpl { this.toughness = new MageInt(2); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // At the beginning of your upkeep, reveal the top card of your library. Any opponent may have you put that card into your graveyard. If a player does, // Sin Prodder deals damage to that player equal to that card's converted mana cost. Otherwise, put that card into your hand. diff --git a/Mage.Sets/src/mage/cards/s/SinuousVermin.java b/Mage.Sets/src/mage/cards/s/SinuousVermin.java index b1593aa7b80..c2313318383 100644 --- a/Mage.Sets/src/mage/cards/s/SinuousVermin.java +++ b/Mage.Sets/src/mage/cards/s/SinuousVermin.java @@ -62,7 +62,7 @@ public class SinuousVermin extends CardImpl { // As long as Sinuous Vermin is monstrous, it has menace. Ability ability = new SimpleStaticAbility( Zone.BATTLEFIELD, - new ConditionalContinuousEffect(new GainAbilitySourceEffect(MenaceAbility.getInstance(), Duration.WhileOnBattlefield), + new ConditionalContinuousEffect(new GainAbilitySourceEffect(new MenaceAbility(), Duration.WhileOnBattlefield), MonstrousCondition.instance, "As long as {this} is monstrous, it has menace")); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/s/SithLord.java b/Mage.Sets/src/mage/cards/s/SithLord.java index 76c6509cdf3..60255f1c544 100644 --- a/Mage.Sets/src/mage/cards/s/SithLord.java +++ b/Mage.Sets/src/mage/cards/s/SithLord.java @@ -59,7 +59,7 @@ public class SithLord extends CardImpl { this.toughness = new MageInt(2); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // Sith Lord enters the battlefield with X +1/+1 counters on it, where X is the total life lost by your opponents this turn. this.addAbility(new EntersBattlefieldAbility(new SithLordEffect(), rule)); diff --git a/Mage.Sets/src/mage/cards/s/SkyTerror.java b/Mage.Sets/src/mage/cards/s/SkyTerror.java index b0163d354d8..fd25a46b7f6 100644 --- a/Mage.Sets/src/mage/cards/s/SkyTerror.java +++ b/Mage.Sets/src/mage/cards/s/SkyTerror.java @@ -53,7 +53,7 @@ public class SkyTerror extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); } diff --git a/Mage.Sets/src/mage/cards/s/SkymarchBloodletter.java b/Mage.Sets/src/mage/cards/s/SkymarchBloodletter.java index 6e873593d1f..ea776f269bf 100644 --- a/Mage.Sets/src/mage/cards/s/SkymarchBloodletter.java +++ b/Mage.Sets/src/mage/cards/s/SkymarchBloodletter.java @@ -33,11 +33,11 @@ import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.LoseLifeTargetEffect; -import mage.constants.SubType; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.SubType; import mage.target.Target; import mage.target.common.TargetOpponent; @@ -60,7 +60,7 @@ public class SkymarchBloodletter extends CardImpl { // When Skymarch Bloodletters enters the battlefield, target opponent loses 1 life and you gain 1 life. Ability ability = new EntersBattlefieldTriggeredAbility(new LoseLifeTargetEffect(1), false); - ability.addEffect(new GainLifeEffect(1)); + ability.addEffect(new GainLifeEffect(1).setText("and you gain 1 life")); Target target = new TargetOpponent(); ability.addTarget(target); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/s/SliceInTwain.java b/Mage.Sets/src/mage/cards/s/SliceInTwain.java new file mode 100644 index 00000000000..4e1695832a4 --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/SliceInTwain.java @@ -0,0 +1,61 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.cards.s; + +import java.util.UUID; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.filter.StaticFilters; +import mage.target.TargetPermanent; + +/** + * + * @author Loki + */ +public class SliceInTwain extends CardImpl { + + public SliceInTwain(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{G}{G}"); + + this.getSpellAbility().addEffect(new DestroyTargetEffect()); + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).setText("
br>Draw a card")); + this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.ARTIFACT_OR_ENCHANTMENT_PERMANENT)); + } + + public SliceInTwain(final SliceInTwain card) { + super(card); + } + + @Override + public SliceInTwain copy() { + return new SliceInTwain(this); + } +} diff --git a/Mage.Sets/src/mage/cards/s/SnappingSailback.java b/Mage.Sets/src/mage/cards/s/SnappingSailback.java index ff83e86be44..7a7d1468d63 100644 --- a/Mage.Sets/src/mage/cards/s/SnappingSailback.java +++ b/Mage.Sets/src/mage/cards/s/SnappingSailback.java @@ -31,11 +31,11 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.common.DealtDamageToSourceTriggeredAbility; import mage.abilities.effects.common.counter.AddCountersSourceEffect; -import mage.constants.SubType; import mage.abilities.keyword.FlashAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.SubType; import mage.constants.Zone; import mage.counters.CounterType; @@ -56,7 +56,9 @@ public class SnappingSailback extends CardImpl { this.addAbility(FlashAbility.getInstance()); // Enrage — Whenever Snapping Sailback is dealt damage, put a +1/+1 counter on it. - this.addAbility(new DealtDamageToSourceTriggeredAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.P1P1.createInstance(1)), false)); + this.addAbility(new DealtDamageToSourceTriggeredAbility(Zone.BATTLEFIELD, + new AddCountersSourceEffect(CounterType.P1P1.createInstance(1)) + .setText("put a +1/+1 counter on it"), false)); } public SnappingSailback(final SnappingSailback card) { diff --git a/Mage.Sets/src/mage/cards/s/SteadfastArmasaur.java b/Mage.Sets/src/mage/cards/s/SteadfastArmasaur.java index e7faecfc71b..9c299c382e4 100644 --- a/Mage.Sets/src/mage/cards/s/SteadfastArmasaur.java +++ b/Mage.Sets/src/mage/cards/s/SteadfastArmasaur.java @@ -35,11 +35,11 @@ import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.dynamicvalue.common.SourcePermanentToughnessValue; import mage.abilities.effects.common.DamageTargetEffect; -import mage.constants.SubType; import mage.abilities.keyword.VigilanceAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.SubType; import mage.constants.Zone; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.Predicates; @@ -70,6 +70,7 @@ public class SteadfastArmasaur extends CardImpl { Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(SourcePermanentToughnessValue.getInstance()), new ManaCostsImpl("{1}{W}")); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetCreaturePermanent(filter)); + this.addAbility(ability); } public SteadfastArmasaur(final SteadfastArmasaur card) { diff --git a/Mage.Sets/src/mage/cards/s/StormbloodBerserker.java b/Mage.Sets/src/mage/cards/s/StormbloodBerserker.java index a2186fd39b0..4970f4f1798 100644 --- a/Mage.Sets/src/mage/cards/s/StormbloodBerserker.java +++ b/Mage.Sets/src/mage/cards/s/StormbloodBerserker.java @@ -51,7 +51,7 @@ public class StormbloodBerserker extends CardImpl { this.addAbility(new BloodthirstAbility(2)); // Menace (This creature can't be blocked except by two or more creatures.) - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); } public StormbloodBerserker(final StormbloodBerserker card) { diff --git a/Mage.Sets/src/mage/cards/s/SummitApes.java b/Mage.Sets/src/mage/cards/s/SummitApes.java index 0126be12a0f..2c5f7624340 100644 --- a/Mage.Sets/src/mage/cards/s/SummitApes.java +++ b/Mage.Sets/src/mage/cards/s/SummitApes.java @@ -65,7 +65,7 @@ public class SummitApes extends CardImpl { // As long as you control a Mountain, Summit Apes has menace. (It can't be blocked except by two or more creatures.) this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, - new ConditionalContinuousEffect(new GainAbilitySourceEffect(MenaceAbility.getInstance()), new PermanentsOnTheBattlefieldCondition(filter), rule))); + new ConditionalContinuousEffect(new GainAbilitySourceEffect(new MenaceAbility()), new PermanentsOnTheBattlefieldCondition(filter), rule))); } public SummitApes(final SummitApes card) { diff --git a/Mage.Sets/src/mage/cards/s/SunCrownedHunters.java b/Mage.Sets/src/mage/cards/s/SunCrownedHunters.java index e50d7f7eae7..d9fa321f933 100644 --- a/Mage.Sets/src/mage/cards/s/SunCrownedHunters.java +++ b/Mage.Sets/src/mage/cards/s/SunCrownedHunters.java @@ -53,7 +53,7 @@ public class SunCrownedHunters extends CardImpl { this.toughness = new MageInt(4); // Enrage — Whenever Sun-Crowned Hunters is dealt damage, it deals 3 damage to target opponent. - Ability ability = new DealtDamageToSourceTriggeredAbility(Zone.BATTLEFIELD, new DamageTargetEffect(3), false, true); + Ability ability = new DealtDamageToSourceTriggeredAbility(Zone.BATTLEFIELD, new DamageTargetEffect(3, true, "it"), false, true); ability.addTarget(new TargetOpponent()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/SunbirdsInvocation.java b/Mage.Sets/src/mage/cards/s/SunbirdsInvocation.java index 37f66ca4e6d..aca1f428e36 100644 --- a/Mage.Sets/src/mage/cards/s/SunbirdsInvocation.java +++ b/Mage.Sets/src/mage/cards/s/SunbirdsInvocation.java @@ -111,7 +111,7 @@ class SunbirdsInvocationEffect extends OneShotEffect { public SunbirdsInvocationEffect() { super(Outcome.PutCardInPlay); - staticText = "Reveal the top X cards of your library, where X is that spell's converted mana cost. You may cast a card revealed this way with converted mana cost X or less without paying its mana cost. Put the rest on the bottom of your library in a random order"; + staticText = "reveal the top X cards of your library, where X is that spell's converted mana cost. You may cast a card revealed this way with converted mana cost X or less without paying its mana cost. Put the rest on the bottom of your library in a random order"; } public SunbirdsInvocationEffect(final SunbirdsInvocationEffect effect) { diff --git a/Mage.Sets/src/mage/cards/s/SunriseSeeker.java b/Mage.Sets/src/mage/cards/s/SunriseSeeker.java index 0ce4951eb7d..66deabb826a 100644 --- a/Mage.Sets/src/mage/cards/s/SunriseSeeker.java +++ b/Mage.Sets/src/mage/cards/s/SunriseSeeker.java @@ -29,11 +29,13 @@ package mage.cards.s; import java.util.UUID; import mage.MageInt; -import mage.constants.SubType; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.effects.keyword.ExploreSourceEffect; import mage.abilities.keyword.VigilanceAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.SubType; /** * @@ -43,7 +45,7 @@ public class SunriseSeeker extends CardImpl { public SunriseSeeker(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{W}"); - + this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.SCOUT); this.power = new MageInt(3); @@ -52,7 +54,8 @@ public class SunriseSeeker extends CardImpl { // Vigilance this.addAbility(VigilanceAbility.getInstance()); - // When Sunrise Seeker enters the battlefield, it explores. + // When Sunrise Seeker enters the battlefield, it explores. + this.addAbility(new EntersBattlefieldAbility(new ExploreSourceEffect())); } public SunriseSeeker(final SunriseSeeker card) { diff --git a/Mage.Sets/src/mage/cards/s/Swashbuckling.java b/Mage.Sets/src/mage/cards/s/Swashbuckling.java index e0315b48b91..1e35c418f02 100644 --- a/Mage.Sets/src/mage/cards/s/Swashbuckling.java +++ b/Mage.Sets/src/mage/cards/s/Swashbuckling.java @@ -28,15 +28,11 @@ package mage.cards.s; import java.util.UUID; -import mage.constants.SubType; -import mage.target.common.TargetCreaturePermanent; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.continuous.BoostEnchantedEffect; import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; -import mage.constants.Outcome; -import mage.target.TargetPermanent; import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.HasteAbility; import mage.cards.CardImpl; @@ -44,7 +40,11 @@ import mage.cards.CardSetInfo; import mage.constants.AttachmentType; import mage.constants.CardType; import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.SubType; import mage.constants.Zone; +import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; /** * @@ -65,8 +65,10 @@ public class Swashbuckling extends CardImpl { this.addAbility(ability); // Enchanted creature gets +2/+2 and has haste. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2, 2, Duration.WhileOnBattlefield))); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(HasteAbility.getInstance(), AttachmentType.AURA))); + ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2, 2, Duration.WhileOnBattlefield)); + ability.addEffect(new GainAbilityAttachedEffect(HasteAbility.getInstance(), AttachmentType.AURA) + .setText("and has haste")); + this.addAbility(ability); } public Swashbuckling(final Swashbuckling card) { diff --git a/Mage.Sets/src/mage/cards/s/SweatworksBrawler.java b/Mage.Sets/src/mage/cards/s/SweatworksBrawler.java index e283cd72570..83f9283dbe6 100644 --- a/Mage.Sets/src/mage/cards/s/SweatworksBrawler.java +++ b/Mage.Sets/src/mage/cards/s/SweatworksBrawler.java @@ -54,7 +54,7 @@ public class SweatworksBrawler extends CardImpl { addAbility(new ImproviseAbility()); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); } public SweatworksBrawler(final SweatworksBrawler card) { diff --git a/Mage.Sets/src/mage/cards/t/TempestCaller.java b/Mage.Sets/src/mage/cards/t/TempestCaller.java index 1f010148f97..94ee292caa0 100644 --- a/Mage.Sets/src/mage/cards/t/TempestCaller.java +++ b/Mage.Sets/src/mage/cards/t/TempestCaller.java @@ -32,11 +32,11 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.common.TapAllTargetPlayerControlsEffect; -import mage.constants.SubType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import static mage.filter.StaticFilters.FILTER_PERMANENT_CREATURES; +import mage.constants.SubType; +import mage.filter.common.FilterCreaturePermanent; import mage.target.common.TargetOpponent; /** @@ -54,7 +54,7 @@ public class TempestCaller extends CardImpl { this.toughness = new MageInt(3); // When Tempest Caller enters the battlefield, tap all creatures target opponent controls. - Ability ability = new EntersBattlefieldTriggeredAbility(new TapAllTargetPlayerControlsEffect(FILTER_PERMANENT_CREATURES)); + Ability ability = new EntersBattlefieldTriggeredAbility(new TapAllTargetPlayerControlsEffect(new FilterCreaturePermanent("creatures target opponent controls"))); ability.addTarget(new TargetOpponent()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/t/TerrorOfKruinPass.java b/Mage.Sets/src/mage/cards/t/TerrorOfKruinPass.java index b29a2d35c2f..3c2189926e4 100644 --- a/Mage.Sets/src/mage/cards/t/TerrorOfKruinPass.java +++ b/Mage.Sets/src/mage/cards/t/TerrorOfKruinPass.java @@ -76,7 +76,7 @@ public class TerrorOfKruinPass extends CardImpl { this.addAbility(DoubleStrikeAbility.getInstance()); // Werewolves you control have menace. (They can't be blocked except by two or more creatures.) - Effect effect = new ConditionalContinuousEffect(new GainAbilityAllEffect(MenaceAbility.getInstance(), Duration.Custom, filter), new TransformedCondition(), ruleText); + Effect effect = new ConditionalContinuousEffect(new GainAbilityAllEffect(new MenaceAbility(), Duration.Custom, filter), new TransformedCondition(), ruleText); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); // At the beginning of each upkeep, if a player cast two or more spells last turn, transform Terror of Kruin Pass. diff --git a/Mage.Sets/src/mage/cards/t/ThrabenFoulbloods.java b/Mage.Sets/src/mage/cards/t/ThrabenFoulbloods.java index f39a5577445..6a552635417 100644 --- a/Mage.Sets/src/mage/cards/t/ThrabenFoulbloods.java +++ b/Mage.Sets/src/mage/cards/t/ThrabenFoulbloods.java @@ -59,7 +59,7 @@ public class ThrabenFoulbloods extends CardImpl { // Delirium — Thraben Foulbloods gets +1/+1 and has menace as long as there are four or more card types among cards in your graveyard. (A creature with menace can't be blocked except by two or more creatures.) ConditionalContinuousEffect effect = new ConditionalContinuousEffect(new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), DeliriumCondition.instance, "Delirium — {this} gets +1/+1"); Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect); - ability.addEffect(new ConditionalContinuousEffect(new GainAbilitySourceEffect(MenaceAbility.getInstance()), DeliriumCondition.instance, + ability.addEffect(new ConditionalContinuousEffect(new GainAbilitySourceEffect(new MenaceAbility()), DeliriumCondition.instance, "and has menace as long as there are four or more card types among cards in your graveyard. (A creature with menace can't be blocked except by two or more creatures.)")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/t/TwoHeadedDragon.java b/Mage.Sets/src/mage/cards/t/TwoHeadedDragon.java index 69f9a4d8c54..53828c92d99 100644 --- a/Mage.Sets/src/mage/cards/t/TwoHeadedDragon.java +++ b/Mage.Sets/src/mage/cards/t/TwoHeadedDragon.java @@ -63,7 +63,7 @@ public class TwoHeadedDragon extends CardImpl { this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(2,0, Duration.EndOfTurn),new ManaCostsImpl("{1}{R}"))); // Menace (This creature can't be blocked except by two or more creatures.) - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); // Two-Headed Dragon can block an additional creature each combat. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CanBlockAdditionalCreatureEffect())); diff --git a/Mage.Sets/src/mage/cards/t/TwoHeadedSliver.java b/Mage.Sets/src/mage/cards/t/TwoHeadedSliver.java index 39fcd989c53..d2bf0bbdeaf 100644 --- a/Mage.Sets/src/mage/cards/t/TwoHeadedSliver.java +++ b/Mage.Sets/src/mage/cards/t/TwoHeadedSliver.java @@ -56,7 +56,7 @@ public class TwoHeadedSliver extends CardImpl { // All Sliver creatures have menace. (They can't be blocked except by two or more creatures.) this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect( - MenaceAbility.getInstance(), + new MenaceAbility(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURE_SLIVERS, "All Sliver creatures have menace. (They can't be blocked except by two or more creatures.)"))); } diff --git a/Mage.Sets/src/mage/cards/u/UntamedHunger.java b/Mage.Sets/src/mage/cards/u/UntamedHunger.java index e2bcd15cadc..3e442a8d324 100644 --- a/Mage.Sets/src/mage/cards/u/UntamedHunger.java +++ b/Mage.Sets/src/mage/cards/u/UntamedHunger.java @@ -65,7 +65,7 @@ public class UntamedHunger extends CardImpl { // Enchanted creature gets +2/+1 and has menace. ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2, 1)); - Effect effect = new GainAbilityAttachedEffect(MenaceAbility.getInstance(), AttachmentType.AURA); + Effect effect = new GainAbilityAttachedEffect(new MenaceAbility(), AttachmentType.AURA); effect.setText("and has menace"); ability.addEffect(effect); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/v/VerdantSunsAvatar.java b/Mage.Sets/src/mage/cards/v/VerdantSunsAvatar.java index 962f98a54ae..7a75f45fd14 100644 --- a/Mage.Sets/src/mage/cards/v/VerdantSunsAvatar.java +++ b/Mage.Sets/src/mage/cards/v/VerdantSunsAvatar.java @@ -52,7 +52,7 @@ import mage.players.Player; public class VerdantSunsAvatar extends CardImpl { public VerdantSunsAvatar(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{G}{G}"); this.subtype.add(SubType.DINOSAUR); this.subtype.add(SubType.AVATAR); diff --git a/Mage.Sets/src/mage/cards/v/ViashinoRunner.java b/Mage.Sets/src/mage/cards/v/ViashinoRunner.java index 5056c300a77..82d43889c58 100644 --- a/Mage.Sets/src/mage/cards/v/ViashinoRunner.java +++ b/Mage.Sets/src/mage/cards/v/ViashinoRunner.java @@ -49,7 +49,7 @@ public class ViashinoRunner extends CardImpl { this.toughness = new MageInt(2); // Menace (This creature can't be blocked except by two or more creatures.) - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); } public ViashinoRunner(final ViashinoRunner card) { diff --git a/Mage.Sets/src/mage/cards/v/VineKami.java b/Mage.Sets/src/mage/cards/v/VineKami.java index f9f59046304..d0047621143 100644 --- a/Mage.Sets/src/mage/cards/v/VineKami.java +++ b/Mage.Sets/src/mage/cards/v/VineKami.java @@ -50,7 +50,7 @@ public class VineKami extends CardImpl { this.toughness = new MageInt(4); // Menace (This creature can't be blocked except by two or more creatures.) - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); this.addAbility(new SoulshiftAbility(6)); } diff --git a/Mage.Sets/src/mage/cards/w/WakerOfTheWilds.java b/Mage.Sets/src/mage/cards/w/WakerOfTheWilds.java index f8cc6944ab4..f9cbcd3f23c 100644 --- a/Mage.Sets/src/mage/cards/w/WakerOfTheWilds.java +++ b/Mage.Sets/src/mage/cards/w/WakerOfTheWilds.java @@ -39,8 +39,8 @@ import mage.abilities.effects.common.counter.AddCountersTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; +import mage.constants.SubType; import mage.constants.Zone; import mage.counters.CounterType; import mage.filter.common.FilterControlledLandPermanent; @@ -62,10 +62,10 @@ public class WakerOfTheWilds extends CardImpl { this.toughness = new MageInt(3); // {X}{G}{G}: Put X +1/+1 counters on target land you control. That land becomes a 0/0 Elemental creature with haste that's still a land. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.P1P1.createInstance(0), new ManacostVariableValue()), new ManaCostsImpl("{X}{G}{G}")); Effect effect = new BecomesCreatureTargetEffect(new WallOfResurgenceToken(), false, true, Duration.Custom); - effect.setText("That land becomes a 0/0 Elemental creature with haste that's still a land"); + effect.setText("That land becomes a 0/0 Elemental creature with haste. It's still a land"); ability.addEffect(effect); ability.addTarget(new TargetControlledPermanent(new FilterControlledLandPermanent())); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/w/WatertrapWeaver.java b/Mage.Sets/src/mage/cards/w/WatertrapWeaver.java index e299a8914d3..2820a85eeed 100644 --- a/Mage.Sets/src/mage/cards/w/WatertrapWeaver.java +++ b/Mage.Sets/src/mage/cards/w/WatertrapWeaver.java @@ -32,10 +32,10 @@ import mage.MageInt; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.common.DontUntapInControllersNextUntapStepTargetEffect; import mage.abilities.effects.common.TapTargetEffect; -import mage.constants.SubType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.SubType; import mage.constants.TargetController; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.permanent.ControllerPredicate; @@ -63,7 +63,7 @@ public class WatertrapWeaver extends CardImpl { // When Watertrap Weaver enters the battlefield, tap target creature an opponent controls. That creature doesn't untap during its controller's next untap step. EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new TapTargetEffect()); - ability.addEffect(new DontUntapInControllersNextUntapStepTargetEffect()); + ability.addEffect(new DontUntapInControllersNextUntapStepTargetEffect("that creature")); ability.addTarget(new TargetCreaturePermanent(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/w/WaywardGiant.java b/Mage.Sets/src/mage/cards/w/WaywardGiant.java index eb46bea018e..853d79594a6 100644 --- a/Mage.Sets/src/mage/cards/w/WaywardGiant.java +++ b/Mage.Sets/src/mage/cards/w/WaywardGiant.java @@ -48,7 +48,7 @@ public class WaywardGiant extends CardImpl { this.toughness = new MageInt(5); // Menace - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); } public WaywardGiant(final WaywardGiant card) { diff --git a/Mage.Sets/src/mage/cards/w/WeldfastMonitor.java b/Mage.Sets/src/mage/cards/w/WeldfastMonitor.java index e520e706ba7..78d29197633 100644 --- a/Mage.Sets/src/mage/cards/w/WeldfastMonitor.java +++ b/Mage.Sets/src/mage/cards/w/WeldfastMonitor.java @@ -55,7 +55,7 @@ public class WeldfastMonitor extends CardImpl { // {R}: Weldfast Monitor gains menace until end of turn this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, - new GainAbilitySourceEffect(MenaceAbility.getInstance(), Duration.EndOfTurn), new ColoredManaCost(ColoredManaSymbol.R))); + new GainAbilitySourceEffect(new MenaceAbility(), Duration.EndOfTurn), new ColoredManaCost(ColoredManaSymbol.R))); } diff --git a/Mage.Sets/src/mage/cards/w/WindSpirit.java b/Mage.Sets/src/mage/cards/w/WindSpirit.java index 74b9a53e11a..399e0b95231 100644 --- a/Mage.Sets/src/mage/cards/w/WindSpirit.java +++ b/Mage.Sets/src/mage/cards/w/WindSpirit.java @@ -54,7 +54,7 @@ public class WindSpirit extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // Menace (This creature can't be blocked except by two or more creatures.) - this.addAbility(MenaceAbility.getInstance()); + this.addAbility(new MenaceAbility()); } public WindSpirit(final WindSpirit card) { diff --git a/Mage.Sets/src/mage/sets/Commander2013.java b/Mage.Sets/src/mage/sets/Commander2013.java index d16160f195c..16892d6876e 100644 --- a/Mage.Sets/src/mage/sets/Commander2013.java +++ b/Mage.Sets/src/mage/sets/Commander2013.java @@ -24,8 +24,7 @@ * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. -*/ - + */ package mage.sets; import mage.cards.ExpansionSet; @@ -37,7 +36,6 @@ import mage.constants.SetType; * * @author LevelX2 */ - public class Commander2013 extends ExpansionSet { private static final Commander2013 instance = new Commander2013(); @@ -317,7 +315,7 @@ public class Commander2013 extends ExpansionSet { cards.add(new SetCardInfo("Skyscribing", 57, Rarity.UNCOMMON, mage.cards.s.Skyscribing.class)); cards.add(new SetCardInfo("Skyward Eye Prophets", 214, Rarity.UNCOMMON, mage.cards.s.SkywardEyeProphets.class)); cards.add(new SetCardInfo("Slice and Dice", 119, Rarity.UNCOMMON, mage.cards.s.SliceAndDice.class)); - cards.add(new SetCardInfo("Slice in Twain", 170, Rarity.UNCOMMON, mage.cards.s.SliceinTwain.class)); + cards.add(new SetCardInfo("Slice in Twain", 170, Rarity.UNCOMMON, mage.cards.s.SliceInTwain.class)); cards.add(new SetCardInfo("Slippery Karst", 324, Rarity.COMMON, mage.cards.s.SlipperyKarst.class)); cards.add(new SetCardInfo("Smoldering Crater", 325, Rarity.COMMON, mage.cards.s.SmolderingCrater.class)); cards.add(new SetCardInfo("Sol Ring", 259, Rarity.UNCOMMON, mage.cards.s.SolRing.class)); diff --git a/Mage.Sets/src/mage/sets/Ixalan.java b/Mage.Sets/src/mage/sets/Ixalan.java index 264c0542d0b..95ec338e024 100644 --- a/Mage.Sets/src/mage/sets/Ixalan.java +++ b/Mage.Sets/src/mage/sets/Ixalan.java @@ -31,6 +31,8 @@ public class Ixalan extends ExpansionSet { this.numBoosterUncommon = 3; this.numBoosterRare = 1; this.ratioBoosterMythic = 8; + this.maxCardNumberInBooster = 279; + cards.add(new SetCardInfo("Adanto, the First Fort", 22, Rarity.RARE, mage.cards.a.AdantoTheFirstFort.class)); cards.add(new SetCardInfo("Adanto Vanguard", 1, Rarity.UNCOMMON, mage.cards.a.AdantoVanguard.class)); cards.add(new SetCardInfo("Admiral Beckett Brass", 217, Rarity.MYTHIC, mage.cards.a.AdmiralBeckettBrass.class)); @@ -264,7 +266,7 @@ public class Ixalan extends ExpansionSet { cards.add(new SetCardInfo("Skymarch Bloodletter", 124, Rarity.COMMON, mage.cards.s.SkymarchBloodletter.class)); cards.add(new SetCardInfo("Slash of Talons", 38, Rarity.COMMON, mage.cards.s.SlashOfTalons.class)); cards.add(new SetCardInfo("Sleek Schooner", 247, Rarity.UNCOMMON, mage.cards.s.SleekSchooner.class)); - cards.add(new SetCardInfo("Slice in Twain", 207, Rarity.UNCOMMON, mage.cards.s.SliceinTwain.class)); + cards.add(new SetCardInfo("Slice in Twain", 207, Rarity.UNCOMMON, mage.cards.s.SliceInTwain.class)); cards.add(new SetCardInfo("Snapping Sailback", 208, Rarity.UNCOMMON, mage.cards.s.SnappingSailback.class)); cards.add(new SetCardInfo("Sorcerous Spyglass", 248, Rarity.RARE, mage.cards.s.SorcerousSpyglass.class)); cards.add(new SetCardInfo("Spell Pierce", 81, Rarity.COMMON, mage.cards.s.SpellPierce.class)); diff --git a/Mage.Sets/src/mage/sets/ScarsOfMirrodin.java b/Mage.Sets/src/mage/sets/ScarsOfMirrodin.java index 7271d765810..24db557f77f 100644 --- a/Mage.Sets/src/mage/sets/ScarsOfMirrodin.java +++ b/Mage.Sets/src/mage/sets/ScarsOfMirrodin.java @@ -24,8 +24,7 @@ * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. -*/ - + */ package mage.sets; import mage.cards.ExpansionSet; @@ -247,7 +246,7 @@ public class ScarsOfMirrodin extends ExpansionSet { cards.add(new SetCardInfo("Skinrender", 78, Rarity.UNCOMMON, mage.cards.s.Skinrender.class)); cards.add(new SetCardInfo("Skithiryx, the Blight Dragon", 79, Rarity.MYTHIC, mage.cards.s.SkithiryxTheBlightDragon.class)); cards.add(new SetCardInfo("Sky-Eel School", 44, Rarity.COMMON, mage.cards.s.SkyEelSchool.class)); - cards.add(new SetCardInfo("Slice in Twain", 127, Rarity.UNCOMMON, mage.cards.s.SliceinTwain.class)); + cards.add(new SetCardInfo("Slice in Twain", 127, Rarity.UNCOMMON, mage.cards.s.SliceInTwain.class)); cards.add(new SetCardInfo("Snapsail Glider", 203, Rarity.COMMON, mage.cards.s.SnapsailGlider.class)); cards.add(new SetCardInfo("Soliton", 204, Rarity.COMMON, mage.cards.s.Soliton.class)); cards.add(new SetCardInfo("Soul Parry", 21, Rarity.COMMON, mage.cards.s.SoulParry.class)); diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/ExertTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/ExertTest.java index fabd383709b..67053e496dd 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/ExertTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/ExertTest.java @@ -105,7 +105,7 @@ public class ExertTest extends CardTestPlayerBase { setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); execute(); - assertAbility(playerA, minotaur, MenaceAbility.getInstance(), true); + assertAbility(playerA, minotaur, new MenaceAbility(), true); assertPowerToughness(playerA, minotaur, 5, 4); } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/RenownTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/RenownTest.java index 9cf055f0a62..4a138d3fc33 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/RenownTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/RenownTest.java @@ -203,7 +203,7 @@ public class RenownTest extends CardTestPlayerBase { Permanent goblin = getPermanent("Goblin Glory Chaser", playerA); Assert.assertEquals("has has renown", true, goblin.isRenowned()); - assertAbility(playerA, "Goblin Glory Chaser", MenaceAbility.getInstance(), true); + assertAbility(playerA, "Goblin Glory Chaser", new MenaceAbility(), true); assertPowerToughness(playerA, "Goblin Glory Chaser", 2, 2); assertLife(playerA, 20); diff --git a/Mage/src/main/java/mage/abilities/common/AttacksCreatureYouControlTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/AttacksCreatureYouControlTriggeredAbility.java index 9ec48797fd8..37f535e7a59 100644 --- a/Mage/src/main/java/mage/abilities/common/AttacksCreatureYouControlTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/AttacksCreatureYouControlTriggeredAbility.java @@ -102,6 +102,6 @@ public class AttacksCreatureYouControlTriggeredAbility extends TriggeredAbilityI @Override public String getRule() { - return "When" + (once ? "" : "ever") + " a" + (filter.getMessage().startsWith("a") ? "n " : " ") + " attacks, " + super.getRule(); + return "When" + (once ? "" : "ever") + " a" + (filter.getMessage().startsWith("a") ? "n " : " ") + filter.getMessage() + " attacks, " + super.getRule(); } } diff --git a/Mage/src/main/java/mage/abilities/common/SacrificePermanentTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/SacrificePermanentTriggeredAbility.java index df815bf873b..6222095098e 100644 --- a/Mage/src/main/java/mage/abilities/common/SacrificePermanentTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/SacrificePermanentTriggeredAbility.java @@ -75,6 +75,6 @@ public class SacrificePermanentTriggeredAbility extends TriggeredAbilityImpl { @Override public String getRule() { - return "Whenever you sacrifice" + filter.getMessage() + ", " + super.getRule(); + return "Whenever you sacrifice " + filter.getMessage() + ", " + super.getRule(); } } diff --git a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardPutInHandEffect.java b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardPutInHandEffect.java index cba730ab17b..f540608e80f 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardPutInHandEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardPutInHandEffect.java @@ -57,8 +57,8 @@ public class SearchLibraryGraveyardPutInHandEffect extends OneShotEffect { super(Outcome.Benefit); this.filter = filter; this.forceToSearchBoth = forceToSearchBoth; - staticText = "Search your library and" + (forceToSearchBoth ? "" : "/or ") + " graveyard for a card named " + filter.getMessage() + - ", reveal it, and put it into your hand. " + (forceToSearchBoth ? "Then shuffle your library" : "If you search your library this way, shuffle it"); + staticText = "search your library and" + (forceToSearchBoth ? "" : "/or ") + " graveyard for a card named " + filter.getMessage() + + ", reveal it, and put it into your hand. " + (forceToSearchBoth ? "Then shuffle your library" : "If you search your library this way, shuffle it"); } public SearchLibraryGraveyardPutInHandEffect(final SearchLibraryGraveyardPutInHandEffect effect) { diff --git a/Mage/src/main/java/mage/abilities/keyword/MenaceAbility.java b/Mage/src/main/java/mage/abilities/keyword/MenaceAbility.java index 6e55108574a..22654b647ba 100644 --- a/Mage/src/main/java/mage/abilities/keyword/MenaceAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/MenaceAbility.java @@ -5,35 +5,28 @@ */ package mage.abilities.keyword; -import java.io.ObjectStreamException; import mage.abilities.Ability; -import mage.abilities.EvasionAbility; -import mage.abilities.MageSingleton; +import mage.abilities.StaticAbility; import mage.abilities.effects.common.combat.CantBeBlockedByOneEffect; +import mage.constants.Zone; /** * * @author LevelX2 */ -public class MenaceAbility extends EvasionAbility implements MageSingleton { +public class MenaceAbility extends StaticAbility { // Menace may not be a Singleton because the source ability is needed in the continuous effect - private static final MenaceAbility instance = new MenaceAbility(); - - private Object readResolve() throws ObjectStreamException { - return instance; + public MenaceAbility() { + super(Zone.BATTLEFIELD, new CantBeBlockedByOneEffect(2)); } - public static MenaceAbility getInstance() { - return instance; - } - - private MenaceAbility() { - this.addEffect(new CantBeBlockedByOneEffect(2)); + public MenaceAbility(final MenaceAbility ability) { + super(ability); } @Override public Ability copy() { - return instance; + return new MenaceAbility(this); } @Override diff --git a/Mage/src/main/java/mage/constants/SubType.java b/Mage/src/main/java/mage/constants/SubType.java index 2cfe62d1e5a..755d1ea658f 100644 --- a/Mage/src/main/java/mage/constants/SubType.java +++ b/Mage/src/main/java/mage/constants/SubType.java @@ -4,7 +4,6 @@ import java.util.Arrays; import java.util.EnumSet; import java.util.Set; import java.util.stream.Collectors; - import mage.util.SubTypeList; public enum SubType { @@ -12,7 +11,6 @@ public enum SubType { //205.3k Instants and sorceries share their lists of subtypes; these subtypes are called spell types. ARCANE("Arcane", SubTypeSet.SpellType), TRAP("Trap", SubTypeSet.SpellType), - // 205.3i: Lands have their own unique set of subtypes; these subtypes are called land types. // Of that list, Forest, Island, Mountain, Plains, and Swamp are the basic land types. FOREST("Forest", SubTypeSet.BasicLandType), @@ -28,13 +26,11 @@ public enum SubType { MINE("Mine", SubTypeSet.NonBasicLandType), POWER_PLANT("Power-Plant", SubTypeSet.NonBasicLandType), TOWER("Tower", SubTypeSet.NonBasicLandType), - // 205.3h Enchantments have their own unique set of subtypes; these subtypes are called enchantment types. AURA("Aura", SubTypeSet.EnchantmentType), CARTOUCHE("Cartouche", SubTypeSet.EnchantmentType), CURSE("Curse", SubTypeSet.EnchantmentType), SHRINE("Shrine", SubTypeSet.EnchantmentType), - // 205.3g: Artifacts have their own unique set of subtypes; these subtypes are called artifact types. CLUE("Clue", SubTypeSet.ArtifactType), CONTRAPTION("Contraption", SubTypeSet.ArtifactType), @@ -42,7 +38,6 @@ public enum SubType { FORTIFICATION("Fortification", SubTypeSet.ArtifactType), TREASURE("Treasure", SubTypeSet.ArtifactType), VEHICLE("Vehicle", SubTypeSet.ArtifactType), - // 205.3m : Creatures and tribals share their lists of subtypes; these subtypes are called creature types. // A ADVISOR("Advisor", SubTypeSet.CreatureType), @@ -320,7 +315,7 @@ public enum SubType { TURTLE("Turtle", SubTypeSet.CreatureType), TUSKEN("Tusken", SubTypeSet.CreatureType, true), // Star Wars TROOPER("Trooper", SubTypeSet.CreatureType, true), // Star Wars - TRILOBITE("Trilobite",SubTypeSet.CreatureType), + TRILOBITE("Trilobite", SubTypeSet.CreatureType), TWILEK("Twi'lek", SubTypeSet.CreatureType, true), // Star Wars // U @@ -427,9 +422,12 @@ public enum SubType { return s; } } - throw new IllegalArgumentException("no subtype for " + subType + " exists"); + org.apache.log4j.Logger.getLogger(SubType.class).error("no subtype for " + subType + " exists"); + return null; } + ; + public SubTypeSet getSubTypeSet() { return subTypeSet; } @@ -446,9 +444,9 @@ public enum SubType { public static Set getBasicLands(boolean customSet) { return Arrays.stream(values()) - .filter(p -> p.getSubTypeSet() == SubTypeSet.BasicLandType) - .filter(s -> s.customSet == customSet) - .collect(Collectors.toSet()); + .filter(p -> p.getSubTypeSet() == SubTypeSet.BasicLandType) + .filter(s -> s.customSet == customSet) + .collect(Collectors.toSet()); } public static SubTypeList getLandTypes(boolean customSet) { diff --git a/Mage/src/main/java/mage/game/permanent/token/PirateToken.java b/Mage/src/main/java/mage/game/permanent/token/PirateToken.java index 37a3ee7a52b..fe4d04270fd 100644 --- a/Mage/src/main/java/mage/game/permanent/token/PirateToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/PirateToken.java @@ -45,6 +45,6 @@ public class PirateToken extends Token { subtype.add(SubType.PIRATE); power = new MageInt(2); toughness = new MageInt(2); - addAbility(MenaceAbility.getInstance()); + addAbility(new MenaceAbility()); } } diff --git a/Mage/src/main/java/mage/util/SubTypeList.java b/Mage/src/main/java/mage/util/SubTypeList.java index 8f90b17a8ba..08fc2575ba0 100644 --- a/Mage/src/main/java/mage/util/SubTypeList.java +++ b/Mage/src/main/java/mage/util/SubTypeList.java @@ -5,7 +5,6 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; - import mage.constants.SubType; public class SubTypeList extends ArrayList { @@ -13,30 +12,33 @@ public class SubTypeList extends ArrayList { @Deprecated public boolean addAll(List subtypes) { return addAll(subtypes.stream() - .map(SubType::byDescription) - .collect(Collectors.toList())); + .map(SubType::byDescription) + .collect(Collectors.toList())); } @Deprecated - public boolean removeAll(List subtypes){ + public boolean removeAll(List subtypes) { return removeAll(subtypes.stream() - .map(SubType::byDescription) - .collect(Collectors.toList())); + .map(SubType::byDescription) + .collect(Collectors.toList())); } - public boolean add(SubType... subTypes) { return Collections.addAll(this, subTypes); } public boolean removeAll(SubType... subTypes) { return super.removeAll(Arrays.stream(subTypes) - .collect(Collectors.toList())); + .collect(Collectors.toList())); } @Deprecated public boolean add(String s) { - return add(SubType.byDescription(s)); + SubType subType = SubType.byDescription(s); + if (subType != null) { + return add(subType); + } + return false; } @Deprecated diff --git a/Utils/gen-existing-cards-by-set.pl b/Utils/gen-existing-cards-by-set.pl index 800a39bd761..9c6e0a4f7ff 100755 --- a/Utils/gen-existing-cards-by-set.pl +++ b/Utils/gen-existing-cards-by-set.pl @@ -71,6 +71,7 @@ foreach $potentialSideA (sort @setCards) { #print (">>$potentialSideA\n"); if ($potentialSideA =~ m/.*,,,(\d+)(a)$/) { my $cardNumSideB = $1 . "b"; + my $orig_cardNumSideB = $1 . "b"; my $val; foreach $val (sort @setCards) { if ($val =~ m/$cardNumSideB$/) { @@ -93,6 +94,7 @@ foreach $potentialSideA (sort @setCards) { print ("Adding in: $potentialSideA \/\/ $val,,,$cardNumSideB\n"); $cardsFound = $cardsFound - 1; + $cardNumSideB = $orig_cardNumSideB; } } }